将整个飞行棋游戏逻辑分为地图关卡数据,显示打印地图,棋子行走的逻辑判断三部分
显示相关信息每次投掷骰子后控制台中的地图都需要刷新重新输出显示,因此将其提取为方法
//显示地图信息
static void ShowMapInfo()
{
string title = "飞行棋小游戏 1.0";
Console.Title = title;
Console.WriteLine("\t\t\t***************************");
Console.ForegroundColor = ConsoleColor.Cyan;
Console.WriteLine("\t\t\t* " title " *");
Console.ForegroundColor = ConsoleColor.Gray;
Console.WriteLine("\t\t\t***************************");
Console.WriteLine("\t\t\t\t飞行棋游戏规则");
//可以将规则信息作为方法的参数传入,便于后期修改拓展
Console.WriteLine("\t\t\t●地雷(-6) ▲暂停(0) ◎飞盘( 10)");
Console.WriteLine("");
}
初始化地图关卡数据
初始化地图的数据提取一个命名为InitData()的方法中(数据写死在方法中)
整个游戏都需要使用地图数组,因此声明为Program类的成员变量
整个游戏地图共有100个格子,因此声明一个长度为100的int类型的数组,因此设定
如果是普通关卡则在此数组中设置元素的值为0(默认值),输出为" □ "
如果是地雷关卡则在此数组中设置元素的值为1,输出为" ● "
如果是暂停关卡则在此数组中设置元素的值为2,输出为" ▲ "
如果是飞盘关卡则在此数组中设置元素的值为3,输出为" ◎ "
以上关卡的特殊图案可以通过搜狗输入法的特殊符号打印出来
打印特殊符号
数组中每个元素代表一个地图中格子,其元素的默认值为0,因此地图的普通关卡不用重新设置其值
三种关卡设置的两种方式
因为三种类型关卡的格子,每一类型都有好几个,为便于管理不同类型的关卡,每种类型也声明为一个数组,每个数组中元素的值设置为关卡的值;可以通过改变不同类型数组中元素的值,使地图显示为不同类型关卡的图案
方式1 声明三种类型关卡的数组,手动设置不同关卡数组并初始化进地图数组中
//初始化地图关卡数据
static void InitData()
{
//●表示地雷 设置元素值为 1
int[] mine = { 3, 23, 35, 47, 52, 66, 79, 82, 93 };
//▲表示暂停 设置元素值为 2
int[] suspend = { 7, 26, 55, 69, 88 };
//◎表示飞盘 设置元素值为 3
int[] frisbee = { 9, 33, 59, 85 };
//循环设置关卡数据
for (int i = 0; i < mine.Length; i )
{
//int a=mine[i];
//chequer[a]=1;
//等同于下面
chequer[mine[i]] = 1;
}
for (int i = 0; i < suspend.Length; i )
{
chequer[suspend[i]] = 2;
}
for (int i = 0; i < frisbee.Length; i )
{
chequer[frisbee[i]] = 3;
}
}
#endregion
//最后会根据不同关卡在地图数组中元素的值
//在控制台输出地图不同关卡的图案
初始化关卡数据
方式2 可以通过随机数产生,随机20个1-99之间不重复的数字,选择其中哪几个为同一类型的关卡
#region 随机地图数据2
//初始化地图关卡数据
static void InitData()
{
//●表示地雷 设置元素值为 1
int[] mine = new int[8];
//▲表示暂停 设置元素值为 2
int[] suspend = new int[6];
//◎表示飞盘 设置元素值为 3
int[] frisbee = new int[6];
//接收20个随机关卡数据
int[] level = new int[20];
level = NoRepeatNum(level, 1, 100);
//获取地雷数据
for (int i = 0; i < mine.Length; i )
{
mine[i] = level[i];
}
//获取暂停数据
for (int i = 0; i < suspend.Length; i )
{
suspend[i] = level[i 8];
}
//获取飞盘数据
for (int i = 0; i < frisbee.Length; i )
{
frisbee[i] = level[i 8 6];
}
//将随机的各种类型关卡数据初始化进地图数组中
for (int i = 0; i < mine.Length; i )
{
//int a=mine[i];
//chequer[a]=1;
//等同于下面
chequer[mine[i]] = 1;
}
for (int i = 0; i < suspend.Length; i )
{
chequer[suspend[i]] = 2;
}
for (int i = 0; i < frisbee.Length; i )
{
chequer[frisbee[i]] = 3;
}
}
// 获取不重复的数字
static int[] NoRepeatNum(int[] arr, int min, int max)
{
Random rm = new Random();
int num = 0;
for (int i = 0; i < arr.Length; i )
{
num = rm.Next(min,max);
while (arr.Contains(num))
{
num = rm.Next(min, max);
}
arr[i] = num;
}
return arr;
}
#endregion
随机关卡数据
上面随机关卡数据效果肯定很感人!!!是一种最简易粗糙的关卡数据,三种类型的关卡最终显示效果要么挨在一起出现,要么一段都是普通关卡,可自行优化随机的关卡数据
Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved