今天从上午10点开始, 老师就一直给我讲解这个游戏的制作过程. 写到晚上代码写了一坨, 吃完饭再回来看, 其实我根本不知道哪句代码是干什么的.
经过我一堂课的改造, 终于把它改写成了简单易懂, 更易维护的游戏了.
因为要给同桌讲解, 他英语不是很好, 幸好VS2013可以用中文作方法名, 看起来简单明了.
这也是C#基础的一个综合应用了, 明天开始学面向对象, 感觉又变的高级了.
下面是这个游戏的主要思路:
1、绘制游戏Logo
2、对地图进行初始化,其实就是给Maps这个整数数组进行赋值。4、分别输入两个玩家的用户名
5、清屏 重新调用GameLogo,然后输出相应的文本
6、玩家A跟玩家B不停进行游戏要满足的条件就是两个人的坐标同时都要小于99
7、游戏规则
--->首先判断移动的玩家是否踩到了另一个玩家,如果踩到了,被踩到的玩家应该退6格
--->如果移动的玩家没有踩到另一个玩家,那么我们则判断移动的玩家踩到了哪一个关卡上。
--->如果踩到了方块,则什么都不发生
--->如果踩到了关卡
--->如果踩到了幸运轮盘,则提示玩家选择 1--交换位置 2--轰炸对方,是对方退6格
--->如果踩到了地雷,踩到地雷的玩家应该退6格
--->如果踩到了暂停,则暂停一回合
--->如果踩到了时空隧道,则前进10格
问题:
--->玩家A跟玩家B有可能被干出这个地图
--->写函数来限定玩家A跟玩家B的坐标
--->凡是坐标改变的地方都应该调用ChangePos
--->目前只有玩家A在玩
--->暂停功能
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication2
{
class Program
{
static int[] map = new int[100];
static int[] playPos = new int[2];
static string[] playName = new string[2];
static Random rd = new Random();
static bool[] playFlag = new bool[2] { true, true };
//static int num = 0;
public static void DrawTheLogo()
{
Console.ForegroundColor = ConsoleColor.Blue;
Console.WriteLine("********************************");
Console.ForegroundColor = ConsoleColor.Blue;
Console.WriteLine("********************************");
Console.ForegroundColor = ConsoleColor.Blue;
Console.WriteLine("********************************");
Console.ForegroundColor = ConsoleColor.DarkCyan;
Console.WriteLine("-------飞行棋游戏开始啦---------");
Console.WriteLine("-------请按任意键继续吧---------");
Console.ForegroundColor = ConsoleColor.Blue;
Console.WriteLine("********************************");
Console.ForegroundColor = ConsoleColor.Blue;
Console.WriteLine("********************************");
Console.ForegroundColor = ConsoleColor.Blue;
Console.WriteLine("********************************");
Console.ForegroundColor = ConsoleColor.White;
Console.ReadKey();
Console.Clear();
}
public static void GetTwoNamesOfTwoPlayers()
{
do
{
playName[0] = "";
while (playName[0] == "")
{
Console.WriteLine("请输入A玩家姓名:");
playName[0] = Console.ReadLine();
}
playName[1] = "";
while (playName[1] == "")
{
Console.WriteLine("请输入B玩家姓名:");
playName[1] = Console.ReadLine();
}
if (playName[0] == playName[1]) Console.WriteLine("两个名字不要相同比较好!");
} while (playName[0] == playName[1]);
Console.Clear();
}
public static void PutElementsIntoMap()
{
int[] luckyturn = { 6, 23, 40, 55, 69, 83 };//幸运轮盘◎
int[] landMine = { 5, 13, 17, 33, 38, 50, 64, 80, 94 };//地雷☆
int[] pause = { 9, 27, 60, 93 };//暂停▲
int[] timeTunnel = { 20, 25, 45, 63, 72, 88, 90 };//时空隧道卐
for (int i = 0; i < luckyturn.Length; i++)
map[luckyturn[i]] = 1;
for (int i = 0; i < landMine.Length; i++)
map[landMine[i]] = 2;
for (int i = 0; i < pause.Length; i++)
map[pause[i]] = 3;
for (int i = 0; i < timeTunnel.Length; i++)
map[timeTunnel[i]] = 4;
}
/*public static void DrawMapWithinNumbers()
{
//第一行30个;
for (int i = 0; i < 30; i++)
Console.Write(map[i]);
Console.WriteLine();
//右侧竖排
for (int i = 30; i < 35; i++)
{
for (int j = 0; j < 29; j++)
Console.Write(" ");
Console.WriteLine(map[i]);
}
//中间一行倒序30个
for (int i = 64; i >= 35; i--)
Console.Write(map[i]);
Console.WriteLine();
//左侧竖行
for (int i = 65; i < 70; i++)
Console.WriteLine(map[i]);
//最后一行
for (int i = 70; i < 100; i++)
Console.Write(map[i]);
}*/
public static string TurnNumbersWhichInTheMapToString(int i)
{
string str = "";
//判断当前坐标跟玩家的坐标是否相等
if (i == playPos[0] && i == playPos[1])
{
Console.ForegroundColor = ConsoleColor.White;
str = "AB";
} //玩家a坐标想等
else if (i == playPos[0])
{
Console.ForegroundColor = ConsoleColor.White;
str = "A";
}
//玩家B的坐标相等
else if (i == playPos[1])
{
Console.ForegroundColor = ConsoleColor.White;
str = "B";
}
else //画本来应该话关卡
{
//A和B坐标相同是用<>表示
//我用0表示普通,显示给用户就是 □
//....1...幸运轮盘,显示组用户就◎
//....2...地雷,显示给用户就是 ☆
//....3...暂停,显示给用户就是 ▲
//....4...时空隧道,显示组用户就 卐
switch (map[i])
{
case 0:
Console.ForegroundColor = ConsoleColor.Green;
str = "□";
break;
case 1:
Console.ForegroundColor = ConsoleColor.Yellow;
str = "@";
break;
case 2:
Console.ForegroundColor = ConsoleColor.Red;
str = "☆";
break;
case 3:
Console.ForegroundColor = ConsoleColor.Blue;
str = "▲";
break;
case 4:
Console.ForegroundColor = ConsoleColor.Cyan;
str = "卍";
break;
}
}
return str;
}
public static void DrawMapWithinCharacters()
{
Console.WriteLine("幸运轮盘:@\t地雷:☆\t\t暂停:▲\t\t时空隧道:卐");
//第一行30个;
for (int i = 0; i < 30; i++)
Console.Write(TurnNumbersWhichInTheMapToString(i));
Console.WriteLine();
//右侧竖排
for (int i = 30; i < 35; i++)
{
for (int j = 0; j < 29; j++)
Console.Write(" ");
Console.WriteLine(TurnNumbersWhichInTheMapToString(i));
}
//中间一行倒序30个
for (int i = 64; i >= 35; i--)
Console.Write(TurnNumbersWhichInTheMapToString(i));
Console.WriteLine();
//左侧竖行
for (int i = 65; i < 70; i++)
Console.WriteLine(TurnNumbersWhichInTheMapToString(i));
//最后一行
for (int i = 70; i < 100; i++)
Console.Write(TurnNumbersWhichInTheMapToString(i));
Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine("");
}
public static void 投色子(int num)
{
//玩家A玩游戏
if (playFlag[num])
{
Console.WriteLine("玩家{0}开始游戏,按任意键掷骰子!", playName[num]);
Console.ReadKey(true);
int rdNum = rd.Next(1, 7);
//int rdNum = 5;
Console.WriteLine("玩家{0}掷出了{1}", playName[num], rdNum);
//Console.ReadKey(true);
playPos[num] += rdNum;
安全检测(num);
判断是不是到了最后(num);
}
}
public static void 走完后看看玩家踩到了什么(int num)
{
int num2 = 0;
if (num == 1) num2 = 0;
else num2 = 1;
if (playPos[num] == playPos[num2])
{
Console.WriteLine("玩家{0}踩到了玩家{1},玩家{2}退5格", playName[num], playName[num2], playName[num2]);
playPos[num2] -= 5;
安全检测(num2);
if (playPos[num2] == playPos[num])
Console.WriteLine("先别打了,赶紧走吧~~");
else
走完后看看玩家踩到了什么(num2);
}
else
{
switch (map[playPos[num]])
{
case 0:
Console.WriteLine("恭喜,玩家{0}安全着陆!", playName[num]);
break;
case 1:
幸运轮盘(num);
break;
case 2://地雷
Console.WriteLine("恭喜,玩家{0}踩到了地雷,退5格!", playName[num]);
playPos[num] -= 2;
安全检测(num);
走完后看看玩家踩到了什么(num);
break;
case 3://暂停
Console.WriteLine("玩家{0},太胖被卡住了,暂停一回合!", playName[num]);
playFlag[num] = false;
break;
case 4: //时空隧道
Console.WriteLine("坑爹呀,玩家{0}进入时空隧道了!进10格!", playName[num]);
playPos[num] += 10;
安全检测(num);
走完后看看玩家踩到了什么(num);
break;
}
//清屏
Console.WriteLine("按任意键开始执行!");
Console.ReadKey(true);
Console.Clear();
//画地图
DrawMapWithinCharacters();
}
}
public static void 幸运轮盘(int num)
{
int num2 = 0;
if (num == 1) num2 = 0;
else num2 = 1;
Console.WriteLine("哎呦,玩家{0}踩了幸运轮盘,请选择:1-交换位置\t2-轰炸对方", playName[num]);
while (true)
{
try
{
int input = Convert.ToInt32(Console.ReadLine());
if (input == 1 || input == 2)
{
if (input == 1)
{
Console.WriteLine("玩家{0}选择了交换位置!", playName[0]);
int temp = playPos[0];
playPos[0] = playPos[1];
playPos[1] = temp;
}
else
{
Console.WriteLine("玩家{0}选择了轰炸对方,对方退6格", playName[num2]);
playPos[num2] -= 6;
安全检测(num2);
}
break;
}
else
{
Console.WriteLine("只能输入1或2!,请重新输入!");
}
}
catch
{
Console.WriteLine("请输入数字!,请重新输入!");
}
}
}
public static void 安全检测(int num)
{
if (playPos[num] < 0) playPos[num] = 0;
if (playPos[num] > 99) playPos[num] = 99;
}
public static void 显示胜利符号()
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine(" ◆ ");
Console.WriteLine(" ■ ◆ ■ ■");
Console.WriteLine(" ■■■■ ■ ■ ◆■ ■ ■ ■");
Console.WriteLine(" ■ ■ ■ ■ ◆ ■ ■ ■ ■");
Console.WriteLine(" ■ ■ ■■■■■■ ■■■■■■■ ■ ■ ■");
Console.WriteLine(" ■■■■ ■ ■ ●■● ■ ■ ■");
Console.WriteLine(" ■ ■ ■ ● ■ ● ■ ■ ■");
Console.WriteLine(" ■ ■ ■■■■■■ ● ■ ● ■ ■ ■");
Console.WriteLine(" ■■■■ ■ ● ■ ■ ■ ■ ■");
Console.WriteLine(" ■ ■ ■ ■ ■ ■ ■ ■");
Console.WriteLine(" ■ ■ ■ ■ ■ ■ ");
Console.WriteLine(" ■ ■ ■ ■ ● ■ ");
Console.WriteLine(" ■ ■■ ■■■■■■ ■ ● ●");
Console.ResetColor();
}
public static void 判断是不是到了最后(int num)
{
if (playPos[num] >= 99)
{
Console.WriteLine("悲剧,玩家{0}无耻的赢了!", playName[num]);
显示胜利符号();
}
}
public static void 一个人玩游戏(int num)
{
Console.WriteLine("按任意键开始执行!");
Console.ReadKey(true);
Console.Clear();
DrawMapWithinCharacters();
投色子(num);
Console.ReadKey(true);
Console.Clear();
DrawMapWithinCharacters();
走完后看看玩家踩到了什么(num);
}
public static void 两个人轮流玩游戏()
{
while ((playPos[0] < 99 && playPos[1] < 99))
{
if (playFlag[0]) 一个人玩游戏(0);
else playFlag[0] = true;
if (playPos[0] >= 99) break;
if (playFlag[1]) 一个人玩游戏(1);
else playFlag[1] = true;
if (playPos[1] >= 99 || playPos[0] >= 99) break;
}
}
static void Main(string[] args)
{
DrawTheLogo();
GetTwoNamesOfTwoPlayers();
PutElementsIntoMap();
DrawMapWithinCharacters();
//一个人玩游戏(0);
两个人轮流玩游戏();
Console.ReadKey();
}
}
}