三人飞行棋(当时初学时写的)

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


namespace planeChessThree
{
    class Program
    {
        /*
         * 1. 2个玩家玩游戏, 改成3个玩家 ,玩游戏.
           2. 原地图 随机4个转折点,  改成随机6个转折点.
           要求: 横向4行,纵向3列, 要求4行一样长度!
         * */




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




        //录入玩家名字
        static string[] playName()
        {
            string[] players = new string[3];
            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;
            }




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


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


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


            players[0] = players[0].Trim();
            players[1] = players[1].Trim();
            players[2] = players[2].Trim();
            return players;
        }




        //地图
        static void map(int[] num, int[] countRan)
        {
            int i = 1;
            Console.WriteLine("□:普通  ◎:幸运轮盘 ★:地雷 △:暂停 ※:时空隧道");
            while (i <= countRan[0])
            {
                mapImage(i, num);
                i++;
            }
            Console.WriteLine();
            while (i <= countRan[1])
            {
                for (int j = 0; j < countRan[0] - 1; j++)
                    Console.Write("  ");
                mapImage(i, num);
                Console.WriteLine();
                i++;
            }
            i = countRan[2];
            while (i > countRan[1])
            {
                mapImage(i, num);
                i--;
            }
            Console.WriteLine();
            i = countRan[2] + 1;
            while (i <= countRan[3])
            {
                mapImage(i, num);
                Console.WriteLine();
                i++;
            }
            while (i <= countRan[4])
            {
                mapImage(i, num);
                i++;
            }
            Console.WriteLine();
            while (i <= countRan[5])
            {
                for (int j = 0; j < countRan[0] - 1; j++)
                    Console.Write("  ");
                mapImage(i, num);
                Console.WriteLine();
                i++;
            }
            i = countRan[5] + countRan[0];
            while (i > countRan[5])
            {
                mapImage(i, num);
                i--;
            }
            Console.WriteLine();
            //由于最后一行最后一个格子颜色回影响下面的文字,设置字体颜色
            Console.ForegroundColor = ConsoleColor.White;
        }




