飞行棋关卡操作

1、分析设计

  飞行棋的基本规则为二人轮流掷骰子,则此处为循环结构,然后根据投掷出的点数进行前进<注:在每一步前进之后均应该判断是否走完了游戏>,在遇到关卡时进行相应的操作,关卡有四种,每一种对应的操作不同,因此此处可运用switch-case 循环结构在每走一步操作后均进行判断是否踩到关卡,在根据判断的结果进行下一步操作,每一次操作完成后 ,重新绘制最新的地图。

2、代码实现

一、玩家掷骰子,二人轮流投掷,当有一人胜利时结束游戏 。投掷骰子可用函数Random()产生随机数实现,每前进一步后需要检查游戏是否胜利,方法如下 :

 /// <summary>
/// 检查坐标是否越界
/// </summary>
static void CheckPos()
{
for (int i = ; i <= ; i++)
{
if (playerPos[i] > )
{
playerPos[i] = ;
}
if (playerPos[i] < )
{
playerPos[i] = ;
}
}
}

当遇到关卡时,根据关卡设定的性质进行操作,在遇到幸运转盘时可供用户进行选择1:与对方交换 位置,2:轰炸对方,让对方后退6格,此处需要让用户输入1或者2,在读取时需要对用户键入的值进行检验,可用以下方法实现:

 static int ReadInt(int min,int max)
{
while (true)
{
try
{
int number = Convert.ToInt32(Console.ReadLine());
if(number<min||number>max)
{
Console.WriteLine("只能输入{0}-{1}之间的数字,请重新输入!", min, max);
continue;
}
return number;
}
catch
{
Console.WriteLine("只能输入数字,请重新输入!");
}
}
}

当遇到关卡3暂停时,需要用户在下一次该行动时暂停一次,此处可定义一个bool 类型的数组来表示用户是否应该在这一步暂停操作 ,下面给出用户A投掷 的代码:

             //这个循环中 玩家轮流掷骰子,当任何一人坐标>=99时,游戏结束
