0

我正在尝试在 Visual Studio 中用 C# 制作一个相对基本的基于文​​本的 RPG。我已经挂断了试图让类中的方法对表单上的按钮单击做出反应。喜欢根据单击的按钮从一种方法移动到另一种方法。

让我给你一个程序的基本布局。

我有一个 frmMain 和一个 cls_EVENTS。它会变得更复杂,但那是我真正开始工作后的一段时间。

我希望 frmMain 成为玩家与程序交互的地方。它有文本屏幕、按钮、状态表,以及大部分有趣的东西。文本屏幕下方是 6 个按钮(分别标记为 btn1 - btn6),我计划将文本更改为,以反映当前场景/事件的可用操作(检查,向右,告诉那个人你和他的母亲昨晚吃了晚饭)。

“制作”主菜单的控件位于 cls_EVENTS 中,主要是为了让主菜单按钮更方便,只需调用它即可让播放器返回主菜单(而不是从 frmMain 复制粘贴代码方法)。

public partial class frmMain : Form
{
    //creates a static copy of the form that references to this form, I believe.
    public static frmMain MainForm { get; private set; }

    public frmMain()
    {
        InitializeComponent();

        // sets the static form as a copy of this form named MainForm.
        frmMain.MainForm = this;

        // calls the MainMenu() method in the cls_EVENTS class.
        cls_EVENTS.MainMenu();
    }

public void btn1_Click(object sender, EventArgs e)
{
}

//Same thing all the way down to btn6_Click
//And a couple of functions for manipulating the controls on the form... 
//(enabling buttons, pushing text to the textbox, etc)

我的 cls_EVENTS 是我想要对事件进行实际编码的地方。就像 MainMenu 事件将更改文本框中的文本,更改按钮上的文本以反映当前选项,并禁用我不需要的按钮。

public class cls_EVENTS
{
    /*the Main menu, solely here for 'conveinence' (so I can have a Main Menu button on my form)*/
    public static void MainMenu()
    {
        //clears the text screen
        frmMain.MainForm.ScreenTextClear();

        //Enables the first button, disables the rest.
        frmMain.MainForm.ButtonEnable(true, false, false, false, false, false);

        //indent = true, write text to screen.
        frmMain.MainForm.ScreenText(true, "Welcome to the alpha of this game.");

        //test to make sure it ADDS TO the text rather then overwriting.
        frmMain.MainForm.ScreenText(true, "Hi");

        //changes the six button texts to the following six strings
        frmMain.MainForm.ButtonText("New Game", "Load Game", "About", "---", "---", "---");  

        //problem area

        //when player clicks button one
        //start the NewGame() method

        //when player clicks button two, after I eventually code such a function.
        //start the LoadGame() function

        //etc.     
    }

    Public void NewGame()
    {
        //etc.
    }
}

我尝试使用带有 Sleep 方法的循环来检查每个按钮将添加不同数字的变量(只要 intSelected 为 0,循环将继续,btn1 将添加 1 等)

但这导致程序挂起。

另外,我觉得做我想做的事情会是一种混乱、不专业的方式。虽然我可能不是专业人士,但即使我有标准。

有谁知道在按下按钮之前暂停程序执行的方法?或者对如何完成我想要完成的事情有更好的想法?我不能简单地将函数编码到点击事件中,因为这些按钮的作用会不断变化。

我会继续说 C# 不是我擅长的语言。我最初是在 VB.Net 中这样做的,但遇到了同样的问题,并被引导相信 C# 更灵活一些。我什至隐约熟悉的唯一 C 语言是 C++,而我的那门课至少是一年半前的事了。所以,请原谅“愚蠢”的编码,因为我有点生疏。

4

1 回答 1

0

经过更多的实验和更多的谷歌搜索,我想我可能已经找到了。

public static void MainMenu()
{
    frmMain.MainForm.ScreenTextClear();

    frmMain.MainForm.ButtonEnable(true, false, false, false, false, false);
    frmMain.MainForm.ScreenText(true, "Welcome to the alpha of this game.");
    frmMain.MainForm.ScreenText(true, "Hi");
    frmMain.MainForm.ButtonText("New Game", "Load Game", "About", "---", "---", "---");  

    // Potential solution.
    frmMain.MainForm.btn1.Click += delegate(object sender, EventArgs e)
        {
            NewGame();
        };    
}

这似乎正在做我想做的事情。文本加载,按钮激活,然后单击它们启动适当的方法。上升重复。

于 2012-04-15T17:03:25.443 回答