程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#飛翔棋小法式設計剖析

C#飛翔棋小法式設計剖析

編輯:C#入門知識

C#飛翔棋小法式設計剖析。本站提示廣大學習愛好者:(C#飛翔棋小法式設計剖析)文章只能為提供參考,不一定能成為您想要的結果。以下是C#飛翔棋小法式設計剖析正文


C#小法式飛翔棋,法式後果圖

1、設計剖析

這個法式界面年夜致分為四部門:

① 最下面游戲名字界面

②信息提醒區

③游戲界面區

④游戲操作提醒區

2、分區設計完成

1、游戲界面顯示區,因為只須要顯示出圖形便可,是以直接用Console.Writeline()輸入便可。

2、信息提醒區,此處用於顯示 游戲對戰兩邊的姓名等信息,在游戲開端時須要由用戶錄入對戰兩邊的姓名信息,是以可用Console.Readline()來讀取 用戶鍵入的值,<注:須要檢討驗證對戰兩邊的姓名弗成雷同!>

3、游戲界面區,此處用於顯示游戲每步的界面,可看出界面中有通俗的方塊、關卡方塊和游戲對戰兩邊。針對該操作界面須要屢次繪制 ,是以可零丁寫成一個辦法停止完成,對游戲界面通俗的方塊 湧現的最多,是以可將地圖的繪制初始化為 數組 ,並將其出初始化為通俗方塊,此處可應用一個整形數組來存儲坐標的屬性,(例如:用0表現通俗方塊,1表現榮幸轉盤,2表現地雷,3表現暫停,4表現時空地道,A、B分離表現對戰用戶)在繪制地圖時 再依據分歧的數字繪制出響應的圖案,在用戶停止對戰從新繪制地圖時只需依據響應坐標上的值 來繪制出地圖便可,游戲界面繪制可分為 5部門 停止繪制,以下圖所示: 

 繪制第一部門和第五部門,可用慣例的Console.Write()停止輸入,而第二部門則需繪制出後面的空格,第三部門因為是逆向繪制的,所以 在繪制時可采取輪回從年夜坐標到略坐標遞加停止繪制。

4、游戲操作提醒區,此處用於提醒用戶停止操作游戲,只需輸入語句便可。

這個飛翔棋小游戲最難的部門便在於 繪制游戲地圖,和關卡操作下面。

繪制地圖:

1、 初始化地圖,在繪制時可先將地圖停止初始化,用數組來存儲關卡的地位,然後應用輪回給地圖中 關卡地點處付與代表關卡的值。
症結代碼以下

/// <summary>
 /// 初始化游戲地圖
 /// </summary> 
static void InitialMap()
    {
      for (int i=0;i<Map.Length;i++)
      {
        Map[i] =0;
      }
      //用於存儲關卡地位
      int[] luckyTurn = { 6, 23, 40, 55, 69, 83,98 };//榮幸轉盤 1
      int[] landMine = { 5, 13, 17, 33, 38, 50, 64, 80, 94 };//地雷 2
      int[] pause = { 9, 27, 60, 93 };//暫停 3
      int[] timeTunnel = { 20, 25, 45, 63, 72, 88, 90};//時空地道 4
      for (int i=0;i<luckyTurn.Length;i++)
      {
        int pos = luckyTurn[i];
        Map[pos] = 1;
      }
      for (int i=0;i<landMine.Length;i++)
      {
        Map[landMine[i]] = 2;
      }
      for (int i=0;i<pause.Length;i++)
      {
        int pos = pause[i];
        Map[pos] = 3;
      }
      for(int i=0;i<timeTunnel.Length;i++)
      {
        int pos = timeTunnel[i];
        Map[pos] =4;
      }
    }

2、檢討坐標的值,在將地圖停止初始化以後,即可開端停止繪制地圖的操作了,地圖繪制可以使用 在法式設計時所講的散布繪制,在繪制地圖時應磨練該該坐標點的值,在依據該點的值繪制響應的圖案,在檢討時依據值 前往響應的圖案 ,在應用輪回繪制出便可,檢討坐標的值代碼以下:

/// <summary>
    /// 取得要繪制的坐標
    /// </summary>
    /// <param name="i"> 要繪制的坐標</param>
    /// <returns></returns>
    static string GetMapString(int i)
    {
      string Result="";//用於前往 給一個坐標響應的圖案
      if (playerPos[0] == i && playerPos[1] == i)//斷定能否是對戰兩邊地點此處
      {
        Console.ForegroundColor = ConsoleColor.Yellow;//設置圖案的遠景色為黃色
        Result = "<>";//獲得兩人均在圖案
      }
      else if (playerPos[0] == i)
      {
        Console.ForegroundColor = ConsoleColor.Yellow;
         Result = "A";//獲得A均在圖案

      }
      else if (playerPos[1] == i)
      {
        Console.ForegroundColor = ConsoleColor.Yellow;
        Result = "B";//獲得B均在圖案

      }
      else
      {
        switch (Map[i])
        {
          case 0:
            Console.ForegroundColor = ConsoleColor.White;
             Result = "□";//獲得通俗均在圖案

            break;
          case 1:
             Console.ForegroundColor = ConsoleColor.Red;
             Result = "○";//得轉盤圖案

            break;
          case 2:
             Console.ForegroundColor = ConsoleColor.Blue;
             Result = "☆";
            break;
          case 3:
            Console.ForegroundColor = ConsoleColor.Green;
            Result = "▲";
            break;
          case 4:
            Console.ForegroundColor = ConsoleColor.DarkBlue;
            Result = "卍";
            break;
        }
      }
      return Result; //前往圖案 
    }

3、繪制地圖,在獲得 前往的圖案後,即可停止地圖的繪制,這裡給出繪制第一行的代碼

/// <summary>
/// 繪制游戲地圖
/// </summary>
    static void DrownMap()
    {
      Console.WriteLine("圖例:榮幸轉盤 ○ 地雷 ☆ 暫停 ▲  時空地道 卍");
      //畫第一行 下標0-29 的地圖
      for(int i=0;i<30;i++)//輪回坐標獲得 第一行每一個點的圖案
      {
        Console.Write(GetMapString(i)); //挪用函數獲得每一個坐標的圖案
      }
      Console.Write("\n");
      Console.ResetColor();//重置遠景色 
    } 

關卡操作:

1、剖析設計
飛翔棋的根本規矩為二人輪番擲骰子,則此處為輪回構造,然後依據扔擲出的點數停止進步<注:在每步進步以後均應當斷定能否走完了游戲>,在碰到關卡時停止響應的操作,關卡有四種,每種對應的操作分歧,是以此處可應用switch-case 輪回構造在每走一步操作後均停止斷定能否踩到關卡,在依據斷定的成果停止下一步操作,每次操作完成後 ,從新繪制最新的地圖。

2、代碼完成
一玩家擲骰子,二人輪番扔擲,當有一人成功時停止游戲 。扔擲骰子可用函數Random()發生隨機數完成,每進步一步後須要檢討游戲能否成功,辦法以下 :

/// <summary>
 /// 檢討坐標能否越界
 /// </summary> 
static void CheckPos()
    {
      for (int i = 0; i <= 1; i++)
      {
        if (playerPos[i] > 99)
        {
          playerPos[i] = 99;
        }
        if (playerPos[i] < 0)
        {
          playerPos[i] = 0;
        }
      }
    }

當碰到關卡時,依據關卡設定的性質停止操作,在碰到榮幸轉盤時可供用戶停止選擇1:與對方交流 地位,2:轟炸對方,讓對方撤退退卻6格,此處須要讓用戶輸出1或許2,在讀取時須要對用戶鍵入的值停止磨練,可用以下辦法完成:

static int ReadInt(int min,int max)
    {
      while (true)
      {
        try
        {
          int number = Convert.ToInt32(Console.ReadLine());
          if(number<min||number>max)
          {
            Console.WriteLine("只能輸出{0}-{1}之間的數字,請從新輸出!", min, max);
            continue;
          }
          return number;
        }
        catch
        {
          Console.WriteLine("只能輸出數字,請從新輸出!");
        }
      }
    }

