飞行棋小项目简单实现

实现效果:

internal class Program
{

    static void Main(string[] args)
    {
        
        Top();
        
        while (f)
        {
            if (Play(0) == 1)
            {
                break;
            }

            if (Play(1) == 1)
            {
                break;
            }
        }
    }

    #region 初始化地图坐标数组
    public static void InitailMap()
    {
        int[] luckyturn = { 6, 23, 40, 55, 69, 83 };//幸运轮盘,这个数组中元素是地图元素的下标
        for (int i = 0; i < luckyturn.Length; i++)
        {
            map[luckyturn[i]] = 1;
        }
        int[] landMine = { 5, 13, 17, 33, 38, 50, 64, 80, 94 };//地雷
        for (int i = 0; i < landMine.Length; i++)
        {
            map[landMine[i]] = 2;
        }
        int[] pause = { 9, 27, 60, 93 };//暂停
        for (int i = 0; i < pause.Length; i++)
        {
            map[pause[i]] = 3;
        }
        int[] timeTunnel = { 20, 25, 45, 63, 72, 88, 90 };//时空跳跃
        for (int i = 0; i < timeTunnel.Length; i++)
        {
            map[timeTunnel[i]] = 4;
        }
    }
    #endregion

    #region 总地图
    public static void Maps()
    {
        Console.WriteLine("图例:幸运轮盘:◎  地雷:★  暂停:▲  时空隧道:卐 ");
        #region 第一横行0-29
        for (int i = 0; i < 30; i++)
        {
            Console.Write(StrReturn(i));
        }
        Console.WriteLine();//换行
        #endregion
        #region 第一竖列30-34
        for (int i = 30; i < 35; i++)
        {
            //画空格
            for (int j = 0; j < 29; j++)
            {
                Console.Write("  ");
            }
            Console.WriteLine(StrReturn(i));
        }
        #endregion
        #region 第二横行35-64
        for (int i = 64; i >= 35; i--)
        {
            Console.Write(StrReturn(i));
        }
        Console.WriteLine();//换行
        #endregion
        #region 第二竖列65-69
        for (int i = 65; i < 70; i++)
        {
            Console.WriteLine(StrReturn(i));
        }
        #endregion
        #region 第三横行70-99
        for (int i = 70; i < 100; i++)
        {
            Console.Write(StrReturn(i));
        }
        #endregion
        Console.WriteLine();
    }
    #endregion
    public static bool f = true;
    public static string[] name=new string[2];
    public static int[] name_adress=new int[2];
    public static string[] str = new string[100];
    public static int[] map = new int[100];
    public static string[] content = { "◎", "★", "▲", "卐", "□", "□", "□" };
    public static int[] content_count = { 1, 2, 3, 4, 0, 0, 0 };
    public static void Top()
    {
        #region 头部
        Console.ForegroundColor = ConsoleColor.Cyan;
        //给文字上色,前景色,ConsoleColor是一个枚举
        Console.WriteLine("**************************");
        Console.ForegroundColor = ConsoleColor.Blue;
        Console.WriteLine("**************************");
        Console.ForegroundColor = ConsoleColor.Red;
        Console.WriteLine("******飞行棋游戏1.0 ******");
        Console.ForegroundColor = ConsoleColor.Green;
        Console.WriteLine("**************************");
        Console.ForegroundColor = ConsoleColor.Yellow;
        Console.WriteLine("**************************");
        #endregion

        #region 姓名
        name = new string[2];
        name_adress = new int[2];
        Console.WriteLine("请输入玩家A的姓名:");
    name0_goto:
        name[0] = Console.ReadLine();
        if (name[0] == "" || name[0] == null)
        {
            Console.WriteLine("玩家A姓名不能为空,请重新输入");
            goto name0_goto;
        }


        Console.WriteLine("请输入玩家B的姓名:");
    name1_goto:
        name[1] = Console.ReadLine();
        if (name[1] == null || name[1] == "" || name[1] == name[0])
        {
            Console.WriteLine("玩家B姓名不能为空或与玩家A姓名相同,请重新输入");
            goto name1_goto;
        }
        #endregion

        #region 地图
        InitailMap();
        Console.WriteLine("图例:幸运轮盘:◎  地雷:★  暂停:▲  时空隧道:卐   普通:□");
        Maps();
        #endregion

        #region 显示A和B的棋子对应的玩家姓名
        //Console.WriteLine();
        Console.WriteLine("\n玩家{0}的士兵用A表示", name[0]);
        Console.WriteLine("玩家{0}的士兵用B表示", name[1]);
        #endregion


    }


