C#基础-飞行棋小游戏

直接贴代码
在这里插入图片描述

class Program
{
    static int[] Maps = new int[100];
    static int[] PlayerPos = new int[2];//玩家A,B的坐标
    static string[] PlayNames = new string[2];//玩家A,B的姓名
    static bool[] Flag = new bool[2];//两个玩家的标记

    static void Main(string[] args)
    {
        GameShow();
        #region 输入玩家姓名
        Console.WriteLine("请输入玩家A的姓名");
        PlayNames[0] = Console.ReadLine();
        while (PlayNames[0] == " ")
        {
            Console.WriteLine("玩家A姓名不能为空,请重新输入");
            PlayNames[0] = Console.ReadLine();
        }

        Console.WriteLine("请输入玩家B的姓名");
        PlayNames[1] = Console.ReadLine();
        while(PlayNames[1] == " " || PlayNames[1] == PlayNames[0])
        {
            if (PlayNames[1] == " ")
            {
                Console.WriteLine("玩家B的姓名不能为空,请重新输入");
            }
            else
            {
                Console.WriteLine("玩家B的姓名不能和玩家A的姓名相同,请重新输入");
            }
            PlayNames[1] = Console.ReadLine();
        }
       
        #endregion
        //此时不需要显示哪个士兵 需要清屏
        Console.Clear();
        GameShow();
        Console.WriteLine("{0}的士兵用A表示", PlayNames[0]);
        Console.WriteLine("{0}的士兵用B表示", PlayNames[1]);
        InitailMap();
        DrawMap();

        //当玩家A和玩家B没有一个人在终点时 ,两个玩家呀不停的玩游戏
        while (PlayerPos[0]< 99 && PlayerPos[1]<99)
        {
            if (Flag[0] == false)
            {
                PlayGame(0);
            }
            else
            {
                Flag[0] = false;//如果不写这个 如果第一次暂停 将永远玩不了游戏

            }
            if (PlayerPos[0]>=99)
            {
                Console.WriteLine("玩家{0}赢了玩家{1}",PlayNames[0],PlayNames[1]);
            }
            if (Flag[1] == false)
            {
                PlayGame(1);
            }
            else
            {
                Flag[1] = false;
            }
            if (PlayerPos[1] >= 99)
            {
                Console.WriteLine("玩家{0}赢了玩家{1}", PlayNames[1], PlayNames[0]);
            }
        }

        Console.ReadKey();
    }
    /// <summary>
    /// 画游戏头
    /// </summary>
    public static void GameShow()
    {
        Console.ForegroundColor = ConsoleColor.Red;
        Console.WriteLine("******************************");
        Console.ForegroundColor = ConsoleColor.Yellow;
        Console.WriteLine("******************************");
        Console.ForegroundColor = ConsoleColor.Green;
        Console.WriteLine("*********dotnet飞行棋*********");
        Console.ForegroundColor = ConsoleColor.Gray;
        Console.WriteLine("******************************");
        Console.ForegroundColor = ConsoleColor.Blue;
        Console.WriteLine("******************************");
        Console.ForegroundColor = ConsoleColor.Cyan;
        Console.WriteLine("******************************");
    }
    public static void InitailMap()
    {
        //0代表方块  1代表幸运轮盘 2代表地雷 3代表暂停  4代表时空隧道 根据这个来画图 
        int[] luckyturn = { 6, 23, 40, 55, 69, 83 };//幸运轮盘
        for (int i = 0; i < luckyturn.Length; i++)
        {
            //var index = luckyturn[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 };//暂停
        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]] = 3;
        }
    }
    public static void DrawMap()
    {
        Console.WriteLine("图例:幸运轮盘◎    地雷☆     暂停△    时光隧道卍");
        #region 第一横行
        for (int i = 0; i < 30; i++)
        {
            Console.Write(DrawStringMap(i));
        }
        Console.WriteLine();
        #endregion

        #region 第二竖行
        for (int i = 30; i < 36; i++)
        {
            for (int j = 0; j < 29; j++)
            {
                Console.Write("  ");
            }
            Console.Write(DrawStringMap(i));
            Console.WriteLine();
        }
        #endregion

        #region 第三横行
        for (int i = 64; i >=35; i--)
        {
            Console.Write(DrawStringMap(i));
        }
        Console.WriteLine();
        #endregion

        #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();//画完地图需要换行 使其光标在下一行
    }

    public static string DrawStringMap(int i)
    {
        string str = "";
        //先画A B人(用数组存) 位置相同且在地图上
        //PlayerPos[0]代表A,PlayerPos[1]代表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.Red;
                     str = "□";
                    break;
                case 1:
                    Console.ForegroundColor = ConsoleColor.Yellow;
                     str = "◎";
                    break;
                case 2:
                    Console.ForegroundColor = ConsoleColor.Green;
                     str = "☆";
                    break;
                case 3:
                    Console.ForegroundColor = ConsoleColor.Blue;
                     str = "△";
                    break;
                case 4:
                    Console.ForegroundColor = ConsoleColor.Cyan;
                     str = "卍";
                    break;
                default:
                    break;
            }
        }
        return str;
    }

    public static void PlayGame(int playNumber)
    {
        Random random = new Random();
        int r = random.Next(1,7);
        Console.WriteLine("玩家{0}按任意键开始掷骰子", PlayNames[playNumber]);
        Console.ReadKey(true);
        Console.WriteLine("玩家{0}掷出了{1}", PlayNames[playNumber],r);
        PlayerPos[playNumber] += r;
        Console.WriteLine("玩家{0}按任意键开始行动", PlayNames[playNumber]);
        Console.ReadKey(true);
        Console.WriteLine("玩家{0}行动完了", PlayNames[playNumber]);
        Console.ReadKey(true);
        //游戏规则 玩家A可能踩到玩家B 玩家B退6格 也可能踩到方块 幸运轮盘 地雷 暂停 时空隧道
        if (PlayerPos[playNumber] == PlayerPos[1- playNumber])
        {
            Console.WriteLine("玩家{0}踩到了玩家{1},玩家{1}退6格", PlayNames[playNumber], PlayNames[1- playNumber], PlayNames[1- playNumber]);
            PlayerPos[1- playNumber] -= 6;
            Console.ReadKey(true);
        }
        else
        {
            switch (Maps[PlayerPos[playNumber]])
            {
                case 0://方块
                    Console.WriteLine("玩家{0}踩到了方块,安全", PlayNames[playNumber]);
                    break;
                case 1://幸运轮盘
                    Console.WriteLine("玩家{0}踩到了幸运轮盘 按1交换位置 按2轰炸对象 使对方退6格", PlayNames[playNumber]);
                    string input = Console.ReadLine();
                    while (true)
                    {
                        if (input == "1")
                        {
                            Console.WriteLine("玩家{0}选择与玩家{1}交换位置", PlayNames[playNumber], PlayNames[1- playNumber]);
                            var 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]);
                            PlayerPos[1- playNumber] -= 6;
                            Console.WriteLine("玩家{0}退了6格", PlayNames[1- playNumber]);
                            Console.ReadKey(true);
                            break;
                        }
                        else
                        {
                            Console.WriteLine("玩家{0}重新输入1或2 ,按1交换位置 按2轰炸对象 使对方退6格", PlayNames[playNumber]);
                            input = Console.ReadLine();
                        }
                    }

                    break;
                case 2:
                    Console.WriteLine("玩家{0}踩到了地雷,退6格", PlayNames[playNumber]);
                    PlayerPos[playNumber] -= 6;
                    Console.ReadKey(true);
                    break;
                case 3:
                    Console.WriteLine("玩家{0}踩到了暂停,暂停一回合", PlayNames[playNumber]);
                    Flag[playNumber] = true;
                    Console.ReadKey(true);
                    break;
                case 4:
                    Console.WriteLine("玩家{0}踩到了时空隧道,前进10格", PlayNames[playNumber]);
                    PlayerPos[playNumber] += 10;
                    Console.ReadKey(true);
                    break;
            }
        }
        ChangePos();//判断玩家坐标时
        Console.Clear();
        DrawMap();
    }

    /// <summary>
    /// 当玩家坐标改变的时候调用
    /// </summary>
    /// <param name="playNumber"></param>
    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;
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值