------- Windows Phone 7手机开发、.Net培训、期待与您交流! -------
通过这一个小项目让我认识到写注释的重要性,特别是类对象的摘要的书写,他不仅利于我们查看代码,还可以使我们使用时更清晰明了;说道这里我们简单的说一下常用的注释方法:
行注释: //
块注释: /*…*/
文档(类)注释:///
养成重复代码写方法的习惯,这样我们减少我们使用代码时的重复,使我们的代码界面更加清晰,
下面是我写的骑士飞行棋的代码:
里面也许会有一些下的Bag,如有发现请留言告诉我谢谢!
//在下面数组中储存我们的各种关卡:
//数组中下表为0的元素对应我们关卡地图的第一格以此类推下表为n-1的元素对应我们的第n格
//在数组中 1表示幸运轮盘◎
// 2表示地雷☆
// 3表示暂停▲
// 4表示时空隧道卍
// 0表示普通□
static int[] Map = new int[100];
static int[] Playerpose = { 0,0 }; //playerpose[0]代表A玩家的位置,playerpose[1]表示B玩家的位置
static void ChackPos()
{
for (int i = 0; i < 2; i++)
{
if (Playerpose[i] > 99)
{
Playerpose[i] = 99;
}
if (Playerpose[i] <0)
{
Playerpose[i] = 0;
}
}
}
///<summary>
///获得pos坐标应该绘制的图案
///</summary>
///<param name="pos">要绘制的图标</param>
///<returns></returns>
static string GetMapString(int pos)
{
string result = "";
if (Playerpose[0] == pos && Playerpose[1] == pos)
{
Console.ForegroundColor =ConsoleColor.Yellow;
result="<>";
}
else if (Playerpose[0] == pos)
{
Console.ForegroundColor =ConsoleColor.Yellow;
result="A";
}
else if (Playerpose[1] == pos)
{
Console.ForegroundColor =ConsoleColor.Yellow;
result="B";
}
else
{
switch (Map[pos])
{
case 0:
Console.ForegroundColor =ConsoleColor.White ;
result="□";
; break;
case 1:
Console.ForegroundColor =ConsoleColor.DarkRed;
result = "◎";
break;
case 2:
Console.ForegroundColor =ConsoleColor.DarkYellow;
result = "☆";
break;
case 3:
Console.ForegroundColor =ConsoleColor.Green;
result = "▲";
break;
case 4: Console.ForegroundColor = ConsoleColor.DarkMagenta;
result = "卍";
break;
}
}
return result;
}
static void Main(string[] args)
{
bool[] isstop = {false,false};
string msg="";
Random r = new Random();//产生随时数用的
int temp = 0;
string[] name = new string[2];//name[0]用来储存玩家A的姓名,name[1]用来储存玩家B的姓名。
showUI();//显示游戏名称
Console.WriteLine("请输入玩家A的姓名:");
name[0] = Console.ReadLine();
while (name[0] == "")//判断用户输入的名称是否为空。若为空则让用户重新输入。
{
Console.WriteLine("玩家A的名称不能为空,请重新输入:");
name[0] = Console.ReadLine();
}
Console.WriteLine("请输入玩家B的姓名:");
name[1] = Console.ReadLine();
while (name[1] == "" || name[1] == name[0])
{
if (name[1] == "")
{
Console.WriteLine("玩家B的姓名不能为空,请重新输入:");
}
else
{
Console.WriteLine("玩家B不能与玩家A重名,请重新输入:");
}
name[1] = Console.ReadLine();
}
Console.Clear();
showUI();
Console.WriteLine("\n对战开始……");
Console.WriteLine("\n玩家{0}的姓名用A来表示", name[0]);
Console.WriteLine("\n玩家{0}的姓名用B来表示", name[1]);
Console.WriteLine("\n两个人重叠时用<>表示");
InitialMap();
DrawMap();
Console.WriteLine("开始游戏了……");
Console.ReadKey(true);
while (Playerpose[0] <=99 && Playerpose[1] <= 99)
{
if (isstop[0] ==false)
{
#region A掷骰子
Console.WriteLine("请{0}开始掷骰子", name[0]);
ConsoleKeyInfo re =Console.ReadKey(true);
temp = r.Next(1, 7);
if (re.Key ==ConsoleKey.Tab)
{
temp = ReadInt(1,100);
}
Console.WriteLine("{0}掷出的数是{1}", name[0], temp);
Console.WriteLine("请按任意键继续……");
Playerpose[0] += temp;
if (Playerpose[0] == Playerpose[1])
{
Playerpose[1] = 0;
}
else
{
switch (Map[Playerpose[0]])
{
case 0://没有效果
msg = "";
break;
case 1://幸运轮盘
Console.Clear();
Console.WriteLine("你走到了幸运轮盘请选择操作:");
Console.WriteLine("1,交换位置;2,轰炸对方");
int userSelect = ReadInt(1, 2);
if (userSelect == 1)
{
Playerpose[0] = Playerpose[0] + Playerpose[1];
Playerpose[1] = Playerpose[0] - Playerpose[1];
Playerpose[0] = Playerpose[0] - Playerpose[0];
msg = string.Format("{0}踩到了对方,{1}被踩到原点", name[0], name[1]);
}
else
{
//轰炸对方
Playerpose[1] = Playerpose[1] - 6;
msg = string.Format("{0}轰炸了对方,{1}退6格", name[0], name[1]);
ChackPos();
}
break;
case 2://踩到地雷
Playerpose[0] = Playerpose[0] - 6;
msg = string.Format("{0}踩到了地雷,退6格", name[0]);
ChackPos();
break;
case 3://暂停一次
isstop[0]= true;
msg = string.Format("{0}暂停一次", name[0]);
ChackPos();
break;
case 4://时空隧道
Playerpose[0] = Playerpose[0] + 10;
msg = string.Format("{0}进入了时空隧道,前进10格", name[0]);
ChackPos();
break;
}
}
Console.Clear();
DrawMap();
if (msg != "")
{
Console.WriteLine(msg);
}
Console.WriteLine("{0}掷出了{1},行动完成", name[0], temp);
Console.WriteLine("*********************{0},{1}位置如下:************************", name[0], name[1]);
Console.WriteLine("{0}的位置:{1}", name[0], Playerpose[0] + 1);
Console.WriteLine("{0}的位置:{1}", name[1], Playerpose[1] + 1);
if (Playerpose[0] >= 99)
{
break;
}
#endregion
}
else
{
isstop[0] = false;
}
if (isstop[1] ==false)
{
#region B掷骰子
Console.WriteLine("请{0}开始掷骰子", name[1]);
temp = r.Next(1, 7);
Console.WriteLine("{0}掷出的数是{1}",name[1], temp);
Console.WriteLine("请按任意键继续……");
Console.ReadKey(true);
Playerpose[1] += temp;
if (Playerpose[1] == Playerpose[0])
{
Playerpose[0] = 0;
}
else
{
switch (Map[Playerpose[1]])
{
case 0://没有效果
msg = "";
break;
case 1://幸运轮盘
Console.Clear();
Console.WriteLine("你走到了幸运轮盘请选择操作:");
Console.WriteLine("1,交换位置;2,轰炸对方");
int userSelect = ReadInt(1, 2);
if (userSelect == 1)
{
Playerpose[0] = Playerpose[0] + Playerpose[1];
Playerpose[1] = Playerpose[0] - Playerpose[1];
Playerpose[0] = Playerpose[0] - Playerpose[0];
msg = string.Format("{0}踩到了对方,{1}被踩到原点", name[1], name[0]);
}
else
{
//轰炸对方
Playerpose[0] = Playerpose[0] - 6;
msg = string.Format("{0}轰炸了对方,{1}退6格", name[1], name[0]);
ChackPos();
}
break;
case 2://踩到地雷
Playerpose[1] = Playerpose[1] - 6;
msg = string.Format("{0}踩到了地雷,退6格", name[1]);
ChackPos();
break;
case 3://暂停一次
isstop[1] = true;
msg = string.Format("{0}暂停一次", name[1]);
ChackPos();
break;
case 4://时空隧道
Playerpose[1] = Playerpose[1] + 10;
msg = string.Format("{0}进入了时空隧道,前进10格", name[1]);
ChackPos();
break;
}
}
Console.Clear();
DrawMap();
if (msg != "")
{
Console.WriteLine(msg);
}
Console.WriteLine("{0}掷出了{1},行动完成", name[1], temp);
Console.WriteLine("*********************{0},{1}位置如下:************************", name[0], name[1]);
Console.WriteLine("{0}的位置:{1}", name[0], Playerpose[0] + 1);
Console.WriteLine("{0}的位置:{1}", name[1], Playerpose[1] + 1);
#endregion
}
else
{
isstop[1] =false;
}
}
if (Playerpose[0] >= 99)
{
Console.WriteLine("{0}赢了!!!!", name[0]);
}
else
{
Console.WriteLine("{0}赢了!!!!", name[1]);
}
Console.ReadKey();
}
///<summary>
///用于绘制游戏的表头
///</summary>
static void showUI()
{
Console.ForegroundColor =ConsoleColor.Blue;
Console.WriteLine("*******************************************");
Console.WriteLine("* *");
Console.WriteLine("* 骑 士 飞 行 棋 *");
Console.WriteLine("* *");
Console.WriteLine("*******************************************");
//Console.ForegroundColor = ConsoleColor.White;
Console.ResetColor();
}
///<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[] timeTunel = { 20, 25, 45, 63, 72, 88, 90 };//时空隧道
for (int i = 0; i < luckyTurn.Length; i++)
{
int pos = luckyTurn[i];
Map[pos] = 1;
}
for (int i = 0; i < landMine.Length; i++)
{
int pos = landMine[i];
Map[pos] = 2;
}
for (int i = 0; i < pause.Length; i++)
{
int pos = pause[i];
Map[pos] = 3;
}
for (int i = 0; i < timeTunel.Length; i++)
{
int pos = timeTunel[i];
Map[pos] = 4;
//可以写成Map[timeTunel[i]]
}
}
///<summary>
///绘制界面
///</summary>
static void DrawMap()
{
Console.WriteLine("\n图例:幸运轮盘:◎ 地雷:☆ 暂停:▲ 时空隧道:卍\n");
//开始画第一行
for (int i = 0; i < 30; i++)
{
Console.Write(GetMapString(i));
}
Console.WriteLine();
//开始输出第二行
for (int i = 30; i < 35; 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 < 70; i++)
{
Console.WriteLine(GetMapString(i));
}
//绘制第五行
for (int i = 70; i < 100; i++)
{
Console.Write(GetMapString(i));
}
Console.WriteLine();
Console.ResetColor();
}
static int ReadInt()
{
int i = ReadInt(int.MinValue,int.MaxValue);
return i;
}
static int ReadInt(int min,int max)
{
while(true)
{
try
{
int number = Convert.ToInt32(Console.ReadLine());
if (number < min || number > max)
{
Console.WriteLine("只能输入{0}-{1}之间的数,请重新输入", min, max);
continue;
}
return number;
}
catch
{
Console.WriteLine("只能输入数字,请重新输入!");
}
}
}
------- Windows Phone 7手机开发、.Net培训、期待与您交流! ------ 详细请查看:http://net.itheima.com/