    #region 玩游戏
    public static int Play(int name_adress_p)
    {
        Random r = new Random();
        int rNumber = r.Next(1, 7);//随机数
        //n=
        Console.WriteLine("玩家{0}按任意键开始掷骰子", name[name_adress_p]);
        Console.ReadKey();
        Console.WriteLine("玩家{0}掷出了{1}", name[name_adress_p], rNumber);
        name_adress[name_adress_p] += rNumber;
        Console.ReadKey();
        Console.WriteLine("玩家{0}按任意键开始行动", name[name_adress_p]);
        Console.ReadKey();
        Console.WriteLine("玩家{0}行动完了", name[name_adress_p]);
        Console.ReadKey();

        if (name_adress[name_adress_p]>=99)
        {
            Console.WriteLine("游戏结束:玩家{0}胜利", name[name_adress_p]);
            //f = false;
            return 1;
        }

        if (name_adress[name_adress_p] == name_adress[1 - name_adress_p])//玩家a踩到玩家b,b退6格
        {
            Console.WriteLine("玩家{0}踩到了玩家{1},玩家{2}倒退6格",
                name[name_adress_p], name[1 - name_adress_p], name[1 - name_adress_p]);
            name_adress[1 - name_adress_p] -= 6;
            Console.ReadKey();
            //PanDuan(name_adress_p);
        }
        else
        {

            //int a = content_count[Array.IndexOf(content, str[name_adress[name_adress_p]])];//
            switch (map[name_adress[name_adress_p]])//01234
            {
                case 0://踩到空格安全
                    Console.WriteLine("玩家{0}踩到了方块,安全", name[name_adress_p]);
                    Console.ReadKey(true);
                    break;
                case 1://踩到幸运,1--交换位置 2--轰炸对手
                    Console.WriteLine("玩家{0}踩到了幸运轮盘,请选择 1--交换位置 2--轰炸对手", name[name_adress_p]);
                    string s = Console.ReadLine();
                    while (true)
                    {
                        if (s == "1")
                        {
                            Console.WriteLine("玩家{0}选择了交换位置", name[name_adress_p]);
                            int temp = name_adress[1 - name_adress_p];
                            name_adress[name_adress_p] = name_adress[1 - name_adress_p];
                            name_adress[1 - name_adress_p] = temp;
                            Console.ReadKey(true);
                            Console.WriteLine("交换完成");
                            Console.ReadKey(true);
                            break;
                        }
                        else if (s == "2")
                        {
                            Console.WriteLine("玩家{0}选择了轰炸对手,玩家{1}倒退6格", name[name_adress_p], name[1 - name_adress_p]);
                            name_adress[1 - name_adress_p] -= 6;
                            Console.ReadKey(true);
                            //PanDuan(name_adress_p);
                            break;
                        }
                        else
                        {
                            Console.WriteLine("只能输入1--交换位置 2--轰炸对手,请重新输入");
                            s = Console.ReadLine();
                            break;
                        }
                    }
                    break;
                case 2://踩到地雷,后退6格
                    Console.WriteLine("玩家{0}踩到了地雷,倒退6格", name[name_adress_p]);
                    name_adress[name_adress_p] -= 6;
                    Console.ReadKey(true);
                    break;
                case 3://踩到暂停,停一回合(这里的暂停我们稍后来写。)
                    Console.WriteLine("玩家{0}踩到了暂停,暂停一回合", name[name_adress_p]);
                    Console.ReadKey(true);
                    break;
                case 4://踩到时空,前进10格
                    Console.WriteLine("玩家{0}踩到了时空穿梭,前进10格", name[name_adress_p]);
                    name_adress[name_adress_p] += 10;
                    Console.ReadKey(true);
                    break;
            }

        }
        Console.Clear();
        Maps();
        return 0;
    }
    #endregion

