C#面向过程项目之飞行棋

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[100];
static int[] pos = new int[2];//第一个元素代表的是玩家A的位置 第2个元素代表的是玩家B的位置
static bool[] isStop = {false,false };
static string[] names = new string[2];//用于保存玩家AB的姓名
static void Main(string[] args)
{
ShowUI();//显示LOGO
Console.WriteLine("请输入玩家A的名字:");
while (true)//进入循环 接受用户输入玩家A的名字 退出条件是 玩家A输入的不是空的字符串
{
names[0] = Console.ReadLine();
if (names[0] == "")
{
Console.WriteLine("玩家的名字不能为空,请重新输入!");
}
else
{
break;//跳出循环
}
}
Console.WriteLine("请输入玩家B的名字:");
names[1] = Console.ReadLine();//接收用户的输入 并把用户的输入赋值给names数组的第1个元素
while (names[1] == "" || names[1] == names[0])//循环接收用户的输入
{
if (names[1] == "")
{
Console.WriteLine("玩家的名字不能为空,请重新输入!");
}
else if (names[1] == names[0])
{
Console.WriteLine("玩家B的名字不能与玩家A的名字一样,请重新输入");
}
names[1] = Console.ReadLine();
}
//到这里为止 我们已经接收了用户输入的玩家A和玩家B的姓名
Console.Clear();//将当前控制台上的所有的信息 清空
ShowUI();
Console.WriteLine(names[0] + "," + names[1] + "欢迎你们来到飞行棋乐园。。。。。。。");
Console.WriteLine(names[0] + "用A表示\n" + names[1] + "用B表示\n" + "如果两个在一起用<>表示\n现在对战开始!");
InitMap();
DrawMap();
Random r = new Random();
//开始轮流掷骰子
while (pos[0] < 99 && pos[1] < 99)
{
if (isStop[0] == false)
{
#region 玩家A掷骰子
Play(0);
#endregion
}
else
{
isStop[0] = false;
}
if (pos[0] >= 99)
{
break;
}
if (isStop[1] == false)
{
#region 玩家B掷骰子
Play(1);
#endregion
}
else
{
isStop[1] = false;
}
//如果是普通的 则什么效果都木有
//如果玩家A踩到玩家B 玩家B的位置到0
//如果是幸运轮盘 1可以和对方互换位置 2.可以轰炸对方(让对方退6格)
//如果是时空隧道 就让玩家A前进10格
//如果是地雷 就退6格
//如果是暂停 那么就让玩家A暂停一次
}
if (pos[0] >= 99)
{
Console.WriteLine("恭喜你" + names[0] + "玩家胜利!");
}
else
{
Console.WriteLine("恭喜你" + names[1] + "玩家胜利!");
}
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 == 0 ? "A" : "B";
Random r = new Random();
Console.WriteLine("玩家{1}:{0}按任意键开始掷骰子....", names[playerNumer], AorB);
ConsoleKeyInfo info = Console.ReadKey(true);//接收用户任意键的输入
int step = r.Next(1, 7);//返回1个1-6的随机数
if (info.Key == ConsoleKey.Tab)
{
step = 20;
}
Console.WriteLine("玩家{2}:{0}掷的数字是:{1}", names[playerNumer], step, AorB);
pos[playerNumer] += step;
CheckPos();
string msg = "";
//判断玩家A是否踩到了玩家B
if (pos[1] == pos[0])
{
if (playerNumer == 0)
pos[1] = 0;
else
pos[0] = 0;
}
else
{
switch (map[pos[playerNumer]])
{
case 0://普通的 没有效果
break;
case 1://幸运轮盘
//如果是幸运轮盘 1可以和对方互换位置 2.可以轰炸对方(让对方退6格)
Console.WriteLine("恭喜你,踩到了幸运轮盘,请选择你的运气: 1.和对方互换位置 2.轰炸对方");
int userSelect = ReadInt(1, 2);
if (userSelect == 1)//和对方互换位置
{
int temp = pos[0];//交换变量的值
pos[0] = pos[1];
pos[1] = temp;
msg = "你选择了和对方互换位置........";
}
else //轰炸对方 让对方退6格
{
if (playerNumer == 0)
pos[1] -= 6;
else pos[0] -= 6;
CheckPos();
msg = string.Format("你轰炸了对方,{0}退6格", names[1]);
}
break;
case 2://暂停
isStop[playerNumer] = true;
msg = "倒霉,暂停一次!";
break;
case 3://地雷
pos[playerNumer] -= 6;
CheckPos();
msg = "真倒霉,你踩到地雷了,后退6格";
break;
case 4://时光隧道
pos[playerNumer] += 10;
CheckPos();
msg = "真爽, 你穿越了, 前进10格";
break;
}
}
if (msg != "")
{
Console.WriteLine(msg);
}
Console.WriteLine("按任意键开始移动。。。");
Console.ReadKey(true);
Console.Clear();
ShowUI();
DrawMap();
Console.WriteLine("**********************位置信息**********************");
Console.WriteLine("玩家A的位置:" + pos[0]);
Console.WriteLine("玩家B的位置:" + pos[1]);
}
///

