1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.Threading.Tasks;
6
7 namespace _05.飞行棋游戏
8 {
9 class Program
10 {
11 //用静态字段来模拟全局变量
12 static int[] Maps = new int[100];
13 //声明一个静态数组来存储玩家A和玩家B的坐标
14 static int[] PlayerPos = new int[2];
15 //存储两个玩家的姓名
16 static string[] PlayerNames = new string[2];
17
18 static void Main(string[] args)
19 {
20 //1.画游戏头
21 //2.初始化地图(加载地图所需要的资源)
22 //将整数数组中的数字编成控制台中显示的特殊字符串的过程--初始化地图
23 //3.画地图
24 //4.玩游戏
25 GameShow();
26 #region 玩家姓名输入
27 Console.WriteLine("请输入玩家A的姓名");
28 PlayerNames[0] = Console.ReadLine();
29 while (PlayerNames[0] == "")
30 {
31 Console.WriteLine("玩家A的姓名不能为空,请重新输入");
32 PlayerNames[0] = Console.ReadLine();
33 }
34
35 Console.WriteLine("请输入玩家B的姓名");
36 PlayerNames[1] = Console.ReadLine();
37 while (PlayerNames[1] == "" || PlayerNames[1] == PlayerNames[0])
38 {
39 if (PlayerNames[1] == "")
40 {
41 Console.WriteLine("玩家B的姓名不能为空,请重新输入");
42 PlayerNames[1] = Console.ReadLine();
43 }
44 else
45 {
46 Console.WriteLine("玩家B的姓名不能和玩家A的姓名相同,请重新输入");
47 PlayerNames[1] = Console.ReadLine();
48 }
49 }
50 #endregion
51
52 //玩家输入姓名OK后,首先应该清屏
53 Console.Clear();//清屏
54 GameShow();
55 Console.WriteLine("{0}的士兵用A表示", PlayerNames[0]);
56 Console.WriteLine("{0}的士兵用B表示", PlayerNames[1]);
57
58 InitailMap();
59 DrawMap();
60
61 //玩家A和玩家B都没到终点,游戏继续
62 while (PlayerPos[0] < 99 && PlayerPos[1] < 99)
63 {
64 Console.WriteLine("{0}按任意键开始掷骰子", PlayerNames[0]);
65 Console.ReadKey(true);
66 Console.WriteLine("{0}掷出了4",PlayerNames[0]);
67 PlayerPos[0] += 4;
68 Console.ReadKey(true);
69 Console.WriteLine("{0}按任意键开始行动",PlayerNames[0]);
70 Console.ReadKey(true);
71 Console.WriteLine("{0}行动完了",PlayerNames[0]);
72 Console.ReadKey(true);
73 //玩家A有可能踩到了玩家B、方块、幸运轮盘、地雷、暂停、时空隧道
74 if (PlayerPos[0]==PlayerPos[1])
75 {
76 Console.WriteLine("玩家{0}踩到了玩家{1},玩家{2}退6格",PlayerNames[0],PlayerNames[1],PlayerNames[1]);
77 PlayerPos[1] -= 6;
78 Console.ReadKey(true);
79 }
80 else//踩到关卡
81 {
82 //玩家坐标
83
84 switch (Maps[PlayerPos[0]])//0 1 2 3 4
85 {
86 case 0:Console.WriteLine("玩家{0}踩到了方块,安全", PlayerNames[0]);
87 Console.ReadKey(true);
88 break;
89 case 1:Console.WriteLine("玩家{0}踩到了幸运轮盘,请选择:1--交换位置;2--轰炸对方退6格",PlayerNames[0]);
90 string input = Console.ReadLine();
91 Console.ReadKey(true);
92 break;
93 }
94 }
95 }
96
97 Console.ReadKey();
98 }
99
100 /// <summary>
101 /// 画游戏头
102 /// </summary>
103 public static void GameShow()
104 {
105 Console.ForegroundColor = ConsoleColor.DarkGreen;
106 Console.WriteLine("*************************************************************");
107 Console.ForegroundColor = ConsoleColor.DarkBlue;
108 Console.WriteLine("*************************************************************");
109 Console.ForegroundColor = ConsoleColor.Cyan;
110 Console.WriteLine("*************************************************************");
111 Console.ForegroundColor = ConsoleColor.Red;
112 Console.WriteLine("**********************飞行棋游戏*****************************");
113 Console.ForegroundColor = ConsoleColor.DarkGray;
114 Console.WriteLine("*************************************************************");
115 Console.ForegroundColor = ConsoleColor.Blue;
116 Console.WriteLine("*************************************************************");
117 Console.ForegroundColor = ConsoleColor.Green;
118 Console.WriteLine("*************************************************************");
119 }
120
121 /// <summary>
122 /// 初始化地图
123 /// </summary>
124 public static void InitailMap()
125 {
126 int[] luckyturn = { 6, 23, 40, 55, 69, 83 };//幸运轮盘○
127 for (int i = 0; i < luckyturn.Length; i++)
128 {
129 Maps[luckyturn[i]] = 1;
130 }
131
132 int[] landMine = { 5, 13, 17, 33, 38, 50, 64, 80, 94 };//地雷☆
133 for (int i = 0; i < landMine.Length; i++)
134 {
135 Maps[landMine[i]] = 2;
136 }
137
138 int[] pause = { 9, 27, 63, 93 };//暂停△
139 for (int i = 0; i < pause.Length; i++)
140 {
141 Maps[pause[i]] = 3;
142 }
143
144 int[] timeTunnel = { 20, 25, 45, 63, 72, 88, 90 };//时空隧道##
145 for (int i = 0; i < timeTunnel.Length; i++)
146 {
147 Maps[timeTunnel[i]] = 4;
148 }
149 }
150
151 /// <summary>
152 /// 画地图
153 /// </summary>
154 public static void DrawMap()
155 {
156 Console.WriteLine("图例:幸运轮盘:○ 地雷:☆ 暂停:△ 时空隧道:##");
157
158 //第一横行
159 for (int i = 0; i < 30; i++)
160 {
161 Console.Write(DrowStringMap(i));
162 }
163
164 //画完第一横行后应该换行
165 Console.WriteLine();
166
167 //第一竖行
168 for (int i = 30; i < 35; i++)
169 {
170 for (int j = 0; j <= 28; j++)
171 {
172 Console.Write(" ");
173 }
174 Console.Write(DrowStringMap(i));
175 Console.WriteLine();
176 }
177
178 //第一横行:倒序
179 for (int i = 64; i >= 35; i--)
180 {
181 Console.Write(DrowStringMap(i));
182 }
183
184 //画完第二横行后应该换行
185 Console.WriteLine();
186
187 //第二竖行
188 for (int i = 65; i <= 69; i++)
189 {
190 Console.WriteLine(DrowStringMap(i));
191 }
192
193 //第二横行
194 for (int i = 70; i <= 99; i++)
195 {
196 Console.Write(DrowStringMap(i));
197 }
198
199 //画完最后一行应该换行
200 Console.WriteLine();
201
202 }
203
204 /// <summary>
205 /// 从画地图方法中抽象出来的方法
206 /// </summary>
207 /// <param name="i">地图中的位置</param>
208 /// <returns>要打印的字符串</returns>
209 public static string DrowStringMap(int i)
210 {
211 //声明str接收要打印的值
212 string str = "";
213 //玩家A和玩家B的坐标相同,并且都在地图上,则画<>
214 if (PlayerPos[0] == PlayerPos[1] && PlayerPos[0] == i)
215 {
216 str = "<>";
217 }
218 else if (PlayerPos[0] == i)
219 {
220 str = "A";
221 }
222 else if (PlayerPos[1] == i)
223 {
224 str = "B";
225 }
226 else
227 {
228 switch (Maps[i])
229 {
230 case 0:
231 Console.ForegroundColor = ConsoleColor.Yellow;
232 str = "□";
233 break;
234 case 1:
235 Console.ForegroundColor = ConsoleColor.Green;
236 str = "○";
237 break;
238 case 2:
239 Console.ForegroundColor = ConsoleColor.Red;
240 str = "☆";
241 break;
242 case 3:
243 Console.ForegroundColor = ConsoleColor.Blue;
244 str = "△";
245 break;
246 case 4:
247 Console.ForegroundColor = ConsoleColor.DarkCyan;
248 str = "##";
249 break;
250 }
251 }
252
253 return str;
254 }
255 }
256 }
257