• c#控制台玩飞行棋游戏


    using System;

    namespace Game
    {
    class Program
    {
    //用静态字段模拟全局变量
    public static int[] Maps = new int[100];
    //申明一个数组来存储玩家A和B
    public static int[] PlayerPos = new int[2];
    //存储玩家姓名
    public static string[] PlayNames = new string[2];
    //两个玩家的标记
    static bool[] Flags = new bool[2];//默认是false
    static void Main(string[] args)
    {
    GameShow();
    #region 输入玩家姓名
    Console.WriteLine("请输入玩家A的姓名");
    PlayNames[0] = Console.ReadLine();
    while (PlayNames[0] == "")
    {
    Console.WriteLine("不能为空,请重新输入");
    PlayNames[0] = Console.ReadLine();
    }
    Console.WriteLine("请输入玩家B的姓名");
    PlayNames[1] = Console.ReadLine();
    while (PlayNames[1] == PlayNames[0] || PlayNames[1] == "")
    {
    if (PlayNames[1] == "")
    {
    Console.WriteLine("不能为空,请重新输入");
    PlayNames[1] = Console.ReadLine();
    }
    else
    {
    Console.WriteLine("不能和玩家A的姓名相同,请重新输入");
    PlayNames[1] = Console.ReadLine();
    }
    }
    #endregion
    Console.Clear();
    GameShow();
    Console.WriteLine("{0}的士兵用A表示", PlayNames[0]);
    Console.WriteLine("{0}的士兵用A表示", PlayNames[1]);
    InitailMap();
    DrawMap();
    //让玩家AB同时开始玩游戏并结束
    while (PlayerPos[0] < 99 && PlayerPos[1] < 99)
    {
    if (Flags[0]== false)
    {
    PlayGame(0);
    }
    else
    {
    Flags[0] = false;
    }
    if (PlayerPos[0] >=99)
    {
    Console.WriteLine("玩家{0}的赢了玩家{1}", PlayNames[0], PlayNames[1]);break;
    }
    if (Flags[1]==false)
    {
    PlayGame(1);
    }
    else
    {
    Flags[1] = false;
    }
    if (PlayerPos[1] >= 99)
    {
    Console.WriteLine("玩家{0}的赢了玩家{1}", PlayNames[1], PlayNames[0]); break;
    }
    }
    Win();
    Console.ReadKey();
    }
    /// <summary>
    /// 游戏头
    /// </summary>
    public static void GameShow()
    {
    Console.ForegroundColor = ConsoleColor.Red;
    Console.WriteLine("**********************");
    Console.ForegroundColor = ConsoleColor.Yellow;
    Console.WriteLine("**********************");
    Console.ForegroundColor = ConsoleColor.Gray;
    Console.WriteLine("*****飞行棋***********");
    Console.ForegroundColor = ConsoleColor.Cyan;
    Console.WriteLine("**********************");
    Console.ForegroundColor = ConsoleColor.Green;
    Console.WriteLine("**********************");
    }

    /// <summary>
    /// 初始化地图
    /// </summary>
    public static void InitailMap()
    {
    int[] luckyturn = { 6, 23, 40, 55, 69, 83 };//幸运轮盘◎
    for (int i = 0; i < luckyturn.Length; i++)
    {
    Maps[luckyturn[i]] = 1;
    }
    int[] landMine = { 5, 13, 17, 33, 38, 50, 64, 80, 94 };//地雷☆
    for (int i = 0; i < landMine.Length; i++)
    {
    Maps[landMine[i]] = 2;
    }
    int[] pause = { 9, 27, 60, 93,4,2,3,7,8 };//暂停▲
    for (int i = 0; i < pause.Length; i++)
    {
    Maps[pause[i]] = 3;
    }
    int[] timeTunnel = { 20, 25, 45, 63, 72, 88, 90 };//时空隧道卐
    for (int i = 0; i < timeTunnel.Length; i++)
    {
    Maps[timeTunnel[i]] = 4;
    }
    }

    public static void DrawMap()
    {
    Console.WriteLine("图例:幸运轮盘:◎ 地雷:☆ 暂停:▲ 时空隧道:卐");
    #region 第一横行
    for (int i = 0; i < 30; i++)
    {
    //如果玩家A跟玩家B的坐标相同,并且都在这个地图上,画一个尖括号
    Console.Write(DrawStringMap(i));
    }
    #endregion
    //换行继续画竖着
    Console.WriteLine();
    #region 第一竖行
    for (int i = 30; i < 35; i++)
    {
    for (int j = 0; j <= 28; j++)
    {
    Console.Write(" ");
    }
    Console.Write(DrawStringMap(i));
    Console.WriteLine();
    }
    #endregion

    #region 第二横行
    for (int i = 64; i >= 35; i--)
    {
    Console.Write(DrawStringMap(i));
    }
    #endregion
    //换行继续画竖着
    Console.WriteLine();
    #region 第二竖行
    for (int i = 65; i <= 69; i++)
    {
    Console.WriteLine(DrawStringMap(i));
    }
    #endregion

    #region 第三横行
    for (int i = 70; i <= 99; i++)
    {
    Console.Write(DrawStringMap(i));
    }

    #endregion
    Console.WriteLine();
    }
    /// <summary>
    /// 画图中提取的一个抽象的方法
    /// </summary>
    /// <param name="i"></param>
    /// <returns></returns>
    public static string DrawStringMap(int i)
    {
    string str = "";
    //如果玩家A跟玩家B的坐标相同,并且都在这个地图上,画一个尖括号
    if (PlayerPos[0] == PlayerPos[1] && PlayerPos[0] == i)
    {
    str = "<>";
    }
    else if (PlayerPos[0] == i)
    {
    str = "A";
    }
    else if (PlayerPos[1] == i)
    {
    str = "B";
    }
    else
    {
    switch (Maps[i])
    {
    case 0: Console.ForegroundColor = ConsoleColor.Green; str = "□"; break;
    case 1: Console.ForegroundColor = ConsoleColor.Blue; str = "◎"; break;
    case 2: Console.ForegroundColor = ConsoleColor.Yellow; str = "☆"; break;
    case 3: Console.ForegroundColor = ConsoleColor.Magenta; str = "▲"; break;
    case 4: Console.ForegroundColor = ConsoleColor.Green; str = "卐"; break;
    }
    }
    return str;
    }
    /// <summary>
    /// 玩游戏
    /// </summary>
    /// <param name="playNumber"></param>
    public static void PlayGame(int playNumber)
    {
    Random r = new Random();
    int rNumber = r.Next(1, 7);
    Console.WriteLine("{0}按任意键开始掷骰子", PlayNames[playNumber]);
    Console.ReadKey(true);
    Console.WriteLine("{0}掷出了{1}", PlayNames[playNumber], rNumber);
    PlayerPos[playNumber] += rNumber;
    Console.ReadKey(true);
    Console.WriteLine("{0}按任意键开始行动", PlayNames[playNumber]);
    Console.ReadKey(true);
    Console.WriteLine("{0}行动完了", PlayNames[playNumber]);
    Console.ReadKey(true);
    //玩家A有可能踩到了玩家B 方块 幸运轮盘 地雷 暂停 时空隧道
    if (PlayerPos[playNumber] == PlayerPos[1 - playNumber])
    {
    Console.WriteLine("{0}踩到了{1}并使{1}退6格", PlayNames[playNumber], PlayNames[1 - playNumber], PlayNames[1 - playNumber]);
    PlayerPos[playNumber] -= 6;
    Console.ReadKey(true);
    }
    else
    {
    switch (Maps[PlayerPos[playNumber]])
    {
    case 0: Console.WriteLine("{0}踩到了方块 游戏继续", PlayNames[playNumber]); Console.ReadKey(true); break;
    case 1:
    Console.WriteLine("{0}踩到了幸运轮盘,请选择 1--交换位置 2--轰炸对方", PlayNames[playNumber]);
    string input = Console.ReadLine();
    while (true)
    {
    if (input == "1")
    {
    Console.WriteLine("{0}和{1}交换位置", PlayNames[playNumber], PlayNames[1 - playNumber]);
    Console.ReadKey(true);
    int temp = PlayerPos[playNumber];
    PlayerPos[playNumber] = PlayerPos[1 - playNumber];
    PlayerPos[1 - playNumber] = temp;
    Console.WriteLine("交换完成!!!按任意键继续游戏!!!");
    Console.ReadKey(true);
    break;
    }
    else if (input == "2")
    {
    Console.WriteLine("{0}轰炸{1} 使{2}退6格", PlayNames[playNumber], PlayNames[1 - playNumber],PlayNames[1-playNumber]);

    Console.ReadKey(true);
    PlayerPos[1-playNumber] -= 6;
    ChangePos();
    Console.WriteLine("{0}退了6格",PlayNames[playNumber]);
    Console.ReadKey(true);
    break;
    }
    else
    {
    Console.WriteLine("只能输入1或者2 1--交换位置 2--轰炸对方");
    input = Console.ReadLine();
    }

    }
    break;
    case 2: Console.WriteLine("{0}踩到了地雷退6格", PlayNames[playNumber]); Console.ReadKey(true); PlayerPos[playNumber] -= 6; ChangePos(); break;
    case 3: Console.WriteLine("{0}踩到了暂停 暂停一回合", PlayNames[playNumber]); Flags[playNumber] = true; Console.ReadKey(true); break;
    case 4: Console.WriteLine("{0}踩到了时空隧道前进10格", PlayNames[playNumber]); PlayerPos[playNumber] += 10; Console.ReadKey(true); ChangePos(); break;
    }
    }
    ChangePos();
    Console.Clear();
    DrawMap();
    }
    //发送坐标移动时使用 防止AB跑出数组外
    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();
    }
    }
    }

  • 相关阅读:
    JavaScript正则表达式
    web页面全角&半角
    WEB中的GET和POST
    设计模式之观察者模式
    初识numpy的多维数组对象ndarray
    【ACM】求高精度幂
    C++ 变量初始化规则
    浅谈const限定符
    堆和栈的区别(转过无数次的文章)
    【编程小题目8】求解完数
  • 原文地址:https://www.cnblogs.com/Angdybo/p/11901426.html
Copyright © 2020-2023  润新知