C#对许多不同的方法只使用几个按钮?

C#对许多不同的方法只使用几个按钮?,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();}

我想用C#制作一个“选择你自己的冒险游戏”,但按钮有问题。我有6个按钮,我想在故事的每个“页面”上的不同选项中重复使用它们

作为一个例子,我用它来表示btn1

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
中解除挂钩,或者完全处于条件之外。