C#对许多不同的方法只使用几个按钮?
我想用C#制作一个“选择你自己的冒险游戏”,但按钮有问题。我有6个按钮,我想在故事的每个“页面”上的不同选项中重复使用它们 作为一个例子,我用它来表示btn1C#对许多不同的方法只使用几个按钮?,c#,button,C#,Button,我想用C#制作一个“选择你自己的冒险游戏”,但按钮有问题。我有6个按钮,我想在故事的每个“页面”上的不同选项中重复使用它们 作为一个例子,我用它来表示btn1 void page1(){ txtStory.Text = "Can you sneak past the enemy?"; btn1.Click += (sender, args) => { luckCheck(); if (lucky) {page2(); clearButtons();}
void page1(){
txtStory.Text = "Can you sneak past the enemy?";
btn1.Click += (sender, args) => {
luckCheck();
if (lucky) {page2(); clearButtons();}
else {page3(); clearButtons();}
};
}
void luckCheck(){
int luckTest = gen.Next(1,12);
if (luckTest <= playerLuck) {lucky = true;}
else {lucky = false;}
}
void clearButtons(){
btnN.Text = "";
btnS.Text = "";
btnE.Text = "";
btnW.Text = "";
btn1.Text = "";
btn2.Text = "";
btn3.Text = "";
btn4.Text = "";
btn5.Text = "";
btn6.Text = "";
}
void page2(){
txtStory.Text = "Lucky!";
}
void page3(){
txtStory.Text = "Not Lucky!";
}
void第1页(){
txtStory.Text=“你能偷偷溜过敌人吗?”;
btn1.单击+=(发件人,参数)=>{
luckCheck();
如果(幸运){page2();clearButtons();}
else{page3();clearButtons();}
};
}
void luckCheck(){
int-luckTest=gen.Next(1,12);
如果(luckTest没有详细说明如何更好地构造上面的代码,这里有一个使用C#7的解决方案。请注意如何分配一个局部函数来处理事件,然后使用
void第1页(){
txtStory.Text=“你能偷偷溜过敌人吗?”;
无效Btn1Click(对象、事件参数)
{
luckCheck();
如果(幸运){page2();clearButtons();btn1.Click-=Btn1Click;}
else{page3();clearButtons();}
};
btn1.点击+=btn1点击;
void luckCheck(){
int-luckTest=gen.Next(1,12);
如果(luckTest没有详细说明如何更好地构造上面的代码,这里有一个使用C#7的解决方案。请注意如何分配一个局部函数来处理事件,然后使用
void第1页(){
txtStory.Text=“你能偷偷溜过敌人吗?”;
无效Btn1Click(对象、事件参数)
{
luckCheck();
如果(幸运){page2();clearButtons();btn1.Click-=Btn1Click;}
else{page3();clearButtons();}
};
btn1.点击+=btn1点击;
void luckCheck(){
int-luckTest=gen.Next(1,12);
如果(luckTest您遇到的问题是page1()
附加了一个匿名处理程序方法,该方法从未分离,因此每次调用它时,您只是添加了越来越多的处理程序
但是一旦你开始添加大量页面,这种设计很快就会失控
考虑一种不同的设计,其中您有一个页面
类来表示每个页面。该类将故事作为其属性,以及一组可能的选项
s(而不是硬编码其中的6个).Choice
是一个类,它具有Description
string属性和Action
方法(如果使用)
您的应用程序可以保存CurrentPage属性,您选择的操作需要能够通过更改该页面进行导航。等等
希望这有帮助
不要在类字段中返回<代码> LUKCHECK/<代码>方法的结果,请考虑重新设计它以返回结果:
bool luckCheck(){
int luckTest = gen.Next(1,12);
return luckTest <= playerLuck;
}
bool luckCheck(){
int-luckTest=gen.Next(1,12);
return luckTest您遇到的问题是page1()
附加了一个匿名处理程序方法,该方法从未分离,因此每次调用它时,您只是添加了越来越多的处理程序
但是一旦你开始添加大量页面,这种设计很快就会失控
考虑一种不同的设计,其中您有一个页面
类来表示每个页面。该类将故事作为其属性,以及一组可能的选项
s(而不是硬编码其中的6个).Choice
是一个类,它具有Description
string属性和Action
方法(如果使用)
您的应用程序可以保存CurrentPage属性,您选择的操作需要能够通过更改该页面进行导航。等等
希望这有帮助
不要在类字段中返回<代码> LUKCHECK/<代码>方法的结果,请考虑重新设计它以返回结果:
bool luckCheck(){
int luckTest = gen.Next(1,12);
return luckTest <= playerLuck;
}
bool luckCheck(){
int-luckTest=gen.Next(1,12);
return luckTest构建一个小状态机。用一个对象表示每个状态,该对象包括应该显示为文本的内容、每个按钮上应该显示的文本以及什么“下一个状态”应与每个按钮按下关联。每个按钮的按钮处理程序只需查看当前状态并查看应转换到的状态(然后设置当前状态并从该状态重置文本和按钮标签)。抱歉,我正在使用手机,因此我无法发布代码构建一个小型状态机。请使用一个对象表示每个状态,该对象包括应显示为文本的内容、每个按钮上应显示的文本以及“下一个状态”应与每个按钮按下关联。每个按钮的按钮处理程序只需查看当前状态并查看应转换到的状态(然后设置当前状态并从该状态重置文本和按钮标签)。对不起,我正在使用手机,因此我无法发布代码。我还需要在Btn1Click的else
中解除挂钩,或者完全处于条件之外。我还需要在Btn1Click的else
中解除挂钩,或者完全处于条件之外。