笔记写到这里,对c#的基础应该有所了解了,现在应该可以看懂一些c#代码,并且能写出简单的c#程序了,在这里要感谢一下传智播客.net培训的公开课,目前我所有的笔记都是边看视频教程编写的,传智播客.net培训的公开课视频确实不错,讲的很有重点,好了,废话少说,下面把我做的控制台应用程序的飞行棋的一些关键类代码贴出来,完整源码在文章最后,供大家参考,欢迎高手拍砖!
先看一下界面:
图例解释:
幸运轮盘:1,与对方交换位置2,轰炸对方,使对方退后6步
地雷:踩到地雷,后退4步
暂停:暂停掷骰子一次
时空隧道:前进10步
先解释一下地图如何画,采用了比较笨的方法,采用一个int类型的数组,长度为100,地图上的每个点都用数字表示,0表示普通,1表示幸运轮盘,2表示地雷,3表示暂停,4表示时空隧道
用4个int数组用来存储幸运轮盘,地雷,暂停,时空隧道的坐标
获得第pos坐标上应该绘制的图案public static string GetMapString(int pos) { string result = ""; if (playerPos[0] == pos && playerPos[1] == pos) { Console.ForegroundColor = ConsoleColor.Red; result = "<>"; } else if (playerPos[0] == pos) { Console.ForegroundColor = ConsoleColor.Red; result = "A"; } else if (playerPos[1] == pos) { Console.ForegroundColor = ConsoleColor.Red; result = "B"; } else { switch (maps[pos]) { case 0: Console.ForegroundColor = ConsoleColor.White; result = "□"; break; case 1: Console.ForegroundColor = ConsoleColor.Green; result = "※"; break; case 2: Console.ForegroundColor = ConsoleColor.DarkYellow; result = "⊙"; break; case 3: Console.ForegroundColor = ConsoleColor.Blue; result = "★"; break; case 4: Console.ForegroundColor = ConsoleColor.Magenta; result = "→"; break; } } return result; }
绘制地图public static void DrawMap() { Console.WriteLine("玩家 {0}:用A表示,{1}用B表示", names[0],names[1]); Console.WriteLine("说明 □:普通 ※:幸运轮盘 ⊙:地雷 ★:暂停 →:时空隧道"); Console.WriteLine("{0}当前位置:{1} {2}当前位置{3}",names[0],playerPos[0]+1,names[1],playerPos[1]+1 ); //画第一行 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++) { Console.Write(" "); } 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(); }
解释一下如何绘制地图的,用了个比较笨的方法,GetMapString()用于获得某坐标上应该显示的图案,然后用Console.Write()输出图案
看一下地图的坐标,坐标从0开始,到99结束,总共3行2列,每一行都是30个图案,每一列5个图案,坐标点如下所示:
玩家掷骰子,并且开始行动,并判断当前关卡public static void Action(ref string firstname,ref int firstpos,ref string secname,ref int secpos) { int step = 0;//用于存放掷出的骰子数 Console.Clear(); DrawMap(); Console.WriteLine("{0}按任意键开始掷骰子...", firstname); Console.ReadKey(true); Random r = new Random();//掷骰子 step = r.Next(1, 7); Console.WriteLine("{0}掷出了{1}", firstname, step); Console.WriteLine("按任意键开始行动..."); Console.ReadKey(true); firstpos = firstpos + step; CheckPos();//检查是否越界 if (firstpos == secpos)//撞到对方 { Console.WriteLine("{0}撞到了{1},把{1}撞到了起点!", firstname, secname); secpos = 0; Console.WriteLine("按任意键继续..."); Console.ReadKey(true); } else//没撞到,判断玩家所在的位置是否有其它关卡 { switch (maps[firstpos]) { case 0:// 普通,没有效果 break; case 1://走到幸运轮盘 Console.Clear(); DrawMap(); Console.Write("{0}走到了幸运轮盘,请选择运气:", firstname); Console.WriteLine(" 1:与对方交换位置 2:轰炸对方"); int a = ReadInt(1, 2); if (a == 1) { int temp = firstpos; firstpos = secpos; secpos = temp; Console.WriteLine("{0}与{1}交换了位置.", firstname, secname); Console.WriteLine("按任意键继续..."); Console.ReadKey(true); } else { secpos = secpos - 6; Console.WriteLine("按任意键继续..."); Console.ReadKey(true); } break; case 2://踩到地雷 Console.WriteLine("{0}猜到了地雷,后退4步", firstname); firstpos = firstpos - 4; Console.WriteLine("按任意键继续..."); Console.ReadKey(true); break; case 3://暂停一次 break; case 4://时空隧道 Console.WriteLine("太爽了,{0}进入了时空隧道,前进10步...", firstname); firstpos = firstpos + 10; Console.WriteLine("按任意键继续..."); Console.ReadKey(true); break; } CheckPos(); } Console.Clear(); DrawMap(); }
基本上关键的一些代码已经完成了,剩下的就非常容易了
第一次写这么长的控制台应用程序,从学c#开始,因为比较懒,所以学的一知半解,毕业到了一个小公司,做了一个项目,B/S模式,基本上就是拖控件,随便写代码,那代码写的,估计让大牛们看到以为我是个非计算机专业的非专业人士写出来的,那个项目貌似公司也不重视,所以也没出什么问题,做了一个项目后,以为自己多牛逼了,就想到大公司看看,然后就被打击了,一直到那时候,我才开始正视自己,所以把自己当成一个从未学习过c#的菜鸟从头开始好好学,这个算是“改邪归正”后写的第一个代码,希望大家能够多多提意见!
完整源码下载 需要vs2010