當碰到關卡3暫停時,須要用戶鄙人一次該行為時暫停一次,此處可界說一個bool 類型的數組來表現用戶能否應當在這一步暫停操作 ,上面給出用戶A扔擲 的代碼:

//這個輪回中 玩家輪番擲骰子,當任何一人坐標>=99時,游戲停止
      while(playerPos[0]<99&&playerPos[1]<99)
      {
        Random r = new Random();//發生隨機數
        int Step;//寄存發生的隨機數;

        if (isStop[0] == false)
        {
          #region//玩家A擲骰子
          Console.WriteLine("{0}按隨意率性鍵擲骰子....", names[0]);
          ConsoleKeyInfo rec = Console.ReadKey(true);
          if (rec.Key == ConsoleKey.Tab)
          {
            Step = 6;
          }
          else
          {
            Step = r.Next(1, 7);
          }
          Console.WriteLine("{0}擲出了{1}", names[0], Step);
          Console.WriteLine("{0}按隨意率性鍵行為...", names[0]);
          Console.ReadKey(true);//不顯示 按下按下的按鍵的值 

          playerPos[0] = playerPos[0] + Step;//更改坐標<一旦坐標產生轉變,斷定能否年夜於99或 小於0>
          CheckPos();
          if (playerPos[0] == playerPos[1])//玩家A踩到玩家B
          {
            playerPos[1] = 0;
            msg = string.Format("{0}踩到了{1},退回原點", names[0], names[1]);//Format函數用於拼接字符段
          }

          #region
          else //沒踩到,斷定此地位能否有其他關卡
          {
            switch (Map[playerPos[0]])
            {
              case 0:
                //通俗地位,有效果
                msg = "";
                break;
              case 1:
                //榮幸轉盤
                Console.Clear();
                DrownMap();
                Console.WriteLine("{0}走到了榮幸轉盤,請選擇命運運限?", names[0]);
                Console.WriteLine("1:交流地位 2: 轟炸 ");
                int userSelect = ReadInt(1, 2);
                if (userSelect == 1)
                {
                  int temp;
                  temp = playerPos[0];
                  playerPos[0] = playerPos[1];
                  playerPos[1] = temp;
                  msg = string.Format("{0}選擇了與{1}交流地位,哈哈,一夜回到束縛前啊", names[0], names[1]);
                }
                else
                {
                  playerPos[1] = playerPos[1] - 6;
                  CheckPos();
                  msg = string.Format("{0}選擇了與讓 {1}撤退退卻6步,自求多福吧", names[0], names[1]);
                }
                break;
              case 2:
                //地雷
                playerPos[0] = playerPos[0] - 6;
                CheckPos();
                msg = string.Format("{0}踩到了地雷,撤退退卻6步,阿彌陀佛", names[0]);
                break;
              case 3:
                //暫停
                isStop[0] = true;
                msg = string.Format("{0}暫停一次!", names[0]);
                break;
              case 4:
                //時空地道 
                playerPos[0] = playerPos[0] + 6;
                CheckPos();
                msg = string.Format("{0}進入了時空地道 ,進步吧!", names[0]);
                break;
            }
          }
          #endregion
          Console.WriteLine("按隨意率性鍵開端行為...");
          Console.ReadKey(true);
          Console.Clear();
          DrownMap();
          if (msg != "")
          {
            Console.WriteLine(msg);
          }
          Console.WriteLine("{0}擲出了{1},行為完成!", names[0], Step);
          Console.WriteLine("*******w玩家A和玩家B的地位以下***********");
          Console.WriteLine("    玩家{0}的地位為{1}", names[0], playerPos[0] + 1);
          Console.WriteLine("    玩家{0}的地位為{1}", names[1], playerPos[1] + 1);
          #endregion
        }
        else
        {
          //解釋A暫停一次
          isStop[0] = false;
        }
        if(playerPos[0]>=99)
        {
          break;
        }
    #region 玩家B擲骰子
    #endregion

}

以上就是本文的全體內容,願望對年夜家的進修有所贊助,也願望年夜家多多支撐。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved