知识点梳理:
1.全局变量,用于在这个类中的的所用成员都能运用。
2.运用数组来储存地图的下标。
3.运用方法来显示地图每格的图标。
4.用while循环和if判断来输入玩家的姓名。
5.调用用Random函数来作用于掷骰子的随机数。
6.用while循环和if判断来限定玩家的下标在地图内。
7.特殊坐标用数组和不同值遍历来显示。
8.写个方法用来判断玩家的下标是否超出地图范围。
9.写个方法来表示赢的画面。
代码:
using System;
using System.Linq;
using System.Text;
namespace 飞行旗
{
class Program
{
public static int[] Map = new int[100];//储存地图
public static int[] PlayerPos = new int[2] { 0, 0 };//玩家下标
public static string[] PlayerName = new string[2];//玩家姓名
public static bool[] Flags = new bool[2] { false, false };//用来判断暂停
static void Main(string[] args)
{
ShowUI();
InitialMap();
#region 输入姓名
Console.WriteLine("请输入玩家A的姓名");
PlayerName[0] = Console.ReadLine();
while (PlayerName[0] == "")
{
Console.WriteLine("玩家A的姓名不能为空");
PlayerName[0] = Console.ReadLine();
}
Console.WriteLine("请输入玩家B的姓名");
PlayerName[1] = Console.ReadLine();
while (PlayerName[1] == "" || PlayerName[1] == PlayerName[0])
{
if (PlayerName[1] == "")
{
Console.WriteLine("玩家B的姓名不能为空");
}
else
{
Console.WriteLine("玩家B的姓名不能与玩家A的姓名相同");
}
PlayerName[1] = Console.ReadLine();
}
#endregion
Console.Clear();
ShowUI();
Console.WriteLine("对战开始.......");
Console.WriteLine("{0}的士兵用A表示", PlayerName[0]);
Console.WriteLine("{0}的士兵用B表示", PlayerName[1]);
DrawMap();
Console.WriteLine("{0}按下了任意键掷骰子", PlayerName[0]);
while (PlayerPos[0] <= 99 && PlayerPos[1] <= 99)
{
if (Flags[0] == false)
{
GuiZe(0);
}
else
{
Flags[0] = false;
}
if (PlayerPos[0] == 99)
{
Console.WriteLine("玩家{0}赢了", PlayerName[0]);
break;
}
if (Flags[1] == false)
{
GuiZe(1);
}
else
{
Flags[1] = false;
}
if (PlayerPos[1] == 99)
{
Console.WriteLine("玩家{0}赢了", PlayerName[1]);
break;
}
}
Win();
Console.ReadKey();
}
/// <summary>
/// 游戏Logo
/// </summary>
public static void ShowUI()
{
Console.WriteLine("*****************************************");
Console.WriteLine("* *");
Console.WriteLine(" 飞行旗 ");
Console.WriteLine("* *");
Console.WriteLine("*****************************************");
}
/// <summary>
/// 地图图标不同定位
/// </summary>
public static void InitialMap()
{
//初始化地图
//我用0表示普通,显示给用户就是 □
//....1...幸运轮盘,显示组用户就◎
//....2...地雷,显示给用户就是 ☆
//....3...暂停,显示给用户就是 ▲
//....4...时空隧道,显示组用户就 卐
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;
}
}
/// <summary>
/// 画图
/// </summary>
public static void DrawMap()
{
Console.WriteLine("图例:幸运轮盘:◎ 地雷:☆ 暂停:▲ 时空隧道:卐");
for (int i = 0; i <= 29; i++)
{
Console.Write(DrawStringMap(i));
}
Console.WriteLine();
for (int i = 30; i <= 34; i++)
{
for (int j = 0; j < 29; j++)
{
Console.Write(" ");
}
string str = DrawStringMap(i);
Console.WriteLine(str);
}
for (int i = 64; i >= 35; i--)
{
Console.Write(DrawStringMap(i));
}
Console.WriteLine();
for (int i = 65; i <= 69; i++)
{
Console.WriteLine(DrawStringMap(i));
}
for (int i = 70; i <= 99; i++)
{
Console.Write(DrawStringMap(i));
}
Console.WriteLine();
}
/// <summary>
/// 地图特别图标
/// </summary>
/// <param name="i"></param>
/// <returns></returns>
public static string DrawStringMap(int i)
{
string str = "";
if (PlayerPos[0] == PlayerPos[1] && PlayerPos[1] == i)
{
Console.ForegroundColor = ConsoleColor.Blue;
str = "<>";
}
else if (PlayerPos[0] == i)
{
Console.ForegroundColor = ConsoleColor.Cyan;
str = "A";
}
else if (PlayerPos[1] == i)
{
Console.ForegroundColor = ConsoleColor.DarkBlue;
str = "B";
}
else
{
switch (Map[i])
{
case 0:
Console.ForegroundColor = ConsoleColor.DarkCyan;
str = "□";
break;
case 1:
Console.ForegroundColor = ConsoleColor.DarkGreen;
str = "◎";
break;
case 2:
Console.ForegroundColor = ConsoleColor.DarkMagenta;
str = "☆";
break;
case 3:
Console.ForegroundColor = ConsoleColor.DarkRed;
str = "▲";
break;
case 4:
Console.ForegroundColor = ConsoleColor.DarkYellow;
str = "卐";
break;
}
}
return str;
}
/// <summary>
/// 判断是否在地图内
/// </summary>
public static void ChangePos()
{
if (PlayerPos[0] <= 0)
{
PlayerPos[0] = 0;
}
if (PlayerPos[0] >= 99)
{
PlayerPos[0] = 99;
}
if (PlayerPos[1] <= 0)
{
PlayerPos[1] = 0;
}
if (PlayerPos[1] >= 99)
{
PlayerPos[1] = 99;
}
}
/// <summary>
/// 胜利表示
/// </summary>
public static void Win()
{
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();
}
/// <summary>
/// 游戏循环
/// </summary>
/// <param name="PlayNumber"></param>
public static void GuiZe(int PlayNumber)
{
Random r = new Random();
int rNumber = r.Next(1, 7);
Console.WriteLine("玩家{0}掷出了{1}", PlayerName[PlayNumber], rNumber);
Console.ReadKey();
Console.WriteLine("玩家{0}按任意键开始行动.......", PlayerName[PlayNumber]);
PlayerPos[PlayNumber] += rNumber;
Console.Clear();
DrawMap();
if (PlayerPos[PlayNumber] == PlayerPos[1 - PlayNumber])
{
Console.WriteLine("玩家{0}踩到了玩家{1}",PlayerName[PlayNumber],PlayerName[1-PlayNumber]);
Console.WriteLine("玩家{0}退6格",PlayerName[1-PlayNumber]);
PlayerPos[1 - PlayNumber] -= 6;
ChangePos();
}
else
{
ChangePos();
switch (Map[PlayerPos[PlayNumber]])
{
case 0: Console.WriteLine("行动完毕");
break;
case 1:
Console.WriteLine("{0}走到了幸运轮盘 1-交换位置,2-轰炸对方", PlayerName[PlayNumber]);
string strNum = Console.ReadLine();
while (true)
{
if (strNum == "1")
{
Console.WriteLine("玩家{0}选择了交换位置", PlayerName[PlayNumber]);
Console.ReadKey();
int temp = PlayerPos[PlayNumber];
PlayerPos[PlayNumber] = PlayerPos[1 - PlayNumber];
PlayerPos[1 - PlayNumber] = temp;
break;
}
else if (strNum == "2")
{
Console.WriteLine("玩家{0}选择了轰炸对方,对方退6格", PlayerName[PlayNumber]);
Console.ReadKey();
PlayerPos[1 - PlayNumber] -= 6;
ChangePos();
break;
}
else
{
Console.WriteLine("输入错误,请重新输入");
strNum = Console.ReadLine();
}
}
break;
case 2: Console.WriteLine("玩家{0}踩到狗屎,退6格", PlayerName[PlayNumber]);
PlayerPos[PlayNumber] -= 6;
ChangePos();
break;
case 3:
Console.WriteLine("玩家{0}踩到了暂停,暂停一回合");
Flags[PlayNumber] = true;
break;
case 4:
Console.WriteLine("玩家{0}踩到了时空隧道,进十格");
PlayerPos[PlayNumber] += 10;
ChangePos();
break;
}
}
Console.Clear();
DrawMap();
}
}
}