飞行棋
1、画游戏头 2、初始化地图(加载地图所需要的资源) 将整数数组中的数字编程控制台中显示的特殊字符串的这个过程 就是初始化地图 3、画地图
4、玩游戏
游戏规则: 如果玩家A踩到了玩家B 玩家B退6格 踩到了地雷 退6格 踩到了时空隧道 进10格 踩到了幸运轮盘 1交换位置 2 轰炸对方 使对方退6格 踩到了暂停 暂停一回合 踩到了方块 神马都不干
Map[50] if(map[40]==1) { Console.WriteLine("◎"); }
//初始化地图 Map[6]=1 //我用0表示普通,显示给用户就是 □ //....1...幸运轮盘,显示组用户就◎ //....2...地雷,显示给用户就是 ☆ //....3...暂停,显示给用户就是 ▲ //....4...时空隧道,显示组用户就 卐 int[] luckyturn = { 6, 23, 40, 55, 69, 83 };//幸运轮盘◎ int[] landMine = { 5, 13, 17, 33, 38, 50, 64, 80, 94 };//地雷☆ int[] pause = { 9, 27, 60, 93 };//暂停▲ int[] timeTunnel = { 20, 25, 45, 63, 72, 88, 90 };//时空隧道卐 for(int i=0;i 1 using System;
2
3 namespace 飞行棋项目
4 {
5 class Program
6 {
7 public static int[] Maps = new int[100];//静态字段数组模拟全局变量,在所有方法中都可直接使用
8 public static int[] PlayerPos = new int[2];//声明一个数组标记玩家A与B的位置
9 public static string[] PlayersName = new string[2];//声明一个数组存玩家姓名
10 public static bool[] Flags = new bool[2];//用来判定踩到暂停
11 static void Main(string[] args)
12
13 {
14 GameFirst();//游戏头
15 #region 输入姓名
16 Console.WriteLine("请输入玩家A的姓名");
17 PlayersName[0] = Console.ReadLine();
18 while (PlayersName[0] == "")
19 {
20 Console.WriteLine("玩家A姓名为空,请重新输入");
21 PlayersName[0] = Console.ReadLine();
22 }
23 Console.WriteLine("请输入玩家B的姓名");
24 PlayersName[1] = Console.ReadLine();
25 while (PlayersName[1] == "" || PlayersName[1] == PlayersName[0])
26 {
27 if (PlayersName[1] == "")
28 {
29 Console.WriteLine("玩家B姓名为空,请重新输入");
30 PlayersName[1] = Console.ReadLine();
31 }
32 else
33 {
34 Console.WriteLine("您输入的玩家B姓名与玩家A相同,请重新输入");
35 PlayersName[1] = Console.ReadLine();
36 }
37 }
38 #endregion
39 Console.Clear();//玩家姓名输入完成后应该清屏
40 GameFirst();
41 Console.WriteLine("{0}的士兵用A表示", PlayersName[0]);
42 Console.WriteLine("{0}的士兵用B表示", PlayersName[1]);
43 InitializeMap();
44 DrawMap();
45 //当两个玩家没有一个到达终点时,会不停的玩游戏
46 while (PlayerPos[0] < 99 && PlayerPos[1] < 99)
47 {
48 if (Flags[0] == false)
49 {
50 PlayGame(0);
51 }
52 else
53 {
54 Flags[0] = false;
55 }
56
57 if (Flags[1] == false)
58 {
59 PlayGame(1);
60 }
61 else
62 {
63 Flags[1] = false;
64 }
65 }
66 if (PlayerPos[0] == 99)
67 {
68 Console.WriteLine("玩家{0}获得胜利,玩家{1}可真是个笨蛋", PlayersName[0],PlayersName[1]);
69 }
70 else if (PlayerPos[1] == 99)
71 {
72 Console.WriteLine("玩家{0}获得胜利,玩家{1}可真是个笨蛋", PlayersName[1],PlayersName[0]);
73 }
74 Console.ReadKey();
75
76 }
77
78
79 public static void GameFirst()//游戏头
80 {
81 Console.ForegroundColor = ConsoleColor.Red;
82 Console.WriteLine("******************");
83 Console.ForegroundColor = ConsoleColor.Yellow;
84 Console.WriteLine("******************");
85 Console.ForegroundColor = ConsoleColor.DarkGray;
86 Console.WriteLine("******************");
87 Console.ForegroundColor = ConsoleColor.Cyan;
88 Console.WriteLine("******飞行棋******");
89 Console.ForegroundColor = ConsoleColor.DarkYellow;
90 Console.WriteLine("******************");
91 Console.ForegroundColor = ConsoleColor.White;
92 Console.WriteLine("******************");
93 Console.ForegroundColor = ConsoleColor.DarkGreen;
94 Console.WriteLine("******************");
95 }
96
97
98
99
100 public static void InitializeMap()//初始化地图
101 {
102 int[] Roulette = { 6, 23, 40, 55, 69, 83 };//轮盘
103 for (int i = 0; i < Roulette.Length; i++)
104 {
105 Maps[Roulette[i]] = 1;
106 }
107 int[] Mine = { 5, 13, 17, 33, 38, 50, 64, 80, 84 };//地雷
108 for (int i = 0; i < Mine.Length; i++)
109 {
110 Maps[Mine[i]] = 2;
111 }
112 int[] Pause = { 9, 27, 60, 93 };//暂停
113 for (int i = 0; i < Pause.Length; i++)
114 {
115 Maps[Pause[i]] = 3;
116 }
117 int[] TimeTunnel = { 20, 25, 45, 63, 72, 88, 90 };//时空隧道
118 for (int i = 0; i < TimeTunnel.Length; i++)
119 {
120 Maps[TimeTunnel[i]] = 4;
121 }
122 }
123
124
125 public static void DrawMap()//画地图
126 {
127 Console.WriteLine("图例:◎ 轮盘;☆ 地雷;△ 暂停;※ 时空隧道");
128 for (int i = 0; i < 30; i++)//第一横行
129 {
130 Console.Write( DrawStringMap(i) );
131 }
132 Console.WriteLine();//画完第一横行后应该换行
133
134 for (int i = 30; i < 35; i++)//第一竖行
135 {
136 for (int j = 0; j < 29; j++)
137 {
138 Console.Write(" ");
139 }
140 Console.WriteLine(DrawStringMap(i));
141 }
142
143 for (int i = 64; i >=35; i--)//第二横行
144 {
145 Console.Write(DrawStringMap(i));
146 }
147 Console.WriteLine();
148
149 for (int i =65; i < 70; i++)//第二竖行
150 {
151 Console.WriteLine(DrawStringMap(i));
152 }
153
154 for (int i= 70; i < 100; i++)//最后一行
155 {
156 Console.Write(DrawStringMap(i));
157 }
158
159 Console.WriteLine();//画完最后一行后应该换行
160
161 }
162 public static string DrawStringMap(int i)//画地图方法
163 {
164 string str = " ";
165 if (PlayerPos[0] == PlayerPos[1] && PlayerPos[0] == i)
166 {
167 str="<>";
168 }
169 else if (PlayerPos[0] == i)
170 {
171 str="A";
172 }
173 else if (PlayerPos[1] == i)
174 {
175 str="B";
176 }
177 else
178 {
179 switch (Maps[i])
180 {
181 case 0:
182 Console.ForegroundColor = ConsoleColor.White;
183 str = "□";
184 break;
185 case 1:
186 Console.ForegroundColor = ConsoleColor.Yellow;
187 str = "◎";
188 break;
189 case 2:
190 Console.ForegroundColor = ConsoleColor.Blue;
191 str = "☆";
192 break;
193 case 3:
194 Console.ForegroundColor = ConsoleColor.Cyan;
195 str = "△";
196 break;
197 case 4:
198 Console.ForegroundColor = ConsoleColor.DarkMagenta;
199 str="※";
200 break;
201 }
202 }
203 return str;
204 }
205
206 public static void PlayGame(int Playrenumber)//玩游戏过程 传入Playrenumber为其中一位玩家,1-Playrenumber即为另一位
207 {
208 Random r = new Random();
209 int rNumber = r.Next(1, 7);
210 Console.WriteLine("玩家{0}按任意键开始掷骰子", PlayersName[Playrenumber]);
211 Console.ReadKey(true);
212 Console.WriteLine("玩家{0}掷出了{1}", PlayersName[Playrenumber],rNumber);
213 PlayerPos[Playrenumber] += rNumber;
214 ChangePos();
215 Console.ReadKey(true);
216 Console.WriteLine("{0}按任意键开始行动", PlayersName[Playrenumber]);
217 Console.ReadKey(true);
218 Console.WriteLine("{0}行动完了", PlayersName[Playrenumber]);
219 //玩家A有可能踩到玩家B,轮盘,地雷,暂停,时空隧道
220 if (PlayerPos[0] == PlayerPos[1])
221 {
222 Console.WriteLine("玩家{0}踩到了玩家{1},玩家{2}退6格", PlayersName[Playrenumber], PlayersName[1- Playrenumber], PlayersName[1 - Playrenumber]);
223 PlayerPos[1 - Playrenumber] -= 6;
224 ChangePos();
225 Console.ReadKey(true);
226 }
227 else
228 {
229 switch (Maps[PlayerPos[Playrenumber]])
230 {
231 case 0:
232 Console.WriteLine("玩家{0}踩到了方块,安全", PlayersName[Playrenumber]);
233 Console.ReadKey(true);
234 break;
235 case 1:
236 Console.WriteLine("玩家{0}踩到了幸运轮盘,请选择1--交换位置,2--轰炸对方", PlayersName[Playrenumber]);
237 string input = Console.ReadLine();
238 while (true)
239 {
240 if (input == "1")
241 {
242 Console.WriteLine("玩家{0}选择与玩家{1}交换位置", PlayersName[Playrenumber], PlayersName[1 - Playrenumber]);
243 int temp = PlayerPos[Playrenumber];
244 PlayerPos[Playrenumber] = PlayerPos[1 - Playrenumber];
245 PlayerPos[1 - Playrenumber] = temp;
246 ChangePos();
247 Console.WriteLine("交换完成,游戏继续");
248 Console.ReadKey(true);
249 break;
250 }
251 else if (input == "2")
252 {
253 Console.WriteLine("玩家{0}选择轰炸玩家{1},玩家{2}往后退6格", PlayersName[Playrenumber], PlayersName[1 - Playrenumber], PlayersName[1 - Playrenumber]);
254 PlayerPos[1 - Playrenumber] -= 6;
255 ChangePos();
256
257 Console.ReadKey(true);
258 break;
259 }
260 else
261 {
262 Console.WriteLine("只能输入1或2,1--交换位置,2--轰炸对方,请重新输入");
263 input = Console.ReadLine();
264 }
265 }
266 break;
267 case 2:
268 Console.WriteLine("玩家{0}踩到了地雷,往后退10格", PlayersName[Playrenumber]);
269 PlayerPos[Playrenumber] -= 10;
270 ChangePos();
271 Console.ReadKey(true);
272 break;
273 case 3:
274 Console.WriteLine("玩家{0}踩到了暂停,暂停一回合", PlayersName[Playrenumber]);
275 Console.ReadKey(true);
276 Flags[Playrenumber] = true;
277 break;
278 case 4:
279 Console.WriteLine("玩家{0}踩到了时空隧道,往前进10格", PlayersName[Playrenumber]);
280 PlayerPos[Playrenumber] += 10;
281 ChangePos();
282 Console.ReadKey(true);
283 break;
284
285 }
286 }
287 Console.Clear();
288 DrawMap();
289
290 }
291
292 public static void ChangePos()//在玩家位置发生变动时,限制必须在地图内
293 {
294 if (PlayerPos[0] < 0)
295 {
296 PlayerPos[0] = 0;
297 }
298 if (PlayerPos[0] > 99)
299 {
300 PlayerPos[0] = 99;
301 }
302 if (PlayerPos[1] < 0)
303 {
304 PlayerPos[1] = 0;
305 }
306 if (PlayerPos[1] > 99)
307 {
308 PlayerPos[1] = 99;
309 }
310 }
311
312 }
313 }