using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 飞行棋Ver1._0
{
class Program
{
//如果元素的值是0 代表这是1个普通
//1 幸运轮盘 ◎
//2 暂停 ▲
//3 地雷 ●
//4. 时光隧道 卍
static int[] map = new int[];
static int[] pos = new int[];//第一个元素代表的是玩家A的位置 第2个元素代表的是玩家B的位置
static bool[] isStop = {false,false };
static string[] names = new string[];//用于保存玩家AB的姓名
static void Main(string[] args)
{
ShowUI();//显示LOGO
Console.WriteLine("请输入玩家A的名字:");
while (true)//进入循环 接受用户输入玩家A的名字 退出条件是 玩家A输入的不是空的字符串
{
names[] = Console.ReadLine();
if (names[] == "")
{
Console.WriteLine("玩家的名字不能为空,请重新输入!");
}
else
{
break;//跳出循环
}
}
Console.WriteLine("请输入玩家B的名字:");
names[] = Console.ReadLine();//接收用户的输入 并把用户的输入赋值给names数组的第1个元素
while (names[] == "" || names[] == names[])//循环接收用户的输入
{
if (names[] == "")
{
Console.WriteLine("玩家的名字不能为空,请重新输入!");
}
else if (names[] == names[])
{
Console.WriteLine("玩家B的名字不能与玩家A的名字一样,请重新输入");
}
names[] = Console.ReadLine();
}
//到这里为止 我们已经接收了用户输入的玩家A和玩家B的姓名
Console.Clear();//将当前控制台上的所有的信息 清空
ShowUI();
Console.WriteLine(names[] + "," + names[] + "欢迎你们来到飞行棋乐园。。。。。。。");
Console.WriteLine(names[] + "用A表示\n" + names[] + "用B表示\n" + "如果两个在一起用<>表示\n现在对战开始!");
InitMap();
DrawMap();
Random r = new Random();
//开始轮流掷骰子
while (pos[] < && pos[] < )
{
if (isStop[] == false)
{
#region 玩家A掷骰子
Play();
#endregion
}
else
{
isStop[] = false;
}
if (pos[] >= )
{
break;
}
if (isStop[] == false)
{
#region 玩家B掷骰子
Play();
#endregion
}
else
{
isStop[] = false;
}
//如果是普通的 则什么效果都木有
//如果玩家A踩到玩家B 玩家B的位置到0
//如果是幸运轮盘 1可以和对方互换位置 2.可以轰炸对方(让对方退6格)
//如果是时空隧道 就让玩家A前进10格
//如果是地雷 就退6格
//如果是暂停 那么就让玩家A暂停一次
}
if (pos[] >= )
{
Console.WriteLine("恭喜你" + names[] + "玩家胜利!");
}
else
{
Console.WriteLine("恭喜你" + names[] + "玩家胜利!");
}
Console.ReadKey();
}
/// /// 是接收用户从控制台输入指定范围的整数
/// /// 最小值
/// 最大值
///
static int ReadInt(int min, int max)
{
while (true)
{
string str = Console.ReadLine();//接收用户从控制台输入的字符串 并将字符串赋值给str变量
int i;//声明1个iint类型的变量叫做i
if (int.TryParse(str, out i))//int.TryParse()这个方法将指定的字符串转换成int类型的
//如果转换成功.那么返回true 并且将转换成功的整数赋值给这个方法的第2个out参数
//如果转换失败,那么这个方法就返回false
{
if (i < min || i > max)
{
Console.WriteLine("输入的数字只能在{0}-{1}之间,请重新输入", min, max);
continue;
}
else
{
return i;
}
}
else
{
Console.WriteLine("只能输入整数数字。。。。请重新输入....");
continue;
}
}
}
static void Play(int playerNumer)//传递0就是表示的是第玩家A调用 1代表的是玩家B在调用
{
string AorB = playerNumer == ? "A" : "B";
Random r = new Random();
Console.WriteLine("玩家{1}:{0}按任意键开始掷骰子....", names[playerNumer], AorB);
ConsoleKeyInfo info = Console.ReadKey(true);//接收用户任意键的输入
int step = r.Next(, );//返回1个1-6的随机数
if (info.Key == ConsoleKey.Tab)
{
step = ;
}
Console.WriteLine("玩家{2}:{0}掷的数字是:{1}", names[playerNumer], step, AorB);
pos[playerNumer] += step;
CheckPos();
string msg = "";
//判断玩家A是否踩到了玩家B
if (pos[] == pos[])
{
if (playerNumer == )
pos[] = ;
else
pos[] = ;
}
else
{
switch (map[pos[playerNumer]])
{
case ://普通的 没有效果
break;
case ://幸运轮盘
//如果是幸运轮盘 1可以和对方互换位置 2.可以轰炸对方(让对方退6格)
Console.WriteLine("恭喜你,踩到了幸运轮盘,请选择你的运气: 1.和对方互换位置 2.轰炸对方");
int userSelect = ReadInt(, );
if (userSelect == )//和对方互换位置
{
int temp = pos[];//交换变量的值
pos[] = pos[];
pos[] = temp;
msg = "你选择了和对方互换位置........";
}
else //轰炸对方 让对方退6格
{
if (playerNumer == )
pos[] -= ;
else pos[] -= ;
CheckPos();
msg = string.Format("你轰炸了对方,{0}退6格", names[]);
}
break;
case ://暂停
isStop[playerNumer] = true;
msg = "倒霉,暂停一次!";
break;
case ://地雷
pos[playerNumer] -= ;
CheckPos();
msg = "真倒霉,你踩到地雷了,后退6格";
break;
case ://时光隧道
pos[playerNumer] += ;
CheckPos();
msg = "真爽, 你穿越了, 前进10格";
break;
}
}
if (msg != "")
{
Console.WriteLine(msg);
}
Console.WriteLine("按任意键开始移动。。。");
Console.ReadKey(true);
Console.Clear();
ShowUI();
DrawMap();
Console.WriteLine("**********************位置信息**********************");
Console.WriteLine("玩家A的位置:" + pos[]);
Console.WriteLine("玩家B的位置:" + pos[]);
}
/// /// 检测玩家A和玩家B的位置是否越界
/// static void CheckPos()
{
for (int i = ; i < pos.Length; i++)
{
if (pos[i] > )
{
pos[i] = ;
}
if (pos[i] < )
{
pos[i] = ;
}
}
}
static string GetMapString(int p)
{
//1 幸运轮盘 ◎
//2 暂停 ▲
//3 地雷 ●
//4. 时光隧道 卍
string res = "";
if (pos[] == p && pos[] == p)
{
Console.ForegroundColor = ConsoleColor.Red;
res = ("<>");
}
else if (pos[] == p)
{
Console.ForegroundColor = ConsoleColor.Red;
res = ("A");
}
else if (pos[] == p)
{
Console.ForegroundColor = ConsoleColor.Red;
res = ("B");
}
else
{
switch (map[p])
{
case :
Console.ForegroundColor = ConsoleColor.White;//是设置控制台的前景色
res = "□";
break;
case :
Console.ForegroundColor = ConsoleColor.Green;
res = "◎";
break;
case :
Console.ForegroundColor = ConsoleColor.Yellow;
res = "▲";
break;
case :
Console.ForegroundColor = ConsoleColor.DarkRed;
res = "●";
break;
case :
Console.ForegroundColor = ConsoleColor.Blue;
res = "卍";
break;
}
}
return res;
}
static void InitMap()
{
int[] luckTurn = { , , , , , , };//幸运轮盘
int[] landMine = { , , , , , , , , };//地雷
int[] pause = { , , , };//暂停
int[] timeTunnel = { , , , , , , };//时空隧道
//1 幸运轮盘 ◎
//2 暂停 ▲
//3 地雷 ●
//4. 时光隧道 卍
for (int i = ; i < luckTurn.Length; i++)
{
map[luckTurn[i]] = ;
}
for (int i = ; i < landMine.Length; i++)
{
map[landMine[i]] = ;
}
for (int i = ; i < pause.Length; i++)
{
map[pause[i]] = ;
}
for (int i = ; i < timeTunnel.Length; i++)
{
map[timeTunnel[i]] = ;
}
}
static void DrawMap()
{
for (int i = ; i <= ; i++)
{
Console.Write(GetMapString(i));
}
Console.WriteLine();
for (int i = ; i <= ; i++)
{
for (int j = ; j < ; j++)
{
Console.Write(" ");
}
Console.Write(GetMapString(i));
Console.WriteLine();
}
//打印第
for (int i = ; i >= ; i--)
{
Console.Write(GetMapString(i));
}
Console.WriteLine();
for (int i = ; i <= ; i++)
{
Console.WriteLine(GetMapString(i));
}
for (int i = ; i <= ; i++)
{
Console.Write(GetMapString(i));
}
Console.WriteLine();
}
static void ShowUI()
{
Console.WriteLine("***************************");
Console.WriteLine("* *");
Console.WriteLine("* 棋 士 飞 行 棋 *");
Console.WriteLine("* *");
Console.WriteLine("***************************");
}
}
}

