ASP.net中的XO游戏和c#

时间:2014-01-20 18:44:04

标签: c# asp.net

我正在用c#写一个XO游戏并遇到问题。 XO表是asp按钮的集合,我想编写一个在每个按钮中放置X或O值的函数 - 它需要是动态的。我该怎么写这样的功能? 这是我到目前为止所做的一个例子。

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            turndisplay.Visible = true;


            Session["p1"] = player1;
            Session["p2"] = player2;
            player1.setsymbol("X");
            player2.setsymbol("O");

            //Button1.Click += Button1_Click;
            //Button2.Click += Button_Click;
            //Button3.Click += Button_Click;
            //Button4.Click += Button_Click;
            //Button5.Click += Button_Click;
            //Button6.Click += Button_Click;
            //Button7.Click += Button_Click;
            //Button8.Click += Button_Click;
            //Button9.Click += Button_Click;
        }

        if (turn == 0)
        {
            turndisplay.Text = (Session["player1"] as Player).getname();
        }
        else
        {
            turndisplay.Text = (Session["player2"] as Player).getname();
        }

    }

    public void pushthebutton() // currently effects only on button 1 !
    {
    if (turn == 0)
    {
                player1.setsymbol("X");
                Button1.Text = (Session["p1"]as Player).getsymbol();
                turndisplay.Text = (Session["player2"] as Player).getname();
                turn = 1;
            }
            else
            {
                player2.setsymbol("O");
                Button1.Text = player2.getsymbol();
                turndisplay.Text = (Session["player1"] as Player).getname();
                turn = 0;
            }

        }


    protected void Button1_Click(Button sender, EventArgs e)
    {
        if (Button1.Text == " ")
        {
            pushthebutton();
            gamecheck();
        }
    }

我怎样才能影响玩家想要的每个按钮,而不用写9次?

编辑 * 之后

所以你说..将(对象发件人)更改为(按钮发件人)??但我的功能pushtebutton只知道Button1.Text

2 个答案:

答案 0 :(得分:2)

写一次并将其挂钩在Page_Load中,如下所示:

Button1.Click += Button_Click;
Button2.Click += Button_Click;
Button3.Click += Button_Click;
// etc...

答案 1 :(得分:1)

威廉的回答是正确的方法。您不需要为每个按钮设置单独的方法 - 部分或全部按钮可以使用相同的方法。

所以说你有这个方法:

protected void Button_Click(Button sender, EventArgs e)
{

    Button btn = sender as Button;

    if (btn != null)
    {
        if (btn.Text == " ")
        {
            pushthebutton();
            gamecheck();
        }
    }
}

上述代码使用as operator将发件人对象转换为Button。如果转换不成功,btn将为空,因此if检查。否则,转换成功,您可以检查Text属性。

在页面加载中,您只需将上面的Button_Click方法分配给每个按钮:

Button1.Click += Button_Click;
Button2.Click += Button_Click;
Button3.Click += Button_Click;
Button4.Click += Button_Click;
Button5.Click += Button_Click;
Button6.Click += Button_Click;
Button7.Click += Button_Click;
Button8.Click += Button_Click;
Button9.Click += Button_Click;