C#控制台实现飞行棋游戏

 更新时间:2020年6月25日 10:36  点击:1694

本文实例为大家分享了C#实现飞行棋游戏的具体代码,供大家参考,具体内容如下

游戏截图:

管理类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApp1
{
 class ProgramManage
 {
  //随机数
  public static Random rd = new Random();
  //定义地图大小
  public static int[] Maps = new int[100];
 
  //
  public static bool[] PlayerPause = {false,false };
 
  //定义玩家A和玩家B的坐标,0是玩家A的坐标;1是玩家B的坐标
  public static int[] PlayerPos = new int[2];
 
  //存储两个玩家的姓名
  public static string[] PlayerName = new string[2];
 
  //定义名字错误类型
  public static string[] Error = {"正确","不能有数字","重名了","不能为空" };
 
  //画游戏头
  public static void GanmeShow()
  {
   Console.ForegroundColor = ConsoleColor.Yellow;
   Console.WriteLine("*************************");
   Console.WriteLine("********飞行棋游戏*******");
   Console.WriteLine("*************************");
   Console.ForegroundColor = ConsoleColor.Green;
  }
 
  //定义地图关卡布局
  public static void InitailMap()
  {
   int[] luckturn = { 6, 23, 40, 55, 69, 83 };//幸运轮盘◎
   for (int i = 0; i < luckturn.Length; i++)
   {
    Maps[luckturn[i]] = 1;
   }
 
   int[] landMine = { 5, 13, 17, 33, 38, 50, 64, 80, 94 };//地雷×
   for (int i = 0; i < landMine.Length; i++)
   {
    Maps[landMine[i]] = 2;
   }
 
   int[] pause = { 9, 27, 60, 93 };//暂停▲
   for (int i = 0; i < pause.Length; i++)
   {
    Maps[pause[i]] = 3;
   }
 
   int[] timeTunnel = { 20, 25, 45, 63, 72, 88, 90 };//时空隧道卍
   for (int i = 0; i < timeTunnel.Length; i++)
   {
    Maps[timeTunnel[i]] = 4;
   }
 
  }
 
  //定义地图元素。输入坐标值,方法内部判断当前坐标应当放什么符号,返回符号值
  public static string MapElement(int i)
  {
   string Element = "0";
   //如果玩家AB坐标相同并都在当前位置则画一个“<>”
   if (PlayerPos[0] == i && PlayerPos[1] == i)
   {
    Element="<>";
   }
   //有A画A,有B画B,都没有画地图
   else if (PlayerPos[0] == i)
   {
    Element="A";
   }
   else if (PlayerPos[1] == i)
   {
    Element="B";
   }
   else
   {
    switch (Maps[i])
    {
     case 0:
      Element = "□";
      break;
     case 1:
      Element = "◎";
      break;
     case 2:
      Element = "×";
      break;
     case 3:
      Element = "▲";
      break;
     case 4:
      Element = "卍";
      break;
    }
 
   }
   return Element;
  }
 
 
  //绘制地图
  public static void DrawMap()
  {
   Console.ForegroundColor = ConsoleColor.White;
   //第一横行
   for (int i = 0; i < 30; i++)
   {
    Console.Write(MapElement(i));
   }
   
   //第一竖行
   for (int i = 30; i < 35; i++)
   {
    Console.WriteLine();
    Console.Write("               ");
    Console.Write(MapElement(i));
   }
 
   //第二横行
   Console.WriteLine();
   for (int i = 64; i > 34; i--)
   {
    Console.Write(MapElement(i));
   }
 
   //第二竖行
   for (int i = 65; i < 70; i++)
   {
    Console.WriteLine();
    Console.Write(MapElement(i));
   }
 
   //第三横行
   Console.WriteLine();
   for (int i = 70; i < 100; i++)
   {
    Console.Write(MapElement(i));
   }
   Console.WriteLine();
 
  }
 
  //判断姓名是否符合要求
  public static int NameJudge(string str)
  {
   int result = 0;
 
   //判断是否为空
   if (str == "")
   {
    result = 3;
    return result;
   }
   else
   {
    result = 0;
   }
 
   //判断是否是字符串
   for (int i = 0; i < str.Length; i++)
   {
    if (char.IsNumber(str,i))
    {
     result = 1;
 
     return result;
 
    }
    else
    {
     result = 0;
    }
    
   }
 
   //判断是否重名
   for (int i = 0; i < PlayerName.Length; i++)
   {
    if (PlayerName[i]==str)
    {
     result = 2;
     return result;
    }
    else
    {
     result = 0;
    }
    
   }
 
 
   return result;
  }
 
  //投骰子
  public static void Play(int player)
  {
 
   PlayerPos[player] += rd.Next(1, 7);
 
  }
 
  //坐标不能出地图
  public static void Limit(int player)
  {
   if (PlayerPos[player] < 0)
   {
    PlayerPos[player] = 0;
   }
   else if (PlayerPos[player] > 99)
   {
    PlayerPos[player] = 99;
   }
  }
 
 
 
  //执行规则
  public static void GameRule(int player)
  {
 
   //踩到对手
   if (PlayerPos[player]==PlayerPos[1-player])
   {
    PlayerPos[1 - player] -= 6;
 
    Console.WriteLine("{0}踩到对手,对手退6格", PlayerName[player]);
   }
   //什么也没踩到
   else if (Maps[PlayerPos[player]] == 0)
   {
    Console.WriteLine("{0}玩家前进了,什么也没踩到",PlayerName[player]);
 
   }
   //幸运轮盘
   else if (Maps[PlayerPos[player]] == 1)
   {
    Console.WriteLine("1,与对手交换位置。2,让对手退回原点");
    string chose;
    while (true)
    {
     chose = Console.ReadLine();
     if (chose == "1")
     {
      int tem = PlayerPos[player];
      PlayerPos[player] = PlayerPos[1 - player];
      PlayerPos[1 - player] = tem;
      Console.WriteLine("{0}与对手交换了位置", PlayerName[player]);
      break;
     }
     else if (chose == "2")
     {
      PlayerPos[1 - player] = 0;
      Console.WriteLine("{0}把对手打回原位", PlayerName[player]);
      break;
     }
     else
     {
      Console.WriteLine("请重新输入");
     }
    }
 
   }
   //地雷
   else if (Maps[PlayerPos[player]] == 2)
   {
    PlayerPos[player] -= 6;
    Console.WriteLine("{0}踩到地雷了,倒退6格", PlayerName[player]);
   }
   //暂停
   else if (Maps[PlayerPos[player]] == 3)
   {
    PlayerPause[player] = true;
    Console.WriteLine("{0}暂停一回合", PlayerName[player]);
   }
   //时空隧道
   else if (Maps[PlayerPos[player]] == 4)
   {
    PlayerPos[player] += 10;
    Console.WriteLine("{0}前进10格", PlayerName[player]);
   }
 
  }
 
  //判断输赢
  public static string Winner()
  {
   if (PlayerPos[0]>PlayerPos[1])
   {
    return PlayerName[0];
   }
   else
   {
    return PlayerName[1];
   }
  }
 }
}