/// 检测玩家A和玩家B的位置是否越界
///

static void CheckPos()
{
for (int i = 0; i < pos.Length; i++)
{
if (pos[i] > 99)
{
pos[i] = 99;
}
if (pos[i] < 0)
{
pos[i] = 0;
}
}
}
static string GetMapString(int p)
{
//1 幸运轮盘 ◎
//2 暂停 ▲
//3 地雷 ●
//4. 时光隧道 卍
string res = "";
if (pos[0] == p && pos[1] == p)
{
Console.ForegroundColor = ConsoleColor.Red;
res = ("<>");
}
else if (pos[0] == p)
{
Console.ForegroundColor = ConsoleColor.Red;
res = ("A");
}
else if (pos[1] == p)
{
Console.ForegroundColor = ConsoleColor.Red;
res = ("B");
}
else
{
switch (map[p])
{
case 0:
Console.ForegroundColor = ConsoleColor.White;//是设置控制台的前景色
res = "□";
break;
case 1:
Console.ForegroundColor = ConsoleColor.Green;
res = "◎";
break;
case 2:
Console.ForegroundColor = ConsoleColor.Yellow;
res = "▲";
break;
case 3:
Console.ForegroundColor = ConsoleColor.DarkRed;
res = "●";
break;
case 4:
Console.ForegroundColor = ConsoleColor.Blue;
res = "卍";
break;
}
}
return res;
}
static void InitMap()
{
int[] luckTurn = { 6, 23, 40, 55, 69, 83, 98 };//幸运轮盘
int[] landMine = { 5, 13, 17, 33, 38, 50, 64, 80, 94 };//地雷
int[] pause = { 9, 27, 60, 93 };//暂停
int[] timeTunnel = { 20, 25, 45, 63, 72, 88, 90 };//时空隧道
//1 幸运轮盘 ◎
//2 暂停 ▲
//3 地雷 ●
//4. 时光隧道 卍
for (int i = 0; i < luckTurn.Length; i++)
{
map[luckTurn[i]] = 1;
}
for (int i = 0; i < landMine.Length; i++)
{
map[landMine[i]] = 3;
}
for (int i = 0; i < pause.Length; i++)
{
map[pause[i]] = 2;
}
for (int i = 0; i < timeTunnel.Length; i++)
{
map[timeTunnel[i]] = 4;
}
}
static void DrawMap()
{
for (int i = 0; i <= 29; i++)
{
Console.Write(GetMapString(i));
}
Console.WriteLine();
for (int i = 30; i <= 34; i++)
{
for (int j = 0; j < 29; j++)
{
Console.Write(" ");
}
Console.Write(GetMapString(i));
Console.WriteLine();
}
//打印第
for (int i = 64; i >= 35; i--)
{
Console.Write(GetMapString(i));
}
Console.WriteLine();
for (int i = 65; i <= 69; i++)
{
Console.WriteLine(GetMapString(i));
}
for (int i = 70; i <= 99; i++)
{
Console.Write(GetMapString(i));
}
Console.WriteLine();
}
static void ShowUI()
{
Console.WriteLine("***************************");
Console.WriteLine("* *");
Console.WriteLine("* 棋 士 飞 行 棋 *");
Console.WriteLine("* *");
Console.WriteLine("***************************");
}
}
}

C#面向过程项目之飞行棋

时间: 2024-07-30 07:10:14

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

飞行棋2.0--输完姓名后全自动,可修改为人机交互模式

1 // 2 // main.m 3 4 #import <Foundation/Foundation.h> 5 #import "GameController.h" 6 int main(int argc, const char * argv[]) 7 { 8 GameController *ctl = [GameController new]; 9 [ctl startGame]; 10 11 // GameMap *map = [GameMap new]; 12 //

007 飞行棋小项目

2016-01-16 1.画游戏头2.初始化地图(加载地图所需要的资源)将整数数组中的数字编程控制台中显示的特殊字符串的这个过程 就是初始化地图3.画地图 4.玩游戏 游戏规则:如果玩家A踩到了玩家B  玩家B退6格  踩到了地雷 退6格踩到了时空隧道 进10格踩到了幸运轮盘 1交换位置  2 轰炸对方 使对方退6格踩到了暂停  暂停一回合  踩到了方块  神马都不干 主要引用用的方法 1 Map[50] 2 if(map[40]==1) 3 { 4 Console.WriteLine("◎&q

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

在写程序中遇到如下问题:如果有人知道,请您一定要指点迷津.小白. 1.在运行暂停功能时,这个暂停功能可以实现,但是无法显示提示信息. case 3: Console.Clear(); Program.drawmap(); isstop[0] = true; msg = string.Format("{0}走到了地雷,暂停一次!", name[0]); break; 2.下面这行代码没有效果:(我换了一下console.clear()的位置不行,但去掉可以实现,但是也没有清屏了.) Co

局域网多人对战飞行棋的实现

在项目之间有段“空项期”,上个项目刚刚完成,下个项目还没落实,时间比较充裕.去年9月份就经历了这么一次短暂的“空项期”,那时偶还是一名前端工作者,C#使用起来毫不含糊,还自己整过一个类SCSF的MVP框架AngelFrame(详见之前博客:http://www.cnblogs.com/wgp13x/p/99c2adc52d8f0dff30a038841ac32872.html).在那段“空项期”之前,有位朋友托我做个小游戏,偶也满口的答应,只可惜之前项目太忙没时间做,就一直耽搁了,正好有这段“空

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

引言 计算机科学是一门应用科学,它的知识体系是典型的倒三角结构,所用的基础知识并不多,只是随着应用领域和方向的不同,产生了很多的分支,所以说编程并不是一件很困难的事情,一个高中生经过特定的训练就可以做得到.但是,会编程和编好程绝对是两码事,同样的程序员,有的人几年之后成为了架构师,有的人却还在不停地coding,只不过ctrl-c.ctrl-v用得更加纯熟了.在中国,编程人员最终的归途无外乎两条:一是转向技术管理,它的终点是CTO:二是继续深入,它的终点是首席架构师,成为CEO的人毕竟是少数.如

【C++系列小结】面向过程的编程风格

前言 编程语言有面向过程和面向对象之分,因此编程风格也有所谓的面向过程的编程和面向对象的编程,而且语言的性质不会限制编程的风格. 这里主要说一下面向过程的编程. "面向过程"(Procedure Oriented)是一种以过程为中心的编程思想. C语言是面向过程的编程语言,但是依然可以写出面向对象的程序,同样C++也当然可以写出面向过程的程序咯. 如果我们把所有的程序代码都写在一个main函数里面,那么这个程序显然会显得很不和谐吧.理想一点的做法是我们把一些看起来和main函数逻辑上关

.NET 高级架构师0002 架构师之路(1)---面向过程和面向对象

1.引言     机算机科学是一门应用科学,它的知识体系是典型的倒三角结构,所用的基础知识并不多,只是随着应用领域和方向的不同,产生了很多的分支,所以说编程并不是一件很困难的事情,一个高中生经过特定的训练就可以做得到.但是,会编程和编好程绝对是两码事,同样的程序员,有的人几年之后成为了架构师,有的人却还在不停地coding,只不过ctrl-c.ctrl-v用得更加纯熟了.在中国,编程人员最终的归途无外乎两条:一是转向技术管理,它的终点是CTO:二是继续深入,它的终点是首席架构师,成为CEO的人毕

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

出处:http://www.cnblogs.com/WeiGe/p/3835523.html 先说说DTO DTO是个什么东东? DTO(Data Transfer Object)就是数据传输对象,说白了就是一个对象,只不过里边全是数据而已. 为什么要用DTO? 1.DTO更注重数据,对领域对象进行合理封装,从而不会将领域对象的行为过分暴露给表现层 2.DTO是面向UI的需求而设计的,而领域模型是面向业务而设计的.因此DTO更适合于和表现层的交互,通过DTO我们实现了表现层与领域Model之间的

C#基础:飞行棋游戏

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Pachee { class Program { #region 静态字段 // 关卡数量 public static int[] Maps = new int[100]; // 玩家坐标 public static int[] PlayerPos