    #region 返回对应坐标要显示的内容
    /// <summary>
    /// 
    /// </summary>
    /// <param name="i"></param>
    /// <returns>坐标i所在地方显示的字符串</returns>
    public static string StrReturn(int i)
    {
        string str1 = "";
        //如果玩家a和b坐标相同,并且都在地图上,画一个<>
        if ((name_adress[0] == name_adress[1]) && name_adress[1] == i)
        {
            Console.ForegroundColor = ConsoleColor.White;
            str1 = "<>";
        }
        else if (name_adress[0] == i)
        {
            Console.ForegroundColor = ConsoleColor.White;
            //shift+空格全角
            str1 = "A";
        }
        else if (name_adress[1] == i)
        {
            Console.ForegroundColor = ConsoleColor.White;
            str1 = "B";
        }
        //public static int[] content_count = { 1, 2, 3, 4, 0, 0, 0 };
        else
        {
            switch (map[i])
            {
                case 0:
                    Console.ForegroundColor = ConsoleColor.White;
                    str1 = "□";//普通
                    break;
                case 1:
                    Console.ForegroundColor = ConsoleColor.Red;
                    str1 = "◎";//幸运
                    break;
                case 2:
                    Console.ForegroundColor = ConsoleColor.Green;
                    str1 = "★";//地雷
                    break;
                case 3:
                    Console.ForegroundColor = ConsoleColor.Yellow;
                    str1 = "▲";//暂停
                    break;
                case 4:
                    Console.ForegroundColor = ConsoleColor.Blue;
                    str1 = "卐";//时空
                    break;
            }
        }
        return str1;
    }
    #endregion

}

下面这个是随机地图的写法:

实现效果:

internal class Program
{

    static void Main(string[] args)
    {

        Top();
        while (f)
        {
            if (Flags[0] == false)
            {
                if (Play(0) == 1)
                {
                    break;
                }
            }
            else
            {
                Flags[0] = false;
            }

            if (Flags[1] == false)
            {
                if (Play(1) == 1)
                {
                    break;
                }
            }
            else
            {
                Flags[1] = false;
            }
        }

    }

   
    public static bool f = true;
    public static string[] name = new string[2];
    public static int[] name_adress = new int[2];
    public static string[] str = new string[100];
    public static int[] map = new int[100];
    public static int[] map_2 = new int[100];
    public static string[] content = { "□", "□", "□","◎", "★", "▲", "卐"  };
    public static int[] content_count = { 0, 0, 0,1, 2, 3, 4  };
    public static bool[] Flags=new bool[2];


    public static void Top()
    {
        #region 头部
        Console.ForegroundColor = ConsoleColor.Cyan;
        //给文字上色,前景色,ConsoleColor是一个枚举
        Console.WriteLine("**************************");
        Console.ForegroundColor = ConsoleColor.Blue;
        Console.WriteLine("**************************");
        Console.ForegroundColor = ConsoleColor.Red;
        Console.WriteLine("******飞行棋游戏1.0 ******");
        Console.ForegroundColor = ConsoleColor.Green;
        Console.WriteLine("**************************");
        Console.ForegroundColor = ConsoleColor.Yellow;
        Console.WriteLine("**************************");
        #endregion

        #region 姓名
        name = new string[2];
        name_adress = new int[2];
        Console.WriteLine("请输入玩家A的姓名:");
    name0_goto:
        name[0] = Console.ReadLine();
        if (name[0] == "" || name[0] == null)
        {
            Console.WriteLine("玩家A姓名不能为空,请重新输入");
            goto name0_goto;
        }


        Console.WriteLine("请输入玩家B的姓名:");
    name1_goto:
        name[1] = Console.ReadLine();
        if (name[1] == null || name[1] == "" || name[1] == name[0])
        {
            Console.WriteLine("玩家B姓名不能为空或与玩家A姓名相同,请重新输入");
            goto name1_goto;
        }
        #endregion

        #region 地图
        //InitailMap();
        Console.WriteLine("图例:幸运轮盘:◎  地雷:★  暂停:▲  时空隧道:卐   普通:□");
        //Maps();
        DiTu();
        #endregion

        #region 显示A和B的棋子对应的玩家姓名
        //Console.WriteLine();
        Console.WriteLine("\n玩家{0}的士兵用A表示", name[0]);
        Console.WriteLine("玩家{0}的士兵用B表示", name[1]);
        #endregion


    }


