ステージ−3 人間側のプレイ

Web(C#)で「石取りゲーム」で人間側がプレイするステージです。

前田稔(Maeda Minoru)の超初心者のプログラム入門

プログラムの説明

  1. 「石取りゲーム」のステージ−3で処理することは次のとおりです。
    1. 人間側がプレイをするステージです。
    2. 山の石を画像で表示して、DropDownList から取り除く石の数を設定します。
    3. 次ボタンのクリックでステージ−4を呼び出します。
  2. ゲームの画面はページ下部のリンクから直接ゲームをして確かめて下さい。
    ここではソースコードを中心に説明します。
    プロジェクトの作成は ゲームの説明と最初のステージ を参照して下さい。
  3. 下記のパラメータを最初の Page_Load で受け取って ViewState に保存します。
    パラメータで渡された値は、ポストバックが発生すると失われます。
    form に非表示コントロール領域を設定して保存する方法もあるのですが、今回は ViewState を使います。
    ニックネーム Nickname
    勝ち数 Win
    負け数 Lose
    山の石の数 Num
    取り除ける最大数Max
  4. Num の個数だけ石の画像を並べます。
    多くの石が一列に並ぶと見にくいので、10個ごとに改行しています。
    次に DropDownList に取り除くことができる個数を設定します。
    str1 には6個分が定義されていますが、設定する個数は Num と Max の関係から計算します。
            string[] str1 = new string[] { "1個", "2個", "3個", "4個", "5個", "6個" };
            string str;
    
            protected void Page_Load(object sender, EventArgs e)
            {
                int n,m,i;
                if (!IsPostBack)
                {
                    ViewState["Nickname"] = (string)Context.Items["Nickname"];
                    ViewState["Win"] = (string)Context.Items["Win"];
                    ViewState["Lose"] = (string)Context.Items["Lose"];
                    ViewState["Num"] = (string)Context.Items["Num"];
                    ViewState["Max"] = (string)Context.Items["Max"];
                    str = "";
                    n = Convert.ToInt32(ViewState["Num"]);
                    for (i = 0; i < n; i++)
                    {
                        if (i == 10 || i == 20) str = str + "<br>";
                        str = str + "<img src=http://www.eonet.ne.jp/~maeda/img/jewel.gif>";
                    }
                    Label1.Text = str;
                    m = Convert.ToInt32(ViewState["Max"]);
                    if (m > n) m = n;
                    string[] strw = new string[m];
                    for (i = 0; i < m; i++) strw[i] = str1[i];
                    DropDownList1.DataSource = strw;
                    DropDownList1.DataBind();
                }
            }
        
  5. Button がクリックされたときに呼び出される Button1_Click 関数です。
    DropDownList1.SelectedIndex で DropDownList のインデックスを取得します。
    インデックスはゼロから始まるので +1 した値が取り除く個数です。
    プログラムが正しければ "Error!!" が表示されることは無いのですが、念のためにチェックしています。 (^_^;)
    "Num" の値を更新して、次のステージに渡すパラメータを設定します。
    次のステージが完成して呼び出せるようになるまでは、Transfer の代わりに Write でメッセージを表示しています。
            protected void Button1_Click(object sender, EventArgs e)
            {
                int n,i;
    
                n = Convert.ToInt32(ViewState["Num"]);
                i = DropDownList1.SelectedIndex;
                if (i > n) Response.Write("Error!!");
                else    ViewState["Num"] = (string)Convert.ToString(n-i-1);
                Context.Items.Add("Nickname", ViewState["Nickname"]);
                Context.Items.Add("Win", ViewState["Win"]);
                Context.Items.Add("Lose", ViewState["Lose"]);
                Context.Items.Add("Num", ViewState["Num"]);
                Context.Items.Add("Max", ViewState["Max"]);
                //Server.Transfer("ishitori4.aspx");
                Response.Write("次のステージへジャンプ");
            }
        

ishitori3.aspx.cs のソースコード

石取りゲームを呼び出す

超初心者のプログラム入門(C# on-line game)