实现类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApp1
{
 
 class Program
 {
  static void Main(string[] args)
  {
   //初始化标题
   ProgramManage.GanmeShow();
   //初始化地图关卡
   ProgramManage.InitailMap();
 
   //输入名字
   string name;
   for (int i = 0; i < ProgramManage.PlayerName.Length; i++)
   {
    Console.WriteLine("请输入玩家{0}的名字", i+1);
    name = Console.ReadLine();
    while (ProgramManage.NameJudge(name)!=0)
    {
     Console.WriteLine("名字格式不对,{0},请重新输入", ProgramManage.Error[ProgramManage.NameJudge(name)]);
     name = Console.ReadLine();
    }
    ProgramManage.PlayerName[i] = name;
   }
 
   //刷新界面
   Console.Clear();
   ProgramManage.GanmeShow();
   Console.WriteLine("玩家A名字是{0},玩家B名字{1}", ProgramManage.PlayerName[0], ProgramManage.PlayerName[1]);
   ProgramManage.DrawMap();
 
   //游戏主循环
   //初始化玩家A开始
   int player = 0;
 
   //两个玩家都没在终点的时候不停的玩游戏
   while (ProgramManage.PlayerPos[0]<99&&ProgramManage.PlayerPos[1]<99)
   {
 
 
    //判断当前玩家是否暂停,如果暂停了就停一回合
    if (ProgramManage.PlayerPause[player]==false)
    {
     Console.WriteLine("轮到玩家{0}敲回车投骰子", ProgramManage.PlayerName[player]);
     Console.ReadKey();
     //玩家player投骰子
     ProgramManage.Play(player);
     ProgramManage.Limit(player);
 
     //清空界面
     Console.Clear();
 
     //执行规则,如果踩到了关卡,一直执行,直到踩到空白点位置
     while (true)
     {
      if (ProgramManage.Maps[ProgramManage.PlayerPos[player]] != 0)
      {
       ProgramManage.GameRule(player);
       ProgramManage.Limit(player);
      }
      ProgramManage.GameRule(player);
      break;
     }
     ProgramManage.Limit(player);
 
     //变化玩家
     player = 1 - player;
 
     //刷新地图
     ProgramManage.DrawMap();
    }
    else
    {
     //当前玩家恢复暂停
     ProgramManage.PlayerPause[player] = false;
     //下一回合让给另一个玩家
     player = 1 - player;
     continue;
    }
     
   }
   //游戏结束
   Console.WriteLine("玩家{0}赢了", ProgramManage.Winner());
   Console.ReadKey();
  }
 }
}

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

[!--infotagslink--]

相关文章

  • 浅谈C# 字段和属性

    这篇文章主要介绍了C# 字段和属性的的相关资料,文中示例代码非常详细,供大家参考和学习,感兴趣的朋友可以了解下...2020-11-03
  • C#实现简单的登录界面

    我们在使用C#做项目的时候,基本上都需要制作登录界面,那么今天我们就来一步步看看,如果简单的实现登录界面呢,本文给出2个例子,由简入难,希望大家能够喜欢。...2020-06-25
  • C#中截取字符串的的基本方法详解

    这篇文章主要介绍了C#中截取字符串的的基本方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-03
  • C#实现简单的Http请求实例

    这篇文章主要介绍了C#实现简单的Http请求的方法,以实例形式较为详细的分析了C#实现Http请求的具体方法,需要的朋友可以参考下...2020-06-25
  • C#连接SQL数据库和查询数据功能的操作技巧

    本文给大家分享C#连接SQL数据库和查询数据功能的操作技巧,本文通过图文并茂的形式给大家介绍的非常详细,需要的朋友参考下吧...2021-05-17
  • C#中new的几种用法详解

    本文主要介绍了C#中new的几种用法,具有很好的参考价值,下面跟着小编一起来看下吧...2020-06-25
  • 使用Visual Studio2019创建C#项目(窗体应用程序、控制台应用程序、Web应用程序)

    这篇文章主要介绍了使用Visual Studio2019创建C#项目(窗体应用程序、控制台应用程序、Web应用程序),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • C#开发Windows窗体应用程序的简单操作步骤

    这篇文章主要介绍了C#开发Windows窗体应用程序的简单操作步骤,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-04-12
  • C#从数据库读取图片并保存的两种方法

    这篇文章主要介绍了C#从数据库读取图片并保存的方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2021-01-16
  • C#和JavaScript实现交互的方法

    最近做一个小项目不可避免的需要前端脚本与后台进行交互。由于是在asp.net中实现,故问题演化成asp.net中jiavascript与后台c#如何进行交互。...2020-06-25
  • C++调用C#的DLL程序实现方法

    本文通过例子,讲述了C++调用C#的DLL程序的方法,作出了以下总结,下面就让我们一起来学习吧。...2020-06-25
  • 轻松学习C#的基础入门

    轻松学习C#的基础入门,了解C#最基本的知识点,C#是一种简洁的,类型安全的一种完全面向对象的开发语言,是Microsoft专门基于.NET Framework平台开发的而量身定做的高级程序设计语言,需要的朋友可以参考下...2020-06-25
  • C#变量命名规则小结

    本文主要介绍了C#变量命名规则小结,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-09-09
  • C#绘制曲线图的方法

    这篇文章主要介绍了C#绘制曲线图的方法,以完整实例形式较为详细的分析了C#进行曲线绘制的具体步骤与相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • C# 中如何取绝对值函数

    本文主要介绍了C# 中取绝对值的函数。具有很好的参考价值。下面跟着小编一起来看下吧...2020-06-25
  • c#自带缓存使用方法 c#移除清理缓存

    这篇文章主要介绍了c#自带缓存使用方法,包括获取数据缓存、设置数据缓存、移除指定数据缓存等方法,需要的朋友可以参考下...2020-06-25
  • c#中(&&,||)与(&,|)的区别详解

    这篇文章主要介绍了c#中(&&,||)与(&,|)的区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25
  • C#学习笔记- 随机函数Random()的用法详解

    下面小编就为大家带来一篇C#学习笔记- 随机函数Random()的用法详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • 经典实例讲解C#递归算法

    这篇文章主要用实例讲解C#递归算法的概念以及用法,文中代码非常详细,帮助大家更好的参考和学习,感兴趣的朋友可以了解下...2020-06-25
  • C#中list用法实例

    这篇文章主要介绍了C#中list用法,结合实例形式分析了C#中list排序、运算、转换等常见操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25