骑士飞行棋C#源代码

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

?using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 骑士飞行棋
{

class Program
{
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的姓名,names[1]存储玩家B的姓名。
static bool[] isStop = { false, false };//isStop[0]表示A是否上次走到了暂停,isStop[1]表示B是否上次走到了暂停。
static void Main(string[] args)
{

ShowUI();
//玩家A的姓名不能为空
Console.WriteLine("请输入玩家A的姓名");
names[0] = Console.ReadLine();
while (names[0] == "")
{
Console.WriteLine("玩家名不能为空,请重新输入!");
names[0] = Console.ReadLine();
}
Console.WriteLine("请输入玩家B的姓名");
names[1] = Console.ReadLine();
//B不可以为空并且不能与A的名字相同
// 方法一:
//while (names[1] == "")
//{
// Console.WriteLine("玩家名不能为空,请重新输入!");
// names[1] = Console.ReadLine();

//}
//while (names[1] == names[0])
//{
// Console.WriteLine("玩家B不能与玩家A同名,请重新输入!");
// names[1] = Console.ReadLine();
//}
// 方法二:
while (names[1] == "" || names[1] == names[0])
{
if (names[1] == "")
{
Console.WriteLine("玩家名不能为空,请重新输入!");
//names[1] = Console.ReadLine();
}

else
{

Console.WriteLine("玩家B不能与玩家A同名,请重新输入!");
//names[1] = Console.ReadLine();
}
names[1] = Console.ReadLine();
}
Console.Clear();//清屏方法
ShowUI();
Console.WriteLine("对战开始......");
Console.WriteLine("{0}的士兵用A表示", names[0]);
Console.WriteLine("{0}的士兵用B表示", names[1]);
Console.WriteLine("如果AB在同一位置,用<>来表示", names[1]);
//Console.WriteLine("图例:幸运轮盘:◎ 地雷:☆ 暂停:△ 时空隧道:§");
InitialMap();
DrawMap();
Console.WriteLine("游戏开始......");
//这个循环让玩家A与玩家B轮流掷骰子 当玩家A或玩家B的坐标>=99时,则结束循环
//循环条件就是
while (playerPos[0] < 99 && playerPos[1] < 99)

{
//产生一个m到n之间的随机数
//Random r=new Random();
//int i=r.Next(m,n+1);
if (isStop[0] == false)
{
Action(0);
}
else
{//说明isStop[0] == true
isStop[0] = false;
}
if(playerPos [0]>=99)
{
break;
}
if (isStop[1] == false)
{
Action(1);
}
else
{//说明isStop[1] == true
isStop[1] = false;
}
}
//判断胜负
Console.Clear();
ShowUI();
if (playerPos[0] > playerPos[1])
{
Console.WriteLine("恭喜{0}胜利了!!! 游戏结束!", names[0]);
}
else
{
Console.WriteLine("恭喜{0}胜利了!!! 游戏结束! ", names[1]);
}
Console.ReadKey();
}
//文档注释
///


/// 用于绘制飞行棋的名称
///

static void ShowUI()
{
Console.WriteLine("***************************************");
Console.WriteLine("* *");
Console.WriteLine("* 骑士飞行棋 *");
Console.WriteLine("* *");
Console.WriteLine("***************************************");


}
///
/// 关卡设置
///

static void InitialMap()
{
for (int i = 0; i < Map.Length; i++)
{
Map[i] = 0;


}
//用于存储关卡坐标
int[] luckyTurn = { 6, 23, 40, 55, 69, 83 };//幸运轮盘◎ 1
int[] landMine = { 5, 13, 17, 33, 38, 50, 64, 80, 94 };//地雷☆ 2
int[] pause = { 9, 27, 60, 93 };//暂停▲ 3
int[] timeTunnel = { 20, 25, 45, 63, 72, 88, 90 };//时空隧道§ 4

for (int i = 0; i < luckyTurn.Length; i++)
{
int pos = luckyTurn[i];
Map[pos] = 1;//Map前应加static

}
for (int i = 0; i < landMine.Length; i++)
{
Map[landMine[i]] = 2;//Map前应加static

}
for (int i = 0; i < pause.Length; i++)
{
int pos = pause[i];
Map[pos] = 3;//Map前应加static

}
for (int i = 0; i < timeTunnel.Length; i++)
{
int pos = timeTunnel[i];
Map[pos] = 4;//Map前应加static

}
}

///


/// 获得第pos坐标上应绘制的图案
///

static string GetMapString(int pos)
{
string result = "";
//判断A和B是否在当前要画的第i格上
if (playerPos[0] == pos && playerPos[1] == pos)
{
Console.ForegroundColor = ConsoleColor.Yellow;
result = "<>";
}
else if (playerPos[0] == pos)
{
Console.ForegroundColor = ConsoleColor.Yellow;
result = "A";
}
else if (playerPos[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.Red;
result = "◎";
break;
case 2:
Console.ForegroundColor = ConsoleColor.Green;
result = "☆";
break;
case 3:
Console.ForegroundColor = ConsoleColor.Blue;
result = "▲";
break;
case 4:
Console.ForegroundColor = ConsoleColor.DarkBlue;
result = "§";
break;
}
}
return result;
}
static void DrawMap()
{
Console.WriteLine("图例:幸运轮盘:◎ 地雷:☆ 暂停:△ 时空隧道:§");
//画花第一行
for (
int i = 0; i <= 29; i++)
{
string str = GetMapString(i);
Console.Write(str);
}
//有重复需注释
//for (int i=0; i <= 29;i++ )
//{
// //Console.Write("□");
// if (playerPos[0]==i &&playerPos [1]==i )
// {
// Console .Write("<>");
// }
// else if (playerPos[0]==i )
// {
// Console.Write("A");
// }
// else if (playerPos[1] == i)
// {
// Console.Write("B");
// }
// else
// { switch (Map[i])
// {
// case 0:
// Console.Write("□");
// break;
// case 1:
// Console.Write("

◎");
// break;
// case 2:
// Console.Write("☆");
// break;
// case 3:
// Console.Write("▲");
// break;
// case 4:
// Console.Write("§");
// break;
// }
// }
//}
Console.WriteLine();
//画第二行(未执行)
// for (int j=0;j<5;j++)
// {
// int i = 0;


// while(i<30){
// Console.Write(" ");
// i++;
// }
// if (playerPos[0] == 30 && playerPos[1] == 30)
// {
// Console.Write("<>");
// }
// else if (playerPos[0] == 30)
// {
// Console.Write("A");
// }
// else if (playerPos[1] == 30)
// {
// Console.Write("B");
// }
// else
// {
// switch (Map[30])
// {
// case 0:
// Console.Write("□");
// break;
// case 1:
// Console.Write("◎");
// break;
// case 2:
// Console.Write("☆");
// break;
// case 3:
// Console.Write("▲");
// break;
// case 4:
// Console.Write("§");
// break;
// }
// }
// Console.WriteLine("");

// }

//画第一列
for (int i = 30; i <= 34; i++)
{
//绘制29个双空格
for (int J = 0; J < 29; J++)
{
Console.Write(" ");
}
string str = GetMapString(i);
Console.WriteLine(str);

}

//画第二行
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.W

riteLine();
}
static void CheckPos()
{
for (int i = 0; i < 2; i++)
{
if (playerPos[i] > 99)
{
playerPos[0] = 99;
}
if (playerPos[i] < 0)
{
playerPos[0] = 0;

}
}

}
///


/// 只能输入两个整数
///

///
///
///
static int ReadInt(int min, int max)
{
while (true)
{
try
{
int number = Convert.ToInt32(Console .ReadLine ());
if(number max )
{
Console.WriteLine("只能输入{0}--{1}之间的数字,请重新输入!",min,max);
continue;
}
return number;
}
catch
{
Console.WriteLine("只能输入数字,请重新输入!");

}


}

}


///
/// 掷骰子方法
///

/// A掷骰子传0过来,B掷骰子传1过来
static void Action(int playerNumber)
{
//playerNumber中存的就是当前玩家 姓名 坐标 是否暂停 这三个数组的下标
//1减playerNumber就是对方的 姓名 坐标 是否暂停 这三个数组的下标
//当前0,对方1
//当前1,对方0


Random r = new Random();//r时产生随机数用的
string msg = "";//用于存储用户踩到某关卡
int stemp = 0;//用于存放产生的随机数
Console.WriteLine("{0}按任意键掷骰子", names[playerNumber]);
// Console.ReadKey(true);//按键值不会显示,当不能实现别人做出的效果时,
//查MSDN看看方法重载
ConsoleKeyInfo rec = Console.ReadKey(true);
if (rec.Key == ConsoleKey.Tab&&playerNumber==0)
{
stemp = 30;//如果按Tab键,则前进30步
}
else
{
stemp = r.Next(1, 7);//产生1--6之间的随机整数
}
Console.WriteLine("{0}掷出了:{1}", names[playerNumber], stemp);
Console.WriteLine("按任意键开始行动......");
Console.ReadKey(true);
playerPos[playerNumber] += stemp;//一旦坐标发生改变就要判断坐标是否大于99或者小于0
CheckPos();//检查是否越界
//查看A的位置

if (playerPos[0] == playerPos[1])
{
playerPos[1-playerNumber] = 0;
msg = string.Format("{0}踩到了{1},{1}退", names[playerNumber], names[1-playerNumber], names[1-playerNumber]);//可以用占位符了
}
else
{ //没踩到,要判断玩家A现在所在的位置是否有其他关卡
switch (Map[playerPos[playerNumber]])
{
case 0:
//普通,没有效果
msg = "";
break;
case 1:
//走到了幸运轮盘关卡
Console.Clear();
DrawMap();
Console.WriteLine("{0}走到了幸运轮盘关卡,请选择运气......", names[playerNumber]);
Console.WriteLine("1---交换位置 2---轰炸对方(使其倒退6步)");
int userSelect = ReadInt(1, 2);
if (userSelect == 1)
{//与对方交换位置
int temp = playerPos[0];
playerPos[0] = playerPos[1];
playerPos[1] = temp;
msg = string.Format("{0}选择了与对方交换位置", names[playerNumber]);
}
else
{//轰炸对方
playerPos[1-playerNumber] = playerPos[1-playerNumber] - 6;
CheckPos();
msg = string.Format("{0}选择了轰炸{1}!{1}退6步!", names[playerNumber], names[1-playerNumber]);
}
break;
case 2:
//踩到地雷
playerPos[playerNumber] = playerPos[playerNumber] - 6;
CheckPos();
msg = string.Format("{0}踩到地雷,退6步!", names[playerNumber]);
break;
case 3:
//暂停一次
isStop[playerNumber] = true;
msg = string.Format("{0}遇到红灯,下次暂停一次!", names[playerNumber]);
break;
case 4:
//时空隧道
playerPos[playerNumber] = playerPos[playerNumber] + 10;
CheckPos();
msg = string.Format("{0}进入时空隧道,进10步,爽啊!!!", names[playerNumber]);
break;
}

}
//Console .WriteLine ("按任意键开始行动");
//Console .ReadKey (true );
Console.Clear();
DrawMap();
Console.WriteLine("{0}掷出了{1},行动完成!", names[playerNumber], stemp);
if (msg != "")
{
Console.WriteLine(msg);
}

Console.WriteLine("***********玩家A和玩家B的位置如下***********");
Console.WriteLine("{0}的位置为:{1}", names[0], playerPos[0] + 1);
Console.WriteLine("{0}的位置为:{1}", names[1], playerPos[1] + 1);
}
}
}

相关文档
最新文档