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