用windos控制台写“飞行棋”的一个游戏

 

飞行棋游戏规则:

      1)玩家AB轮流掷骰子(1-6点)前进,掷多少,前进多少格

      2)地图上设有4种关卡:幸运轮盘、地雷、暂停、时空隧道

        a.幸运轮盘:走到幸运轮盘上玩家有2种选择  1.交换位置   2.轰炸对方至原点

          b.地雷:走到地雷上,退6

        c.暂停:走到暂停,另一人连掷2次骰子

        d.时空隧道:走到时空隧道,继续前行10

      3)当AB的前面时,B正好走到A的位置,那么A退到原点,反之,同理。

      4)当A遇到幸运轮盘选择交换时,此时B也在幸运轮盘上,这种情况叫做重复遇到关卡,则不会发生第一次遇到关卡时的特殊行为

       (此游戏暂不考虑连续2次遇到关卡时的情况)。

        比如:a.   A遇到暂停,BA后面,当B走到A那一格,则A退回原点,B不会暂停,而是A继续掷骰子前进一次后又轮到BA不会连走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--99100个,关卡数组中的元素可以称为特殊地图,其他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 = "";
}
else if (GamePlayer[1] == i)
{
Console.ForegroundColor = ConsoleColor.DarkCyan;
result = "";
}
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.分享给对这个游戏有兴趣的朋友。最后不管你抱着什么样的心态来阅读,我都要谢谢你,谢谢你的支持!!!


























 

转载于:https://www.cnblogs.com/hedongdong/archive/2012/02/26/2369090.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值