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. 合办大学 -- internal campus in China

    * 合办大学 -- internal campus in China- international campus zhejiang University- 南方科技大学 - 西交利物浦大学(Xi’an ...

  2. 【04】emmet系列之编辑器

     [01]emmet系列之基础介绍 [02]emmet系列之HTML语法 [03]emmet系列之CSS语法 [04]emmet系列之编辑器 [05]emmet系列之各种缩写 前端开发人员,常用的是s ...

  3. 【转】Comet:基于 HTTP 长连接的“服务器推”技术

    原文链接:http://www.ibm.com/developerworks/cn/web/wa-lo-comet/ 很多应用譬如监控.即时通信.即时报价系统都需要将后台发生的变化实时传送到客户端而无 ...

  4. HDU 4479 权递增的最短路问题

    题目大意: 找一条节点 1 到节点 N 的最短路,保证这条路上每一条边都比前一条边长 dp[i] 表示在当前状态下1到i的最小值 先将所有边根据边的长度排一个序,再每次取出同一段相同长度的边去更新当前 ...

  5. 2018/2/27 Activiti教程之创建流程篇(与Springboot整合版)一

    因为电脑还在托运中,现在手上这台垃圾电脑实在是没法玩微服务,所以趁着这两天玩玩Activiti吧. 说实话,在学习Activiti中走了N多弯路,最大的原因就是网上没有一个完整(好)的教程,甚至连官方 ...

  6. 51nod1020 逆序排列

    t<=10000个问,每次问n<=1000的全排列中逆序数对为k<=10000个的有多少,mod 1e9+7. 直接dp,$f(i,j)$--i的全排列中逆序数对为j的有多少,$f( ...

  7. [bzoj5379]Tree_dfs序_线段树_倍增lca

    Tree bzoj-5379 题目大意:给定一棵$n$节点的树.支持:换根.把节点$u$和$v$的$lca$的子树加.询问$u$的子树和. 注释:$1\le n,q\le 3\times 10^5$. ...

  8. Visual studio 2008 的语法高亮插件 WordLight

    前段时间一直在使用matlab,今天需要使用vs2008,而用惯了matlab,习惯了其中一项选中变量高亮的设置,突然回来使用VS,感到各种不适应,顿时想到了一个词:矫情 呵呵,于是在网上找各种插件, ...

  9. Vue.js组件的通信之父组件向子父组件的通信

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. muduo buffer类的设计与使用

    Unix/Linux上的五种IO模型(UNP6.2) IO多路复用一般不能和blocking IO用在一起,因为blocking IO中read() write() accept() connect( ...