while(playerPos[]<&&playerPos[]<)
{
Random r = new Random();//产生随机数
int Step;//存放产生的随机数; if (isStop[] == false)
{
#region//玩家A掷骰子
Console.WriteLine("{0}按任意键掷骰子....", names[]);
ConsoleKeyInfo rec = Console.ReadKey(true);
if (rec.Key == ConsoleKey.Tab)
{
Step = ;
}
else
{
Step = r.Next(, );
}
Console.WriteLine("{0}掷出了{1}", names[], Step);
Console.WriteLine("{0}按任意键行动...", names[]);
Console.ReadKey(true);//不显示 按下按下的按键的值 playerPos[] = playerPos[] + Step;//更改坐标<一旦坐标发生改变,判断是否大于99或 小于0>
CheckPos();
if (playerPos[] == playerPos[])//玩家A踩到玩家B
{
playerPos[] = ;
msg = string.Format("{0}踩到了{1},退回原点", names[], names[]);//Format函数用于拼接字符段
} #region
else //没踩到,判断此位置是否有其他关卡
{
switch (Map[playerPos[]])
{
case :
//普通位置,无效果
msg = "";
break;
case :
//幸运转盘
Console.Clear();
DrownMap();
Console.WriteLine("{0}走到了幸运转盘,请选择运气?", names[]);
Console.WriteLine("1:交换位置 2: 轰炸 ");
int userSelect = ReadInt(, );
if (userSelect == )
{
int temp;
temp = playerPos[];
playerPos[] = playerPos[];
playerPos[] = temp;
msg = string.Format("{0}选择了与{1}交换位置,哈哈,一夜回到解放前啊", names[], names[]);
}
else
{
playerPos[] = playerPos[] - ;
CheckPos();
msg = string.Format("{0}选择了与让 {1}后退6步,自求多福吧", names[], names[]);
}
break;
case :
//地雷
playerPos[] = playerPos[] - ;
CheckPos();
msg = string.Format("{0}踩到了地雷,后退6步,阿弥陀佛", names[]);
break;
case :
//暂停
isStop[] = true;
msg = string.Format("{0}暂停一次!", names[]);
break;
case :
//时空隧道
playerPos[] = playerPos[] + ;
CheckPos();
msg = string.Format("{0}进入了时空隧道 ,前进吧!", names[]);
break;
}
}
#endregion
Console.WriteLine("按任意键开始行动...");
Console.ReadKey(true);
Console.Clear();
DrownMap();
if (msg != "")
{
Console.WriteLine(msg);
}
Console.WriteLine("{0}掷出了{1},行动完成!", names[], Step);
Console.WriteLine("*******w玩家A和玩家B的位置如下***********");
Console.WriteLine(" 玩家{0}的位置为{1}", names[], playerPos[] + );
Console.WriteLine(" 玩家{0}的位置为{1}", names[], playerPos[] + );
#endregion
}
else
{
//说明A暂停一次
isStop[] = false;
}
if(playerPos[]>=)
{
break;
}
#region 玩家B掷骰子
#endregion }

学习自传智播客教程

---电杆

C#小程序飞行棋关卡操作的更多相关文章

  1. C#小程序飞行棋地图绘制

    1. 初始化地图,在绘制时可先将地图进行初始化,用数组来存储关卡的位置,然后利用循环给地图中 关卡所在处赋予代表关卡的值. 关键代码如下 /// <summary> /// 初始化游戏地图 ...

  2. 微信小程序弹出操作菜单

    微信小程序弹出操作菜单 比如在页面上放一个按钮,点击按钮弹出操作菜单,那么在按钮的 bindtap 事件里,执行下面的代码即可: wx.showActionSheet({ itemList: ['A' ...

  3. 图解微信小程序---调用API操作步骤

    图解微信小程序---调用API操作步骤 什么是API API(Application Programming Interface,应用程序编程接口:是一些预先定义的函数,目的是提供应用程序与开发人员基 ...

  4. 微信小程序中登录操作-----与-----引用

    login.wxml <view> <!-- <image src="./88.png"></image> --> # 在当前目录下 ...

  5. 微信小程序之数组操作:push与concat的区别

    微信小程序中需要用到数组的操作,push和concat二者功能很相像,但有两点区别. 先看如下例子: var arr = []; arr.push(); arr.push(); arr.push([, ...

  6. 小游戏canvas直接操作ImgaeData时的几个优化点

    前不久在处理一个canvas绘图需求时,经过不断测试优化,将重绘一帧的时间由400ms降低至20ms左右,基本满足了要求.特此记录一下优化方向. 设备环境:Android,360*720,pixelR ...

  7. 微信小程序开发-滑动操作

    在实际应用中,当某种手势被触发后,在用户没有放开鼠标或手指前,会一直识别为该手势.比如当用户触发左滑手势后,这时再向下滑动,仍要按照左滑手势来处理. 可以定义一个标记来记录第一次识别到的手势,如果已识 ...

  8. 微信小程序之if操作

    .wxss控制样式 .price-agent{ font-size: 25rpx; color:#ababab; float: left; position: absolute; bottom: 0; ...

  9. 小爬爬4:selenium操作

    1.selenium是什么? selenium: - 概念:是一个基于浏览器自动化的模块. - 和爬虫之间的关联? - 帮我我们便捷的爬取到页面中动态加载出来的数据 - 实现模拟登陆 - 基本使用流程 ...

随机推荐

  1. ✡ leetcode 169. Majority Element 求出现次数最多的数 --------- java

    Given an array of size n, find the majority element. The majority element is the element that appear ...

  2. xmlstreaml xml过滤 格式化 报文的发送接收 struct2

    有时候把东西想的过于复杂了,还是思路不清晰啊. seervlet struct2配置过程

  3. TimeStamp

    private void Form1_Load(object sender, EventArgs e) { textBox1.Text= GenerateTimeStamp(System.DateTi ...

  4. OpenCV MAT基本图像容器

    参考博客: OpenCv中cv::Mat和IplImage,CvMat之间的转换 Mat - 基本图像容器 Mat类型较CvMat和IplImage有更强的矩阵运算能力,支持常见的矩阵运算(参照Mat ...

  5. windows2003 DHCP中批处理绑定IP与MAC

    最近正在实施Windows Server 2008 R2 DHCP服务器部署,要求把员工的IP地址和MAC以及姓名完成在DHCP服务器上的绑定,使用的系统是windows2003-x64,要添加的用户 ...

  6. [原创]cocos2d-x研习录-第三阶 特性之物理引擎

    游戏物理引擎是指在游戏中涉及物理现象的逻辑处理,它用于模拟现实世界的各种物理规律(如赛车碰撞.子弹飞行.物体掉落等),让玩家能够在游戏中有真实的体验. Cocos2D-x中支持Box2D和Chipmu ...

  7. Unity浅析

    在分析PRISM项目的时候, 发现里面用到了Unity 这个Component, 主要用于依赖注入的.由于对其不熟悉,索性分析了一下,记载在此,以作备忘. 任何事物的出现,总有它独特的原因,Unity ...

  8. 基于MVC4+EasyUI的Web开发框架经验总结

    http://www.cnblogs.com/wuhuacong/p/4093778.html 在很多Web系统中,一般都可能提供一些图标的选择,方便配置按钮,菜单等界面元素的图 标,从而是Web系统 ...

  9. rabiitmq集群完整安装

    通过 Erlang 的分布式特性(通过 magic cookie 认证节点)进行 RabbitMQ 集群,各 RabbitMQ 服务为对等节点,即每个节点都提供服务给客户端连接,进行消息发送与接收. ...

  10. Linux LVM硬盘管理之一:概念介绍

    一.LVM概念介绍: LVM是 Logical Volume Manager(逻辑卷管理)的简写,它由Heinz Mauelshagen在Linux 2.4内核上实现.LVM将一个或多个硬盘的分区在逻 ...