飞行棋游戏分为
1.游戏头
2.地图
3.玩家名称
4.行动
这四个
我们先来看游戏头
程序如下
#region 游戏头
public static void Youxitou()
{
Console.ForegroundColor = ConsoleColor.Blue;
Console.WriteLine("************************");
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("************************");
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine("*******飞行棋游戏*******");
Console.ForegroundColor = ConsoleColor.Cyan;
Console.WriteLine("************************");
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("************************");
}
#endregion
Console.ForegroundColor = ConsoleColor.Blue;
这个是改变文字颜色的语句
其作用效果如下:
可以根据自己的喜好设计颜色, Console.ForegroundColor = ConsoleColor.颜色(颜色为枚举类型从里面选择)
初始化地图
这个部分就是确定哪个位置放什么机关
不过在此之前,我们应该先建立一个int类型数组来存放地图数据(放在公共区域,即类内主函数外的区域)
static int[] map = new int[100];
建立四个存放不同关卡的int数组
再将其作为map数组的下标,幸运轮盘就存1,地雷存2,暂停存3,时空隧道存4
至此就可将地图信息存到map数组里面
#region 初始化地图
public static void Chushihuaditu()
{
int[] luckypan = { 6, 23, 40, 55, 69, 83 };//幸运轮盘
for (int i = 0; i < luckypan.Length; i++)
{
int index = luckypan[i];
map[index] = 1;
}
int[] dilei = { 5, 13, 17, 33, 38, 50, 64, 80, 94 };//地雷
for (int i = 0; i < dilei.Length; i++)
{
int index = dilei[i];
map[index] = 2;
}
int[] zanting = { 9, 27, 60, 93 };//暂停
for (int i = 0; i < zanting.Length; i++)
{
int index = zanting[i];
map[index] = 3;
}
int[] sjsd = { 20, 25, 45, 63, 72, 88, 90 };//时间隧道
for (int i = 0; i < sjsd.Length; i++)
{
int index = sjsd[i];
map[index] = 4;
}
}
#endregion
画地图
在初始化地图中我们已经实现了将地图信息存到map数组里,
我们创建两个数组分别存玩家的位置与玩家的名字
//声明一个静态数组存放玩家a,b的位置
static int[] player = new int[2];
//存名字
static string[] gamer = new string[2];
我们先建立一个函数实现画符号功能
如果玩家a与玩家b位置相同则将str=<>
之后则请看下列程序
#region 画符号
public static string huafuhao(int i)
{
string str = "";
#region 画图
if (player[0] == player[1] && player[0] == i)
{
str = "<>";
}
else if (player[0] == i)
{
str = "A";
}
else if (player[1] == i)
{
str = "B";
}
else
{
switch (map[i])
{
case 0:
Console.ForegroundColor = ConsoleColor.White;
str = "□";
break;
case 1:
Console.ForegroundColor = ConsoleColor.Blue;
str = "◎";
break;
case 2:
Console.ForegroundColor = ConsoleColor.Cyan;
str = "★";
break;
case 3:
Console.ForegroundColor = ConsoleColor.DarkRed;
str = "▲";
break;
case 4:
Console.ForegroundColor = ConsoleColor.DarkYellow;
str = "卍";
break;
}//switch
}//else
return str;
#endregion
}
#endregion
方法创建完成后,我们再来看看画地图这一部分
我们先把地图上面的资料信息写出来作为地图的顶端
Console.WriteLine("玩家a的名字是{0}", gamer[0]);
Console.WriteLine("玩家b的名字是{0}", gamer[1]);
Console.WriteLine("幸运轮盘:◎ 地雷:★ 暂停:▲ 时间隧道:卍");
然后我们来看第一横行怎么写
for (int i = 0; i < 30; i++)
{
Console.Write(huafuhao(i));
}
Console.WriteLine();
只需要这样在循环中调用画符号方法就能写出第一行从0到29的格子
第一竖行
for (int i = 30; i < 35; i++)
{
for (int j = 0; j <= 28; j++)
{
Console.Write(" ");
}
Console.WriteLine(Program.huafuhao(i));
}
我们得先写出空格来,再在每一行末画出符号
之后第二横行第二竖行都是如此;
#region 画地图
public static void DrawMap()
{
Console.WriteLine("玩家a的名字是{0}", gamer[0]);
Console.WriteLine("玩家b的名字是{0}", gamer[1]);
Console.WriteLine("幸运轮盘:◎ 地雷:★ 暂停:▲ 时间隧道:卍");
#region 第一横行
//如果a,b位置一样,就表示为<>
for (int i = 0; i < 30; i++)
{
Console.Write(huafuhao(i));
}
Console.WriteLine();
#endregion
#region 第一竖行
for (int i = 30; i < 35; i++)
{
for (int j = 0; j <= 28; j++)
{
Console.Write(" ");
}
Console.WriteLine(Program.huafuhao(i));
}
#endregion
#region 第二横行
for (int i = 64; i >= 35; i--)
{
Console.Write(huafuhao(i));
}
Console.WriteLine();
#endregion
#region 第二竖行
for (int i = 65; i <= 69; i++)
{
Console.WriteLine(huafuhao(i));
}
#endregion
#region 第三横行
for (int i = 70; i <= 99; i++)
{
Console.Write(huafuhao(i));
}
Console.WriteLine();
#endregion
}
#endregion
最后效果如下
输入玩家名字
我们规定玩家名字不能为空或者空格,且玩家b的名字不能和玩家a一样
对此我们写出下列函数
#region 输入玩家名字
public static void xiename()
{
Console.WriteLine("请输入玩家a的名字:");
gamer[0] = Console.ReadLine();
while (gamer[0] == "" || gamer[0] == " ")
{
if (gamer[0] == "" || gamer[0] == " ")
{
Console.WriteLine("玩家a姓名不能为空,请重新输入");
gamer[0] = Console.ReadLine();
}
}
Console.WriteLine("请输入玩家b的名字:");
gamer[1] = Console.ReadLine();
while (gamer[1] == "" || gamer[1] == " " || gamer[1] == gamer[0])
{
if (gamer[1] == "" || gamer[1] == " ")
{
Console.WriteLine("玩家b的名字不能为空,请重新输入");
gamer[1] = Console.ReadLine();
}
else
{
Console.WriteLine("玩家b的名字不能和玩家a一样,请重新输入");
gamer[1] = Console.ReadLine();
}
}
}
#endregion
行动
在游戏头,地图,名字之后我们就要开始玩游戏,也就是行动
带参的void函数这样就能实现这个方法可以供两个玩家一起使用
调用时只需要带入0或者1
带入0就是玩家a行动
带入1就是玩家b行动
我们创建一个随机数对象
Random r = new Random();
int x = r.Next(1, 7);
实现掷骰子的功能
我们还得创建一个方法来限制游戏,因为又可能玩家会退到0格之后
将下列方法放到行动方法里在每个改变位置的后面都加上这个方法就能保证ab玩家都在地图里
#region 限制条件
public static void B()//限制条件
{
if (player[0] < 0)
{
player[0] = 0;
}
if (player[0] >= 99)
{
player[0] = 99;
}
if (player[1] < 0)
{
player[1] = 0;
}
if (player[1] >= 99)
{
player[1] = 99;
}
}
#endregion
#region 行动
public static void A(int k)//行动
{
Random r = new Random();
int x = r.Next(1, 7);
Console.WriteLine("{0}按任意键开始掷骰子", gamer[k]);
Console.ReadKey(true);
Console.WriteLine("{0}掷出了{1}", gamer[k], x);
player[k] += x;
B();
Console.ReadKey(true);
Console.WriteLine("{0}按任意键开始行动", gamer[k]);
Console.ReadKey(true);
Console.WriteLine("{0}行动完成", gamer[k]);
Console.ReadKey(true);
//玩家a可能踩到玩家b,方块 幸运轮盘,暂停,炸弹,时空隧道
if (player[k] == player[1 - k])
{
Console.WriteLine("玩家{0}踩到玩家{1},玩家{1}退6格"
, gamer[k], gamer[1 - k], gamer[1 - k]);
player[1 - k] -= 6;
B();
Console.ReadKey(true);
}
else//踩到关卡
{
switch (map[player[k]])
{
case 0:
Console.WriteLine("玩家{0}踩到了方块,安全", gamer[k]);
Console.ReadKey(true);
break;
case 1:
Console.WriteLine("玩家{0}踩到幸运轮盘,请选择 1.交换位置 2.轰炸对方", gamer[k]);
string jk = Console.ReadLine();
while (true)
{
if (jk == "1")
{
Console.WriteLine("玩家{0}选择与玩家{1}交换位置", gamer[k], gamer[1 - k]);
Console.ReadKey(true);
int gk = player[k];
player[k] = player[1 - k];
player[1 - k] = gk;
Console.WriteLine("交换完成ψ(`∇´)ψ,请按任意键继续游戏");
Console.ReadKey(true);
break;
}
else if (jk == "2")
{
Console.WriteLine("玩家{0}选择轰炸玩家{1},玩家{1}后退六格", gamer[k], gamer[1 - k], gamer[1 - k]);
Console.ReadKey(true);
player[1 - k] -= 6;
B();
Console.WriteLine("玩家{0}退回6格", gamer[1 - k]);
Console.ReadKey(true);
break;
}
else
{
Console.WriteLine("只能输入1或者2, 1.交换位置 2.轰炸对方");
jk = Console.ReadLine();
}
}//while
break;
case 2:
Console.WriteLine("玩家{0}踩到地雷,后退6格", gamer[k]);
player[k] -= 6;
B();
Console.ReadKey(true);
break;
case 3:
Console.WriteLine("玩家{0}踩到暂停,暂停一回合", gamer[k]);
fgo[k] = true;
Console.ReadKey(true);
break;
case 4:
Console.WriteLine("玩家{0}踩到时间隧道,前进十格", gamer[k]);
player[k] += 10;
B();
Console.ReadKey(true);
break;
}
}
B();
Console.Clear();
DrawMap();
}
#endregion
在写完行动后我们将这些方法放入主函数中,
我们写完游戏头和名字后使用清屏再重新调用游戏头和初始化地图方法以及画地图
之后我们设定的游戏规则是两个玩家位置都应该小于99
当大于等于99时游戏结束
#region 主函数
static void Main(string[] args)
{
Youxitou();
xiename();
Console.Clear();//清屏
Youxitou();
Chushihuaditu();
DrawMap();
Console.ReadKey();
while (player[0] < 99 && player[1] < 99)
{
if (fgo[0] == false)
{
A(0);
}
else
{
fgo[0] = false;
}
if (player[0] >= 99)
{
Console.WriteLine("玩家{0}赢得胜利谢啦!!☆⌒(*^-゜)v", gamer[0]);
break;
}
if (fgo[1] == false)
{
A(1);
}
else
{
fgo[1] = false;
}
if (player[1] >= 99)
{
Console.WriteLine("玩家{0}赢得胜利(☞゚ヮ゚)☞", gamer[1]);
break;
}
}
}
#endregion
using System;
namespace 飞行棋游戏
{
internal class Program
{
#region 公开数据
static int[] map = new int[100];
//声明一个静态数组存放玩家a,b的位置
static int[] player = new int[2];
//存名字
static string[] gamer = new string[2];
//暂停用
static bool[] fgo = new bool[2];
#endregion
static void Main(string[] args)
{
Youxitou();
xiename();
Console.Clear();//清屏
Youxitou();
Chushihuaditu();
DrawMap();
Console.ReadKey();
while (player[0] < 99 && player[1] < 99)
{
if (fgo[0] == false)
{
A(0);
}
else
{
fgo[0] = false;
}
if (player[0]>=99)
{
Console.WriteLine("玩家{0}赢得胜利谢啦!!☆⌒(*^-゜)v", gamer[0]);
break;
}
if (fgo[1] == false)
{
A(1);
}
else
{
fgo[1] = false;
}
if (player[1] >= 99)
{
Console.WriteLine("玩家{0}赢得胜利(☞゚ヮ゚)☞", gamer[1]);
break;
}
}
}
#region 游戏头
public static void Youxitou()
{
Console.ForegroundColor = ConsoleColor.Blue;
Console.WriteLine("************************");
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("************************");
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine("*******飞行棋游戏*******");
Console.ForegroundColor = ConsoleColor.Cyan;
Console.WriteLine("************************");
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("************************");
}
#endregion
#region 初始化地图
public static void Chushihuaditu()
{
int[] luckypan = { 6, 23, 40, 55, 69, 83 };//幸运轮盘
for (int i = 0; i < luckypan.Length; i++)
{
int index = luckypan[i];
map[index] = 1;
}
int[] dilei = { 5, 13, 17, 33, 38, 50, 64, 80, 94 };//地雷
for (int i = 0; i < dilei.Length; i++)
{
int index = dilei[i];
map[index] = 2;
}
int[] zanting = { 9, 27, 60, 93 };//暂停
for (int i = 0; i < zanting.Length; i++)
{
int index = zanting[i];
map[index] = 3;
}
int[] sjsd = { 20, 25, 45, 63, 72, 88, 90 };//时间隧道
for (int i = 0; i < sjsd.Length; i++)
{
int index = sjsd[i];
map[index] = 4;
}
}
#endregion
#region 画地图
public static void DrawMap()
{
Console.WriteLine("玩家a的名字是{0}", gamer[0]);
Console.WriteLine("玩家b的名字是{0}", gamer[1]);
Console.WriteLine("幸运轮盘:◎ 地雷:★ 暂停:▲ 时间隧道:卍");
#region 第一横行
//如果a,b位置一样,就表示为<>
for (int i = 0; i < 30; i++)
{
Console.Write(huafuhao(i));
}
Console.WriteLine();
#endregion
#region 第一竖行
for (int i = 30; i < 35; i++)
{
for (int j = 0; j <= 28; j++)
{
Console.Write(" ");
}
Console.WriteLine(Program.huafuhao(i));
}
#endregion
#region 第二横行
for (int i = 64; i >= 35; i--)
{
Console.Write(huafuhao(i));
}
Console.WriteLine();
#endregion
#region 第二竖行
for (int i = 65; i <= 69; i++)
{
Console.WriteLine(huafuhao(i));
}
#endregion
#region 第三横行
for (int i = 70; i <= 99; i++)
{
Console.Write(huafuhao(i));
}
Console.WriteLine();
#endregion
}
#endregion
#region 画符号
public static string huafuhao(int i)
{
string str = "";
#region 画图
if (player[0] == player[1] && player[0] == i)
{
str = "<>";
}
else if (player[0] == i)
{
str = "A";
}
else if (player[1] == i)
{
str = "B";
}
else
{
switch (map[i])
{
case 0:
Console.ForegroundColor = ConsoleColor.White;
str = "□";
break;
case 1:
Console.ForegroundColor = ConsoleColor.Blue;
str = "◎";
break;
case 2:
Console.ForegroundColor = ConsoleColor.Cyan;
str = "★";
break;
case 3:
Console.ForegroundColor = ConsoleColor.DarkRed;
str = "▲";
break;
case 4:
Console.ForegroundColor = ConsoleColor.DarkYellow;
str = "卍";
break;
}//switch
}//else
return str;
#endregion
}
#endregion
#region 输入玩家名字
public static void xiename()
{
Console.WriteLine("请输入玩家a的名字:");
gamer[0] = Console.ReadLine();
while (gamer[0] == "" || gamer[0] == " ")
{
if (gamer[0] == "" || gamer[0] == " ")
{
Console.WriteLine("玩家a姓名不能为空,请重新输入");
gamer[0] = Console.ReadLine();
}
}
Console.WriteLine("请输入玩家b的名字:");
gamer[1] = Console.ReadLine();
while (gamer[1] == "" || gamer[1] == " " || gamer[1] == gamer[0])
{
if (gamer[1] == "" || gamer[1] == " ")
{
Console.WriteLine("玩家b的名字不能为空,请重新输入");
gamer[1] = Console.ReadLine();
}
else
{
Console.WriteLine("玩家b的名字不能和玩家a一样,请重新输入");
gamer[1] = Console.ReadLine();
}
}
}
#endregion
public static void A(int k)//行动
{
Random r = new Random();
int x = r.Next(1, 7);
Console.WriteLine("{0}按任意键开始掷骰子", gamer[k]);
Console.ReadKey(true);
Console.WriteLine("{0}掷出了{1}", gamer[k], x);
player[k] += x;
B();
Console.ReadKey(true);
Console.WriteLine("{0}按任意键开始行动", gamer[k]);
Console.ReadKey(true);
Console.WriteLine("{0}行动完成", gamer[k]);
Console.ReadKey(true);
//玩家a可能踩到玩家b,方块 幸运轮盘,暂停,炸弹,时空隧道
if (player[k] == player[1 - k])
{
Console.WriteLine("玩家{0}踩到玩家{1},玩家{1}退6格"
, gamer[k], gamer[1 - k], gamer[1 - k]);
player[1 - k] -= 6;
B();
Console.ReadKey(true);
}
else//踩到关卡
{
switch (map[player[k]])
{
case 0:
Console.WriteLine("玩家{0}踩到了方块,安全", gamer[k]);
Console.ReadKey(true);
break;
case 1:
Console.WriteLine("玩家{0}踩到幸运轮盘,请选择 1.交换位置 2.轰炸对方", gamer[k]);
string jk = Console.ReadLine();
while (true)
{
if (jk == "1")
{
Console.WriteLine("玩家{0}选择与玩家{1}交换位置", gamer[k], gamer[1 - k]);
Console.ReadKey(true);
int gk = player[k];
player[k] = player[1 - k];
player[1 - k] = gk;
Console.WriteLine("交换完成ψ(`∇´)ψ,请按任意键继续游戏");
Console.ReadKey(true);
break;
}
else if (jk == "2")
{
Console.WriteLine("玩家{0}选择轰炸玩家{1},玩家{1}后退六格", gamer[k], gamer[1 - k], gamer[1 - k]);
Console.ReadKey(true);
player[1 - k] -= 6;
B();
Console.WriteLine("玩家{0}退回6格", gamer[1 - k]);
Console.ReadKey(true);
break;
}
else
{
Console.WriteLine("只能输入1或者2, 1.交换位置 2.轰炸对方");
jk = Console.ReadLine();
}
}//while
break;
case 2:
Console.WriteLine("玩家{0}踩到地雷,后退6格", gamer[k]);
player[k] -= 6;
B();
Console.ReadKey(true);
break;
case 3:
Console.WriteLine("玩家{0}踩到暂停,暂停一回合", gamer[k]);
fgo[k] = true;
Console.ReadKey(true);
break;
case 4:
Console.WriteLine("玩家{0}踩到时间隧道,前进十格", gamer[k]);
player[k] += 10;
B();
Console.ReadKey(true);
break;
}
}
B();
Console.Clear();
DrawMap();
}
public static void B()//限制条件
{
if (player[0] < 0)
{
player[0] = 0;
}
if (player[0] >= 99)
{
player[0] = 99;
}
if (player[1] < 0)
{
player[1] = 0;
}
if (player[1] >= 99)
{
player[1] = 99;
}
}
}
}
/*游戏规则
如果玩家a踩到玩家b,玩家b退6格;
踩到地雷退6格
踩到时间隧道前进10格
踩到幸运轮盘 1.交换位置 2.轰炸对方,使对方退后6格
踩到暂停 暂停一回合
踩到方块什么都不发生
*/