我正在尝试在 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++,而我的那门课至少是一年半前的事了。所以,请原谅“愚蠢”的编码,因为我有点生疏。