什么时候才能成为大N

一开始看骑士飞行棋演示,在心里想,这个游戏怎么做啊,应该很难吧, 还是在这之前把前面的基础视频学好吧,经过几天的学习,终于开始学这个小游戏项目了,教程学到一半,回家了,上不了网,也没有笔记本带回家,中间就停了,昨天回来,接着学,到现在终于学完了,看完老师的视频,自己然后按老师说的,一点一点 做,输入 代码,中间有错误,再按老师的方法,一点一点的调式,居然出来的都是正确的,很高兴, 原来游戏就是这样做的啊,经过老师的分解,讲解,整个游戏的过程,在脑子中,很清楚的显示出来,特别是调式方法,变量在调试中还可以手动更改,以前遇到问题不知道从何处下手,经常这个小项目的学习,对.net 又有了进一步的认识, 也明白了前面,老师说的,这个项目的目的主要是,对以前学习的应用与复习,真的如此。不过我觉得在那个 掷骰子的方法,传二个参数会不会更好一些,static void Action(int playerNumber1, int playerNumber2)playerNumber1 代表当前玩家,playerNumber2 代表对方玩家, 如果这个游戏很更多玩家,是不是,可以传递更多的玩家参数,下面把我的按视频中写出来代码,还有自己的方法帖出来与新手分享,感觉我们新人学的第一个很重要的是:把现成例子给作出来正确的结果很重要,然后中意有不明白了,慢慢去理解消化, 有空了,再看能不能把代码优化,

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace 骑士飞行棋方法___我的{class Program{//在下面的数组存储我们游戏地图的各各关卡//数组的下标为0的元素对应地图上的第1格 下标为1的元素对应第2格… 下标为n的元素对应n+1格//在数组中 1:幸运轮盘◎//2:地雷☆//3:暂停▲//4:时空隧道卐//0:表示普通□static int[] map = new int[100];static int[] playerPos = { 0, 0 }; //playerPos[0]存放玩家A的下标,playerPos[1]存放玩家B的下标,static string[] names = new string[2]; //names[0]存放玩家A的姓名,存入玩家B的姓名。static bool[] isStop = { false, false }; //isStop[0]表示A是否上一次走到了暂停,isStop[1]表示B是,如果走到暂停,则设置其值为truestatic void Main(string[] args){ShowUI();//显示游戏名称Console.WriteLine("请输入玩家A的姓名:");names[0] = Console.ReadLine();while (names[0] == ""){Console.WriteLine("玩家A的姓名不能为空,请重新输入:");names[0] = Console.ReadLine();}Console.WriteLine("请输入玩家B的姓名:");names[1] = Console.ReadLine();while (names[1] == "" || names[1] == names[0]){if (names[1] == ""){Console.WriteLine("玩家B的姓名不能为空,请重新输入:");}if (names[1] == names[0]){ //A和B重名Console.WriteLine("此姓名已经被玩家A的使用,请重新输入:");}names[1] = Console.ReadLine();}Console.Clear();ShowUI();Console.WriteLine("对战开始……");Console.WriteLine("{0} 用A表示", names[0]);Console.WriteLine("{0} 用B表示", names[1]);InitialMap(); //初始化地图DrawMap(); //绘制地图Console.WriteLine("开始游戏…");//这个循环中让玩家A和玩家B轮流掷骰子 当玩家A或玩家B的坐标>=99时,则结束循环。while (playerPos[0] < 99 && playerPos[1] < 99){//玩家A开始掷骰子if (isStop[0] == false){Action(0,1);}else{isStop[0] = false;}if (playerPos[0] >= 99){break;}//玩家B开始掷骰子if (isStop[1] == false){Action(1,0);}else{isStop[1] = false;}}// 判断谁胜利,谁失败Console.Clear();ShowUI();if (playerPos[0] >= 99){Console.WriteLine("{0}赢了!!!!!", names[0]);}else if (playerPos[1] >= 99){Console.WriteLine("{0}赢了!!!!!!", names[1]);}Console.ReadKey();}/// <summary>/// A或B掷骰子的方法/// </summary>/// <param name="playerNumber1">当前掷骰的人</param>/// <param name="playerNumber2">对方</param>static void Action(int playerNumber1, int playerNumber2){//playerNumber1 中存的就是当前玩家 (姓名 坐标 是否暂停) 这三个数组的下标//playerNumber2 就是对方的 (姓名 坐标 是否暂停)这三个数组的下标Console.WriteLine("{0}按任意键开始掷骰子……", names[playerNumber1]);ConsoleKeyInfo rec = Console.ReadKey(true);Random r = new Random(); // r是产生随机数时用的string msg = ""; // 用于存储用户踩到某关卡,输出的话。int step = 0; // 用于存放产生的随机数量step = r.Next(1, 7);if (rec.Key == ConsoleKey.Tab && rec.Modifiers == (ConsoleModifiers.Control | ConsoleModifiers.Shift)){if (Console.ReadKey(true).Key == ConsoleKey.F1){step = ReadInt(1, 100);}}Console.WriteLine("{0}掷出了{1}", names[playerNumber1], step);playerPos[playerNumber1] += step; //注意,一旦坐标发生改变,就要判断 坐标值是是否>99 或者<0checkPos(); // 检查坐标是否越界Console.WriteLine("按任意键开始行动……");Console.ReadKey(true);if (playerPos[playerNumber1] == playerPos[playerNumber2]) //玩家A踩到玩家B{playerPos[playerNumber2] = 0;msg = string.Format("{0}踩到了{1},{1}回到了原点。", names[playerNumber1], names[playerNumber2]);}else{ //没踩到,要判断玩家A现在所在的位置是滞有其他关卡switch (map[playerPos[playerNumber1]]){case 0: //普通,没有效果msg = "";break;case 1: //走到了幸运轮盘关卡Console.WriteLine("{0}你走到了幸运轮盘,请选择运气:", names[playerNumber1]);Console.WriteLine("1—交换位置; 2—轰炸对方。");int selectInput = ReadInt(1, 2);if (selectInput == 1){ //要与对方交换位置int tmep = playerPos[playerNumber1];playerPos[playerNumber1] = playerPos[playerNumber2];playerPos[playerNumber2] = tmep;msg = string.Format("{0}与对方交换了位置。", names[playerNumber1]);}else if (selectInput == 2){ // 轰炸对方playerPos[playerNumber2] = 0;msg = string.Format("{0}回到了原点", names[playerNumber2]);}break;case 2: //踩到了地雷playerPos[playerNumber1] -= 6;checkPos();msg = string.Format("{0}踩到了地雷,退6步。", names[playerNumber1]);break;case 3: //暂停一次isStop[playerNumber1] = true;msg = string.Format("{0}走到红灯,,下次暂停一次", names[playerNumber1]);break;case 4: //时空隧道playerPos[playerNumber1] = +10;checkPos();msg = string.Format("{0}走到了时空隧道,前进10步。", names[playerNumber1]);break;}}Console.Clear();DrawMap();if (msg != ""){Console.WriteLine(msg);}Console.WriteLine("{0}掷出了{1},行动完成!", names[playerNumber1], step);Console.WriteLine("************玩家A和玩家B的位置如下***************");Console.WriteLine("{0}的位置为:{1}", names[playerNumber1], playerPos[playerNumber1] + 1);Console.WriteLine("{0}的位置为:{1}", names[playerNumber2], playerPos[playerNumber2] + 1);Console.WriteLine("");}/// <summary>/// 用于绘制飞棋名称/// </summary>static void ShowUI(){Console.WriteLine("****************************************************");Console.WriteLine("**");Console.WriteLine("*骑 士 飞 行 棋*");Console.WriteLine("**");Console.WriteLine("****************************************************");}/// <summary>/// 地图初始化/// </summary>static void InitialMap(){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 < luckyTurn.Length; i++){map[luckyTurn[i]] = 1;}for (int i = 0; i < landMine.Length; i++){map[landMine[i]] = 2;}for (int i = 0; i < pause.Length; i++){map[pause[i]] = 3;}for (int i = 0; i < timeTunnel.Length; i++){map[timeTunnel[i]] = 4;}}/// <summary>/// 画地图/// </summary>static void DrawMap(){//在数组中 1:表示幸运轮盘◎//2:地雷☆//3:暂停▲//4:时空隧道卐//0:表示普通□Console.WriteLine("<>代表二个玩家在同一个位置");Console.WriteLine("图例:幸运轮盘◎ 地雷☆ 暂停▲ 时空隧道卐");//画第一行for (int i = 0; i <= 29; i++){Console.Write(getMapString(i));}Console.WriteLine("");//画第一列地图for (int i = 30; i <= 34; i++){for (int j = 0; j <= 29; j++){if (j < 29){Console.Write(" ");}else{Console.WriteLine(getMapString(i));}}}//画第二行地图for (int i = 64; i >= 35; i–){Console.Write(getMapString(i));}Console.WriteLine("");//画第二列地图for (int i = 65; i <= 69; i++){Console.WriteLine(getMapString(i));}//画第三行地图for (int i = 70; i <= 99; i++){Console.Write(getMapString(i));}Console.WriteLine("");Console.ResetColor();}/// <summary>/// 获得第pos坐标上应该绘制的图案/// </summary>/// <param name="pos">要绘制的人坐标</param>static string getMapString(int pos){string mpaString = "";if (playerPos[0] == pos && playerPos[1] == pos){mpaString = "<>";}else if (playerPos[0] == pos){mpaString = "A";}else if (playerPos[1] == pos){mpaString = "B";}else{switch (map[pos]){case 0:Console.ForegroundColor = ConsoleColor.White;mpaString = "□";break;case 1:Console.ForegroundColor = ConsoleColor.Red;mpaString = "◎";break;case 2:Console.ForegroundColor = ConsoleColor.Blue;mpaString = "☆";break;case 3:Console.ForegroundColor = ConsoleColor.Yellow;mpaString = "▲";break;case 4:Console.ForegroundColor = ConsoleColor.Green;mpaString = "卐";break;}}return mpaString;}/// <summary>/// 检查玩家坐标是否越界/// </summary>static void checkPos(){for (int i = 0; i < 1; i++){if (playerPos[i] > 99){playerPos[i] = 99;}if (playerPos[i] < 0){playerPos[i] = 0;}}}static int ReadInt(){int i = ReadInt(int.MinValue, int.MaxValue);return i;}/// <summary>/// 读取一个min 到 max之间的一个整数。/// </summary>/// <param name="min"></param>/// <param name="max"></param>/// <returns></returns>static int ReadInt(int min, int max){while (true){try{int num = Convert.ToInt32(Console.ReadLine());if (num < min || num > max){Console.WriteLine("只能输入{0}到{1}之间的数字。", min, max);}else{return num;}}catch{Console.WriteLine("只能输入数字,请重新输入。");}}}}}

你的内心会被洗成一片空白,自由而宁静,

什么时候才能成为大N

相关文章:

你感兴趣的文章:

标签云: