using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 飞行棋
{
class Program
{
static int[] Map = new int[100];//在不赋值的情况下,默认值为0.
static int[] playerpost = { 0, 0 };//playerpost[0]存A的坐标,playerpost[1]村B的坐标
static void Main(string[] args)
{
Random r = new Random();//r用于产生随机数
int step = 0;//用于存放产生的随机数
string mag = ""; //用于用户踩到某关卡输出的话。
bool[] isStop = { false,false};//isStop[0]为A的标签,isStop[1]为B的标签。
showUI();
string[] name = new string[2];
Console.WriteLine("请输入一名玩家的名字");
name[0] = Console.ReadLine();
while (name[0] == "")
{
Console.WriteLine("不能为空,请重新输入玩家的名字");
name[0] = Console.ReadLine();
}
Console.WriteLine("请输入另一玩家的名字");
name[1] = Console.ReadLine();
while (name[1] == "" || name[1] == name[0])
{
if (name[1] == "")
{
Console.WriteLine("不能为空,请重新输入玩家的名字");
}
if (name[1] == name[0])
{
Console.WriteLine("两位玩家的名字不能相同,请重新输入");
}
name[1] = Console.ReadLine();
}
Console.Clear(); //在此屏幕清空。
showUI();
Console.WriteLine("对战开始......");
Console.WriteLine("玩家{0}的士兵用A表示",name[0]);
Console.WriteLine("玩家{0}的士兵用B表示",name[1]);
Console.WriteLine("当AB走到同一位置时,用<>表示");
initialmap();//初始化地图
drawMap(); //绘制地图
Console.WriteLine("开始游戏......");
//让玩家轮流掷色子,当一方坐标大于等于99时,结束循环。
while (playerpost[0] < 99 && playerpost[1] < 99)
{
if (isStop[0] == false)
{
#region A 掷色子
Console.WriteLine("{0}按任意键开始掷色子...", name[0]);
ConsoleKeyInfo sec = Console.ReadKey(true);
if (sec.Key == ConsoleKey.F7)
{
step = 20;
}
else if (sec.Key == ConsoleKey.Insert)
{
step =99;
}
else
{
step = r.Next(1, 7);
}
Console.WriteLine("{0}掷出了:{1}", name[0], step);
Console.WriteLine("按任意键开始行动...");
Console.ReadKey(true);
playerpost[0] = playerpost[0] + step;
checkpos();
if (playerpost[0] == playerpost[1])
{
playerpost[1] = 0;
mag = string.Format("{0}踩到了{1},{1}退回起点", name[0], name[1]);
// 在赋值字符串时可以使用占位符的方法
}
else
{
switch (Map[playerpost[0]])
{
case 0://普通
mag = "";
break;
case 1://幸运轮盘
Console.Clear();
drawMap();
Console.WriteLine("{0}到达幸运轮盘,请选择下面的运气",name[0]);
Console.WriteLine("1---与对方互换位置 2---轰炸对方");
int userselect = ReadInt(1, 2);
if (userselect == 1)
{
int temp = playerpost[0];
playerpost[0] = playerpost[1];
playerpost[1] = temp;
mag = string.Format("在幸运轮盘中,{0}选择了与{1}交换位置。", name[0], name[1]);
}
else
{
playerpost[1] = playerpost[1] - 6;
checkpos();
mag = string.Format("在幸运轮盘中,{0}选择了轰炸{1},{1}退6步。", name[0], name[1]);
}
break;
case 2://地雷
playerpost[0] = playerpost[0] - 6;
checkpos();
mag = string.Format("{0}踩中地雷,退6步", name[0]);
break;
case 3://暂停
mag = string.Format("{0}被暂停一次", name[0]);
isStop[0] = true;
break;
case 4://时空隧道
playerpost[0] = playerpost[0] + 10;
checkpos();
mag = string.Format("{0}遇到时空隧道,前进10步", name[0]);
break;
}
}
Console.Clear();
drawMap();
if (mag != "")
{
Console.WriteLine(mag);
}
Console.WriteLine("{0}掷出了{1},行动完成!", name[0], step);
Console.WriteLine("****************A和B的位置**************");
Console.WriteLine("{0}的位置是{1}", name[0], playerpost[0] + 1);
Console.WriteLine("{0}的位置是{1}", name[1], playerpost[1] + 1);
Console.WriteLine("****************************************");
#endregion
}
else
{
isStop[0] = false;
}
if (playerpost[0] >= 99)
{
break;
}
if (isStop[1] == false)
{
#region B 掷色子
Console.WriteLine("{0}按任意键开始掷色子...", name[1]);
ConsoleKeyInfo rec = Console.ReadKey(true);
if (rec.Key == ConsoleKey.F8)
{
step = 20;
}
else if (rec.Key == ConsoleKey.Insert)
{
step = 99;
}
else
{
step = r.Next(1, 7);
}
Console.WriteLine("{0}掷出了:{1}", name[1], step);
Console.WriteLine("按任意键开始行动...");
Console.ReadKey(true);
playerpost[1] = playerpost[1] + step;
checkpos();
if (playerpost[1] == playerpost[0])
{
playerpost[0] = 0;
mag = string.Format("{0}踩到了{1},{1}退回起点", name[1], name[0]);
// 在赋值字符串时可以使用占位符的方法
}
else
{
switch (Map[playerpost[1]])
{
case 0://普通
mag = "";
break;
case 1://幸运轮盘
Console.Clear();
drawMap();
Console.WriteLine("{0}到达幸运轮盘,请选择下面的运气",name[0]);
Console.WriteLine("1---与对方互换位置 2---轰炸对方");
int userselect = ReadInt(1, 2);
if (userselect == 1)
{
int temp = playerpost[0];
playerpost[0] = playerpost[1];
playerpost[1] = temp;
mag = string.Format("在幸运轮盘中,{0}选择了与{1}交换位置。", name[1], name[0]);
}
else
{
playerpost[0] = playerpost[0] - 6;
checkpos();
mag = string.Format("在幸运轮盘中,{0}选择了轰炸{1},{1}退6步。", name[1], name[0]);
}
break;
case 2://地雷
playerpost[1] = playerpost[1] - 6;
checkpos();
mag = string.Format("{0}踩中地雷,退6步", name[1]);
break;
case 3://暂停
mag = string.Format("{0}被暂停一次", name[1]);
isStop[1] = true;
break;
case 4://时空隧道
playerpost[1] = playerpost[1] + 10;
checkpos();
mag = string.Format("{0}遇到时空隧道,前进10步", name[1]);
break;
}
}
Console.Clear();
drawMap();
if (mag != "")
{
Console.WriteLine(mag);
}
Console.WriteLine("{0}掷出了{1},行动完成!", name[1], step);
Console.WriteLine("****************A和B的位置**************");
Console.WriteLine("{0}的位置是{1}", name[0], playerpost[0] + 1);
Console.WriteLine("{0}的位置是{1}", name[1], playerpost[1] + 1);
Console.WriteLine("****************************************");
#endregion
}
else
{
isStop[1] = false;
}
}
Console.Clear();
showUI();
if (playerpost[0] > playerpost[1])
{
Console.WriteLine("{0}在本次对战中获胜!", name[0]);
}
else
{
Console.WriteLine("{0}在本次对战中获胜!", name[1]);
}
Console.WriteLine("按任意键游戏结束!");
Console.ReadKey();
}
/// <summary> /// 判断玩家坐标的位置,防止超出棋盘。 /// </summary> static void checkpos() { for (int i = 0; i <= 1; i++) { if (playerpost[i] > 99) { playerpost[i] = 99; } if (playerpost[i] < 0) { playerpost[i] = 0; } } }
/// <summary>
/// 用于绘制飞行棋的名称
/// </summary>
public static void showUI()
{
Console.WriteLine("*****************************************");
Console.WriteLine("* *");
Console.WriteLine("* 骑 士 飞 行 棋 *");
Console.WriteLine("* *");
Console.WriteLine("****************************************");
}
/// <summary>
/// 对地图中的关卡进行初始化
/// </summary>
static void initialmap()
{
//存储地雷下标
int[] luckturn = { 6, 23, 40, 55, 69, 83 }; //幸运轮盘
int[] landmine = { 5, 13, 17, 33, 38, 50, 64, 80, 94 }; //地雷
int[] pause = { 9, 27, 60, 93 }; //暂停
int[] timetunle = { 20, 25, 45, 63, 72, 88, 90 }; //时空隧道
for (int i = 0; i < luckturn.Length; i++)
{
int pos = luckturn[i];
Map[pos] = 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 < timetunle.Length; i++)
{
Map[timetunle[i]] = 4;
}
}
/// <summary>
/// 获得第Pos坐标上应绘制的图案
/// </summary>
/// <param name="pos">要绘制的坐标</param>
/// <returns></returns>
static string getmap(int pos)
{
string result = "";
if (playerpost[0] == pos && playerpost[1] == pos)
{
Console.ForegroundColor = ConsoleColor.Yellow;
result="<>";
}
else if (playerpost[0] == pos)
{
Console.ForegroundColor = ConsoleColor.Yellow;
result = "A";
}
else if (playerpost[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.DarkMagenta;
result = "◎";
break;
case 2: Console.ForegroundColor = ConsoleColor.DarkBlue;
result ="★";
break;
case 3: Console.ForegroundColor = ConsoleColor.DarkRed;
result = "▲";
break;
case 4: Console.ForegroundColor = ConsoleColor.Cyan;
result = "※";
break;
}
}
return result;
}
/// <summary>
/// 画地图
/// </summary>
static void drawMap()
{
Console.WriteLine("图例:幸运轮盘:◎ ,地雷:★ ,暂停:▲ ,时空隧道:※");
//绘制第一行
for (int i = 0; i < 30; i++)
{
Console.Write( getmap(i));
}
Console.WriteLine();
//画第二条
for (int i = 30; i < 35; i++)
{
for (int j = 0; j < 29; j++)
{
Console.Write(" ");
}
Console.Write( getmap(i));
Console.WriteLine();
}
//画第三条
for (int i = 64; i>34; i--)
{
Console.Write( getmap(i));
}
Console.WriteLine();
//画第四条
for (int i = 65; i < 70; i++)
{
Console.WriteLine(getmap(i));
}
//画第五条
for (int i = 70; i <100; i++)
{
Console.Write(getmap(i));
}
Console.WriteLine();
Console.ResetColor();
}
/// <summary>
/// 只允许用户输入从最小值到最大值的方法 ***
/// </summary>
/// <returns></returns>
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("只能输入数字,请重新输入");
}
}
}
}
}
.csharpcode, .csharpcode pre { font-size: small; color: rgba(0, 0, 0, 1); font-family: consolas, "Courier New", courier, monospace; background-color: rgba(255, 255, 255, 1) }
.csharpcode pre { margin: 0 }
.csharpcode .rem { color: rgba(0, 128, 0, 1) }
.csharpcode .kwrd { color: rgba(0, 0, 255, 1) }
.csharpcode .str { color: rgba(0, 96, 128, 1) }
.csharpcode .op { color: rgba(0, 0, 192, 1) }
.csharpcode .preproc { color: rgba(204, 102, 51, 1) }
.csharpcode .asp { background-color: rgba(255, 255, 0, 1) }
.csharpcode .html { color: rgba(128, 0, 0, 1) }
.csharpcode .attr { color: rgba(255, 0, 0, 1) }
.csharpcode .alt { background-color: rgba(244, 244, 244, 1); width: 100%; margin: 0 }
.csharpcode .lnum { color: rgba(96, 96, 96, 1) }
java 实现飞行棋 飞行棋游戏代码
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章