        //特殊符号处理
        static void mapImage(int i, int[] num)
        {
            if ((num[0] == num[1] && num[0] == i) || (num[0] == num[2] && num[0] == i) || (num[1] == num[2] && num[1] == 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 (num[2] == i)
            {
                Console.ForegroundColor = ConsoleColor.Yellow;
                Console.Write("C");
            }
            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[]countRan)
        {
            int count;
            for (int i = 0; i < number; i++) 
            {
                count = ran.Next(index, countRan[5] + countRan[0] - 1);
                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[] { 1, 1, 1 };




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


            //格子随总个数变换而变换
            plays = new int[countRan[5] + countRan[0]];


            #region 随机生成特殊符号
            ranImage(15, 6, 1, countRan);//9:个数 6:从第6个之后随机 1:地雷
            ranImage(10, 1, 2, countRan);//7:个数 1:从第6个之后随机 2:幸运轮盘
            ranImage(40, 1, 3, countRan);//4:个数 1:从第6个之后随机 3:暂停
            ranImage(7, 1, 4, countRan);//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("{0}用C表示", players[2]);
            Console.WriteLine("如果AB或AC或BC在同一个位置用<>表示");
            Console.ReadLine();
            Console.Clear();
            #endregion




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


            
            #region 掷骰子
            //count:获取随机数 
            //temp:当遇到幸运转盘时,实现玩家位置交换功能 
            int isOne = 0, count, temp;
            bool[] isTrue = new bool[] { true, true, 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);




                #region 终点判断
                if (num[isOne] + count > plays.Length)
                    num[isOne] = 2 * plays.Length - num[isOne] - count;
                else if (num[isOne] + count == plays.Length)
                {
                    Console.Clear();
                    num[isOne] += count;
                    map(num, countRan);
                    Console.WriteLine();
                    Console.ForegroundColor = ConsoleColor.White;
                    Console.WriteLine("玩家{0}获胜", players[isOne]);
                    break;
                }
                else
                    num[isOne] += count;
                #endregion
                
                Console.Clear();


                #region 玩家步数重叠
                //判断当前的玩家是否与其他玩家步数重叠
                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 + 2])
                    {
                        map(num, countRan);
                        Console.WriteLine("{0}踩到了{1},{1}退回原点", players[isOne], players[isOne + 2], players[isOne + 2]);
                        Console.WriteLine("按任意键继续......");
                        Console.ReadKey(true);
                        num[isOne + 2] = 1;
                        Console.Clear();
                        map(num, countRan);
                    }
                }
                else if (isOne == 1 && 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);
                    }
                }
                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);
                    }
                    else if (num[isOne] == num[isOne - 2])
                    {
                        map(num, countRan);
                        Console.WriteLine("{0}踩到了{1},{1}退回原点", players[isOne], players[isOne - 2], players[isOne - 2]);
                        Console.WriteLine("按任意键继续......");
                        Console.ReadKey(true);
                        num[isOne - 2] = 1;
                        Console.Clear();
                        map(num, countRan);
                    }
                }
                #endregion
                
                Console.Clear();


                #region 踩中地雷判断
                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);
                }
                #endregion




                #region 踩到幸运转盘判定
                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() != "1" && choice.Trim() != "2")
                        {
                            Console.Write("输入错误,重新输入:");
                            choice = Console.ReadLine();
                        }
                        else if (choice.Trim() == "1")
                        {
                            Console.Clear();


                            #region 终点判断
                            if (num[isOne] + 6 > plays.Length)
                                num[isOne] = 2 * plays.Length - num[isOne] - 6;
                            else if (num[isOne] + 6 == plays.Length)
                            {
                                Console.Clear();
                                num[isOne] += count;
                                map(num, countRan);
                                Console.WriteLine();
                                Console.ForegroundColor = ConsoleColor.White;
                                Console.WriteLine("玩家{0}获胜", players[isOne]);
                                break;
                            }
                            else
                                num[isOne] += 6;
                            #endregion


                            map(num, countRan);
                            break;
                        }
                        else
                        {
                            #region 交换功能
                            //temp:当遇到幸运转盘时,实现玩家位置交换功能
                            if (isOne == 0)
                            {
                                Console.WriteLine("选择1:和{0}交换位置,选择2:和{1}交换位置", players[isOne + 1], players[isOne + 2]);
                                choice = Console.ReadLine();
                                while (true)
                                {
                                    if (choice.Trim() != "1" && choice.Trim() != "2")
                                    {
                                        Console.Write("输入错误,重新输入:");
                                        choice = Console.ReadLine();
                                    }
                                    else if (choice.Trim() == "1")
                                    {
                                        temp = num[isOne];
                                        num[isOne] = num[isOne + 1];
                                        num[isOne + 1] = temp;
                                        break;
                                    }
                                    else
                                    {
                                        temp = num[isOne];
                                        num[isOne] = num[isOne + 2];
                                        num[isOne + 2] = temp;
                                        break;
                                    }
                                }
                            }
                            else if (isOne == 1)
                            {
                                Console.WriteLine("选择1:和{0}交换位置,选择2:和{1}交换位置", players[isOne - 1], players[isOne + 1]);
                                choice = Console.ReadLine();
                                while (true)
                                {
                                    if (choice.Trim() != "1" && choice.Trim() != "2")
                                    {
                                        Console.Write("输入错误,重新输入:");
                                        choice = Console.ReadLine();
                                    }
                                    else if (choice.Trim() == "1")
                                    {
                                        temp = num[isOne];
                                        num[isOne] = num[isOne - 1];
                                        num[isOne - 1] = temp;
                                        break;
                                    }
                                    else
                                    {
                                        temp = num[isOne];
                                        num[isOne] = num[isOne + 1];
                                        num[isOne + 1] = temp;
                                        break;
                                    }
                                }
                            }
                            else
                            {
                                Console.WriteLine("选择1:和{0}交换位置,选择2:和{1}交换位置", players[isOne - 2], players[isOne - 1]);
                                choice = Console.ReadLine();
                                while (true)
                                {
                                    if (choice.Trim() != "1" && choice.Trim() != "2")
                                    {
                                        Console.Write("输入错误,重新输入:");
                                        choice = Console.ReadLine();
                                    }
                                    else if (choice.Trim() == "1")
                                    {
                                        temp = num[isOne];
                                        num[isOne] = num[isOne - 2];
                                        num[isOne - 2] = temp;
                                        break;
                                    }
                                    else
                                    {
                                        temp = num[isOne];
                                        num[isOne] = num[isOne - 1];
                                        num[isOne - 1] = temp;
                                        break;
                                    }
                                }
                            }
                            #endregion
                     
                            Console.Clear();
                            map(num, countRan);
                            break;
                        }
                    }
                    Console.WriteLine("按任意键继续......");
                    Console.ReadKey(true);
                }
                #endregion




                #region 踩到暂停判定
                else if (plays[num[isOne] - 1] == 3)
                {
                    Console.Clear();
                    map(num, countRan);
                    Console.WriteLine("玩家{0}暂停一局", players[isOne]);
                    isTrue[isOne] = false;
                }
                #endregion




                #region 踩到时空隧道判定
                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();


                    #region 终点判断
                    if (num[isOne] + 10 > plays.Length)
                    {
                        num[isOne] = 2 * plays.Length - num[isOne] - 10;
                        map(num, countRan);
                    }
                    else if (num[isOne] + 10 == plays.Length)
                    {
                        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);
                    }
                    #endregion
                }
                else
                    map(num, countRan);
                #endregion
                


                isOne++;
                if (isOne > 2)
                    isOne = 0;
                //暂停
                while (isTrue[isOne] == false)
                {
                    isTrue[isOne] = true;
                    isOne++;
                    if (isOne > 2)
                        isOne = 0;                        
                }              
            }
            #endregion




            Console.ReadLine();
        }
    }
}

猜你喜欢

转载自blog.csdn.net/fffssso/article/details/80528930