控制板飞行棋
博主闲的时候,写的一个小demo,控制板上玩飞行机,蛮简单,不复杂,分享给大家看,算是一个判断语句+循环语句的一个小应用
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 骑士飞行棋
{
class Program
{ //在下面的数组储存我们游戏地图的各各关卡
//数组的下标为0的元素对应地图上的第1格,下标为1的元素对应第2格..下标为n的元素对应n+1格
//在数组中用1:表示幸运轮盘○2:地雷☆3:暂停▲4:时空隧道卍 0:表示普通
static int[] Map = new int[100];
static int[] playerPos = { 0, 0 };//playerPos[0]存玩家A的坐标,playerPos[1]存玩家B的坐标
static int step;//储存骰子数
static string[] names = new string[2];//names[0]为A,names[1]为B
static string msg = "";//记录信息,用户踩到某关卡输出的话
static bool[] Istop = { false, false };//Istop[0]为A,Istop[1]为B
static void Main(string[] args)
{
ShowUI();
Console.WriteLine("请输入玩家A的姓名?");
names[0] = Console.ReadLine();
while (names[0] == "")
{
Console.WriteLine("玩家A的姓名不能为空,请重新输入");
names[0] = Console.ReadLine();
}
Console.WriteLine("请输入玩家B的姓名?");
names[1] = Console.ReadLine();
while (names[1] == "" || names[1] == names[0])
{
if (names[1] == "")
{
Console.WriteLine("玩家B的姓名不能为空,请重新输入");
}
if (names[1] == names[0])
{
Console.WriteLine("姓名以被玩家A占用,重新输入");
}
names[1] = Console.ReadLine();
}
Console.Clear();
ShowUI();
Console.WriteLine("对战开始.....");
Console.WriteLine("{0}用A来表示", names[0]);
Console.WriteLine("{0}用B来表示", names[1]);
Console.WriteLine("当AB在同一位置时,用<>来表示");
InitialMap();
DrawMap();
Console.ResetColor();//重置颜色默认;
Console.WriteLine("");
Console.WriteLine("游戏开始......");
while (playerPos[0] < 99 && playerPos[1] < 99)
{
Console.WriteLine("******************************************");
Console.WriteLine("{0}的位置为{1}", names[0], playerPos[0] + 1);
Console.WriteLine("{0}的位置为{1}", names[1], playerPos[1] + 1);
if(Istop[0]==false)
{
action(0);//玩家A
}
else { Istop[0] = false; }
if (playerPos[0]>=99)
{
Console.Clear();
Console.ResetColor();//默认颜色
Console.WriteLine("**************");
Console.WriteLine("{0}赢了",names[0]);
break;
}
if (Istop[1] == false)
{
action(1);//玩家B
}
else { Istop[1] = false; }
if (playerPos[1] >= 99)
{
Console.Clear();
Console.ResetColor();//默认颜色
Console.WriteLine("**************");
Console.WriteLine("{1}赢了", names[1]);
break;
}
Console.Clear();
DrawMap();
if (msg != "")
{
Console.WriteLine("");
Console.WriteLine(msg);
}
Console.WriteLine();
}
Console.WriteLine("");
Console.ReadKey();
}
/// <summary>
/// A,B摇骰子
/// </summary>
/// <param name="playerNumber"></param>
static void action(int playerNumber)
{//1-playerNumber对方玩家,playerNumer当前
Random r = new Random();//随机数
Console.WriteLine("");
Console.WriteLine("{0}按任意键开始掷骰子", names[playerNumber]);
ConsoleKeyInfo rec = Console.ReadKey(true);
if (rec.Key == ConsoleKey.Tab && rec.Modifiers == ConsoleModifiers.Alt)
{
step = 99;
}
else
{
step = r.Next(1, 7);
}
Console.WriteLine("{0}掷出了:{1}", names[playerNumber], step);
Console.ReadKey(true);
playerPos[playerNumber] = playerPos[playerNumber] + step;//一旦发生改变就要判断坐标是否大于99
checkPos();
if (playerPos[0] == playerPos[1])//玩家A踩到玩家B
{
playerPos[1-playerNumber] = 0;
msg = string.Format("{0}踩到了{1},{1}退回原点", names[playerNumber], names[1-playerNumber]);
}
else
{
switch (Map[playerPos[playerNumber]])
{
case 0: break;//普通,没效果
case 1: Console.Clear();
DrawMap();
Console.WriteLine("");
Console.WriteLine("{0}走到了幸运轮盘,请选择运气?", names[playerNumber]);
Console.WriteLine("1--交换位置,2--轰炸对方");
int userSelect = ReadInt(1, 2);
if (userSelect == 1)
{
int temp = playerPos[playerNumber];
playerPos[playerNumber] = playerPos[1-playerNumber];
playerPos[1-playerNumber] = temp;
msg = string.Format("{0}选择了与对方交换位置", names[playerNumber]);
}//交换位置
else if (userSelect == 2)
{
playerPos[1-playerNumber] = playerPos[1-playerNumber] - 6;
checkPos();
msg = string.Format("{0}轰炸了{1},{1}退回6格", names[playerNumber], names[1-playerNumber]);//轰炸对方
}
break;
case 2:
playerPos[playerNumber] = playerPos[playerNumber] - 6;
checkPos();
msg = string.Format("{0}踩到了地雷,退6格", names[playerNumber]);
break;//踩到地雷
case 3:
Istop[playerNumber] = true;//暂停一次
msg = string.Format("{0}暂停一次", names[playerNumber]);
break;//暂停一次
case 4: playerPos[0] = playerPos[0] + 10;
msg = string.Format("{0}进入时空隧道,进10步", names[playerNumber]);
break;//时空隧道
}
}
Console.Clear();
DrawMap();
if (msg != "")
{
Console.WriteLine("");
Console.WriteLine(msg);
}
}
/// <summary>
/// 用来绘制飞行棋的名称
/// </summary>
private static void ShowUI()
{
Console.WriteLine("************************************************");
Console.WriteLine("* *");
Console.WriteLine("* 骑 士 飞 行 棋 *");
Console.WriteLine("* *");
Console.WriteLine("************************************************");
}
/// <summary>
/// 初始化
/// </summary>
static void InitialMap()
{
int[] luckyTrun = { 6, 23, 40, 55, 69, 83, 98 };//幸运轮盘1
int[] landNine = { 5, 13, 17, 33, 38, 50, 64, 80, 94 };//地雷2
int[] pause = { 9, 27, 60, 93 };//暂停坐标3
int[] timeTunnel = { 20, 25, 45, 63, 72, 88, 90 };//时空隧道4
for (int i = 0; i < luckyTrun.Length; i++)
{
Map[luckyTrun[i]] = 1;
}
for (int i = 0; i < landNine.Length; i++)
{
Map[landNine[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>
/// <param name="pos"></param>
/// <returns></returns>
static string GetMapString(int pos)
{
string result = "";
if (playerPos[0] == pos && playerPos[1] == pos)
{
result = "<>";
Console.ForegroundColor = ConsoleColor.Yellow;
}
else if (playerPos[0] == pos)
{
result = "A";
}
else if (playerPos[1] == pos)
{
result = "B";
}
else
{
switch (Map[pos]) //1:表示幸运轮盘○2:地雷☆3:暂停▲4:时空隧道卍 0:表示普通
{
case 0: result = "□";
Console.ForegroundColor = ConsoleColor.White;
break;
case 1: result = "○";
Console.ForegroundColor = ConsoleColor.DarkCyan;
break;
case 2: result = "☆";
Console.ForegroundColor = ConsoleColor.DarkMagenta;
break;
case 3: result = "▲";
Console.ForegroundColor = ConsoleColor.Cyan;
break;
case 4: result = "卍";
Console.ForegroundColor = ConsoleColor.DarkCyan;
break;
}
}
return result;
}
/// <summary>
/// 绘制地图
/// </summary>
static void DrawMap()
{//画第一行,绘制0-29地图
Console.WriteLine("○:表示幸运轮盘 ☆:地雷 ▲:暂停 卍:时空隧道");
for (int i = 0; i <= 29; i++)
{
Console.Write(GetMapString(i));
}
Console.WriteLine();
//画第一列,绘制30-34地图
for (int i = 30; i <= 34; i++)
{
for (int j = 0; j < 29; j++)
{
Console.Write(" ");
};
Console.WriteLine(GetMapString(i));
}
//画35-64地图
for (int i = 64; i >= 35; i--)
{
Console.Write(GetMapString(i));
}
Console.WriteLine();
//画65-69地图
for (int i = 65; i <= 69; i++)
{
Console.WriteLine(GetMapString(i));
}
//画70-99地图
for (int i = 70; i <= 99; i++)
{
Console.Write(GetMapString(i));
}
}
//static int ReadInt()
//{
// int i = ReadInt(int.MinValue, int.MaxValue);
// return i;
//}
static int ReadInt(int min, int max)
{
int number = 0;
for (int j = 100; j > 0; j--)
{
try
{
number = Convert.ToInt32(Console.ReadLine());
}
catch (Exception)
{
Console.WriteLine("只能输入数字");
}
if (number < min || number > max)
{
Console.WriteLine("只能输入{0}-{1}之间的数字", min, max);
}
else { break; }
}
return number;
}
/// <summary>
/// 检查
/// </summary>
private static void checkPos()
{
if (playerPos[0] > 99 || playerPos[1] > 99)
{
playerPos[0] = 99;
Console.WriteLine("你赢了");
}
else if (playerPos[0] < 0 || playerPos[1] < 0)
{
playerPos[0] = 0;
}
}
//private static string[] tong(string[] a,string[] b)
//{
//}
}
}