飞行棋

控制板飞行棋

博主闲的时候,写的一个小demo,控制板上玩飞行机,蛮简单,不复杂,分享给大家看,算是一个判断语句+循环语句的一个小应用

图1

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)
        //{


        //}
    }
}


转载请注明: Zhou•Yong 飞行棋

目录