C# - 飞行棋小游戏2-显示标题及其相关信息,初始化地图关卡数据 057

C# - 飞行棋小游戏2-显示标题及其相关信息,初始化地图关卡数据 057

首页休闲益智天梨飞行棋更新时间:2024-04-11

将整个飞行棋游戏逻辑分为地图关卡数据,显示打印地图,棋子行走的逻辑判断三部分

显示相关信息

每次投掷骰子后控制台中的地图都需要刷新重新输出显示,因此将其提取为方法

//显示地图信息 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