实现效果:
internal class Program
{
static void Main(string[] args)
{
Top();
while (f)
{
if (Play(0) == 1)
{
break;
}
if (Play(1) == 1)
{
break;
}
}
}
#region 初始化地图坐标数组
public static void InitailMap()
{
int[] luckyturn = { 6, 23, 40, 55, 69, 83 };//幸运轮盘,这个数组中元素是地图元素的下标
for (int i = 0; i < luckyturn.Length; i++)
{
map[luckyturn[i]] = 1;
}
int[] landMine = { 5, 13, 17, 33, 38, 50, 64, 80, 94 };//地雷
for (int i = 0; i < landMine.Length; i++)
{
map[landMine[i]] = 2;
}
int[] pause = { 9, 27, 60, 93 };//暂停
for (int i = 0; i < pause.Length; i++)
{
map[pause[i]] = 3;
}
int[] timeTunnel = { 20, 25, 45, 63, 72, 88, 90 };//时空跳跃
for (int i = 0; i < timeTunnel.Length; i++)
{
map[timeTunnel[i]] = 4;
}
}
#endregion
#region 总地图
public static void Maps()
{
Console.WriteLine("图例:幸运轮盘:◎ 地雷:★ 暂停:▲ 时空隧道:卐 ");
#region 第一横行0-29
for (int i = 0; i < 30; i++)
{
Console.Write(StrReturn(i));
}
Console.WriteLine();//换行
#endregion
#region 第一竖列30-34
for (int i = 30; i < 35; i++)
{
//画空格
for (int j = 0; j < 29; j++)
{
Console.Write(" ");
}
Console.WriteLine(StrReturn(i));
}
#endregion
#region 第二横行35-64
for (int i = 64; i >= 35; i--)
{
Console.Write(StrReturn(i));
}
Console.WriteLine();//换行
#endregion
#region 第二竖列65-69
for (int i = 65; i < 70; i++)
{
Console.WriteLine(StrReturn(i));
}
#endregion
#region 第三横行70-99
for (int i = 70; i < 100; i++)
{
Console.Write(StrReturn(i));
}
#endregion
Console.WriteLine();
}
#endregion
public static bool f = true;
public static string[] name=new string[2];
public static int[] name_adress=new int[2];
public static string[] str = new string[100];
public static int[] map = new int[100];
public static string[] content = { "◎", "★", "▲", "卐", "□", "□", "□" };
public static int[] content_count = { 1, 2, 3, 4, 0, 0, 0 };
public static void Top()
{
#region 头部
Console.ForegroundColor = ConsoleColor.Cyan;
//给文字上色,前景色,ConsoleColor是一个枚举
Console.WriteLine("**************************");
Console.ForegroundColor = ConsoleColor.Blue;
Console.WriteLine("**************************");
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("******飞行棋游戏1.0 ******");
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("**************************");
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine("**************************");
#endregion
#region 姓名
name = new string[2];
name_adress = new int[2];
Console.WriteLine("请输入玩家A的姓名:");
name0_goto:
name[0] = Console.ReadLine();
if (name[0] == "" || name[0] == null)
{
Console.WriteLine("玩家A姓名不能为空,请重新输入");
goto name0_goto;
}
Console.WriteLine("请输入玩家B的姓名:");
name1_goto:
name[1] = Console.ReadLine();
if (name[1] == null || name[1] == "" || name[1] == name[0])
{
Console.WriteLine("玩家B姓名不能为空或与玩家A姓名相同,请重新输入");
goto name1_goto;
}
#endregion
#region 地图
InitailMap();
Console.WriteLine("图例:幸运轮盘:◎ 地雷:★ 暂停:▲ 时空隧道:卐 普通:□");
Maps();
#endregion
#region 显示A和B的棋子对应的玩家姓名
//Console.WriteLine();
Console.WriteLine("\n玩家{0}的士兵用A表示", name[0]);
Console.WriteLine("玩家{0}的士兵用B表示", name[1]);
#endregion
}
#region 玩游戏
public static int Play(int name_adress_p)
{
Random r = new Random();
int rNumber = r.Next(1, 7);//随机数
//n=
Console.WriteLine("玩家{0}按任意键开始掷骰子", name[name_adress_p]);
Console.ReadKey();
Console.WriteLine("玩家{0}掷出了{1}", name[name_adress_p], rNumber);
name_adress[name_adress_p] += rNumber;
Console.ReadKey();
Console.WriteLine("玩家{0}按任意键开始行动", name[name_adress_p]);
Console.ReadKey();
Console.WriteLine("玩家{0}行动完了", name[name_adress_p]);
Console.ReadKey();
if (name_adress[name_adress_p]>=99)
{
Console.WriteLine("游戏结束:玩家{0}胜利", name[name_adress_p]);
//f = false;
return 1;
}
if (name_adress[name_adress_p] == name_adress[1 - name_adress_p])//玩家a踩到玩家b,b退6格
{
Console.WriteLine("玩家{0}踩到了玩家{1},玩家{2}倒退6格",
name[name_adress_p], name[1 - name_adress_p], name[1 - name_adress_p]);
name_adress[1 - name_adress_p] -= 6;
Console.ReadKey();
//PanDuan(name_adress_p);
}
else
{
//int a = content_count[Array.IndexOf(content, str[name_adress[name_adress_p]])];//
switch (map[name_adress[name_adress_p]])//01234
{
case 0://踩到空格安全
Console.WriteLine("玩家{0}踩到了方块,安全", name[name_adress_p]);
Console.ReadKey(true);
break;
case 1://踩到幸运,1--交换位置 2--轰炸对手
Console.WriteLine("玩家{0}踩到了幸运轮盘,请选择 1--交换位置 2--轰炸对手", name[name_adress_p]);
string s = Console.ReadLine();
while (true)
{
if (s == "1")
{
Console.WriteLine("玩家{0}选择了交换位置", name[name_adress_p]);
int temp = name_adress[1 - name_adress_p];
name_adress[name_adress_p] = name_adress[1 - name_adress_p];
name_adress[1 - name_adress_p] = temp;
Console.ReadKey(true);
Console.WriteLine("交换完成");
Console.ReadKey(true);
break;
}
else if (s == "2")
{
Console.WriteLine("玩家{0}选择了轰炸对手,玩家{1}倒退6格", name[name_adress_p], name[1 - name_adress_p]);
name_adress[1 - name_adress_p] -= 6;
Console.ReadKey(true);
//PanDuan(name_adress_p);
break;
}
else
{
Console.WriteLine("只能输入1--交换位置 2--轰炸对手,请重新输入");
s = Console.ReadLine();
break;
}
}
break;
case 2://踩到地雷,后退6格
Console.WriteLine("玩家{0}踩到了地雷,倒退6格", name[name_adress_p]);
name_adress[name_adress_p] -= 6;
Console.ReadKey(true);
break;
case 3://踩到暂停,停一回合(这里的暂停我们稍后来写。)
Console.WriteLine("玩家{0}踩到了暂停,暂停一回合", name[name_adress_p]);
Console.ReadKey(true);
break;
case 4://踩到时空,前进10格
Console.WriteLine("玩家{0}踩到了时空穿梭,前进10格", name[name_adress_p]);
name_adress[name_adress_p] += 10;
Console.ReadKey(true);
break;
}
}
Console.Clear();
Maps();
return 0;
}
#endregion
#region 返回对应坐标要显示的内容
/// <summary>
///
/// </summary>
/// <param name="i"></param>
/// <returns>坐标i所在地方显示的字符串</returns>
public static string StrReturn(int i)
{
string str1 = "";
//如果玩家a和b坐标相同,并且都在地图上,画一个<>
if ((name_adress[0] == name_adress[1]) && name_adress[1] == i)
{
Console.ForegroundColor = ConsoleColor.White;
str1 = "<>";
}
else if (name_adress[0] == i)
{
Console.ForegroundColor = ConsoleColor.White;
//shift+空格全角
str1 = "A";
}
else if (name_adress[1] == i)
{
Console.ForegroundColor = ConsoleColor.White;
str1 = "B";
}
//public static int[] content_count = { 1, 2, 3, 4, 0, 0, 0 };
else
{
switch (map[i])
{
case 0:
Console.ForegroundColor = ConsoleColor.White;
str1 = "□";//普通
break;
case 1:
Console.ForegroundColor = ConsoleColor.Red;
str1 = "◎";//幸运
break;
case 2:
Console.ForegroundColor = ConsoleColor.Green;
str1 = "★";//地雷
break;
case 3:
Console.ForegroundColor = ConsoleColor.Yellow;
str1 = "▲";//暂停
break;
case 4:
Console.ForegroundColor = ConsoleColor.Blue;
str1 = "卐";//时空
break;
}
}
return str1;
}
#endregion
}
下面这个是随机地图的写法:
实现效果:
internal class Program
{
static void Main(string[] args)
{
Top();
while (f)
{
if (Flags[0] == false)
{
if (Play(0) == 1)
{
break;
}
}
else
{
Flags[0] = false;
}
if (Flags[1] == false)
{
if (Play(1) == 1)
{
break;
}
}
else
{
Flags[1] = false;
}
}
}
public static bool f = true;
public static string[] name = new string[2];
public static int[] name_adress = new int[2];
public static string[] str = new string[100];
public static int[] map = new int[100];
public static int[] map_2 = new int[100];
public static string[] content = { "□", "□", "□","◎", "★", "▲", "卐" };
public static int[] content_count = { 0, 0, 0,1, 2, 3, 4 };
public static bool[] Flags=new bool[2];
public static void Top()
{
#region 头部
Console.ForegroundColor = ConsoleColor.Cyan;
//给文字上色,前景色,ConsoleColor是一个枚举
Console.WriteLine("**************************");
Console.ForegroundColor = ConsoleColor.Blue;
Console.WriteLine("**************************");
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("******飞行棋游戏1.0 ******");
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("**************************");
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine("**************************");
#endregion
#region 姓名
name = new string[2];
name_adress = new int[2];
Console.WriteLine("请输入玩家A的姓名:");
name0_goto:
name[0] = Console.ReadLine();
if (name[0] == "" || name[0] == null)
{
Console.WriteLine("玩家A姓名不能为空,请重新输入");
goto name0_goto;
}
Console.WriteLine("请输入玩家B的姓名:");
name1_goto:
name[1] = Console.ReadLine();
if (name[1] == null || name[1] == "" || name[1] == name[0])
{
Console.WriteLine("玩家B姓名不能为空或与玩家A姓名相同,请重新输入");
goto name1_goto;
}
#endregion
#region 地图
//InitailMap();
Console.WriteLine("图例:幸运轮盘:◎ 地雷:★ 暂停:▲ 时空隧道:卐 普通:□");
//Maps();
DiTu();
#endregion
#region 显示A和B的棋子对应的玩家姓名
//Console.WriteLine();
Console.WriteLine("\n玩家{0}的士兵用A表示", name[0]);
Console.WriteLine("玩家{0}的士兵用B表示", name[1]);
#endregion
}
public static void DiTu()
{
Random random = new Random();
for (int i = 0; i < 100; i++)
{
map[i] = i;
int r = random.Next(content.Length);
map_2[i] = content_count[r];
if (i == 99)
{
Console.ForegroundColor = ConsoleColor.White;
Console.Write("□");
str[i] = "□";
map_2[i] = 0;
}
else if (i >= 70)
{
content[r] = Str_2(i, map_2[i]);
Console.Write(content[r]);
str[i] = content[r];
}
else if (i >= 65)
{
if (i == 65)
{
Console.WriteLine();
}
content[r] = Str_2(i, map_2[i]);
Console.Write(content[r] + "\n");
str[i] = content[r];
}
else if (i >= 35)
{
if (i == 35)
{
Console.WriteLine();
}
content[r] = Str_2(i, map_2[i]);
Console.Write(content[r]);
str[i] = content[r];
}
else if (i >= 30)
{
content[r] = Str_2(i, map_2[i]);
Console.Write("\n\t\t\t\t\t\t\t " + content[r]);
str[i] = content[r];
}
else
{
content[r] = Str_2(i, map_2[i]);
Console.Write(content[r]);
str[i] = content[r];
//Console.WriteLine(i);
//Console.WriteLine(a);
}
}
Console.WriteLine();
}
public static void DiTus()
{
Console.WriteLine("图例:幸运轮盘:◎ 地雷:★ 暂停:▲ 时空隧道:卐 ");
for (int i = 0; i < 100; i++)
{
if (i >= 70)
{
//content[r] = Str_2(i, a);
Console.Write(Str_2(i, map_2[i]));
//str[i] = content[r];
}
else if (i >= 65)
{
if (i == 65)
{
Console.WriteLine();
}
//content[r] = Str_2(i, a);
Console.Write(Str_2(i, map_2[i]) + "\n");
//str[i] = content[r];
}
else if (i >= 35)
{
if (i == 35)
{
Console.WriteLine();
}
//content[r] = Str_2(i, a);
Console.Write(Str_2(i, map_2[i]));
//str[i] = content[r];
}
else if (i >= 30)
{
//content[r] = Str_2(i, a);
Console.Write("\n\t\t\t\t\t\t\t " + Str_2(i, map_2[i]));
//str[i] = content[r];
}
else
{
//content[r] = Str_2(i, a);
Console.Write(Str_2(i, map_2[i]));
//str[i] = content[r];
//Console.WriteLine(i);
//Console.WriteLine(a);
}
}
Console.WriteLine();
}
public static string Str_2(int i, int a)
{
string str1 = "";
switch (a)
//switch (content_count[Array.IndexOf(content,a)])
{
case 0:
Console.ForegroundColor = ConsoleColor.White;
str1 = "□";//普通
break;
case 1:
Console.ForegroundColor = ConsoleColor.Red;
str1 = "◎";//幸运
break;
case 2:
Console.ForegroundColor = ConsoleColor.Green;
str1 = "★";//地雷
break;
case 3:
Console.ForegroundColor = ConsoleColor.Yellow;
str1 = "▲";//暂停
break;
case 4:
Console.ForegroundColor = ConsoleColor.Blue;
str1 = "卐";//时空
break;
}
//如果玩家a和b坐标相同,并且都在地图上,画一个<>
if ((name_adress[0] == name_adress[1]) && name_adress[1] == i)
{
Console.ForegroundColor = ConsoleColor.White;
str1 = "<>";
}
else if (name_adress[0] == i)
{
Console.ForegroundColor = ConsoleColor.White;
//shift+空格全角
str1 = "A";
}
else if (name_adress[1] == i)
{
Console.ForegroundColor = ConsoleColor.White;
str1 = "B";
}
return str1;
}
#region 玩游戏
public static int Play(int name_adress_p)
{
Random r = new Random();
int rNumber = r.Next(1, 7);//随机数
//n=
Console.WriteLine("玩家{0}按任意键开始掷骰子", name[name_adress_p]);
Console.ReadKey();
Console.WriteLine("玩家{0}掷出了{1}", name[name_adress_p], rNumber);
name_adress[name_adress_p] += rNumber;
Console.ReadKey();
Console.WriteLine("玩家{0}按任意键开始行动", name[name_adress_p]);
Console.ReadKey();
Console.WriteLine("玩家{0}行动完了", name[name_adress_p]);
Console.ReadKey();
if (name_adress[name_adress_p] >= 99)
{
Console.WriteLine("游戏结束:玩家{0}胜利", name[name_adress_p]);
//f = false;
return 1;
}
if (name_adress[name_adress_p] == name_adress[1 - name_adress_p])//玩家a踩到玩家b,b退6格
{
Console.WriteLine("玩家{0}踩到了玩家{1},玩家{2}倒退6格",
name[name_adress_p], name[1 - name_adress_p], name[1 - name_adress_p]);
name_adress[1 - name_adress_p] -= 6;
Console.ReadKey();
//PanDuan(name_adress_p);
}
else
{
//Console.WriteLine("开始");
//int a = content_count[Array.IndexOf(content, str[name_adress[name_adress_p]])];//
switch (map_2[name_adress[name_adress_p]])//01234
{
case 0://踩到空格安全
Console.WriteLine("玩家{0}踩到了方块,安全", name[name_adress_p]);
Console.ReadKey(true);
break;
case 1://踩到幸运,1--交换位置 2--轰炸对手
Console.WriteLine("玩家{0}踩到了幸运轮盘,请选择 1--交换位置 2--轰炸对手", name[name_adress_p]);
string s = Console.ReadLine();
while (true)
{
if (s == "1")
{
Console.WriteLine("玩家{0}选择了交换位置", name[name_adress_p]);
int temp = name_adress[name_adress_p];
name_adress[name_adress_p] = name_adress[1-name_adress_p];
name_adress[1-name_adress_p] = temp;
Console.ReadKey(true);
Console.WriteLine("交换完成");
Console.ReadKey(true);
break;
}
else if (s == "2")
{
Console.WriteLine("玩家{0}选择了轰炸对手,玩家{1}倒退6格", name[name_adress_p], name[1 - name_adress_p]);
name_adress[1 - name_adress_p] -= 6;
Console.ReadKey(true);
//PanDuan(name_adress_p);
break;
}
else
{
Console.WriteLine("只能输入1--交换位置 2--轰炸对手,请重新输入");
s = Console.ReadLine();
//break;
}
}
break;
case 2://踩到地雷,后退6格
Console.WriteLine("玩家{0}踩到了地雷,倒退6格", name[name_adress_p]);
name_adress[name_adress_p] -= 6;
Console.ReadKey(true);
break;
case 3://踩到暂停,停一回合
Console.WriteLine("玩家{0}踩到了暂停,暂停一回合", name[name_adress_p]);
Flags[name_adress_p] = true;
Console.ReadKey(true);
break;
case 4://踩到时空,前进10格
Console.WriteLine("玩家{0}踩到了时空穿梭,前进10格", name[name_adress_p]);
name_adress[name_adress_p] += 10;
Console.ReadKey(true);
break;
default:
Console.WriteLine("错了");
break;
}
}
if (name_adress[name_adress_p] < 0)
{
Console.WriteLine("玩家{0}地点小于0,回到0", name[name_adress_p]);
name_adress[name_adress_p] = 0;
}
if (name_adress[name_adress_p] >= 99)
{
Console.WriteLine("游戏结束:玩家{0}胜利", name[name_adress_p]);
//f = false;
return 1;
}
Console.Clear();
DiTus();
//Console.WriteLine($"a:{name_adress[name_adress_p]},b{name_adress[1-name_adress_p]}");
return 0;
}
#endregion
#region 返回对应坐标要显示的内容
/// <summary>
///
/// </summary>
/// <param name="i"></param>
/// <returns>坐标i所在地方显示的字符串</returns>
public static string StrReturn(int i)
{
string str1 = "";
//如果玩家a和b坐标相同,并且都在地图上,画一个<>
if ((name_adress[0] == name_adress[1]) && name_adress[1] == i)
{
Console.ForegroundColor = ConsoleColor.White;
str1 = "<>";
}
else if (name_adress[0] == i)
{
Console.ForegroundColor = ConsoleColor.White;
//shift+空格全角
str1 = "A";
}
else if (name_adress[1] == i)
{
Console.ForegroundColor = ConsoleColor.White;
str1 = "B";
}
//public static int[] content_count = { 1, 2, 3, 4, 0, 0, 0 };
else
{
switch (map_2[i])
{
case 0:
Console.ForegroundColor = ConsoleColor.White;
str1 = "□";//普通
break;
case 1:
Console.ForegroundColor = ConsoleColor.Red;
str1 = "◎";//幸运
break;
case 2:
Console.ForegroundColor = ConsoleColor.Green;
str1 = "★";//地雷
break;
case 3:
Console.ForegroundColor = ConsoleColor.Yellow;
str1 = "▲";//暂停
break;
case 4:
Console.ForegroundColor = ConsoleColor.Blue;
str1 = "卐";//时空
break;
}
}
return str1;
}
#endregion
}