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 }
以上就是本文的全體內容,願望對年夜家的進修有所贊助,也願望年夜家多多支撐。