C#控制台实现飞行棋游戏
作者:取名字真的很难 发布时间:2022-03-12 04:18:40
标签:C#,控制台,飞行棋
本文实例为大家分享了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();
}
}
}
来源:https://blog.csdn.net/qq_20662097/article/details/89085804


猜你喜欢
- 本文这个实例通过前面学过的Paint、Canvas等2D绘画技术来实现一个简单的Android的绘图板。具体实现代码:创建一个名为DrawV
- 1、 流的继承关系,以及字节流和字符流。2、 节点流FileOutputStream和FileInputStream和处理流Buffered
- 我们已经有文章向你描述如何使用<include />标签来重用和共享你的布局代码。这篇文章将向你阐述<merge />
- 背景最近公司的客户要求,分配给员工的任务除了有微信通知外,还希望PC端的网页也能实时收到通知。管理员分配任务是在我们的系统A,而员工接受任务
- 问题描述:服务器接收后台返回的报文时,提示java.lang.NegativeArraySizeException分析:这种异常返回的原因,
- 在开发中经常使用到Set集合去重,那么去重的原理是怎样实现的呢?在此文章记录一下去重原理!!!下面是set集合类图下面我们来跟踪一下执行过程
- 本文实例为大家分享了SpringMVC框架实现图片上传与下载的具体代码,供大家参考,具体内容如下1、新建一个Maven webapp项目,引
- 本文研究的主要是ConcurrentMap.putIfAbsent(key,value)用法的相关内容,具体如下。业务上经常会遇到有这种场景
- JAVA并发编程有界缓存的实现1、有界缓存的基类package cn.xf.cp.ch14;/** * *功能:有界缓存实现基类 *时间:
- 编写Job定时执行任务十分有用,能解决很多问题,这次实习的项目里做了一下系统定时更新三方系统订单状态的功能,这里用到了Spring的定时任务
- 本文实例讲述了C#编程实现自定义热键的方法。分享给大家供大家参考。具体实现方法如下:using System;using System.Co
- 本文实例为大家分享了Android Socket实现多个客户端聊天布局的具体代码,供大家参考,具体内容如下服务器Socket接受到客户端发送
- spring data JPA的多属性排序在此介绍我所用的一种方式:第一步,引包import org.springframework.dat
- 前言我昨天做了个梦,我梦见我在一条路走,走的时候经过一个房间,里面关着一条边牧和鸡和猪,后来我醒了,我知道那只边牧就是小叶子(哈仔十一的边牧
- SpringBoot访问外部文件及默认路由1 新增配置类package com.pibigstar.common.config;import
- 简介:Springboot使用Mybatis&Mybatis-plus 两者文件映射配置略有不同,之前我用的是Mybatis,但公司
- java 可变参数详解 可变参数(Varargs)使程序员可以声明一个接受可变数目参数的方法。可变参数也
- JSON.toJSONString()空字段不忽略修改使用JSON.toJSONString(object)方法,返回的json中,默认会将
- 简介通过 pulsar-flink-connector 读取到 Apache pulsar 中的namespaces、topics的元数据信
- 简介散列函数(英语:Hash function)又称散列算法、哈希函数,是一种从任何一种数据中创建小的数字“指纹”的方法。散列函数把消息或数