007 飞行棋小项目
2016-01-16
1、画游戏头
2、初始化地图(加载地图所需要的资源)
将整数数组中的数字编程控制台中显示的特殊字符串的这个过程 就是初始化地图
3、画地图
4、玩游戏
游戏规则:
如果玩家A踩到了玩家B 玩家B退6格
踩到了地雷 退6格
踩到了时空隧道 进10格
踩到了幸运轮盘 1交换位置 2 轰炸对方 使对方退6格
踩到了暂停 暂停一回合
踩到了方块 神马都不干
主要引用用的方法
1 Map[50] 2 if(map[40]==1) 3 { 4 Console.WriteLine("◎"); 5 } 6 7 8 //初始化地图 Map[6]=1 9 //我用0表示普通,显示给用户就是 □ 10 //....1...幸运轮盘,显示组用户就◎ 11 //....2...地雷,显示给用户就是 ☆ 12 //....3...暂停,显示给用户就是 ▲ 13 //....4...时空隧道,显示组用户就 卐 14 int[] luckyturn = { 6, 23, 40, 55, 69, 83 };//幸运轮盘◎ 15 int[] landMine = { 5, 13, 17, 33, 38, 50, 64, 80, 94 };//地雷☆ 16 int[] pause = { 9, 27, 60, 93 };//暂停▲ 17 int[] timeTunnel = { 20, 25, 45, 63, 72, 88, 90 };//时空隧道卐 18 for(int i=0;i<luckyturn.Length;i++) 19 { 20 int n=luckyturn[i]; 21 Map[n]=1; 22 } 23 for(int i=0;i<landMine.Length;i++) 24 { 25 int n=landMine[i]; 26 Map[n]=1; 27 } 28 29 30 public static void Win() 31 { 32 Console.ForegroundColor = ConsoleColor.Red; 33 Console.WriteLine(" ◆ "); 34 Console.WriteLine(" ■ ◆ ■ ■"); 35 Console.WriteLine(" ■■■■ ■ ■ ◆■ ■ ■ ■"); 36 Console.WriteLine(" ■ ■ ■ ■ ◆ ■ ■ ■ ■"); 37 Console.WriteLine(" ■ ■ ■■■■■■ ■■■■■■■ ■ ■ ■"); 38 Console.WriteLine(" ■■■■ ■ ■ ●■● ■ ■ ■"); 39 Console.WriteLine(" ■ ■ ■ ● ■ ● ■ ■ ■"); 40 Console.WriteLine(" ■ ■ ■■■■■■ ● ■ ● ■ ■ ■"); 41 Console.WriteLine(" ■■■■ ■ ● ■ ■ ■ ■ ■"); 42 Console.WriteLine(" ■ ■ ■ ■ ■ ■ ■ ■"); 43 Console.WriteLine(" ■ ■ ■ ■ ■ ■ "); 44 Console.WriteLine(" ■ ■ ■ ■ ● ■ "); 45 Console.WriteLine(" ■ ■■ ■■■■■■ ■ ● ●"); 46 Console.ResetColor(); 47 }
项目完整源代码:
1 using System; 2 3 4 namespace 飞行棋游戏 5 { 6 class Program 7 { 8 //我们用静态字段来模拟全局变量 9 static int[] Maps = new int[100]; 10 //声明一个静态数组用来存储玩家A跟玩家B的坐标 11 static int[] PlayerPos = new int[2]; 12 //存储两个玩家的姓名 13 static string[] PlayerNames = new string[2]; 14 //两个玩家的标记 15 static bool[] Flags = new bool[2];//Flags[0]默认是false Flags[1]默认也是false 16 static void Main(string[] args) 17 { 18 GameShow(); 19 #region 输入玩家姓名 20 Console.WriteLine("请输入玩家A的姓名"); 21 PlayerNames[0] = Console.ReadLine(); 22 while (PlayerNames[0] == "") 23 { 24 Console.WriteLine("玩家A的姓名不能为空,请重新输入"); 25 PlayerNames[0] = Console.ReadLine(); 26 } 27 Console.WriteLine("请输入玩家B的姓名"); 28 PlayerNames[1] = Console.ReadLine(); 29 while (PlayerNames[1]==""||PlayerNames[1]==PlayerNames[0]) 30 { 31 if (PlayerNames[1] == "") 32 { 33 Console.WriteLine("玩家B的姓名不能为空,请重新输入"); 34 PlayerNames[1] = Console.ReadLine(); 35 } 36 else 37 { 38 Console.WriteLine("玩家B的姓名不能玩家A的形同,请重新输入"); 39 PlayerNames[1] = Console.ReadLine(); 40 } 41 } 42 #endregion 43 //玩家姓名输入OK之后 我们首先应该清屏 44 Console.Clear();//清屏 45 GameShow(); 46 Console.WriteLine("{0}的士兵用A表示",PlayerNames[0]); 47 Console.WriteLine("{0}的士兵用B表示",PlayerNames[1]); 48 //在画地图之前 首先应该初始化地图 49 InitailMap(); 50 DrawMap(); 51 52 //当玩家A跟玩家B没有一个人在终点的时候 两个玩家不停的去玩游戏 53 while (PlayerPos[0] < 99 && PlayerPos[1] < 99) 54 { 55 if (Flags[0] == false) 56 { 57 PlayGame(0);//Flags[0]=true; 58 } 59 else 60 { 61 Flags[0] = false; 62 } 63 if (PlayerPos[0] >= 99) 64 { 65 Console.WriteLine("玩家{0}无耻的赢了玩家{1}",PlayerNames[0],PlayerNames[1]); 66 break; 67 } 68 if (Flags[1] == false) 69 { 70 PlayGame(1); 71 } 72 else 73 { 74 Flags[1] = false; 75 } 76 if (PlayerPos[1] >= 99) 77 { 78 Console.WriteLine("玩家{0}无耻的赢了玩家{1}",PlayerNames[1],PlayerNames[0]); 79 break; 80 } 81 }//while 82 83 84 85 Win(); 86 87 Console.ReadKey(); 88 } 89 90 91 92 /// <summary> 93 /// 胜利 94 /// </summary> 95 public static void Win() 96 { 97 Console.ForegroundColor = ConsoleColor.Red; 98 Console.WriteLine(" ◆ "); 99 Console.WriteLine(" ■ ◆ ■ ■"); 100 Console.WriteLine(" ■■■■ ■ ■ ◆■ ■ ■ ■"); 101 Console.WriteLine(" ■ ■ ■ ■ ◆ ■ ■ ■ ■"); 102 Console.WriteLine(" ■ ■ ■■■■■■ ■■■■■■■ ■ ■ ■"); 103 Console.WriteLine(" ■■■■ ■ ■ ●■● ■ ■ ■"); 104 Console.WriteLine(" ■ ■ ■ ● ■ ● ■ ■ ■"); 105 Console.WriteLine(" ■ ■ ■■■■■■ ● ■ ● ■ ■ ■"); 106 Console.WriteLine(" ■■■■ ■ ● ■ ■ ■ ■ ■"); 107 Console.WriteLine(" ■ ■ ■ ■ ■ ■ ■ ■"); 108 Console.WriteLine(" ■ ■ ■ ■ ■ ■ "); 109 Console.WriteLine(" ■ ■ ■ ■ ● ■ "); 110 Console.WriteLine(" ■ ■■ ■■■■■■ ■ ● ●"); 111 Console.ResetColor(); 112 } 113 /// <summary> 114 /// 画游戏头 115 /// </summary> 116 public static void GameShow() 117 { 118 Console.ForegroundColor = ConsoleColor.Yellow; 119 Console.WriteLine("**************************"); 120 Console.ForegroundColor = ConsoleColor.Red; 121 Console.WriteLine("**************************"); 122 Console.ForegroundColor = ConsoleColor.Green; 123 Console.WriteLine("**************************"); 124 Console.ForegroundColor = ConsoleColor.Blue; 125 Console.WriteLine("***0505.Net基础班飞行棋***"); 126 Console.ForegroundColor = ConsoleColor.Cyan; 127 Console.WriteLine("**************************"); 128 Console.ForegroundColor = ConsoleColor.Green; 129 Console.WriteLine("**************************"); 130 } 131 /// <summary> 132 /// 初始化地图 133 /// </summary> 134 public static void InitailMap() 135 { 136 int[] luckyturn = { 6, 23, 40, 55, 69, 83 };//幸运轮盘◎ 137 for (int i = 0; i < luckyturn.Length; i++) 138 { 139 //int index = luckyturn[i]; 140 Maps[luckyturn[i]] = 1; 141 } 142 int[] landMine = { 5, 13, 17, 33, 38, 50, 64, 80, 94 };//地雷☆ 143 for (int i = 0; i < landMine.Length; i++) 144 { 145 Maps[landMine[i]] = 2; 146 } 147 int[] pause = { 9, 27, 60, 93,2,3,4,7,8 };//暂停▲ 148 for (int i = 0; i < pause.Length; i++) 149 { 150 Maps[pause[i]] = 3; 151 } 152 int[] timeTunnel = { 20, 25, 45, 63, 72, 88, 90 };//时空隧道卐 153 for (int i = 0; i < timeTunnel.Length; i++) 154 { 155 Maps[timeTunnel[i]] = 4; 156 } 157 } 158 public static void DrawMap() 159 { 160 Console.WriteLine("图例:幸运轮盘:◎ 地雷:☆ 暂停:▲ 时空隧道:卐"); 161 #region 第一横行 162 for (int i = 0; i < 30; i++) 163 { 164 Console.Write(DrawStringMap(i)); 165 }//for 166 #endregion 167 //画完第一横行后 应该换行 168 Console.WriteLine(); 169 #region 第一竖行 170 for (int i = 30; i < 35; i++) 171 { 172 for (int j = 0; j <= 28; j++) 173 { 174 Console.Write(" "); 175 } 176 Console.Write(DrawStringMap(i)); 177 178 Console.WriteLine(); 179 } 180 #endregion 181 #region 第二横行 182 for (int i = 64; i >= 35; i--) 183 { 184 Console.Write(DrawStringMap(i)); 185 } 186 #endregion 187 //画完第二横行 应该换行 188 Console.WriteLine(); 189 #region 第二竖行 190 for (int i = 65; i <= 69; i++) 191 { 192 Console.WriteLine(DrawStringMap(i)); 193 } 194 #endregion 195 #region 第三横行 196 for (int i = 70; i <= 99; i++) 197 { 198 Console.Write(DrawStringMap(i)); 199 } 200 #endregion 201 202 //画完最后一行 应该换行 203 Console.WriteLine(); 204 }//DrawMap方法的结尾 205 /// <summary> 206 /// 从画地图的方法中抽象出来的一个方法 207 /// </summary> 208 /// <param name="i"></param> 209 /// <returns></returns> 210 public static string DrawStringMap(int i) 211 { 212 string str = ""; 213 #region 画图 214 //如果玩家A跟玩家B的坐标相同,并且都在这个地图上,画一个尖括号 215 if (PlayerPos[0] == PlayerPos[1] && PlayerPos[0] == i) 216 { 217 str = "<>"; 218 } 219 else if (PlayerPos[0] == i) 220 { 221 //shift+空格 222 str = "A"; 223 } 224 else if (PlayerPos[1] == i) 225 { 226 str = "B"; 227 } 228 else 229 { 230 switch (Maps[i]) 231 { 232 case 0: 233 Console.ForegroundColor = ConsoleColor.Yellow; 234 str = "□"; 235 break; 236 case 1: 237 Console.ForegroundColor = ConsoleColor.Green; 238 str = "◎"; 239 break; 240 case 2: 241 Console.ForegroundColor = ConsoleColor.Red; 242 str = "☆"; 243 break; 244 case 3: 245 Console.ForegroundColor = ConsoleColor.Blue; 246 str = "▲"; 247 break; 248 case 4: 249 Console.ForegroundColor = ConsoleColor.DarkCyan; 250 str = "卐"; 251 break; 252 }//switch 253 }//else 254 return str; 255 #endregion 256 } 257 /// <summary> 258 /// 玩游戏 259 /// </summary> 260 public static void PlayGame(int playerNumber) 261 { 262 Random r = new Random(); 263 int rNumber = r.Next(1, 7); 264 Console.WriteLine("{0}按任意键开始掷骰子", PlayerNames[playerNumber]); 265 Console.ReadKey(true); 266 Console.WriteLine("{0}掷出了{1}", PlayerNames[playerNumber],rNumber); 267 PlayerPos[playerNumber] += rNumber; 268 ChangePos(); 269 Console.ReadKey(true); 270 Console.WriteLine("{0}按任意键开始行动", PlayerNames[playerNumber]); 271 Console.ReadKey(true); 272 Console.WriteLine("{0}行动完了", PlayerNames[playerNumber]); 273 Console.ReadKey(true); 274 //玩家A有可能踩到了玩家B 方块 幸运轮盘 地雷 暂停 时空隧道 275 if (PlayerPos[playerNumber] == PlayerPos[1 - playerNumber]) 276 { 277 Console.WriteLine("玩家{0}踩到了玩家{1},玩家{2}退6格", PlayerNames[playerNumber], PlayerNames[1 - playerNumber], PlayerNames[1 - playerNumber]); 278 PlayerPos[1 - playerNumber] -= 6; 279 ChangePos(); 280 Console.ReadKey(true); 281 } 282 else//踩到了关卡 283 { 284 //玩家的坐标 285 switch (Maps[PlayerPos[playerNumber]])// 0 1 2 3 4 286 { 287 case 0: Console.WriteLine("玩家{0}踩到了方块,安全。", PlayerNames[playerNumber]); 288 Console.ReadKey(true); 289 break; 290 case 1: Console.WriteLine("玩家{0}踩到了幸运轮盘,请选择 1--交换位置 2--轰炸对方", PlayerNames[playerNumber]); 291 string input = Console.ReadLine(); 292 while (true) 293 { 294 if (input == "1") 295 { 296 Console.WriteLine("玩家{0}选择跟玩家{1}交换位置", PlayerNames[playerNumber], PlayerNames[1 - playerNumber]); 297 Console.ReadKey(true); 298 int temp = PlayerPos[playerNumber]; 299 PlayerPos[playerNumber] = PlayerPos[1 - playerNumber]; 300 PlayerPos[1 - playerNumber] = temp; 301 Console.WriteLine("交换完成!!!按任意键继续游戏!!!"); 302 Console.ReadKey(true); 303 break; 304 } 305 else if (input == "2") 306 { 307 Console.WriteLine("玩家{0}选择轰炸玩家{1},玩家{2}退6格", PlayerNames[playerNumber], PlayerNames[1 - playerNumber], PlayerNames[1 - playerNumber]); 308 Console.ReadKey(true); 309 PlayerPos[1 - playerNumber] -= 6; 310 ChangePos(); 311 Console.WriteLine("玩家{0}退了6格", PlayerNames[1 - playerNumber]); 312 Console.ReadKey(true); 313 break; 314 } 315 else 316 { 317 Console.WriteLine("只能输入1或者2 1--交换位置 2--轰炸对方"); 318 input = Console.ReadLine(); 319 } 320 } 321 break; 322 case 2: Console.WriteLine("玩家{0}踩到了地雷,退6格", PlayerNames[playerNumber]); 323 Console.ReadKey(true); 324 PlayerPos[playerNumber] -= 6; 325 ChangePos(); 326 break; 327 case 3: Console.WriteLine("玩家{0}踩到了暂停,暂停一回合", PlayerNames[playerNumber]); 328 Flags[playerNumber] = true; 329 Console.ReadKey(true); 330 break; 331 case 4: Console.WriteLine("玩家{0}踩到了时空隧道,前进10格", PlayerNames[playerNumber]); 332 PlayerPos[playerNumber] += 10; 333 ChangePos(); 334 Console.ReadKey(true); 335 break; 336 }//switch 337 }//else 338 ChangePos();//perfect 339 Console.Clear(); 340 DrawMap(); 341 } 342 /// <summary> 343 /// 当玩家坐标发生改变的时候调用 344 /// </summary> 345 public static void ChangePos() 346 { 347 if (PlayerPos[0] < 0) 348 { 349 PlayerPos[0] = 0; 350 } 351 if (PlayerPos[0] >= 99) 352 { 353 PlayerPos[0] = 99; 354 } 355 356 if (PlayerPos[1] < 0) 357 { 358 PlayerPos[1] = 0; 359 } 360 if (PlayerPos[1] >= 99) 361 { 362 PlayerPos[1] = 99; 363 } 364 } 365 366 367 368 369 370 371 372 } 373 }
生成的exe程序:链接: http://pan.baidu.com/s/1boyLE6F 密码: v8ic