C#面向过程项目之飞行棋的更多相关文章

  1. 编写一个飞行棋项目(C#)遇到几个问题:

    在写程序中遇到如下问题:如果有人知道,请您一定要指点迷津.小白. 1.在运行暂停功能时,这个暂停功能可以实现,但是无法显示提示信息. case 3: Console.Clear(); Program. ...

  2. 如何从普通程序员晋升为架构师 面向过程编程OP和面向编程OO

    引言 计算机科学是一门应用科学,它的知识体系是典型的倒三角结构,所用的基础知识并不多,只是随着应用领域和方向的不同,产生了很多的分支,所以说编程并不是一件很困难的事情,一个高中生经过特定的训练就可以做 ...

  3. C#基础:飞行棋游戏

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

  4. 面向过程 vs 面向对象

    从网上摘录了一些面向过程vs.面向对象的分析,先简单记录如下,稍后会继续整理. 为什么会出现面向对象分析方法? 因为现实世界太复杂多变,面向过程的分析方法无法实现. 面向过程 采用面向过程必须了解整个 ...

  5. IT第十一天、第十二天、第十三天 - 数组的应用、飞行棋游戏的编写和总结

    NIIT第十一天 上午 多维数组 1.数组是引用数据类型 排序 1.冒泡排序法 2.类冒泡排序法 下午 飞行棋游戏 1.项目策划 2.项目规则确认 3.项目模块确认 晚上 1.飞行棋游戏,项目框架的编 ...

  6. 让AutoMapper在你的项目里飞一会儿(转)

    出处:http://www.cnblogs.com/WeiGe/p/3835523.html 先说说DTO DTO是个什么东东? DTO(Data Transfer Object)就是数据传输对象,说 ...

  7. 为什么大一先要学C语言(面向过程)再学C++或JAVA(面向对象)?

    面向对象和面向过程各有千秋 一.面向过程与面向对象对比  面向过程:强调的是每一个功能的步骤,有很多很多方法组成,这些方法相互调用,完成需求. 面向对象:强调的是对象,然后由对象去调用功能. 面向过程 ...

  8. python函数之协程与面向过程编程

    第一:协程 初步了解协程 def eater(): print('start to eat') while True: food=yield print('is eating food:%s'%foo ...

  9. 关于pythoh面向过程开发人员三步转面向对象的补充,再加一步,四步走战略。转面向对象也可以有固定公式。

    前言: oop非常非常非常重要.搞不懂oop,就玩不了python,就算能写也一定是写代码时候喜欢靠猜瞎猫碰死老鼠写得心很虚.为什么这么说呢,我也是从面向过程编程到死走过来的,一路def到死,一看到有 ...

随机推荐

  1. selenium实战演练

    利用selenium以及pyquery,爬取当当网图书信息,并且将数据存入文件以及MongoDB数据库中. 配置文件: key="python" MONGO_URL='localh ...

  2. 版本控制git之一 仓库管理 安装 基础

      版本控制git之一-仓库管理 git ​ 再开始这个话题之前,让我想起了一件很痛苦的事情,在我大学写毕业论文的时候,我当时的文件是这样保存的 毕业论文_初稿.doc 毕业论文_修改1.doc 毕业 ...

  3. sort cmp函数的写法 (特判排序 二级排序)

    特判排序: 看看以下cmp写法,猜想作用: 该函数作用就是“将正数升序排列, 负数排到最后” 我认为cmp函数的一个特性就是, 如果return false, 那么函数就会将他们互换位置, retur ...

  4. ECNU 3263 丽娃河的狼人传说 (贪心)

    链接:http://acm.ecnu.edu.cn/problem/3263/ 题意: 从 1 到 n 的一条数轴.有 m 个区间至少要安装一定数量的路灯,路灯只能装在整数点上,有k盏路灯已经安装好  ...

  5. Java线程和多线程(一)——线程的基本概念

    Java 线程是一个轻量级执行任务的处理单元.Java提供了Thread类来支持多线程,开发者在应用中可以创建多个线程来支持并发执行任务. 在应用中存在两种类型的线程,用户线程和守护线程.当我们启动应 ...

  6. hdu4696 Answers(循环节+找规律)

    题意: 分析: 容易想到先把T数组按位置和对应权值建一个有向图(类似置换群那种指法) 然后图建完了,如果C[]里面都是2,那显然只能凑出那些偶数,奇数是不能凑出来的 如果C[]有1有2呢? 事实上是可 ...

  7. MySQL主主复制搭建教程收集(待实践)

    先收集,后续再实践. http://www.cnblogs.com/ahaii/p/6307648.html http://blog.csdn.net/jenminzhang/article/deta ...

  8. crontab not running

    there are mutliple ways to describle this issue 1. crontab not running 2. crontab not running and no ...

  9. CentOS 7防火墙服务FirewallD指南

    CentOS 7防火墙服务FirewallD指南 作者:chszs,未经博主同意不得转载.经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs 防火墙是一种位于内部网 ...

  10. Websphere优化 (四个方面)举例

    Websphere优化 一.简单介绍 环境 名称 版本号 server操作系统 Centos 5.6 应用server操作系统 Windows 7 Websphere版本号 WAS 7.0 数据库 O ...