C#飞行棋小程序设计代码_C#教程

飞行棋游戏大家应该都玩过吧,如何使用C#语言进行编写,本文实例就为大家分享了飞行棋C#实现代码,供大家参考,具体内容如下

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

namespace Pachee
{
  class Program
  {
    #region 静态字段
    // 关卡数量
    public static int[] Maps = new int[100];
    // 玩家坐标
    public static int[] PlayerPos = new int[2];
    // 玩家名称
    public static string[] PlayerNames = new string[2];
    // 判断玩家是否暂停
    public static bool[] Flags = new bool[2];
    #endregion

    /// <summary>
    /// 输出游戏头
    /// </summary>
    public static void ShowGame()
    {
      Console.ForegroundColor = ConsoleColor.Green;
      Console.WriteLine("****************************");
      Console.ForegroundColor = ConsoleColor.Blue;
      Console.WriteLine("****************************");
      Console.ForegroundColor = ConsoleColor.White;
      Console.WriteLine("***C#基础练习:飞行棋项目***");
      Console.ForegroundColor = ConsoleColor.Yellow;
      Console.WriteLine("****************************");
      Console.ForegroundColor = ConsoleColor.Red;
      Console.WriteLine("****************************");
    }
    /// <summary>
    /// 接受用户输入的游戏名称,判断是否合法
    /// </summary>
    /// <returns>游戏名称</returns>
    public static string[] InputPlayerNames()
    {
      PlayerNames[0] = "";
      PlayerNames[1] = "";
      Console.ForegroundColor = ConsoleColor.White;
      while (PlayerNames[0] == "")
      {
        Console.Write("Please enter the name of game A player: ");
        PlayerNames[0] = Console.ReadLine().Trim();
        if (PlayerNames[0] == "")
        {
          Console.WriteLine("A player name cannot be empty, please enter again.");
          continue;
        }
        break;
      }
      while (PlayerNames[1] == "" || PlayerNames[0] == PlayerNames[1])
      {
        Console.Write("Please enter the name of game B player: ");
        PlayerNames[1] = Console.ReadLine().Trim();
        if (PlayerNames[1] == "")
        {
          Console.WriteLine("B player name cannot be empty, please enter again.");
          continue;
        }
        else if (PlayerNames[1] == PlayerNames[0])
        {
          Console.WriteLine("The player name cannot be the same as the player A B, please enter again.");
          continue;
        }
        break;
      }
      return PlayerNames;
    }
    /// <summary>
    /// 初始化地图,改变默认的地图坐标类型
    /// 0:方块
    /// 1:轮盘
    /// 2:地雷
    /// 3:暂停
    /// 4:隧道
    /// </summary>
    public static void InitailMap()
    {
      #region 轮盘
      int[] luckTrun = { 6, 23, 40, 55, 69, 83 };
      for (int i = 0; i < luckTrun.Length; i++)
      {
        Maps[luckTrun[i]] = 1;
      }
      #endregion

      #region 地雷
      int[] landMine = { 5, 13, 17, 33, 38, 50, 64, 80, 94 };
      for (int i = 0; i < landMine.Length; i++)
      {
        Maps[landMine[i]] = 2;
      }
      #endregion

      #region 暂停
      int[] pause = { 9, 27, 60, 93 };
      for (int i = 0; i < pause.Length; i++)
      {
        Maps[pause[i]] = 3;
      }
      #endregion

      #region 隧道
      int[] timeTunnel = { 20, 25, 45, 63, 72, 88, 90 };
      for (int i = 0; i < timeTunnel.Length; i++)
      {
        Maps[timeTunnel[i]] = 4;
      }
      #endregion
    }
    /// <summary>
    /// 设定当前坐标的类型
    /// </summary>
    /// <param name="i">坐标</param>
    /// <returns>坐标类型</returns>
    public static string DrawStringMap(int i)
    {
      string str = null;
      if (PlayerPos[0] == PlayerPos[1] && PlayerPos[0] == i)
      {
        str = "<>";
      }
      else if (PlayerPos[0] == i)
      {
        str = "A";
      }
      else if (PlayerPos[1] == i)
      {
        str = "B";
      }
      else
      {
        switch (Maps[i])
        {
          case 0:
            Console.ForegroundColor = ConsoleColor.Yellow;
            str = "□";
            break;
          case 1:
            Console.ForegroundColor = ConsoleColor.Blue;
            str = "◎";
            break;
          case 2:
            Console.ForegroundColor = ConsoleColor.Green;
            str = "☆";
            break;
          case 3:
            Console.ForegroundColor = ConsoleColor.Red;
            str = "▲";
            break;
          case 4:
            Console.ForegroundColor = ConsoleColor.Cyan;
            str = "卐";
            break;
        }
      }
      return str;
    }
    /// <summary>
    /// 生成所有坐标
    /// </summary>
    public static void DrawMap()
    {
      Console.WriteLine("Legend: LuckTrun<◎> landMine<☆> Pause<▲> timeTunnel<卐>");

      #region 第一橫行
      for (int i = 0; i < 30; i++)
      {
        Console.Write(DrawStringMap(i));
      }
      Console.WriteLine();
      #endregion

      #region 第一竖行
      for (int i = 30; i < 35; i++)
      {
        for (int j = 0; j <= 28; j++)
        {
          Console.Write(" ");
        }
        Console.Write(DrawStringMap(i));
        Console.WriteLine();
      }
      #endregion

      #region 第二橫行
      for (int i = 64; i >= 35; i--)
      {
        Console.Write(DrawStringMap(i));
      }
      Console.WriteLine();
      #endregion

      #region 第二竖行
      for (int i = 65; i < 70; i++)
      {
        Console.WriteLine(DrawStringMap(i));
      }
      #endregion

      #region 第三橫行
      for (int i = 70; i <= 99; i++)
      {
        Console.Write(DrawStringMap(i));
      }
      Console.WriteLine();
      #endregion
    }
    /// <summary>
    /// 判断坐标是否超出范围
    /// </summary>
    public static void ChangePos()
    {
      #region Player A
      if (PlayerPos[0] < 0)
      {
        PlayerPos[0] = 0;
      }
      if (PlayerPos[0] > 99)
      {
        PlayerPos[0] = 99;
      }
      #endregion

      #region Player B
      if (PlayerPos[1] < 0)
      {
        PlayerPos[1] = 0;
      }
      if (PlayerPos[1] > 99)
      {
        PlayerPos[1] = 99;
      }
      #endregion
    }
    /// <summary>
    /// 踩到轮盘时,选择功能
    /// </summary>
    /// <param name="input">玩家的选择</param>
    /// <param name="player">玩家标示</param>
    public static void PlayerSelect(string input, int player)
    {
      while (true)
      {
        if (input == "1")
        {
          Console.WriteLine("Player {0} select and {1} swap places.", PlayerNames[player], PlayerNames[1 - player]);
          int temp = PlayerPos[player];
          PlayerPos[player] = PlayerPos[1 - player];
          PlayerPos[1 - player] = temp;
          Console.WriteLine("Swap complete, press any key continue.");
          Console.ReadKey(true);
          break;
        }
        else if (input == "2")
        {
          Console.WriteLine("Player {0} select bombing {1}, Player {2} back to 6.", PlayerNames[player], PlayerNames[1 - player], PlayerNames[1 - player]);
          PlayerPos[1 - player] -= 6;
          Console.ReadKey(true);
          break;
        }
        else
        {
          Console.WriteLine("Can only select: 1--Swap places 2--bombing: ");
          input = Console.ReadLine();
        }
      }
    }
    /// <summary>
    /// 进行游戏
    /// </summary>
    /// <param name="player">玩家标示位</param>
    public static void PlayGame(int player)
    {
      Random r = new Random();
      int next = r.Next(1, 7);
      Console.WriteLine("{0} press any key to start rolling the dice.", PlayerNames[player]);
      Console.ReadKey(true);
      Console.WriteLine("{0} Throw out of {1}", PlayerNames[player], next);
      PlayerPos[player] += next;
      ChangePos();
      Console.ReadKey(true);
      Console.WriteLine("{0} press any key to start action.", PlayerNames[player]);
      Console.ReadKey(true);
      Console.WriteLine("{0} action complete.", PlayerNames[player]);
      Console.ReadKey(true);
      // Player A 有可能踩到: Player B、方块、轮盘、地雷、暂停、隧道
      if (PlayerPos[player] == PlayerPos[1 - player])
      {
        Console.WriteLine("Player {0} step on {1}, {2} back to 6.", PlayerNames[player], PlayerNames[1 - player], PlayerNames[1 - player]);
        PlayerPos[1 - player] -= 6;
        Console.ReadKey(true);
      }
      else
      {
        switch (Maps[PlayerPos[player]])
        {
          case 0:
            Console.WriteLine("Player {0} step on Square, safe.", PlayerNames[player]);
            Console.ReadKey(true);
            break;
          case 1:
            Console.WriteLine("Player {0} step on a LuckTrun, please select: 1--Swap places 2--bombing: ", PlayerNames[player]);
            string input = Console.ReadLine().Trim();
            PlayerSelect(input, player);
            Console.ReadKey(true);
            break;
          case 2:
            Console.WriteLine("Player {0} step on a LandMine, back to 6", PlayerNames[player]);
            PlayerPos[player] -= 6;
            Console.ReadKey(true);
            break;
          case 3:
            Console.WriteLine("Player {0} step on a Pause, to suspend a round.", PlayerNames[player]);
            Console.ReadKey(true);
            Flags[player] = true;
            break;
          case 4:
            Console.WriteLine("Player {0} step on a TimeTunnel, forward 10.", PlayerNames[player]);
            PlayerPos[player] += 10;
            Console.ReadKey();
            break;
        }
      }
      ChangePos();
      Console.Clear();
      DrawMap();
    }
    static void Main(string[] args)
    {
      ShowGame();
      InputPlayerNames();
      Console.WriteLine("Player {0} is A.", PlayerNames[0]);
      Console.WriteLine("Player {0} is B.", PlayerNames[1]);
      InitailMap();
      DrawMap();

      while (PlayerPos[0] < 99 && PlayerPos[1] < 99)
      {
        #region A
        if (Flags[0] == false)
        {
          PlayGame(0);
        }
        else
        {
          Flags[0] = false;
        }
        #endregion
        #region B
        if (Flags[1] == false)
        {
          PlayGame(1);
        }
        else
        {
          Flags[1] = false;
        }
        #endregion
      }
      #region 判断玩家胜利

      if (PlayerPos[0] == 99)
      {
        Console.Clear();
        Console.WriteLine("Player {0} Win.", PlayerNames[0]);
      }
      if (PlayerPos[1] == 99)
      {
        Console.Clear();
        Console.WriteLine("Player {0} Win.", PlayerNames[1]);
      }
      #endregion

      Console.ReadKey();
    }
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索C#飞行棋
, C#飞行棋程序
C#飞行棋游戏
c站、c语言、cf、ch、c罗,以便于您获取更多的相关知识。

时间: 2024-07-30 12:35:17

C#飞行棋小程序设计代码_C#教程的相关文章

C#加密解密文件小工具实现代码_C#教程

DebugLZQ在网上搜索相关文件加密的程序,发现给出的基本都是针对"字符创"."文本"的加密与解密.对视频文件.图片等一般文件的加密解密程序少之又少,故写下此文,实现一个对一般文件进行加密的小工具. 程序的主要功能是:用户通过文件选择框选择要加密的文件->输入密码进行加密:选择加密后的文件,输入密码进行解密. 程序的主界面如下: 三个按钮的Click事件处理程序如下: 复制代码 代码如下: private void btnSelectFile_Click(o

C#小程序15位转18位身份证号代码_C#教程

现在我们使用的都是18位身份证号,而以前都是15位身份证号,而如何将15位身份证号转18位身份证号转换为18位身份证号呢? 1.首先,在15位身份证的第6位之后加上"19"变为17位,即出生年月的年加上19,比如原来的92年就变为1992 2.然后,就是最后一位的计算,方法如下: 1)将1得到的17位身份证号,每一位乘以相应的系数,17位系数为{ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 } 2)将(1)求得17个数相加求和

一款域名监控小工具 Domain(IP)Watcher 实现代码_C#教程

监控给定的域名,一旦域名连续30秒(这是默认值,可以在源码中修改)无法Ping通,立刻发邮件到指定邮箱,并发短信给站长 原理: 用后台线程循环每隔5秒钟Ping结定的域名,如果连接5次Ping不通则发送邮件到给定邮箱.发短信是通过其他途径实现的,现在最常用的有两种方式: 一是利用QQ邮箱的手机绑定功能实现收到邮件短信提示 二是用www.ifttt.com提供的gmail跟sms服务实现收到邮件发短信提示 本工具用的是第一种. 主要程序: 主要是后台线程ping域名的应用,界面上显示记录的是一个r

C#微信公众号与订阅号接口开发示例代码_C#教程

本文实例讲述了C#微信公众号与订阅号接口开发示例代码.分享给大家供大家参考,具体如下: using System; using System.Web; using System.IO; using System.Text; using System.Web.Security; using weixin_api; public class wxgz_api : IHttpHandler { public void ProcessRequest(HttpContext context) { cont

C# MVC 微信支付教程系列之公众号支付代码_C#教程

今天,我们接着讲微信支付的系列教程,前面,我们讲了这个微信红包和扫码支付.现在,我们讲讲这个公众号支付.公众号支付的应用环境常见的用户通过公众号,然后再通过公众号里面的菜单链接,进入公众号的商城,然后在里面完成购买和支付功能,我们可以看看官方对这个公众号支付的场景的解释,链接:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_1,通过这个官方的解释,那我们大概清楚这个公众号的用途了,下面,我就说说,做这个公众号支付的准备工作有哪

C#重启远程计算机的代码_C#教程

如果叫你实现远程启动别人的计算机,你首先想到的可能是先做一个在远程计算机上面运行客户端程序,然后在本地计算机上面再做一个服务器端程序,通过这二个程序直接的通讯实现重启远程计算机.这当然是一个方法.但这未免有点麻烦.如果现在只告诉你远程计算机的管理者的登陆帐号,而并不允许你在远程的计算机上面运行一个所谓的客户端程序,让你通过程序来完成重启远程计算机.不知道你是否感觉有些困难了.其实按照上面的这些条件实现重启远程计算机,利用C#可以比较方便的完成.下面就来介绍一下具体的实现方法.  一. C#重启远

c# 调用.bat文件的实现代码_C#教程

c# 调用.bat文件 使用命名空间:using System.Diagnostics; System.Diagnostics.Process.Start(Server.MapPath("ah.bat")); ===================================================================== 扩展名是bat(在nt/2000/xp/2003下也可以是cmd)的文件就是批处理文件 首先,批处理文件是一个文本文件,这个文件的每一行都是

关于C# Math 处理奇进偶不进的实现代码_C#教程

话说,最近一次系统维护 用JS读取导入Excel中的实验数据,出现被自动四舍五入.后来到客户现场听客户反馈  Excel实验数据要求 奇进偶不进. 关于 奇进偶不进 产生的由来:从统计学的角度,"奇进偶舍"比"四舍五入"要科学,在大量运算时,它使舍入后的结果误差的均值趋于零,而不是像四舍五入那样逢五就入,导致结果偏向大数,使得误差产生积累进而产生系统误差,"奇进偶舍"使测量结果受到舍入误差的影响降到最低. Math下找了下,使用Round 的重载

经典排序算法之冒泡排序(Bubble sort)代码_C#教程

经典排序算法 - 冒泡排序Bubble sort 原理是临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换, 这样一趟过去后,最大或最小的数字被交换到了最后一位, 然后再从头开始进行两两比较交换,直到倒数第二位时结束,其余类似看例子 例子为从小到大排序, 原始待排序数组| 6 | 2 | 4 | 1 | 5 | 9 | 第一趟排序(外循环) 第一次两两比较6 > 2交换(内循环) 交换前状态| 6 | 2 | 4 | 1 | 5 | 9 | 交换后状态| 2 | 6 | 4 | 1