ゲームの説明と最初のステージ

Web(C#)であなたとコンピュータが交互に石を取り除く「石取りゲーム」を作成します。

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

ゲームの概要

  1. あなたとコンピュータが交互に石を取り除く「石取りゲーム」の説明です。
  2. Web の機能を使って、C# で Network Game Program を作成します。
    Web の Game Program は、複数のクライアントが同時にゲームを楽しむことが出来ます、
  3. 山に積まれた石をあなたとコンピュータが交互に石を取り除き、最後の石を取らされた方が負けです。
    1. ゲームを開始すると山には乱数で11個〜30個の石が積まれます。
    2. 山から一度に取り除くことができる最大数が2個〜6個の範囲で乱数で設定されます。
    3. 山の石をあなたの先手でコンピュータと交互に取り除きます。
    4. 最後の石(最後の一個)を取らされた方が負けです。

ステージの設計

  1. ステージ−1
    最初のステージは「石取りゲーム」のルール説明とゲーム全体の初期化です。
    勝敗をクリアします。
    TextBox から Nickname をタイプ入力します。
    ゲームの開始ボタンのクリックでステージ−2を呼び出します。
  2. ステージ−2
    ゲームの初期設定を行うステージです。
    山の石を乱数(11個〜30個)で設定します。
    山から一度に取り除くことができる最大数(2個〜6個)を乱数で設定します。
    再設定ボタンのクリックで、山の石と最大数を再設定します。
    プレイボタンのクリックでステージ−3を呼び出します。
  3. ステージ−3
    人間側がプレイをするステージです。
    山の石を画像で表示して、DropDownList で取り除くことが出来る石の数を設定します。
    次ボタンのクリックでステージ−4を呼び出します。
  4. ステージ−4
    人間側のプレイの確認と終了判定とコンピュータがプレイをするステージです。
    人間側がプレイした山の状態を表示して、確認を求めます。
    この処理をパスすると「コンピュータがごまかしたのでは?」と在らぬ疑いを持たれます。 (^_^;)
    確認が終わるとゲームの終了を判定します。
    ゲームが続くとき、コンピュータがプレイして、人間側に手を渡します。
  5. 山の石が無くなるか、一個になるまで「ステージー3, ステージー4」を繰り返します。
    ゲームが終わるとステージ−5を呼び出します。
  6. ステージ−5
    ゲームの勝敗と終了を確認するステージです。
    現在の勝敗を表示します。
    次のゲームボタンをクリックすると、ステージ−2を呼び出します。
    終了ボタンをクリックすると、ステージ−1を呼び出します。
    ステージ−1では、プログラムの終了は特に設けないで、ウインドウを閉じて終わります。

ステージ−1の作成

  1. これぐらいのプログラムになると WebMatrix で作成するには限界を超えています。 (^_^;)
    そこで Visual Studio .NET2005 で開発することにします。
    ゲームの画面はページ下部のリンクから直接ゲームをして確かめて下さい。
  2. Visual Studio .NET2005 を起動します。
    ファイル/新規作成/プロジェクト/Visual C#/ASP.NET Webアプリケーションから新規のプロジェクトを作成します。
  3. タブをデザイン画面に切り替えて、ゲームの案内文をタイプします。
  4. 続いて Nickname をタイプする [TextBox] と [Button] を貼り付けます。
    TextBox には必須項目の入力チェックを付けて下さい。
  5. Button をダブルクリックして、ソースコードを表示します。
    ステージ−2に移るときには Context.Items.Add で下記の情報をパラメータとして渡します。
    ここからリンクするときは Win, Lose はゼロですが、ステージ−5からリンクするときは、対戦成績が格納されています。
    ニックネームNickname
    勝ち数 Win
    負け数 Lose
  6. 次のステージが完成して呼び出せるようになるまでは、Transfer の代わりに Write でメッセージを表示しています。
        protected void Button1_Click(object sender, EventArgs e)
        {
            Context.Items.Add("Nickname",TextBox1.Text);
            Context.Items.Add("Win","0");
            Context.Items.Add("Lose","0");
            //Server.Transfer("ishitori2.aspx");
            Response.Write("次のステージへジャンプ");
        }
        

【NOTE】

  1. 複数ページで構成されるプログラムを作成する場合「ページごとにフォルダを作成して、後でまとめる」方法と、 「最初から一個のフォルダに全てのページを作成する」方法があります。
    どちらにしても大差は無いでしょう。
  2. 一個のフォルダに複数のページを作成する場合、次の方法を採ると便利です。
    1. ファイル/新規作成/プロジェクト/Visual C#/ASP.NET Webアプリケーションから、元になるプロジェクトを作成します。
    2. TextBox や Button など、ページで共通に使用するオブジェクトを貼り付けます。
    3. 一旦プロジェクトを終了して、同じフォルダに次のファイルのコピーを作成してファイル名を変更します。
      *.aspx
      *.aspx.cs
      *.aspxdesigner.cs
    4. プロジェクトを立ち上げてコピーしたファイルを「プロジェクト/既存項目の追加」から追加します。
    5. 右側のソリューションエクスプローラに追加した *.aspx のフォルダが作成されます。
    6. ページごとにファイルを選択して修正/追加/削除しながらプログラムを作成して行きます。
  3. 複数のページを構成するプログラムの場合「名前空間と Class 名」が同じ Object Class の中に同名のメソッドは定義できません。
    規定値で作成すると Object Class 名は _Default になっています。
    私はページ(ステージ)が変わるごとに _Default2 _Default3 ・・・ と使い分けました。
    Class 名は *.aspx, *.aspx.cs, *.aspx.designer.cs などで使われているので全て変更して下さい。
    プロジェクトを立ち上げて修正すると、関連するファイルの _Default もある程度は自動的に修正されます。

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

2007年末からサーバーのサービスが終わり、接続出来なくなっています。
石取りゲームを呼び出す

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