1)为绘制地图方法添加3句代码,一是显示玩家坐标,二是将光标移到下一行显示
static void DrawMap()
{
Console.WriteLine("● 地雷(-6) ▲ 暂停(0) ◎ 飞盘( 10)");
Console.WriteLine("");
Console.WriteLine("玩家A的坐标: {0}", pos[0]);
Console.WriteLine("玩家B的坐标: {0}", pos[1]);
//绘制地图的代码(拷贝省略...)
//使光标移到下一行
Console.WriteLine("");
}
如果不想使用默认玩家名称,可自己编写自定义玩家名称;实现逻辑一般包括1)玩家名称不能为空 2)两个玩家名称不能相同;本程序暂时跳过此环节只使用默认的名称
控制棋子行走的逻辑1 整体实现逻辑:
1)通过循环控制两个玩家依次投掷骰子(1-6之间的随机数),按骰子数改变当前玩家的坐标,循环条件是玩家A或玩家B的坐标没有一个超过99,如果哪一个超过99,表示哪个玩家赢
2)每次投掷骰子后都要判断玩家当前坐标是普通关卡还是地雷,暂停,飞盘关卡(之后以其他代指三种类型的关卡),如果是普通关卡则将当前玩家坐标加上骰子数后,清屏重新绘制地图,如果是其他关卡,给用户一个选择提示,用户选择后改变当前玩家坐标,清屏重新绘制地图
所有关卡的逻辑判断代码都在清屏重绘地图方法前面完成
2 具体实现与代码
2.1使用循环控制玩家依次投掷骰子
两个玩家依次投掷骰子
static void Main(string[] args)
{
ShowMapInfo();
InitData();
DrawMap();
//用于产生随机数
Random r = new Random();
int rdm = 0;//用于接收产生的随机数
//循环条件不能使用或 ||
while (pos[0] <= 99 && pos[1] <= 99)
{
Console.WriteLine("玩家A按任意键开始投掷骰子");
Console.ReadKey(true);//true 不显示所按的是什么键
rdm = r.Next(1, 7);//产生1-6之间任意的整数
Console.WriteLine("玩家A骰子数为{0}",rdm);
Console.WriteLine("按任意键玩家A开始行走");
Console.ReadKey(true);
Console.WriteLine("");
//清屏
Console.Clear();
//重新绘制地图
DrawMap();
//==================================
Console.WriteLine("玩家B按任意键开始投掷骰子");
Console.ReadKey(true);//true 不显示所按的是什么键
rdm = r.Next(1, 7);//产生1-6之间任意的整数
Console.WriteLine("玩家B骰子数为{0}", rdm);
Console.WriteLine("按任意键玩家B开始行走");
Console.ReadKey(true);
//清屏
Console.Clear();
//重新绘制地图
DrawMap();
}
Console.ReadKey();
}
2.2 通过投掷的骰子数,改变当前玩家的坐标(其他关卡暂时未验证)
static void Main(string[] args)
{
ShowMapInfo();
InitData();
DrawMap();
//用于产生随机数
Random r = new Random();
int rdm = 0;//用于接收产生的随机数
while (pos[0] <= 99 && pos[1] <= 99)
{
Console.WriteLine("玩家A按任意键开始投掷骰子");
Console.ReadKey(true);//true 不显示所按的是什么键
rdm = r.Next(1, 7);//产生1-6之间任意的整数
Console.WriteLine("玩家A骰子数为{0}",rdm);
Console.WriteLine("按任意键玩家A开始行走");
Console.ReadKey(true);
//骰子数就是玩家A马上行走的关卡数
pos[0] = pos[0] rdm;
//清屏
Console.Clear();
//重新绘制地图
DrawMap();
//玩家B的逻辑控制代码就是冗余代码
//最后会将代码进行优化
Console.WriteLine("玩家B按任意键开始投掷骰子");
Console.ReadKey(true);//true 不显示所按的是什么键
rdm = r.Next(1, 7);//产生1-6之间任意的整数
Console.WriteLine("玩家B骰子数为{0}", rdm);
Console.WriteLine("按任意键玩家B开始行走");
Console.ReadKey(true);
pos[1] = pos[1] rdm;
//清屏
Console.Clear();
//重新绘制地图
DrawMap();
}
Console.ReadKey();
}
玩家B再走就走出地图了,因此需要在每次绘制地图前进行检测玩家当前坐标
// 检测当前玩家坐标
static void CheckPos()
{
for (int i = 0; i < pos.Length; i )
{
//假设骰子数为3,地图中下标为3的是地雷
//按照规则退6步,玩家坐标就会变为-3
//因此需要限制玩家坐标在0-99
if (pos[i] < 0)
{
pos[i] = 0;
}
if (pos[i] > 99)
{
pos[i] = 99;
}
}
}
Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved