二人飞行棋(两个月前的)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


namespace planeChess
{
    class Program
    {
        /*
         * 1. 地图 第一横行 从1 到  15 ~30 随机一个数,表示第一行多少个格子
           第二竖列 从上面的最后一个开始~35 之间 随机一个数  表示第二竖列 多少个格子
       第三横行 从上面的最后一个开始~65 之间 随机一个数  表示第三横行多少个格子
       第四竖列 从上面的最后一个开始~70 之间 随机一个数  表示第四竖列 多少个格子
       最后横行  打完100 个格子.
           2.100 个格子中 随机设置  9个地雷  7个幸运轮盘   4个暂停   7个时空隧道
            注意: 地雷要布置在第6格之后,  如果布置的特殊符号已经存在,则重新随机设置
            如果A 玩家最后又3步,但投出 5步 则 退回2步.
           3.玩家必须100整才能赢得胜利!
         * */




        //logo
        static void logo()
        {
            Console.WriteLine("*****************************************");
            Console.WriteLine("**                                     **");
            Console.WriteLine("**         骑  士  飞  行  棋          **");
            Console.WriteLine("**                                     **");
            Console.WriteLine("*****************************************");
        }




        //录入玩家名字
        static string[] playName()
        {
            string[] players = new string[2];
            Console.Write("请输入A玩家的名字:");
            players[0] = Console.ReadLine();  




            //判断是否为空
            while (players[0].Trim() == "")
            {
                Console.Write("输入不能为空,重新输入A:");
                players[0] = Console.ReadLine();
            }




            Console.Write("请输入B玩家的名字:");
            players[1] = Console.ReadLine();
            while (true)
            {
                if (players[1].Trim() == "")
                {
                    Console.Write("输入不能为空,重新输入B:");
                    players[1] = Console.ReadLine();
                }


                //AB玩家名字不能相同
                else if (players[0].Trim() == players[1].Trim())
                {
                    Console.Write("AB不能相同,重新输入B:");
                    players[1] = Console.ReadLine();
                }
                else
                    break;
            }
            players[0] = players[0].Trim();
            players[1] = players[1].Trim();
            return players;
        }




        //地图
        static void map(int[] num,int[]countRan)
        {
            int i = 1, nbspTemp1 = 0, nbspTemp2 = 0;


            if (countRan[0] > countRan[2] - countRan[1])
                nbspTemp2 = countRan[0] + countRan[1] - countRan[2];
            else
                nbspTemp1 = countRan[2] - countRan[1] - countRan[0];


            Console.WriteLine("□:普通  ◎:幸运轮盘 ★:地雷 △:暂停 ※:时空隧道");
            for (int j = 0; j < nbspTemp1; j++)
                Console.Write("  ");
            while (i <= countRan[0])
            {
                mapImage(i, num);
                i++;
            }
            Console.WriteLine();
            while (i <= countRan[1])
            {
                for (int j = 0; j < countRan[0] + nbspTemp1 - 1; j++)
                    Console.Write("  ");
                mapImage(i, num);
                Console.WriteLine();
                i++;
            }
            i = countRan[2];
            for (int j = 0; j < nbspTemp2; j++)
                Console.Write("  ");
            while (i > countRan[1])
            {
                mapImage(i, num);
                i--;
            }
            Console.WriteLine();
            i = countRan[2] + 1;
            while (i <= countRan[3])
            {
                for (int j = 0; j < nbspTemp2; j++)
                    Console.Write("  ");
                mapImage(i, num);
                Console.WriteLine();
                i++;
            }
            for (int j = 0; j < nbspTemp2; j++)
                Console.Write("  ");
            while (i < 101)
            {
                mapImage(i, num);
                i++;
            }
            Console.WriteLine();
        }




        //特殊符号处理
        static void mapImage(int i, int[] num)
        {
            if (num[0] == num[1] && num[0] == i)
            {
                Console.ForegroundColor = ConsoleColor.Gray;
                Console.Write("<>");
            }
            else if (num[0] == i)
            {
                Console.ForegroundColor = ConsoleColor.Yellow;
                Console.Write("A");
            }
            else if (num[1] == i)
            {
                Console.ForegroundColor = ConsoleColor.Yellow;
                Console.Write("B");
            }
            else if (plays[i - 1] == 1)
            {
                Console.ForegroundColor = ConsoleColor.Green;
                Console.Write("★");
            }
            else if (plays[i - 1] == 2)
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.Write("◎");
            }
            else if (plays[i - 1] == 3)
            {
                Console.ForegroundColor = ConsoleColor.Blue;
                Console.Write("△");
            }
            else if (plays[i - 1] == 4)
            {
                Console.ForegroundColor = ConsoleColor.Yellow;
                Console.Write("※");
            }
            else
            {
                Console.ForegroundColor = ConsoleColor.White;
                Console.Write("□");
            }
        }




        //生成随机特殊符号
        static void ranImage(int number,int index,int n)
        {
            int count;
            for (int i = 0; i < number; i++) 
            {
                count=ran.Next(index,99);
                if (plays[count] == 0)
                    plays[count] = n;
            }
        }




        static int[] plays;
        static Random ran = new Random();
        static void Main(string[] args)
        {
            //定义玩家名字数组
            string[] players;
            //定义玩家步数
            int[] num = new int[2] { 1, 1 };
            //100个格子
            plays = new int[100];
            //控制台窗口宽度设置
            Console.WindowWidth = 100;




            #region 生成随机拐点
            int[] countRan = new int[4];
            countRan[0] = ran.Next(15, 31);
            countRan[1] = ran.Next(countRan[0] + 1, 36);
            countRan[2] = ran.Next(countRan[1] + 1, 66);
            countRan[3] = ran.Next(countRan[2] + 1, 71);
            #endregion
           


            #region 随机生成特殊符号
            ranImage(9, 6, 1);//9:个数 6:从第6个之后随机 1:地雷
            ranImage(7, 1, 2);//7:个数 1:从第6个之后随机 2:幸运轮盘
            ranImage(4, 1, 3);//4:个数 1:从第6个之后随机 3:暂停
            ranImage(7, 1, 4);//7:个数 1:从第6个之后随机 4:时空隧道
            #endregion




            #region clearOne
            //调用logo
            logo();
            //获取玩家名字
            players=playName();
            Console.Clear();
            #endregion




            #region clearTwo
            logo();
            Console.WriteLine("对战开始......");
            Console.WriteLine("{0}用A表示", players[0]);
            Console.WriteLine("{0}用B表示", players[1]);
            Console.WriteLine("如果AB在同一个位置用<>表示");
            Console.ReadLine();
            Console.Clear();
            #endregion




            #region 打印地图
            map(num, countRan);
            #endregion


            
            #region 掷骰子
            //count:获取随机数 
            //temp:当遇到幸运转盘时,实现玩家位置交换功能 
            //oldPlays:记录当前plays[i]的值,为下次循环做准备
            int isOne = 0, count, temp, oldPlays = 0;
            bool isTrue = true;
            while (true)
            {
                Console.WriteLine("玩家{0},按任意键掷骰子......", players[isOne]);
                Console.ReadKey(true);
                count = ran.Next(1, 7);
                Console.WriteLine("玩家{0}掷出了{1},按任意键行动......", players[isOne], count);
                Console.ReadKey(true);


                if (num[isOne] + count > 100)
                    num[isOne] = 200 - num[isOne] - count;
                else if (num[isOne] + count == 100)
                {
                    Console.Clear();
                    num[isOne] += count;
                    map(num, countRan);
                    Console.WriteLine();
                    Console.ForegroundColor = ConsoleColor.White;
                    Console.WriteLine("玩家{0}获胜", players[isOne]);
                    break;
                }
                else
                    num[isOne] += count;


            newPlays: Console.Clear();


                //判断当前的玩家是否与之前一个玩家重叠
                if (isOne == 0 && num[isOne] != 1)
                {
                    if (num[isOne] == num[isOne + 1])
                    {
                        map(num, countRan);
                        Console.WriteLine("{0}踩到了{1},{1}退回原点", players[isOne], players[isOne + 1], players[isOne + 1]);
                        Console.WriteLine("按任意键继续......");
                        Console.ReadKey(true);
                        num[isOne + 1] = 1;
                        Console.Clear();
                        map(num, countRan);
                    }
                }
                else
                {
                    if (num[isOne] == num[isOne - 1])
                    {
                        map(num, countRan);
                        Console.WriteLine("{0}踩到了{1},{1}退回原点", players[isOne], players[isOne - 1], players[isOne - 1]);
                        Console.WriteLine("按任意键继续......");
                        Console.ReadKey(true);
                        num[isOne - 1] = 1;
                        Console.Clear();
                        map(num, countRan);
                    }
                }


                Console.Clear();
                if (plays[num[isOne] - 1] == 1)
                {
                    map(num, countRan);
                    Console.WriteLine("玩家{0}踩中了地雷,后退6步", players[isOne]);
                    Console.ReadKey(true);
                    Console.Clear();


                    num[isOne] -= 6;
                    map(num, countRan);
                    //判断-6后的plays[i]的值是否为特殊符号的值
                    goto newPlays;
                }
                else if (plays[num[isOne] - 1] == 2)
                {
                    map(num, countRan);
                    Console.WriteLine("玩家{0}来到了幸运转盘,选择1:前进6步,选择2:交换位置", players[isOne]);
                    string choice = Console.ReadLine();
                    while (true)
                    {
                        if (choice.Trim() == "")
                        {
                            Console.Write("输入不能为空,重新输入:");
                            choice = Console.ReadLine();
                        }
                        else if (choice.Trim() == "1")
                        {
                            Console.Clear();
                            if (num[isOne] + 6 > 100)
                                num[isOne] = 194 - num[isOne];
                            else if (num[isOne] + 6 == 100)
                            {
                                Console.Clear();
                                num[isOne] += count;
                                map(num, countRan);
                                Console.WriteLine();
                                Console.ForegroundColor = ConsoleColor.White;
                                Console.WriteLine("玩家{0}获胜", players[isOne]);
                                break;
                            }
                            else
                            {
                                num[isOne] += 6;
                                //判断+6后的plays[i]的值是否为特殊符号的值
                                goto newPlays;
                            }
                            map(num, countRan);
                            break;
                        }
                        else if (choice.Trim() == "2")
                        {
                            Console.Clear();
                            //temp:当遇到幸运转盘时,实现玩家位置交换功能
                            if (isOne == 0)
                            {
                                temp = num[isOne];
                                num[isOne] = num[isOne + 1];
                                num[isOne + 1] = temp;
                            }
                            else
                            {
                                temp = num[isOne];
                                num[isOne] = num[isOne - 1];
                                num[isOne - 1] = temp;
                            }
                            map(num, countRan);
                        }
                        else
                        {
                            Console.WriteLine("输入错误,请输入1或者2!!!");
                            Console.Write("重新输入:");
                            choice = Console.ReadLine();
                        }
                    }
                    Console.WriteLine("按任意键继续......");
                    Console.ReadKey(true);
                }
                else if (plays[num[isOne] - 1] == 3)
                {
                    Console.Clear();
                    map(num, countRan);
                    Console.WriteLine("玩家{0}暂停一局", players[isOne]);
                }
                else if (plays[num[isOne] - 1] == 4)
                {
                    Console.Clear();
                    map(num, countRan);
                    Console.WriteLine("玩家{0}来到时空隧道,前进10步", players[isOne]);
                    Console.WriteLine("按任意键继续......");
                    Console.ReadKey(true);
                    Console.Clear();
                    if (num[isOne] + 10 > 100)
                    {
                        num[isOne] = 190 - num[isOne];
                        map(num, countRan);
                    }
                    else if (num[isOne] + 10 == 100)
                    {
                        num[isOne] += 10;
                        map(num, countRan);
                        Console.WriteLine();
                        Console.ForegroundColor = ConsoleColor.White;
                        Console.WriteLine("玩家{0}获胜", players[isOne]);
                        break;
                    }
                    else
                    {
                        num[isOne] += 10;
                        map(num, countRan);
                        //判断+10后的plays[i]的值是否为特殊符号的值
                        goto newPlays;
                    }
                }
                else
                    map(num, countRan);


                if (oldPlays == 3 && plays[num[isOne] - 1] != 3)
                {
                    if (isOne == 1 && isTrue)
                    {
                        isOne = 0;
                        isTrue = false;
                    }
                    else if (isOne == 0 && isTrue)
                    {
                        isOne = 1;
                        isTrue = false;
                    }
                    else
                        isTrue = true;
                }
                else
                    isTrue = true;


                //oldPlays:记录当前plays[i]的值,为下次循环做准备
                oldPlays = plays[num[isOne] - 1];
                isOne++;
                if (isOne > 1)
                    isOne = 0;
            }
            #endregion




            Console.ReadLine();
        }
    }
}

猜你喜欢

转载自blog.csdn.net/fffssso/article/details/80528918
今日推荐