控制台程序----骑士飞行棋C#版
控制台实现了骑士飞行棋简单的功能,有时间完善完善 吼吼~~~

下面是画飞行路线的方法:(对于C#非初学者来说很容易的)主要是运用for循环来实现的
View Code
1 public static class MapUI
2 {
3 public static int[] map = new int[100];
4 //存储途中关卡的下表
5 private static int[] luckyTurn = { 6, 23, 40, 55, 69, 83 };//幸运轮盘
6 private static int[] landMine = { 5, 13, 17, 33, 38, 50, 64, 80, 94 };//地雷
7 private static int[] pause = { 9, 27, 60, 93 };//暂停的坐标
8 private static int[] timeTunnel = { 20, 25, 45, 63, 72, 88, 90 };//时空隧道卐
9
10 private static int[] playerStep = { 0, 0 };//存储两个玩家的坐标
11
12 /// <summary>
13 /// 设置轮盘的关卡 1:幸运轮盘◎ 2:地雷☆ 3:暂停▲ 4:时空隧道卐 5:普通 □
14 /// </summary>
15 public static void StepSetting()
16 {
17 //幸运轮盘
18 for (int i = 0; i < luckyTurn.Length; i++)
19 {
20 map[luckyTurn[i]] = 1;
21 }
22 //地雷
23 for (int i = 0; i < landMine.Length; i++)
24 {
25 map[landMine[i]] = 2;
26 }
27 //暂停
28 for (int i = 0; i < pause.Length; i++)
29 {
30 map[pause[i]] = 3;
31 }
32 //时空隧道
33 for (int i = 0; i < timeTunnel.Length; i++)
34 {
35 map[timeTunnel[i]] = 4;
36 }
37 }
38
39 public static void DrawMap(int player0Step, int player1Step)
40 {
41 Console.Clear();
42 Console.WriteLine("图例: 幸运轮盘◎ 地雷☆ 暂停▲ 时空隧道卐 普通 □");
43 for (int i = 0; i <= 29; i++)
44 {
45 Console.ResetColor();
46 Console.Write(InitMap(i, player0Step, player1Step));
47 }
48 Console.WriteLine();
49 for (int i = 30; i <= 34; i++)
50 {
51 Console.ResetColor();
52 for (int j = 0; j < 29; j++)
53 {
54 Console.Write(" ");
55 }
56 Console.WriteLine(InitMap(i, player0Step, player1Step));
57 }
58 for (int i = 64; i >= 35; i--)
59 {
60 Console.ResetColor();
61 Console.Write(InitMap(i, player0Step, player1Step));
62 }
63 Console.WriteLine();
64 for (int i = 65; i <= 69; i++)
65 {
66 Console.ResetColor();
67 Console.WriteLine(InitMap(i, player0Step, player1Step));
68 }
69 for (int i = 70; i < 99; i++)
70 {
71 Console.ResetColor();
72 Console.Write(InitMap(i, player0Step, player1Step));
73 }
74 Console.WriteLine();
75 }
76
77 /// <summary>
78 /// 获得特殊关卡的图案
79 /// </summary>
80 /// <param name="i">当前坐标</param>
81 /// <param name="playerA">A玩家的位置</param>
82 /// <param name="playerB">B玩家的位置</param>
83 /// <returns>关卡图标</returns>
84 private static string InitMap(int i, int playerA, int playerB)
85 {
86 if (i == playerA && playerA == playerB)
87 {
88 return "<>";
89 }
90 if (i == playerA)
91 {
92 return "A";
93 }
94 if (i == playerB)
95 {
96 return "B";
97 }
98 switch (map[i])
99 {
100 case 0:
101 return "□";
102 case 1:
103 Console.ForegroundColor = ConsoleColor.Green;
104 return "◎";
105 case 2:
106 Console.ForegroundColor = ConsoleColor.Red;
107 return "☆";
108 case 3:
109 Console.ForegroundColor = ConsoleColor.Yellow;
110 return "▲";
111 case 4:
112 Console.ForegroundColor = ConsoleColor.Blue;
113 return "卐";
114 }
115 return "";
116 }
117 }
在Program 中定义了几个全局变量
View Code
1 private static string[] playName = new string[2];//存储玩家姓名
2 private static int[] playerStep = { 0, 0};//存储两个玩家的坐标
3 private static bool[] IsStop = { false, false };//
Main方法函数入口
View Code
1 ShowUI();//
2
3 //输入玩家姓名
4 while (true)
5 {
6 Console.WriteLine("请输入玩家A的名字:");
7 playName[0] = Console.ReadLine().Trim();//获取玩家A的姓名
8 Console.WriteLine("请输入玩家B的名字:");
9 playName[1] = Console.ReadLine().Trim();//获取玩家B的姓名
10 //如果玩家姓名为空,则提示重新输入
11 if (playName[0] == String.Empty || playName[1] == String.Empty)
12 {
13 Console.WriteLine("玩家姓名不能为空!");
14 continue;
15 }
16 //如果玩家姓名相同,则提示重新输入
17 if (playName[0] != playName[1])
18 {
19 break;//跳出循环
20 }
21 Console.WriteLine("玩家A和玩家B的名字不能相同!!,请重新输入!");
22 }
23
24 MapUI.StepSetting();//绘制Map
25 MapUI.DrawMap(playerStep[0], playerStep[1]);
26
27 Console.WriteLine("对战开始...");
28 Console.WriteLine("{0}士兵用A表示", playName[0]);
29 Console.WriteLine("{0}士兵用B表示", playName[1]);
30
31 //执行循环体,掷骰子
32 while (playerStep[0] < 99 && playerStep[1] < 99)
33 {
34 #region 掷骰子
35 if (PlayerAction(0) || PlayerAction(1))
36 {
37 break;
38 }
39 if (IsStop[0] == false)
40 {
41 PlayerAction(0);
42 }
43 else
44 {
45 IsStop[0] = true;
46 }
47 if (IsStop[1] == false)
48 {
49 PlayerAction(1);
50 }
51 else
52 {
53 IsStop[0] = true; ;
54 }
55
56 #endregion
57 }
58
59 if (playerStep[0] >= 99)
60 {
61 Console.WriteLine("玩家{0}获胜!", playName[0]);
62 }
63 if (playerStep[1] >= 99)
64 {
65 Console.WriteLine("玩家{0}获胜!", playName[1]);
66 }
67 Console.WriteLine("本轮游戏结束");
68 Console.ReadKey();
几个方法
View Code
1 /// <summary>
2 /// 玩家A/B 前进的路数
3 /// </summary>
4 /// <param name="number">判断是A/B</param>
5 /// <returns></returns>
6 private static bool PlayerAction(int number)
7 {
8 string str = "";
9 Console.WriteLine("{0}请按任意键掷骰子...", playName[number]);
10 Console.ReadKey(true);//参数true监视键盘
11 Random random = new Random();
12 int Rnum = random.Next(1, 7);//存储骰子的点数
13 Console.WriteLine("{0}掷出了:{1}", playName[number], Rnum);
14 Console.WriteLine("{0}请按任意键行动...", playName[number]);
15 Console.ReadKey(true);
16
17 playerStep[number] += Rnum;
18 if (playerStep[number] >= 99 || playerStep[number] >= 99)
19 {
20 playerStep[number] = 99;
21 return true;
22 }
23 if (playerStep[0] == playerStep[1])
24 {
25 str = string.Format("{0}踩着{1}了,{1}退回原点!", playName[number], playName[number == 0 ? 1 : 0]);
26 playerStep[number==0?1:0] = 0;
27 }
28 switch (MapUI.map[playerStep[number]])
29 {
30 case 1:
31 Console.WriteLine("你真幸运啊,获得特权!\n 1---交换位置 2---轰炸对方");
32 if (InputChoice() == "1")
33 {
34 int temp = playerStep[0];
35 playerStep[0] = playerStep[1];
36 playerStep[1] = temp;
37 }
38 else
39 {
40 playerStep[number == 0 ? 1 : 0] -= 6;
41 CheckPos();
42 }
43 break;
44 case 2:
45 str = string.Format("{0}你踩到地雷了,后退6步", playName[number]);//"☆";
46 playerStep[number] -= 6;
47 CheckPos();
48 break;
49 case 3:
50 str = string.Format("道路施工,{0}休息一次!", playName[number]);//"▲";
51 IsStop[number] = true;
52 break;
53 case 4:
54 str = string.Format("{0}太爽了,飞一般的感觉!前进10步!", playName[number]); //"卐";
55 playerStep[number] += 10;
56 CheckPos();
57 break;
58 }
59
60 MapUI.DrawMap(playerStep[0], playerStep[1]);
61
62 if (str != "")
63 {
64 Console.WriteLine(str);
65 }
66 Console.WriteLine("{0}掷出了:{1}", playName[number], Rnum);
67 Console.WriteLine("{0}的位置为:{1}", playName[number], playerStep[number]+1);
68 Console.WriteLine("{0}的位置为:{1}", playName[number == 0 ? 1 : 0], playerStep[number == 0 ? 1 : 0]+1);
69 Console.WriteLine();
70 if (playerStep[number] >= 99 || playerStep[number] >= 99)
71 {
72 return true;
73 }
74 return false;
75 }
76
77 private static void CheckPos()
78 {
79 #region 判断玩家位置
80
81 if (playerStep[0] < 0)
82 {
83 playerStep[0] = 0;
84 }
85 if (playerStep[0] > 99)
86 {
87 playerStep[0] = 99;
88 }
89 if (playerStep[1] < 0)
90 {
91 playerStep[1] = 0;
92 }
93 if (playerStep[1] > 99)
94 {
95 playerStep[1] = 99;
96 }
97
98 #endregion
99 }
100
101 /// <summary>
102 /// 初始界面
103 /// </summary>
104 private static void ShowUI()
105 {
106 Console.Clear();
107 Console.WriteLine(" **********************************************************");
108 Console.WriteLine(" * *");
109 Console.WriteLine(" * 飞 行 棋 *");
110 Console.WriteLine(" * *");
111 Console.WriteLine(" **********************************************************");
112 Console.WriteLine(" ------------------------两个人的游戏-----------------------");
113 }
114
115 private static string InputChoice()
116 {
117 #region 判断输入的关键字是否是1 或是2
118
119 string key = Console.ReadLine().Trim();
120 while (true)
121 {
122 if (key == "1" || key == "2")
123 {
124 break;
125 }
126 Console.WriteLine("请输入1-2之间的数字!");
127 key = Console.ReadLine().Trim();
128 }
129 return key;
130
131 #endregion
132 }
存在一些Bug暂未修改-----2011-05-24

浙公网安备 33010602011771号