本文实例为大家分享了C#实现飞行棋的具体代码,供大家参考,具体内容如下
游戏规则
如果玩家A踩到了玩家B,玩家B退6格
踩到了1幸运轮盘,a交换位置,b轰炸对方使对方退6格
踩到了2地雷,退6格
踩到了3暂停,暂停一回合
踩到了4时空隧道,进10格
踩到了方块,什么都不干
0表示普通关卡
1表示幸运轮盘◎
2表示地雷★
3表示暂停▲
4表示时空隧道卍
关于飞行棋源码的解析,下一篇文章发出。
源码
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 飞行棋 { class Program { //我们用静态字段来模拟全局变量 static int[] Maps=new int[100]; //声明一个静态字段的数组用来存储玩家A和玩家B的坐标 static int[] playerPos = new int[2]; //存储两个玩家的姓名 static string[] playerNames = new string[2]; //两个玩家的标记 static bool[] flags = new bool[2]; //flags[0]玩家A和flags[1]玩家B默认都是false static void Main(string[] args) { GameShow(); //加载游戏头 #region 输入玩家姓名 Console.WriteLine("请输入玩家A的姓名"); playerNames[0] = Console.ReadLine(); while (playerNames[0]=="") { Console.WriteLine("玩家A姓名不能为空,请重新输入"); playerNames[0] = Console.ReadLine(); } Console.WriteLine("请输入玩家B的姓名"); playerNames[1] = Console.ReadLine(); while (playerNames[1] == ""||playerNames[1]==playerNames[0]) { if (playerNames[1] == "") { Console.WriteLine("姓名不能为空,请重新输入"); playerNames[1] = Console.ReadLine(); } else { Console.WriteLine("玩家B姓名不能重复,请重新输入"); playerNames[1] = Console.ReadLine(); } } #endregion //玩家姓名写好后,进行清屏 Console.Clear(); //清屏 GameShow(); Console.WriteLine("{0}的士兵用A表示", playerNames[0]); Console.WriteLine("{0}的士兵用B表示", playerNames[1]); Initailmap(); //初始化地图 DrowMap(); //画出地图---注意:画地图前首先应初始化地图 //当玩家A和玩家B没有一个人到达终点的时候都在游戏中 while (playerPos[0] < 99 && playerPos[1] < 99) { if (flags[0] == false) { PlayGame(0); } else { flags[0] = false; } if (playerPos[0] >= 99) { Console.WriteLine("玩家{0}赢了玩家{1}", playerNames[0], playerNames[1]); break; } if (flags[1] == false) { PlayGame(1); } else { flags[1] = false; } if (playerPos[1] >= 99) { Console.WriteLine("玩家{0}赢了玩家{1}", playerNames[1], playerNames[0]); break; } } Console.ReadKey(); } /// <summary> /// 设置游戏头及输出内容的颜色 /// </summary> public static void GameShow() { Console.ForegroundColor = ConsoleColor.Blue; //设置输出内容的前景色 Console.WriteLine("**********************"); Console.ForegroundColor = ConsoleColor.Cyan; Console.WriteLine("**********************"); Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("******飞行棋大战******"); Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine("**********************"); Console.ForegroundColor = ConsoleColor.DarkGray; Console.WriteLine("**********************"); Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("**********************"); } /// <summary> /// 初始化地图 /// </summary> public static void Initailmap() { int[] lucklyturn = { 6, 23, 40, 55, 69, 83 }; //幸运轮盘 for (int i = 0; i < lucklyturn.Length; i++) { int index = lucklyturn[i]; Maps[index] = 1; //将幸运轮盘的位置处值都设为1 } int[] landMine = { 5, 13, 17, 33, 38, 50, 64, 80, 94 };//地雷 for (int i = 0; i < landMine.Length; i++) { int index = landMine[i]; Maps[index] = 2; //将地雷的位置处值都设为2 } int[] pause = { 9, 27, 60, 93 }; //暂停 for (int i = 0; i < pause.Length; i++) { int index = pause[i]; Maps[index] = 3; //将暂停的位置处值都设为3 } int[] timeTunnel = { 20, 25, 45, 63, 72, 88, 90 };//时空隧道 for (int i = 0; i <timeTunnel.Length; i++) { int index=timeTunnel[i]; Maps[index] = 4; //将时空隧道的位置处值都设为4 } } /// <summary> /// 画出地图 /// </summary> public static void DrowMap() { Console.WriteLine("图例:普通方块:□ 幸运轮盘:◎ 地雷:★ 暂停:▲ 时空隧道:卍"); //第一横行0--29 for (int i = 0; i <= 29; i++) { Console.Write(DrowStringMap(i)); //输出返回的当前单元格的图形 } //画完第一行后换行 Console.WriteLine(); //第一竖行30--34 for (int i = 30; i <= 34; i++) { for (int j = 0; j < 29; j++) { Console.Write(" "); //两个空格 } Console.Write(DrowStringMap(i)); Console.WriteLine(); } //第二横行35--64 for (int i = 64; i >=35; i--) { Console.Write(DrowStringMap(i)); } //第二横行打印完后换行 Console.WriteLine(); //第二竖行65--69 for (int i = 65; i <= 69; i++) { Console.Write(DrowStringMap(i)); Console.WriteLine(); } //第三横行70--99 for (int i = 70; i <= 99; i++) { Console.Write(DrowStringMap(i)); } Console.WriteLine(); //画完最后一行地图后应该换行 } /// <summary> /// 画当前的单元格的图案 /// </summary> /// <param name="i">传入当前单元格的索引</param> /// <returns>返回当前单元格的图形</returns> public static string DrowStringMap(int i) { string str = " "; //如果玩家A和玩家B的坐标相同并且都在地图上画一个<>(因为刚开始和结束的时候玩家可能去地图外) if (playerPos[0] == playerPos[1] && playerPos[0] == i) { Console.ForegroundColor = ConsoleColor.Blue; str="<>"; } else if (playerPos[0] == i) { Console.ForegroundColor = ConsoleColor.Blue; str="A"; } else if (playerPos[1] == i) { Console.ForegroundColor = ConsoleColor.Blue; str="B"; } else { switch (Maps[i]) { case 0: Console.ForegroundColor = ConsoleColor.DarkYellow; str="□"; break; case 1: Console.ForegroundColor = ConsoleColor.Green; str="◎"; break; case 2: Console.ForegroundColor = ConsoleColor.Red; str="★"; break; case 3: Console.ForegroundColor = ConsoleColor.Blue; str="▲"; break; case 4: Console.ForegroundColor = ConsoleColor.DarkCyan; str="卍"; break; } } //else return str; } /// <summary> /// 玩游戏 /// </summary> public static void PlayGame(int playerNumber) { Random r = new Random(); int rNumber = r.Next(1, 7); Console.WriteLine("{0}玩家开始掷骰子", playerNames[playerNumber]); Console.ReadKey(true); //ReadKey是重载函数,里面参数为true表示不显示按下的键。 Console.WriteLine("{0}掷出了{1}", playerNames[playerNumber], rNumber); Console.ReadKey(true); Console.WriteLine("{0}按任意键开始行动", playerNames[playerNumber]); Console.ReadKey(true); playerPos[playerNumber] += rNumber; ChangePos(); Console.WriteLine("玩家{0}行动完了", playerNames[playerNumber]); Console.ReadKey(true); //玩家A有可能踩到玩家B if (playerPos[playerNumber] == playerPos[1 - playerNumber]) { Console.WriteLine("玩家{0}踩到了玩家{1},{2}退6格", playerNames[0], playerNames[1], playerNames[1]); playerPos[1 - playerNumber] -= 6; //如果玩家A踩到了玩家B,玩家B退6格 ChangePos(); Console.ReadKey(true); } //玩家A有可能踩到方块,时空隧道,暂停,地雷,幸运轮盘 else { switch (Maps[playerPos[playerNumber]]) { case 0: Console.WriteLine("玩家{0}踩到了方块,安全", playerNames[playerNumber]); Console.ReadKey(true); break; case 1: Console.WriteLine("玩家{0}踩到了幸运轮盘,请选择a换位置;b轰炸对方,让对方退6格", playerNames[playerNumber]); string input = Console.ReadLine(); while (true) { if (input == "a") { Console.WriteLine("玩家{0}和玩家{1}交换位置", playerNames[playerNumber], playerNames[1 - playerNumber]); //******* Console.ReadKey(true); int temp = playerPos[playerNumber]; playerPos[playerNumber] = playerPos[1 - playerNumber]; playerPos[1 - playerNumber] = temp; Console.WriteLine("玩家{0}和玩家{1}位置交换成功,按任意键继续游戏。", playerNames[playerNumber], playerNames[1 - playerNumber]); Console.ReadKey(true); break; } else if (input == "b") { Console.WriteLine("玩家{0}选择轰炸玩家{1},玩家{2}的位置退6格", playerNames[playerNumber], playerNames[1 - playerNumber], playerNames[1 - playerNumber]); Console.ReadKey(true); playerPos[1 - playerNumber] -= 6; ChangePos(); Console.WriteLine("玩家{0}的位置退6格", playerNames[1 - playerNumber]); Console.ReadKey(true); break; } else { Console.WriteLine("只能输入a或者b,输入错误,请重新输入"); input = Console.ReadLine(); } } break; case 2: Console.WriteLine("玩家{0}踩到了地雷,退6格", playerNames[playerNumber]); Console.ReadKey(true); playerPos[playerNumber] -= 6; ChangePos(); break; case 3: Console.WriteLine("玩家{0}踩到了暂停,暂停一回合", playerNames[playerNumber]); flags[playerNumber] = true; Console.ReadKey(true); break; case 4: Console.WriteLine("玩家{0}踩到了时空隧道,前进10格", playerNames[playerNumber]); playerPos[playerNumber] += 10; ChangePos(); break; } //switch } //else ChangePos(); Console.Clear(); //清屏 DrowMap(); //重新画 } /// <summary> /// 当玩家坐标发生改变的时候调用 /// </summary> public static void ChangePos() { if (playerPos[0] < 0) { playerPos[0] = 0; } else if (playerPos[0] >99) { playerPos[0] = 99; } else if (playerPos[1] < 0) { playerPos[1] = 0; } else if (playerPos[1] > 99) { playerPos[1] = 99; } } } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持靠谱客。
最后
以上就是懦弱百褶裙最近收集整理的关于C#实现飞行棋源码的全部内容,更多相关C#实现飞行棋源码内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复