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

namespace 飞行棋
{
    class Program
    {
        public static string strformat = "";
        public static int[] Map = new int[100];
        public static int[] PlayerPos = new int[2];
        public static string[] PlayerName = new string[2];
        public static bool[] flags = new bool[] { false, false };
        private static Timer tm;
        static char[] S = new char[512];
        static int n = 0;

static void Main(string[] args)
        {
            Console.SetWindowPosition(0,0);//设置控制台在屏幕中的位置
            Console.SetWindowSize(80,36);//设置控制台宽度和高度
            ShowUI();//显示游戏标题
            InitMap();//初始化地图
            PlayerName = Login();//用户登录
            Console.Clear();//清屏
            ShowUI();//显示游戏标题
            Console.WriteLine("一场轰轰烈烈的爱情追逐战即将开始……\n");
            Console.WriteLine("首先上场的是我们的萌妹纸 {0} 美女……\n",PlayerName[0]);
            Console.WriteLine("紧随而来的是我们的帅小伙 {0} 帅哥……\n",PlayerName[1]);
            DrawMap();
            Console.WriteLine("按任意键开始爱情追逐!");
            Console.ReadKey(true);
            Console.Clear();
            DrawMap();
            Console.WriteLine("爱情追逐已经开始了……");
            Console.WriteLine("毫无疑问,萌妹纸 {0} 先掷骰子!\n",PlayerName[0]);
            //游戏过程
            while (PlayerPos[0] < 99 && PlayerPos[1] < 99)
            {
                //第一个问题,玩家的坐标大于99了,玩家显示的位置可能不在地图上
                //判断  玩家每走一次,或者说涉及到坐标发生改变,就应该检查一下当前位置是否大于99
                //第二个问题,玩家的坐标可能小于0

//第一个人掷骰子
                if (flags[0] == false)
                {
                    RowDo(0);
                }
                else
                {
                    flags[0] = false;
                }

//判断第一个人是否胜利
                if(PlayerPos[0] == 99)
                {
                    Win(0);
                    break;
                }

//第二个人掷骰子
                if (flags[1] == false)
                {
                    RowDo(1);
                }
                else
                {
                    flags[1] = false;
                }

//判断第二个人是否胜利
                if (PlayerPos[1] == 99)
                {
                    Win(1);
                    break;
                }
            }

Console.Clear();
            Console.ReadKey();
        }

/// <summary>
        /// 游戏标题部分显示,封装为一个方法
        /// </summary>
        public static void ShowUI()
        {
            Console.WriteLine("");
            Console.WriteLine("                     **************************************");
            Console.WriteLine("                     *                                    *");
            Console.Write("                     *   >>>>>>  ");
            Console.ForegroundColor = ConsoleColor.Red;
            Console.Write("情侣终极飞行棋");
            Console.ForegroundColor = ConsoleColor.Gray;
            Console.WriteLine("  <<<<<<   *");
            Console.WriteLine("                     *                                    *");
            Console.WriteLine("                     **************************************");
            Console.WriteLine("");
            Console.WriteLine("");
        }

/// <summary>
        /// 初始化地图
        /// 1:幸运轮盘  2、失之交臂  3、暂停一次  4、爱神丘比特
        /// </summary>
        public static void InitMap()
        {
             //map数组中一共有100个元素,现在默认是每个元素里的值都是0
             //让某些元素中的值发生变化
            int[] luckyturn = new int[6]{ 6, 23, 40, 55, 69, 83 };//幸运轮盘
            int[] landMine = new int[9] { 5, 13, 17, 33, 38, 50, 64, 80, 94 };//失之交臂
            int[] pause = new int[4] { 9, 27, 60, 93 };//暂停一次
            int[] timeTunnel = new int[7] { 20, 25, 45, 63, 72, 88, 90 };//爱神丘比特

for (int i = 0; i < luckyturn.Length; i++)
            {
                Map[luckyturn[i]] = 1;
            }

for (int i = 0; i < landMine.Length; i++)
            {
                Map[landMine[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>
        public static void DrawMap()
        {
            Console.WriteLine("图例:幸运轮盘:◎  失之交臂:☆  暂停一次:▲  爱神丘比特:卐\n");
            Console.Write("   起点-> ");
            #region 画第一横行
            DrawMapLeftToRight(0, 29);
            #endregion
            Console.WriteLine("");
            #region 画第一竖列
            for (int i = 30; i <= 34; i++)
            {
                for (int j = 0; j < 34; j++)
                {
                    Console.Write("  ");
                }
                Console.WriteLine(DrawMapString(i));
            }
            #endregion
            Console.Write("          ");
            #region 画第二横行
            for (int i = 64; i >= 35; i--)
            {
                Console.Write(DrawMapString(i));
            }
            #endregion
            Console.WriteLine("");          
            #region 画第二竖列
            for (int i = 65; i <= 69; i++)
            {
                Console.Write("          ");
                Console.WriteLine(DrawMapString(i));
            }
            #endregion 
            Console.Write("          ");
            #region 画第三横行
            DrawMapLeftToRight(70, 99);
            #endregion
            Console.Write(" <-终点");
            Console.WriteLine("\n");
        }

/// <summary>
        /// 画地图显示图案
        /// </summary>
        /// <param name="pos">坐标</param>
        /// <returns></returns>
        public static string DrawMapString(int pos)
        {
            string str = "";
            if (PlayerPos[0] == PlayerPos[1] && PlayerPos[0] == pos)
            {
                Console.ForegroundColor = ConsoleColor.Yellow;
                str = "爱";
            }
            else if (PlayerPos[0] == pos)
            {
                Console.ForegroundColor = ConsoleColor.Yellow;
                str = "妻";
            }
            else if (PlayerPos[1] == pos)
            {
                Console.ForegroundColor = ConsoleColor.Yellow;
                str = "夫";
            }
            else
            {
                switch (Map[pos])
                {
                    case 0:
                        Console.ForegroundColor = ConsoleColor.White;
                        str = "□";
                        break;
                    case 1:
                        Console.ForegroundColor = ConsoleColor.Red;
                        str = "◎";
                        break;
                    case 2:
                        Console.ForegroundColor = ConsoleColor.DarkMagenta;
                        str = "☆";
                        break;
                    case 3:
                        Console.ForegroundColor = ConsoleColor.Cyan;
                        str = "▲";
                        break;
                    case 4:
                        Console.ForegroundColor = ConsoleColor.Blue;
                        str = "卐";
                        break;
                }//end switch
            }//end else
            return str;
        }

/// <summary>
        /// 从左到右画地图
        /// </summary>
        /// <param name="left">开始坐标</param>
        /// <param name="right">结束坐标</param>
        public static void DrawMapLeftToRight(int left, int right)
        {
            for (int i = left; i <= right; i++)
            {
                Console.Write(DrawMapString(i));
            }
        }

/// <summary>
        /// 登录
        /// </summary>
        /// <returns>登录用户</returns>
        public static string[] Login()
        {
            string[] Player = new string[2];
            Console.WriteLine("请输入萌妹纸的名字:");
            do
            {              
                Player[0] = Console.ReadLine();
                if (Player[0] == "")
                {
                    Console.WriteLine("难道是传说中的女王无名?还是老实交代妹纸的芳名吧……");
                }
            }while(Player[0] == "");
            Console.WriteLine("请输入帅小伙的名字:");
            Player[1] = Console.ReadLine();
            while (Player[0] == Player[1] || Player[1] == "")
            {
                if (Player[0] == Player[1])
                {
                    Console.WriteLine("你忍心和一个萌妹纸抢名字么?骚年,还是换个名字吧……");
                }
                else
                {
                    Console.WriteLine("难道是传说中的土豪无名?骚年,还是老实交代自己的名字吧……");
                }
                Player[1] = Console.ReadLine();
            }
            return Player;
        }

/// <summary>
        /// 判断用户输入的是不是规定范围内的数字
        /// </summary>
        /// <param name="str">提示语</param>
        /// <param name="min">最小值</param>
        /// <param name="max">最大值</param>
        /// <returns></returns>
        public static int ReadInt(string str,int min,int max)
        {
            //一、用户输入的如果不是数字就一直提醒输入
            //二、用户输入的数字只能是1和2
            while (true)
            {
                Console.WriteLine(str);
                try
                {
                    int num = Convert.ToInt32(Console.ReadLine());
                    if (num >= min && num <= max)
                    {
                        return num;
                    }
                    else
                    {
                        Console.WriteLine("输入的数字不在{0}和{1}之间,请重新输入……");
                    }
                }
                catch
                {
                    Console.WriteLine("输入的不是数字,请重新输入……");
                }
            }
        }

/// <summary>
        /// 移动位置
        /// </summary>
        /// <param name="start">起点位置</param>
        /// <param name="end">终点位置</param>
        /// <param name="pos">当前位置</param>
        /// <param name="move">移动步数</param>
        /// <returns></returns>
        public static int Move(int start, int end, int pos, int move)
        {
            if(pos + move < start)
            {
                pos = start;
            }
            else if (pos + move > end)
            {
                pos = end;
            }
            else
            {
                pos = pos + move;
            }
            return pos;
        }

/// <summary>
        /// 幸运轮盘判断
        /// </summary>
        /// <param name="pos">触发人</param>
        public static void LuckTurn(int pos)
        {
            int number = ReadInt(string.Format(" {0} 走到了幸运轮盘,1--你侬我侬,互换位置,2--咫尺天涯,送你回去", PlayerName[pos]), 1, 2);
            if (number == 1)
            {
                //交换位置
                int temp = PlayerPos[pos];
                PlayerPos[pos] = PlayerPos[1 - pos];
                PlayerPos[1 - pos] = temp;
                Console.WriteLine(" {0} 对 {1} 使用了你侬我侬,两人交换位置。", PlayerName[pos], PlayerName[1 - pos]);
            }
            else
            {
                //退6步,需要判断退6步后是否超出起点
                PlayerPos[1-pos] =  Move(0, Map.Length - 1, PlayerPos[1 - pos], -6);
                Console.WriteLine(" {0} 对 {1} 使用了咫尺天涯, {1} 退后六步。", PlayerName[pos], PlayerName[1 - pos], PlayerName[1 - pos]);
            }
        }

/// <summary>
        /// 检查位置是否越界
        /// </summary>
        public static void CheckPos()
        {
            if (PlayerPos[0] > 99)
            {
                PlayerPos[0] = 99;
            }

if (PlayerPos[1] > 99)
            {
                PlayerPos[1] = 99;
            }

if (PlayerPos[0] < 0)
            {
                PlayerPos[0] = 0;
            }

if (PlayerPos[1] < 0)
            {
                PlayerPos[1] = 0;
            }
        }

/// <summary>
        /// 掷骰子过程
        /// </summary>
        /// <param name="pos">当前玩家</param>
        public static void RowDo(int pos)
        {
            Random r = new Random();
            int num = r.Next(1, 7);
            Console.WriteLine(" {0} 按任意键掷骰子……",PlayerName[pos]);
            Console.ReadKey(true);
            Console.WriteLine(" {0} 掷出了{1}", PlayerName[pos], num);
            Console.WriteLine(" {0} 按任意键开始行动……\n", PlayerName[pos]);
            Console.ReadKey(true);
            PlayerPos[pos] = Move(0, Map.Length - 1, PlayerPos[pos], num);

//判断两个玩家有没有谁踩到谁
            if (PlayerPos[pos] == PlayerPos[1 - pos])
            {
                PlayerPos[1 - pos] = 0;
                strformat = string.Format(" {1} 与 {0} 不期而遇, {0} 被 {1} 送回了原点",PlayerName[pos],PlayerName[1-pos],PlayerName[1-pos],PlayerName[pos]);
            }
            else
            {
                switch (Map[PlayerPos[pos]])
                {
                    case 0:
                        strformat = string.Format(" {0} 行动完毕!",PlayerName[pos]);
                        break;
                    case 1:
                        LuckTurn(pos);
                        break;
                    case 2:
                        PlayerPos[pos] = Move(0, Map.Length - 1, PlayerPos[pos], -6);
                        strformat = string.Format(" {0} 与对方失之交臂,后退6步……", PlayerName[pos]);
                        break;
                    case 3:
                        flags[pos] = true;
                        strformat = string.Format(" {0} 陷入情网不能自拔,暂停一回合……", PlayerName[pos]);
                        break;
                    case 4:
                        PlayerPos[pos] = Move(0, Map.Length - 1, PlayerPos[pos], 10);
                        strformat = string.Format(" {0} 遇见了爱神丘比特,得到祝福,前进10步……", PlayerName[pos]);
                        break;
                }             
            }
            //重新画地图
            Console.Clear();
            DrawMap();
            Console.WriteLine(strformat);
            Console.WriteLine("");
        }

public static void Win(int pos)
        {
            Console.Clear();
            DrawMap();
            //画心
            int[] tab ={0,1,0,0,0,1,0,
                        1,0,1,0,1,0,1,
                        1,0,0,1,0,0,1,
                        1,0,0,0,0,0,1,
                        0,1,0,0,0,1,0,
                        0,0,1,0,1,0,0,
                        0,0,0,1,0,0,0,};
            for (int i = 0; i < 49; i++)
            {
                if (i % 7 == 0)
                {
                    Console.Write("   \n");
                }
                if (tab[i] == 0)
                {
                    Console.Write("  ");//注意这里双引号之间有两个空格
                }
                else
                {
                    Console.Write(" *");//注意这里*前有个空格
                }
            }
            Console.WriteLine();
            //按照一定的速率输出要显示的内容   
            S = "爱情,没有谁赢谁输,也无关对错,只要相伴走过一生,你也像我一样深深的眷恋。。。亲爱的,我爱你,我就是要好好的宠着你,养着你,让你任性,让你奢侈,让你无忧无虑的生活着。。。我爱你,亲爱的老婆。。。".ToCharArray();

tm = new System.Threading.Timer(new TimerCallback(timer_Elapsed), null, 0, 300);
            Console.ReadLine();           
        }
        
        private static void timer_Elapsed(object sender)
        {
            if (n < S.Count())
            {
                Console.Write(S[n]);
                n++;
            }
        }
    }
}

C#学习编写的飞行棋游戏相关推荐

  1. Python飞行棋游戏源代码,基于socket网络通信的小游戏,可设置多个游戏房间及参与飞行棋游戏的玩家

    直接运行ludoServer.py即可,然后用浏览器打开http://127.0.0.1:4399/,完成房间创建.房间设置及玩家设备即可开始游戏 完整程序代码下载地址:Python飞行棋游戏源代码 ...

  2. C#飞行棋游戏源码WinForm版本详细教程

    C#做的飞行棋游戏(WinForm)版本 逻辑不是很难,很好理解,适合新手练手 先看一下游戏规则 两个人轮流掷骰子红人和绿人(必须自定义名称否则无法进行游戏) 投掷出2,4,6点出门,投掷出6点可以在 ...

  3. 黑马程序员_学习日记2_飞行棋

    ---------------------- Windows Phone 7手机开发. .Net培训.期待与您交流! ---------------------- 4月13日 今天看了一天的视频,把骑 ...

  4. 飞行棋游戏代码(C#)

    220224飞行器v1.0 using System;namespace AeroplaneChess {class Program{//地图static int[] Maps = new int[1 ...

  5. C#基础(10)——飞行棋游戏

    1.打印游戏头 using System; using System.Collections.Generic; using System.Linq; using System.Text; using ...

  6. c#飞行棋游戏(控制台)

    需求分析 1.制作游戏头部:游戏头部介绍 2.绘制地图 使用一维数组装整个地图的路线 如果这个位置是0,绘制普通格子□ 如果这个位置是1,绘制幸运轮盘◎ 如果这个位置是2,绘制地雷★ 如果这个位置是3 ...

  7. C#学习第六天 基础语法练习游戏--飞行棋

    前几天学习的实践:游戏---飞行棋 步骤: 1.画游戏头 2.初始化地图(加载地图所需要的资源) 将整个数组中的数字变成控制台中显示的特殊字符串的过程,就是初始化地图 int[100]代表100个符号 ...

  8. 【全栈计划 —— 编程语言之C#】 C# 实现双人飞行棋小游戏

    文章目录 前言 项目结构流程图 项目实现 一.游戏开始界面 二.初始化游戏地图 三.绘制飞行棋地图 四.玩游戏具体逻辑 ① 创建两个玩家角色 ② 具体走到每个关卡触发的结果 ③ 判断胜利 ④ 回首调优 ...

  9. C#入门学习——飞行棋

    用之前学习的内容做一个飞行棋游戏 当我们打开程序,显示出飞行棋游戏1.0这一部分内容,然后是要求用户输入玩家姓名. 当玩家姓名输入无误之后,显示如上界面.这一部分为玩家棋子和地图. 可以看到输入的玩家 ...

最新文章

  1. Outlook数据提取工具readpst
  2. codeforces 667A A. Pouring Rain(水题)
  3. python爬虫06 | 你的第一个爬虫,爬取当当网 Top 500 本五星好评书籍
  4. Django从理论到实战(part35)--QuerySetAPI
  5. windows server 2012 初安装体验
  6. DOS窗口的编码页从UTF-8调回GBK
  7. mysql安装数据自定义_mysql数据库自定义怎么安装
  8. SAP License:SAP菜单修改
  9. 使用xml文件存储数据使用xpath查询
  10. 三年探索:一条自控、电信/科类学生的技术成长路线
  11. CE-RTI开源软件代码学习笔记(一)
  12. 携程Java后台开发三面面经
  13. 轻松实现钉钉机器人定时发消息
  14. ME525做网络收音机和学外文用了……(安卓4.4.4系统,20190817更新)
  15. Dual-Resolution Correspondence Networks 2020
  16. MySql常用函数及命令
  17. mysql jail_2.1.5 jail在生产环境下的注意事项
  18. mysql索引长度超过767bytes问题解决。Specified key was too long; max key length is 767 bytes
  19. linux usb音频,audio - 如何从linux USB捕获设备捕获与ffmpeg同步的音频和视频 - 堆栈内存溢出...
  20. 2023年国产CRM客户管理系统软件排名

热门文章

  1. JavaWeb之Maven学习
  2. Nature | 从头设计具有超螺旋匹配的模块化肽结合蛋白质
  3. 20171207_MATLAB求概率
  4. 基于asp.net 校园快递管理系统的设计与实现
  5. 【车载开发系列】诊断故障码DTC基本概念与定义
  6. Chart.js 堆叠柱状图点击更换背景色以及加虚线边框
  7. java获取当前页面url地址_js如何准确获取当前页面url网址信息
  8. 游戏耳机哪个牌子好?2022游戏耳机排行
  9. 写一份前端维护实习报告
  10. Java如何利用JNI调用C++(简略介绍及步骤)