飛行棋游戲規則:
1)玩家A、B輪流擲骰子(1-6點)前進,擲多少,前進多少格
2)地圖上設有4種關卡:幸運輪盤、地雷、暫停、時空隧道
a.幸運輪盤:走到幸運輪盤上玩家有2種選擇 1.交換位置 2.轟炸對方至原點
b.地雷:走到地雷上,退6格
c.暫停:走到暫停,另一人連擲2次骰子
d.時空隧道:走到時空隧道,繼續前行10格
3)當A在B的前面時,B正好走到A的位置,那么A退到原點,反之,同理。
4)當A遇到幸運輪盤選擇交換時,此時B也在幸運輪盤上,這種情況叫做重復遇到關卡,則不會發生第一次遇到關卡時的特殊行為
(此游戲暫不考慮連續2次遇到關卡時的情況)。
比如:a. A遇到暫停,B在A后面,當B走到A那一格,則A退回原點,B不會暫停,而是A繼續擲骰子前進一次后又輪到B,A不會連走2次
b. A遇到時空隧道繼續走了10格后又遇到幸運輪盤,則A不會出現提示“2種選擇”,而是繼續停在幸運輪盤的那一格等待B擲骰子前進
5)直到其中一個勝利,則游戲結束。
6)地圖如下:

1. 初始化游戲界面:
如圖:

這種界面可以直接輸出,代碼如下:
View Code
Console.WriteLine("********************************************************************************");
Console.WriteLine("* *");
Console.WriteLine("* 騎士飛行棋游戲 v1.20 *");
Console.WriteLine("* *");
Console.Write("********************************************************************************");
然后把代碼封裝到一個方法里,方便以后調用。
2.初始化地圖,對地圖數組進行定義:
1)定義一個100的地圖數組:public static int[] Map = new int[100];//開辟地圖空間
這個地圖有5種圖例組成:圖例:普通:◆ 幸運輪盤:◎ 地雷:☆ 暫停:▲ 時空隧道:卐
2)分別定義有4種關卡地圖的數組:
View Code
public static int[] luckyTurn = { 6, 23, 40, 55, 69, 83 };//幸運輪盤 元素表示的是地圖數組中哪個下標應該為輪盤
public static int[] landMine = { 5, 13, 17, 33, 38, 50, 64, 80, 94 };//地雷
public static int[] pause = { 9, 27, 60, 93 };//暫停的坐標
public static int[] timeTunnel = { 20, 25, 45, 63, 72, 88, 90 };//時空隧道卐
這4種關卡數組中的元素是Map數組的下標,從0--99共100個,關卡數組中的元素可以稱為特殊地圖,其他Map數組的下標為普通地圖,為了游戲更好的進行,請謹慎設置地圖。
3)初始化地圖:就是把關卡地圖數組的元素設置成4種:用1表示地圖中的幸運輪盤,用2表示地圖中的地雷,用3表示地圖中的暫停,用4表示地圖中的時空隧道
用0表示地圖中的普通地圖。把初始化地圖寫一個方法static void GameMap()
封裝起來便於調用。代碼如下:
View Code
/// <summary>
/// 初始化游戲地圖
/// </summary>
public static void GameMap()
{
//用Map數組下標為0的元素表示第1格地圖
//用Map數組下標為1的元素表示第2格地圖
//用Map數組下標為2的元素表示第3格地圖
//用Map數組下標為3的元素表示第4格地圖
//用Map數組下標為4的元素表示第5格地圖
//...
//用Map數組下標為99的元素表示第100格地圖
//用0表示地圖中的普通
//用1表示地圖中的幸運輪盤
//用2表示地圖中的地雷
//用3表示地圖中的暫停
//用4表示地圖中的時空隧道
for (int i = 0; i < luckyTurn.Length; i++)//設置Map數組中的下標為幸運輪盤
{
Map[luckyTurn[i]] = 1;
}
for (int i = 0; i < landMine.Length; i++)//設置Map數組中的下標為地雷
{
Map[landMine[i]] = 2;
}
for (int i = 0; i < pause.Length; i++)//設置Map數組中的下標為暫停
{
Map[pause[i]] = 3;
}
for (int i = 0; i < timeTunnel.Length; i++)//設置Map數組中的下標為時空隧道
{
Map[timeTunnel[i]] = 4;
}
}
3. 加載地圖:
1)畫之前要初始化地圖,就是調用GameMap(),然后把地圖的圖例告訴玩家:
Console.WriteLine("圖例:幸運輪盤:◎ 地雷:☆ 暫停:▲ 時空隧道:卐");
2)怎么畫?
地圖上第一橫排有30個圖標,Map數組的下標是從0——29的,也就是說Map數組輸出了30個元素,就要變一個方向輸出。那么先輸出第一橫排:
for(int i=0;i<29;i++)
{
循環體;
}
做到這里,循環體怎么寫?
第一:玩家A和B要在地圖上顯示,才能發現A或B在往前走。那么A或B所在的位置就要占據地圖上的一格,把原本在地圖上的符號給替換掉,換成A或B的圖標,才能讓人分辨A或B的位置。
那么在這里就要定義A和B了。我們用數組進行定義。
public static int[] GamePlayer = new int[2] { 0, 0 };//開辟玩家空間,賦值為{0,0}.
就是說把玩家所在Map數組中的坐標放到GamePlayer數組中,這樣當隨即產生一個數跟{0,0}相加,A或B的坐標就會發生改變,A或B在地圖上的位置就會改變,向前走,就形成了本游戲的基本功能
public static string[] playerName = new string[2];//玩家A的名字用playerName[0]表示,玩家B的名字用playerName[1]表示
這個數組就是把A或B的名字存到內存中,用到時進行取值。
第二:玩家A在地圖上的符號用“A”表示,大寫全角狀態的a;玩家B在地圖上的符號用“B”表示,大寫全角狀態的b;玩家A和B在同一個位置就用“<>”表示,半角狀態的小於大於號表示。因為地圖上的符號都是全角的占2位,所以這里也要用全角的。
第三:1如果當A與B在同一個位置並且在地圖上時,就輸出<>
2如果A在地圖上,就輸出A
3如果B在地圖上,就輸出B
4那么其他的就正常輸出地圖符號,前面已經初始化好了地圖,就是把所有的同一種地圖符號用0——4這5數表示,那么輸出地圖符號就用switch-case語句
這4句話就用if-else-if語句完成,封裝成一個方法:public static string IfGamePlayer(int i)。代碼如下:
View Code
/// <summary>
/// 返回得到地圖上某一格的內容
/// </summary>
/// <param name="i">地圖上某一格的坐標</param>
/// <returns></returns>
public static string IfGamePlayer(int i)
{
//用0表示地圖中的普通
//用1表示地圖中的幸運輪盤
//用2表示地圖中的地雷
//用3表示地圖中的暫停
//用4表示地圖中的時空隧道
string result = "";
if (GamePlayer[0] == GamePlayer[1] && GamePlayer[0] == i)
{
Console.ForegroundColor = ConsoleColor.Yellow;
result = "<>";
}
else if (GamePlayer[0] == i)
{
Console.ForegroundColor = ConsoleColor.Green;
result = "A";
}
else if (GamePlayer[1] == i)
{
Console.ForegroundColor = ConsoleColor.DarkCyan;
result = "B";
}
else
{
switch (Map[i])
{
case 0:
Console.ForegroundColor = ConsoleColor.Gray;
result = "◆";
break;
case 1:
Console.ForegroundColor = ConsoleColor.Cyan;
result = "◎";
break;
case 2:
Console.ForegroundColor = ConsoleColor.Red;
result = "☆";
break;
case 3:
Console.ForegroundColor = ConsoleColor.DarkYellow;
result = "▲";
break;
case 4:
Console.ForegroundColor = ConsoleColor.DarkMagenta;
result = "卐";
break;
default:
break;
}
}
return result;
}
(Console.ForegroundColor = ConsoleColor.顏色 )表示可以改變地圖的顏色。
3)畫地圖:
上一步中for的循環體就是Console.Write(IfGamePlayer(i));由於30格地圖元素連接在一起,所以用Write()而不是用WriteLine().代碼如下:
View Code
for (int i = 0; i <= 29; i++)//加載坐標0到29的地圖
{
Console.Write(IfGamePlayer(i));
}
第一:那么第一橫排的地圖就畫好了,再畫第二豎排的地圖。由於畫完第一橫排的地圖時控制台的光標還在第一橫排,所以用一個Console.WriteLine();把光標換到下一行。
第二:第二豎排的第一格地圖到第二橫排的上一格地圖之間的元素坐標是從30到34,就是說i從30循環到34,要循環5次。但是第31格地圖之前還有空格,所以在輸入地圖之前要先輸入空格。因為每一個地圖是全角字符,所以第31格地圖之前要畫29*2個空格。像第31格地圖這樣的有5個所以要嵌套一個for循環,29*2個空格輸出后才能輸出地圖。所以畫第二橫排地圖的循環如下:
View Code
//加載坐標30到34的地圖
for (int i = 30; i <= 34; i++)
{
Console.WriteLine();
for (int j = 0; j < 29; j++)
{
Console.Write("");
}
Console.Write(IfGamePlayer(i));
}
第三:玩家在走第二橫排的地圖時,從右至左前進。也就說第二橫排的地圖中的第一個格圖的坐標是64,最后一格地圖的坐標是35,我們輸出是從左到右輸出的,所以在這里循環用i- -。
由於光標在第一豎排的末尾,我們在循環之前要用 Console.WriteLine();把光標移到下一行在循環輸出視圖。代碼如下:
View Code
//加載坐標35到64的地圖
Console.WriteLine();
for (int i = 64; i >= 35; i--)
{
Console.Write(IfGamePlayer(i));
}
第四:第二豎排的地圖就很好畫了,第二豎排的第一格地圖下標是65,最后一格下標是69,所以用Console.WriteLine();把光標移下來在循環輸出地圖就可以了,代碼如下:
View Code
//加載坐標65到69的地圖
Console.WriteLine();
for (int i = 65; i <= 69; i++)
{
Console.WriteLine(IfGamePlayer(i));
}
第五:第三橫排的地圖跟第一橫排的地圖畫法一樣,第一格地圖的下標是70,最后一格的地圖坐標是99,所以直接畫:
View Code
//加載坐標70到99的地圖
for (int i = 70; i <= 99; i++)
{
Console.Write(IfGamePlayer(i));
}
第六:在上面我們把不同地圖元素給變換了不同的顏色,如果把地圖畫完了而不把顏色還原的話,緊跟着最后一格地圖后面的字符的顏色和最后一格地圖的顏色是一樣的。比如A走到最了,字體A的顏色是黃色的,那么A后面的字符顏色也都是黃色的。在這里,用
Console.ForegroundColor = ConsoleColor.Gray;把顏色還原成灰色,最后把光標下移:
Console.WriteLine();
做到這里地圖就加載完成了!!
4. 寫方法
1)玩家A或B在前進時會遇到同一個關卡多次,那么每一個關卡我們都要寫一個方法方便調用。
“幸運輪盤”的方法:public static bool getXingyuanLunpan(int array, string Pname, out int Input)
a.這個方法要返回一個bool類型的值,返回true則表示玩家遇到了幸運輪盤,false則沒有。
b.要傳入一個下標,判斷這個下標是否等於幸運輪盤所在數組中的某一個元素,是則true,否則false
c.傳入一個玩家的姓名,說明是誰遇到了幸運輪盤
d.用out傳出一個值,用這個值說明玩家選擇了交換還是選擇了轟炸
e.代碼如下:
View Code
/// <summary>
/// 當玩家遇到幸運輪盤時的選擇
/// </summary>
/// <param name="array">玩家所在位置的地圖下標</param>
/// <param name="Pname">玩家的名字</param>
/// <param name="Input">返回選擇1或者2</param>
/// <returns>返回類型</returns>
public static bool getXingyuanLunpan(int array, string Pname, out int Input)
{
Input = 0;
bool flag = false;
for (int i = 0; i < luckyTurn.Length; i++)
{
if (array == luckyTurn[i])
{
//gameplayer = 0;
//gameplayer1 = 0;
Console.WriteLine("請{0}選擇:1、交換位置\t2、轟炸對方", Pname);
while (true)
{
string str = Console.ReadLine(); ;//用來接受用戶的選擇
int choose;
if (int.TryParse(str, out choose))
{
if (choose == 1 || choose == 2)
{
switch (choose)
{
case 1:
int temp;
temp = GamePlayer[0];
GamePlayer[0] = GamePlayer[1];
GamePlayer[1] = temp;
Input = choose;
flag = true;
break;
case 2:
if (Pname == playerName[0])
{
GamePlayer[1] = 0;
}
if (Pname == playerName[1])
{
GamePlayer[0] = 0;
}
Input = choose;
flag = true;
break;
default:
break;
}
break;
}
else
{
Console.WriteLine("輸入錯誤!!!請選擇1或者2:");
continue;
}
}
else
{
Console.WriteLine("輸入錯誤!!!");
continue;
}
}
}
}
return flag;
}
2)“地雷”的方法:public static bool getCaidiLei(int AxiaBiao, int BxiaBiao)
a.返回一個bool類型的值,返回true則表示踩地雷了,false則表示沒有踩地雷。
b.傳入第一個值玩家A的坐標,判斷這個值是否等於地雷所在數組中的某一個元素,是則A的坐標減6並返回true,不是則返回false
c.傳入第二個值玩家B的坐標,判斷這個值是否等於地雷所在數組中的某一個元素,是則B的坐標減6並返回true,不是則返回false
d.代碼如下:
View Code
/// <summary>
/// 當玩家遇到地雷時的情況
/// </summary>
/// <param name="AxiaBiao">玩家A所在的地圖下標</param>
/// <param name="BxiaBiao">玩家B所在的地圖下標</param>
public static bool getCaidiLei(int AxiaBiao, int BxiaBiao)
{
bool flag = false;
for (int i = 0; i < landMine.Length; i++)
{
if (AxiaBiao == landMine[i])
{
GamePlayer[0] -= 6;
flag = true;
}
if (BxiaBiao == landMine[i])
{
GamePlayer[1] -= 6;
flag = true;
}
}
return flag;
}
3). 暫停的方法;由於暫停的特殊性,寫一個A暫停的方法public static bool getZantingA(int AxiaBiao)
和一個B暫停的方法public static bool getZantingB(int BxiaBiao)。在正常情況下A和B輪流前行,一旦遇到暫停時,A(或B)就要連續走2次,當A(或B)走完第一次時,在正常情況下就輪到B(或A)走了,在特殊情況下A(或B)在走第2次之前,就要進行判斷,B(或A)是否處於暫停中,所以要分別寫A或B的方法。
a.都要返回一個bool類型的值,返回true則表示暫停,false則表示不暫停
b.A暫停則傳入一個值A的坐標, 判斷這個值是否等於暫停所在數組中的某一個元素,是則A返回true,不是則返回false
c.B暫停則傳入一個值B的坐標, 判斷這個值是否等於暫停所在數組中的某一個元素,是則B返回true,不是則返回false
d. 代碼如下:
View Code
/// <summary>
/// 當玩家A遇到暫停時的情況
/// </summary>
/// <param name="AxiaBiao">玩家A所在的地圖下標</param>
/// <returns></returns>
public static bool getZantingA(int AxiaBiao)
{
bool flag = false;
for (int i = 0; i < pause.Length; i++)
{
if (AxiaBiao == pause[i])
{
flag = true;
}
}
return flag;
}
/// <summary>
/// 當玩家B遇到暫停時的情況
/// </summary>
/// <param name="AxiaBiao">玩家A所在的地圖下標</param>
/// <returns></returns>
public static bool getZantingB(int BxiaBiao)
{
bool flag = false;
for (int i = 0; i < pause.Length; i++)
{
if (BxiaBiao == pause[i])
{
flag = true;
}
}
return flag;
}
4).時空隧道的方法:public static bool getShikongSuidao(int gPlayer1, int gPlayer2)
a. 返回bool類型的值,返回true則表示玩家遇到了時空隧道,返回false則表示玩家沒有遇到時空隧道
b.傳入第一個值玩家A的坐標,判斷這個值是否等於時空隧道所在數組中的某一個元素,是則A的坐標加10並返回true,不是則返回false
c.傳入第二個值玩家B的坐標,判斷這個值是否等於時空隧道所在數組中的某一個元素,是則B的坐標加10並返回true,不是則返回false
d.代碼如下:
View Code
/// <summary>
/// 當玩家走道時空隧道時的情況
/// </summary>
/// <param name="gPlayer">玩家A的地圖下標</param>
/// <param name="gPlayer">玩家B的地圖下標</param>
/// <returns></returns>
public static bool getShikongSuidao(int gPlayer1, int gPlayer2)
{
bool flag = false;
for (int i = 0; i < timeTunnel.Length; i++)
{
if (gPlayer1 == timeTunnel[i])
{
GamePlayer[0] += 10;
flag = true;
}
if (gPlayer2 == timeTunnel[i])
{
GamePlayer[1] += 10;
flag = true;
}
}
return flag;
}
5. 寫main方法:
1)顯示游戲界面,因為擲骰子要產生一個隨機數,所以這里要用到一個類Random
代碼如下:
View Code
Random r = new Random();//初始化一個隨機數
int random1;//接受A擲骰子的隨機數
int random2;//接受B擲骰子的隨機數
ShouUI();//界面
1)輸入玩家的名字:
輸入玩家A的名字不能為空,為空則提示重新輸入,玩家B的名字不能為空,為空則提示重新輸入,玩家B的名字不能和玩家A的名字相同,相同則提示重新輸入B的名字。
代碼如下:
View Code
Console.WriteLine("請輸入A的名字:");
while (true)
{
playerName[0] = Console.ReadLine();
if (playerName[0] == "")
{
Console.WriteLine("玩家A的名字不能為空,請重新輸入:");
continue;
}
break;
}
Console.WriteLine("請輸入B的名字:");
while (true)
{
playerName[1] = Console.ReadLine();
if (playerName[0] == playerName[1])
{
Console.WriteLine("A與B的名字不能一樣,請重新輸入B的名字:");
continue;
}
if (playerName[1] == "")
{
Console.WriteLine("玩家B的名字不能為空,請重新輸入:");
continue;
}
break;
}
1)加載地圖:
用Console.Clear();清空屏幕,並提示對戰開始,A叫什么,B叫什么,最后加載地圖。代碼如下:
View Code
Console.Clear();
ShouUI();//加載界面
Console.WriteLine("對戰開始......");
Console.WriteLine("{0}用A表示。", playerName[0]);
Console.WriteLine("{0}用B表示。", playerName[1]);
DrawMap();//加載地圖
1)A和B輪流擲骰子開始游戲:
1)因為A和B是輪流擲骰子的,所以先寫一個while循環。循環條件:當A和B的坐標都小於99(地圖為100格).
A先擲骰子:前面說了如果A遇到暫停時需要一個循環,所以要一個while(true)循環,還要定義一個bool類型的標記,記錄A暫停的狀態:bool flag = false;默認遇到了暫停。
while的循環體才是A前進的步驟:
a.提示A按任意鍵開始擲骰子 代碼:
View Code
Console.WriteLine("{0}按任意鍵擲骰子...", playerName[0]);
Console.ReadKey(true);
b.得到一個(1——6包含)隨機數,並提示A擲了多少點,隨即使A的坐標加上這個隨機數,代碼如下:
View Code
random1 = r.Next(1, 7);//用random接受1到7(不包含7但包含1)的隨機數
Console.WriteLine("{0}擲了{1}點", playerName[0], random1);
GamePlayer[0] += random1;
c.提示按任意鍵開始行動,然后清屏把A行動后的結果顯示在屏幕上,並提示A擲輪到多少點,代碼如下:
View Code
Console.WriteLine("{0}按任意鍵開始行動...", playerName[0]);
Console.ReadKey(true);
Console.Clear();
DrawMap();
Console.WriteLine("{0}擲出了{1}點", playerName[0], random1);
d. 判斷A是否遇到了暫停,判斷條件是,調用A遇到暫停的方法,如果是則進入if語句里面,清屏並顯示A暫停時的狀態(刷新地圖),然后提示A暫停一次,並把標記flag賦值為true,然后跳出內層while循環,代碼如下:
View Code
if (getZantingA(GamePlayer[0]) && flag == false)
{
Console.Clear();
DrawMap();
Console.WriteLine("{0}遇到道路施工了,暫停一次!!", playerName[0]);
flag = true;
break;
}
f. 判斷A是否踩着B了,分2種情況:在普通地圖上和在特殊地圖上。1.在普通地圖上,條件是,當A的坐標等於B的坐標並且B的坐標大於0,那么B回到原點,坐標為0,然后清屏,刷新地圖,並提示A踩着B了;2.在特殊地圖上只有一種情況會發生A踩着B,就是B遇到暫停,A在行動時在“暫停”那一格地圖上踩着B,那么這時B要回到原點,這種特殊情況的條件是:B要在“暫停”上,A也要在“暫停”上,並且A的坐標要等於B的坐標,在這3個條件都成立的情況下,B回到原點,B的坐標等於0,然后清屏,刷新地圖並且提示A踩着B了,代碼如下:
View Code
if (GamePlayer[0] == GamePlayer[1] && GamePlayer[1] > 0)//普通地圖上A踩着B了,B退回原點
{
GamePlayer[1] = 0;
Console.Clear();
DrawMap();
Console.WriteLine("{0}踩着{1}了,{2}退回原點!!!", playerName[0], playerName[1], playerName[1]);
}
//特殊地圖上A踩着B了,B退回原點
if ((getZantingB(GamePlayer[0])) && (getZantingA(GamePlayer[1])) && GamePlayer[0] == GamePlayer[1])
{
GamePlayer[1] = 0;
Console.Clear();
DrawMap();
Console.WriteLine("{0}踩着{1}了,{2}退回原點!!!", playerName[0], playerName[1], playerName[1]);
}
g.判斷A是否遇到幸運輪盤:先定義一個值choose用來接收遇到幸運輪盤時返回的那個值(1或2),判斷條件是,調用A遇到幸運輪盤的方法,如果A遇到了,則清屏刷新地圖,再根據choose的值判斷是輸出A交換B還是輸出A轟炸了B,代碼如下:
View Code
int choose;//A遇到幸運輪盤
if (getXingyuanLunpan(GamePlayer[0], playerName[0], out choose))
{
Console.Clear();
DrawMap();
if (choose == 1)
{
Console.WriteLine("{0}與{1}交換了位置!!", playerName[0], playerName[1]);
}
if (choose == 2)
{
Console.WriteLine("{0}轟炸了{1}。", playerName[0], playerName[1]);
}
}
h.判斷A是否遇到地雷:判斷條件是,調用A遇到地雷的方法,如果遇到了,則先清屏,在判斷A的坐標是否小於0,小於0則把A的坐標賦值為0(預防看不見A),大於0則刷新地圖並提示A遇到地雷了,要退6格。代碼如下:
View Code
if (getCaidiLei(GamePlayer[0], GamePlayer[1]))//A是否踩着地雷了
{
Console.Clear();
if (GamePlayer[0] < 0)
{
GamePlayer[0] = 0;
}
DrawMap();
Console.WriteLine("{0}踩着地雷了!!退6格!!", playerName[0]);
}
i.判斷A是否遇到時空隧道:判斷條件是,調用A遇到時空隧道的方法,如果遇到了,則清屏刷新地圖,並提示A遇到時空隧道,向前走10格,代碼如下:
View Code
if (getShikongSuidao(GamePlayer[0], GamePlayer[1]))
{
Console.Clear();
DrawMap();
Console.WriteLine("{0}遇到了時空隧道,向前走10步,爽死了!!!!", playerName[0]);
}
j.前面從d到i這幾步(本人也不知道步驟的順序能不能更換,也不知道更換的結果,有興趣的朋友可以嘗試一下),都不成立的話,則提示A的位置,B的位置,由於GamePlayer[]表示的是下標,而位置則比相對應的下標大1,所以要加1表示位置,代碼如下:
View Code
Console.WriteLine("{0}的位置為{1}", playerName[0], GamePlayer[0] + 1);
Console.WriteLine("{0}點位置為{1}", playerName[1], GamePlayer[1] + 1);
k.走到這里就要判斷B是否處於暫停狀態,判斷條件是A在暫停中並且flag為true,如果B是處於暫停則讓flag標記為false,並continue,讓A繼續走第二次;再次判斷flag如果為false則跳出A行動所在的while循環,讓B擲骰子。代碼如下:
View Code
if (getZantingB(GamePlayer[1]) && flag == true)
{
flag = false;
continue;
}
if (flag == false)
{
break;
}
2)A擲骰子並且行動后需要判斷A的坐標是否大於或等於99,是則讓A的坐標等於99,也就是讓A停留在最后一格地圖上,然后清屏刷新地圖並提示A勝利了,退出外層while循環,回到main方法里;如果沒有則繼續往下走
代碼如下:
View Code
if (GamePlayer[0] >= 99)
{
GamePlayer[0] = 99;
Console.Clear();
DrawMap();
Console.WriteLine("{0}贏了!!!!!", playerName[0]);
break;
}
3)在這一步里寫玩家B擲骰子並行動的步驟,這里的步驟原理同玩家A,就是從“1)”中的第a步開始到第k步結束,只不過playerName[0]和playerName[1]對換,GamePlayer[0]和GamePlayer[1]對換。在這里就不再用文字敘述了,你也可以把A所在的while循環以及第“2)”步中判斷A的下標或B的下標是否大於或等於99這個if語句 封裝成一個方法,然后直接在main方法中調用他。B所在的while循環代碼如下:
View Code
while (true)
{
Console.WriteLine("{0}按任意鍵擲骰子...", playerName[1]);
Console.ReadKey(true);
random2 = r.Next(1, 7);
Console.WriteLine("{0}擲了{1}點", playerName[1], random2);
GamePlayer[1] += random2;
Console.WriteLine("{0}按任意鍵開始行動...", playerName[1]);
Console.ReadKey(true);
Console.Clear();
DrawMap();
Console.WriteLine("{0}擲出了{1}點", playerName[1], random2);
if (getZantingB(GamePlayer[1]) && flag == false)
{
Console.Clear();
DrawMap();
Console.WriteLine("{0}遇到道路施工了,暫停一次!!", playerName[1]);
flag = true;
break;
}
if (GamePlayer[1] == GamePlayer[0] && GamePlayer[0] > 0)
{
GamePlayer[0] = 0;
Console.Clear();
DrawMap();
Console.WriteLine("{0}踩着{1}了,{2}退回原點!!!", playerName[1], playerName[0], playerName[0]);
}
if ((getZantingB(GamePlayer[1])) && (getZantingA(GamePlayer[0])) && GamePlayer[1] == GamePlayer[0])
{
GamePlayer[0] = 0;
Console.Clear();
DrawMap();
Console.WriteLine("{0}踩着{1}了,{2}退回原點!!!", playerName[1], playerName[0], playerName[0]);
}
int choose1;
if (getXingyuanLunpan(GamePlayer[1], playerName[1], out choose1))
{
Console.Clear();
DrawMap();
if (choose1 == 1)
{
Console.WriteLine("{0}與{1}交換位置!!", playerName[1], playerName[0]);
}
if (choose1 == 2)
{
Console.WriteLine("{0}轟炸了{1}。", playerName[1], playerName[0]);
}
}
if (getCaidiLei(GamePlayer[0], GamePlayer[1]))
{
Console.Clear();
if (GamePlayer[1] < 0)
{
GamePlayer[1] = 0;
}
DrawMap();
Console.WriteLine("{0}踩着地雷了!!退6格!!", playerName[1]);
}
if (getShikongSuidao(GamePlayer[0], GamePlayer[1]))
{
Console.Clear();
DrawMap();
Console.WriteLine("{0}遇到了時空隧道,向前走10步,爽死了!!!!", playerName[1]);
}
Console.WriteLine("{0}的位置為{1}", playerName[1], GamePlayer[1] + 1);
Console.WriteLine("{0}的位置為{1}", playerName[0], GamePlayer[0] + 1);
if (getZantingA(GamePlayer[0]) && flag == true)
{
flag = false;
continue;
}
if (flag == false)
{
break;
}
}
4)這一步同第“2)”步,功能就不多說了,直接看代碼:
View Code
if (GamePlayer[1] >= 99)
{
GamePlayer[1] = 99;
Console.Clear();
DrawMap();
Console.WriteLine("{0}贏了!!!!!", playerName[1]);
break;
}
4)程序寫到這里就結束了,用一個Console.ReadKey();停頓。
6.總結:可能很多朋友只看了個開頭,省略了中間的部分,直接跳到這里了,那么也沒有什么,要不說明你早會了,要不說明你不感興趣,要不說明你是一個耐心不是很好的人。這都沒關系,我寫這個只有3個目的:1.熟練這個游戲的編程思路 2.給傳智播客打廣告 3.分享給對這個游戲有興趣的朋友。最后不管你抱着什么樣的心態來閱讀,我都要謝謝你,謝謝你的支持!!!