    public static void DiTu()
    {
        Random random = new Random();

        for (int i = 0; i < 100; i++)
        {
            map[i] = i;
            int r = random.Next(content.Length);
            map_2[i] = content_count[r];
            if (i == 99)
            {
                Console.ForegroundColor = ConsoleColor.White;
                Console.Write("□");
                str[i] = "□";
                map_2[i] = 0;
            }
            else if (i >= 70)
            {
                content[r] = Str_2(i, map_2[i]);
                Console.Write(content[r]);
                str[i] = content[r];
            }
            else if (i >= 65)
            {
                if (i == 65)
                {
                    Console.WriteLine();
                }
                content[r] = Str_2(i, map_2[i]);
                Console.Write(content[r] + "\n");
                str[i] = content[r];
            }
            else if (i >= 35)
            {
                if (i == 35)
                {
                    Console.WriteLine();
                }
                content[r] = Str_2(i, map_2[i]);
                Console.Write(content[r]);
                str[i] = content[r];
            }
            else if (i >= 30)
            {
                content[r] = Str_2(i, map_2[i]);
                Console.Write("\n\t\t\t\t\t\t\t  " + content[r]);
                str[i] = content[r];
            }
            else
            {
                content[r] = Str_2(i, map_2[i]);
                Console.Write(content[r]);
                str[i] = content[r];
                //Console.WriteLine(i);
                //Console.WriteLine(a);
            }
        }
        Console.WriteLine();
    }
    public static void DiTus()
    {
        Console.WriteLine("图例:幸运轮盘:◎  地雷:★  暂停:▲  时空隧道:卐 ");
        for (int i = 0; i < 100; i++) 
        {
            if (i >= 70)
            {
                //content[r] = Str_2(i, a);
                Console.Write(Str_2(i, map_2[i]));
                //str[i] = content[r];
            }
            else if (i >= 65)
            {
                if (i == 65)
                {
                    Console.WriteLine();
                }
                //content[r] = Str_2(i, a);
                Console.Write(Str_2(i, map_2[i]) + "\n");
                //str[i] = content[r];
            }
            else if (i >= 35)
            {
                if (i == 35)
                {
                    Console.WriteLine();
                }
                //content[r] = Str_2(i, a);
                Console.Write(Str_2(i, map_2[i]));
                //str[i] = content[r];
            }
            else if (i >= 30)
            {
                //content[r] = Str_2(i, a);
                Console.Write("\n\t\t\t\t\t\t\t  " + Str_2(i, map_2[i]));
                //str[i] = content[r];
            }
            else
            {
                //content[r] = Str_2(i, a);
                Console.Write(Str_2(i, map_2[i]));
                //str[i] = content[r];
                //Console.WriteLine(i);
                //Console.WriteLine(a);
            }
        }
        Console.WriteLine();
    }
    public static string Str_2(int i, int a)
    {
        string str1 = "";

        switch (a)
        //switch (content_count[Array.IndexOf(content,a)])
        {
            case 0:
                Console.ForegroundColor = ConsoleColor.White;
                str1 = "□";//普通
                break;
            case 1:
                Console.ForegroundColor = ConsoleColor.Red;
                str1 = "◎";//幸运
                break;
            case 2:
                Console.ForegroundColor = ConsoleColor.Green;
                str1 = "★";//地雷
                break;
            case 3:
                Console.ForegroundColor = ConsoleColor.Yellow;
                str1 = "▲";//暂停
                break;
            case 4:
                Console.ForegroundColor = ConsoleColor.Blue;
                str1 = "卐";//时空
                break;
        }

        //如果玩家a和b坐标相同,并且都在地图上,画一个<>
        if ((name_adress[0] == name_adress[1]) && name_adress[1] == i)
        {
            Console.ForegroundColor = ConsoleColor.White;
            str1 = "<>";
        }
        else if (name_adress[0] == i)
        {
            Console.ForegroundColor = ConsoleColor.White;
            //shift+空格全角
            str1 = "A";
        }
        else if (name_adress[1] == i)
        {
            Console.ForegroundColor = ConsoleColor.White;
            str1 = "B";
        }
        return str1;
    }


    
    #region 玩游戏
    public static int Play(int name_adress_p)
    {
        Random r = new Random();
        int rNumber = r.Next(1, 7);//随机数
        //n=
        Console.WriteLine("玩家{0}按任意键开始掷骰子", name[name_adress_p]);
        Console.ReadKey();
        Console.WriteLine("玩家{0}掷出了{1}", name[name_adress_p], rNumber);
        name_adress[name_adress_p] += rNumber;
        Console.ReadKey();
        Console.WriteLine("玩家{0}按任意键开始行动", name[name_adress_p]);
        Console.ReadKey();
        Console.WriteLine("玩家{0}行动完了", name[name_adress_p]);
        Console.ReadKey();

        if (name_adress[name_adress_p] >= 99)
        {
            Console.WriteLine("游戏结束:玩家{0}胜利", name[name_adress_p]);
            //f = false;
            return 1;
        }

        if (name_adress[name_adress_p] == name_adress[1 - name_adress_p])//玩家a踩到玩家b,b退6格
        {
            Console.WriteLine("玩家{0}踩到了玩家{1},玩家{2}倒退6格",
                name[name_adress_p], name[1 - name_adress_p], name[1 - name_adress_p]);
            name_adress[1 - name_adress_p] -= 6;
            Console.ReadKey();
            //PanDuan(name_adress_p);
        }
        else
        {
            //Console.WriteLine("开始");
            //int a = content_count[Array.IndexOf(content, str[name_adress[name_adress_p]])];//
            switch (map_2[name_adress[name_adress_p]])//01234
            {
                case 0://踩到空格安全
                    Console.WriteLine("玩家{0}踩到了方块,安全", name[name_adress_p]);
                    Console.ReadKey(true);
                    break;
                case 1://踩到幸运,1--交换位置 2--轰炸对手
                    Console.WriteLine("玩家{0}踩到了幸运轮盘,请选择 1--交换位置 2--轰炸对手", name[name_adress_p]);
                    string s = Console.ReadLine();
                    while (true)
                    {
                        if (s == "1")
                        {
                            Console.WriteLine("玩家{0}选择了交换位置", name[name_adress_p]);
                            int temp = name_adress[name_adress_p];
                            name_adress[name_adress_p] = name_adress[1-name_adress_p];
                            name_adress[1-name_adress_p] = temp;
                            Console.ReadKey(true);
                            Console.WriteLine("交换完成");
                            Console.ReadKey(true);
                            break;
                        }
                        else if (s == "2")
                        {
                            Console.WriteLine("玩家{0}选择了轰炸对手,玩家{1}倒退6格", name[name_adress_p], name[1 - name_adress_p]);
                            name_adress[1 - name_adress_p] -= 6;
                            Console.ReadKey(true);
                            //PanDuan(name_adress_p);
                            break;
                        }
                        else
                        {
                            Console.WriteLine("只能输入1--交换位置 2--轰炸对手,请重新输入");
                            s = Console.ReadLine();
                            //break;
                        }
                    }
                    break;
                case 2://踩到地雷,后退6格
                    Console.WriteLine("玩家{0}踩到了地雷,倒退6格", name[name_adress_p]);
                    name_adress[name_adress_p] -= 6;
                    Console.ReadKey(true);
                    break;
                case 3://踩到暂停,停一回合
                    Console.WriteLine("玩家{0}踩到了暂停,暂停一回合", name[name_adress_p]);
                    Flags[name_adress_p] = true;
                    Console.ReadKey(true);
                    break;
                case 4://踩到时空,前进10格
                    Console.WriteLine("玩家{0}踩到了时空穿梭,前进10格", name[name_adress_p]);
                    name_adress[name_adress_p] += 10;
                    Console.ReadKey(true);
                    break;
                default:
                    Console.WriteLine("错了");
                    break;
            }

        }
        if (name_adress[name_adress_p] < 0)
        {
            Console.WriteLine("玩家{0}地点小于0,回到0", name[name_adress_p]);
            name_adress[name_adress_p] = 0;
        }
        if (name_adress[name_adress_p] >= 99)
        {
            Console.WriteLine("游戏结束:玩家{0}胜利", name[name_adress_p]);
            //f = false;
            return 1;
        }
        Console.Clear();
        DiTus();
        //Console.WriteLine($"a:{name_adress[name_adress_p]},b{name_adress[1-name_adress_p]}");
        return 0;
    }
    #endregion

