01.飞行棋项目

以本次飞行棋项目为例;
游戏规则:
如果玩家A踩到了玩家B   玩家B退6格
                 踩到了地雷退6格
                 踩到了时空隧道进10格
                 踩到了幸运轮盘 按1可以和对方玩家交换位置, 
                                           按2轰炸对方可以,使对方退6格
                踩到了暂停 暂停一个回合
                踩到了方块,什么也不做

完成项目需要的步骤为:

1.画游戏头
2.初始化地图(加载地图所需的资源)
3.画地图
4.玩游戏
1047912-20161103190630783-1038124468.png
2.初始化地图(加载地图所需的资源 )
将整数数组中的数字变成控制台中显示的特殊字符串的过程,就是初始化地图

           //我用0表示普通,显示给用户就是 □
            //....1...幸运轮盘,显示组用户就◎ 
            //....2...地雷,显示给用户就是 ☆
            //....3...暂停,显示给用户就是 ▲
            //....4...时空隧道,显示组用户就 卐

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


1047912-20161103190632690-1882563935.png
 
 




转载于:https://www.cnblogs.com/HelloZyjS/p/6027856.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值