    #region 返回对应坐标要显示的内容
    /// <summary>
    /// 
    /// </summary>
    /// <param name="i"></param>
    /// <returns>坐标i所在地方显示的字符串</returns>
    public static string StrReturn(int i)
    {
        string str1 = "";
        //如果玩家a和b坐标相同,并且都在地图上,画一个<>
        if ((name_adress[0] == name_adress[1]) && name_adress[1] == i)
        {
            Console.ForegroundColor = ConsoleColor.White;
            str1 = "<>";
        }
        else if (name_adress[0] == i)
        {
            Console.ForegroundColor = ConsoleColor.White;
            //shift+空格全角
            str1 = "A";
        }
        else if (name_adress[1] == i)
        {
            Console.ForegroundColor = ConsoleColor.White;
            str1 = "B";
        }
        //public static int[] content_count = { 1, 2, 3, 4, 0, 0, 0 };
        else
        {
            switch (map_2[i])
            {
                case 0:
                    Console.ForegroundColor = ConsoleColor.White;
                    str1 = "□";//普通
                    break;
                case 1:
                    Console.ForegroundColor = ConsoleColor.Red;
                    str1 = "◎";//幸运
                    break;
                case 2:
                    Console.ForegroundColor = ConsoleColor.Green;
                    str1 = "★";//地雷
                    break;
                case 3:
                    Console.ForegroundColor = ConsoleColor.Yellow;
                    str1 = "▲";//暂停
                    break;
                case 4:
                    Console.ForegroundColor = ConsoleColor.Blue;
                    str1 = "卐";//时空
                    break;
            }
        }
        return str1;
    }
    #endregion
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值