------- Windows Phone 7手机开发、.Net培训、期待与您交流! -------

骑士飞行棋代码实现:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 骑士飞行棋
{
class Program
{
//在下面的数组储存我们游戏地图各个关卡
//数组的下标为0的元素对于地图上的第1格,下表为1的元素对应第2格......下标为n的元素对于第n+1格
//在数组中  1:表示幸运轮盘◎
//         2:表示地雷☆
//         3:表示暂停▲
//         4:表示时空隧道卐
//         0:表示普通
static int[] Map = new int[100];
static int[] playerPos = { 0, 0 };//playerPos[0]存放玩家A的下标   playerPos[1]存放玩家B的下标
static bool[] isStop = { false, false };//isStop[0]表示A上次是否走到了暂停 isStop[1]B表示上次是否走到了暂停 ,如果走到暂停,则设置其值为true
static string[] name = new string[2];//name[0]存游戏玩家A的名字 name[1]存游戏玩家B的名字
static void Main(string[] args)
{
ShowUI();//显示游戏名称
Console.WriteLine("请输入玩家A的名字:");
name[0] = Console.ReadLine();
//判断用户输入的名字是否为空,若为空,则让用户重新输入
while (name[0] == "" || name[0] == " ")
{
Console.WriteLine("玩家A的名字不能为空,请重新输入");
name[0] = Console.ReadLine();
}
Console.WriteLine("请输入玩家B的名字:");
name[1] = Console.ReadLine();
while (name[1] == "" || name[1] == name[0])
{
if (name[1] == "")//为空
{
Console.WriteLine("玩家B的名字不能为空,请重新输入:");
}
if (name[1] == name[0])//A与B重名
{
Console.WriteLine("该名字已被其他用户使用,请重新输入");
}
name[1] = Console.ReadLine();
}
Console.Clear();//清屏
ShowUI();
Console.WriteLine("对战开始......");
Console.WriteLine("玩家{0}用A来表示", name[0]);
Console.WriteLine("玩家{0}用B来表示", name[1]);
Console.WriteLine("如果A、B在同一位置上,则用<>表示");
Console.WriteLine();
InitalMap();//初始化地图
DrawMap();//绘制地图
Console.WriteLine("开始游戏........");
//这个循环中让玩家A和玩家B轮流掷骰子 当玩家A或者玩家B坐标大于99时 循环结束
//产生一个m-n的随机数
//Random r=new Random ();
//int i=r.Next (m,n+1)
while (playerPos[0] < 99 && playerPos[1] < 99)
{
if (isStop[0] == false)
{
Action(0);
}
else
{
isStop[0] = false;
}
if (playerPos[0] >= 99)
{
break;
}
if (isStop[1] == false)
{
Action(1);
}
else
{
isStop[1] =false;
}
}
//判断谁胜利 谁失败
Console.Clear();
ShowUI();
if (playerPos[0] >= 0)
{
Console.WriteLine("{0}胜利了!!!\07\07\07", name[0]);
}
else
{
Console.WriteLine("{0}胜利了!!!\07\07\07", name[1]);
}
Console.ReadKey();
}
/// <summary>
/// A或B掷骰子的方法
/// </summary>
/// <param name="playerNumber">A掷骰子传0过来 B掷骰子传1过来</param>
static void Action(int playerNumber)
{
//playerNumber中存的就是当前玩家 姓名 坐标 是否暂停 这三个数组的下标
//1-playerNumber 就是对方的 姓名 坐标 是否暂停 这三个数组的下标
//当前0  对方1 、当前1  对方0
string msg = "";//用于储存用户踩到某关卡,输出的话
Random r = new Random();//r是产生随机数用的
int step = 0;//用于存放产生的随机数
Console.WriteLine("{0}按任意键开始掷骰......", name[playerNumber ]);
ConsoleKeyInfo rec = Console.ReadKey(true);
if (rec.Key == ConsoleKey.Tab)//自留后门 所谓外挂  呵呵~~~
{
step = 6;
}
else
{
step = r.Next(1, 7);//产生一个1-6之间的随机数
}
Console.WriteLine("{0}掷出了{1}", name[playerNumber ], step);
Console.WriteLine("按任意键开始行动......");
Console.ReadKey(true);
playerPos[playerNumber ] += step;//注意:一旦坐标发生改变 就要进行坐标越界判断
CheckPos();//检测坐标是否越界
if (playerPos[playerNumber ] == playerPos[1-playerNumber ])//玩家A踩到玩家B
{
playerPos[1-playerNumber ] = 0;
msg = string.Format("玩家{0}踩到了玩家{1},玩家{1}退回0格", name[playerNumber ], name[1-playerNumber ]);
}
else
{
switch (Map[playerPos[playerNumber ]])
{//没踩到玩家B 要检测玩家A现在所在的位置是否存在其他关卡
case 0:
//普通 没效果
msg = "";
break;
case 1:
//幸运轮盘
Console.WriteLine("{0}走到了幸运轮盘,请选择运气?", name[playerNumber ]);
Console.WriteLine("1--交换位置 2--轰炸对方");
int userSelect = ReadInt(1, 2);
if (userSelect == 1)
{//要与对方交换位置
int temp = playerPos[playerNumber ];
playerPos[playerNumber ] = playerPos[1-playerNumber ];
playerPos[1-playerNumber ] = temp;
msg = string.Format("玩家{0}选择了与对方交换位置", name[playerNumber ]);
}
else
{//轰炸对方
playerPos[1-playerNumber ] = playerPos[1-playerNumber ] - 6;
CheckPos();
msg = string.Format("玩家{0}轰炸了玩家{1},玩家{1}退了6格", name[playerNumber ], name[1-playerNumber ]);
}
break;
case 2:
//踩到了地雷
playerPos[playerNumber ] -= 6;
CheckPos();
msg = string.Format("玩家{0}踩到了地雷,倒退了6格", name[playerNumber ]);
break;
case 3:
//暂停一次
isStop[playerNumber] = true;
msg = string.Format("{0}走到了红灯,暂停一次", name[playerNumber ]);
break;
case 4:
//时空隧道
playerPos[playerNumber] += 10;
msg = string.Format("玩家{0}进入时空隧道,爽爆咯!前进了10格", name[playerNumber ]);
break;
}
}
Console.Clear();
DrawMap();
if (msg != "")
{
Console.WriteLine(msg);
}
Console.WriteLine("玩家{0}掷了一个{1},行动完成", name[playerNumber ], step);
Console.WriteLine("********玩家A和玩家B目前的位置********");
//Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("{0}的目前位置为{1}", name[playerNumber ], playerPos[playerNumber ] + 1);
Console.WriteLine("{0}的目前位置为{1}", name[1-playerNumber ], playerPos[1-playerNumber ] + 1);
// Console.ResetColor();
Console.WriteLine();
}
/// <summary>
/// 绘制游戏界面 显示游戏名称
/// </summary>
static void ShowUI()
{
Console.WriteLine("********************");
Console.WriteLine("* *              * *");
Console.WriteLine("*  骑 士 飞 行 棋  *");
Console.WriteLine("*      * * *       *");
Console.WriteLine("********************");
}
/// <summary>
/// 获得第pos坐标上应该绘制的图案
/// </summary>
/// <param name="pos">要绘制的坐标</param>
/// <returns></returns>
static string GetMapstring(int pos)
{
string result = "  ";
//判断A、B是否在当前要画的第i格
if (playerPos[0] == pos && playerPos[1] == pos)
{
Console.ForegroundColor = ConsoleColor.Yellow;
result = "<>";
}
else if (playerPos[0] == pos)//A在当前画的格上
{
Console.ForegroundColor = ConsoleColor.White;
result = "A";
}
else if (playerPos[1] == pos)//B在当前画的格上
{
Console.ForegroundColor = ConsoleColor.White;
result = "B";
}
else
{
switch (Map[pos])
{
case 0:
Console.ForegroundColor = ConsoleColor.White;
result = "□";
break;
case 1:
Console.ForegroundColor = ConsoleColor.Cyan;
result = "◎";
break;
case 2:
Console.ForegroundColor = ConsoleColor.Blue;
result = "☆";
break;
case 3:
Console.ForegroundColor = ConsoleColor.Green;
result = "▲";
break;
case 4:
Console.ForegroundColor = ConsoleColor.Red;
result = "卐";
break;
}
}
return result;
}
/// <summary>
/// 对地图中的关卡进行初始化
/// </summary>
static void InitalMap()
{
//用于存储在地图中为地雷的下标
int[] luckyTurn = { 7, 23, 35, 41, 55, 69, 83, 98 };//幸运轮盘
int[] landMine = { 9, 13, 17, 26, 38, 64, 89, 95 };//地雷
int[] Pause = { 10, 20, 30, 40, 50, 60, 70, 80, 90 };//暂停
int[] timeTunnel = { 8, 16, 24, 32, 40, 48, 56, 72, 94 };//时空隧道
for (int i = 0; i < luckyTurn.Length; i++)
{
int pos = luckyTurn[i];
Map[pos] = 1;
}
for (int i = 0; i < landMine.Length; i++)
{
int pos = landMine[i];
Map[pos] = 2;
}
for (int i = 0; i < Pause.Length; i++)
{
int pos = Pause[i];
Map[pos] = 3;
}
for (int i = 0; i < timeTunnel.Length; i++)
{
int pos = timeTunnel[i];
Map[pos] = 4;
}
}
/// <summary>
/// 绘地图
/// </summary>
static void DrawMap()
{
Console.WriteLine("图例:幸运轮盘:◎   地雷:☆   暂停:▲   时空隧道:卐");
//绘制第一行
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++)//绘制29个双空格
{
Console.Write("  ");
}
Console.WriteLine(GetMapstring(i));
}
//绘制第二行
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();
Console.ResetColor();
}
static int ReadInt()
{
int i = ReadInt(int.MinValue, int.MaxValue);
return i;
}
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("只能输入数字,请重新输入:");
}
}
}
/// <summary>
/// 进行玩家A与玩家B坐标越界的判断
/// </summary>
static void CheckPos()
{
for (int i = 0; i < 2; i++)
{
if (playerPos[i] > 99)
{
playerPos[i] = 99;
}
if (playerPos[i] < 0)
{
playerPos[i] = 0;
}
}
}
}
}

运行效果:

骑士飞行棋知识点总结

1、循环控制语句:while语句    for语句

2、条件选择控制语句:if语句    if...... else语句    if......else if 语句

3、跳转控制语句:return语句     break语句   continue语句

4、异常处理语句try{}...... catch{} 语句

5、数组的构造及使用

6、方法的定义域调用

7、调用public class Random类产生随机数      
         //  返回一个指定范围内的随机数。
        // 返回结果:
        //     一个大于等于 minValue 且小于 maxValue 的 32 位带符号整数,即:返回的值范围包括 minValue 但不包括 maxValue。
        //     minValue 等于 maxValue,则返回 minValue。
               public virtual int Next(int minValue, int maxValue);

// 产生一个m-n的随机数
            Random r=new Random ();
            int i=r.Next (m,n+1)

8、调用方法public static ConsoleColor ForegroundColor { get; set; }

//获取或设置控制台的前景色。

// 返回结果:
    //     一个 System.ConsoleColor,指定控制台的前景色;也就是显示的每个字符的颜色。默认为灰色。

语法:Console.ForegroundColor = ConsoleColor.(X);// X为ConsoleColor枚举中的某一个元素

9、多分支选择语句  switch......case语句

10、Console.ReadKey(true );

public static ConsoleKeyInfo ReadKey(bool intercept);
         //     获取用户按下的下一个字符或功能键。按下的键可以选择显示在控制台窗口中。
        //     确定是否在控制台窗口中显示按下的键。如果为 true,则不显示按下的键;否则为 false。

黑马程序员 C#基础_骑士飞行棋相关推荐

  1. 黑马程序员_Java基础_前期准备02-1

    ---------------------------------------- JavaEE+云物联.期待与您交流!----------------------------------------- ...

  2. 黑马程序员 python 基础版 哪个老师_(看黑马程序员Python基础班视频挺好,犹豫该不该报班?)...

    看黑马程序员Python基础班视频挺好,犹豫该不该报班? 如果看视频比较好的话,还是建议自学吧,毕竟录制视频的老师不一定参与实质的讲课,且能自学也省一笔培训费用了.我是看的bilibili上黑马程序员 ...

  3. 黑马 程序员——Java基础---流程控制

    黑马程序员--Java基础---流程控制 ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------ 一.概述 Java提供了两种基本的流程控制结构:分支结构 ...

  4. 黑马 程序员——Java基础---IO(下)

    黑马程序员--Java基础---IO(下) ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------ 一.概述 Java除了基本的字节流.字符流之外,还提供 ...

  5. 黑马程序员-黑马程序员训练营基础测试

    ---------------------- ASP.Net+Unity开发. .Net培训.期待与您交流! ---------------------- 为了帮助更多的人了解黑马,让更多想知道黑马测 ...

  6. 黑马程序员-iOS基础-Objective-C基础(六)内存管理

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 黑马程序员-iOS基础-Objective-C基础(六)内存管理 一.内存管理的必要性 移动设备 ...

  7. 黑马程序员_骑士飞行棋

    ---------------------- Windows Phone 7手机开发. .Net培训.期待与您交流! ---------------------- 骑士飞行棋代码: 来自 传智播客 视 ...

  8. 黑马程序员_c#基础综合练习:骑士飞行棋

    ---------------------- Windows Phone 7手机开发..Net培训.期待与您交流! ---------------------- using System; using ...

  9. 黑马程序员——JavaScript基础1(初识 JavaScript)

    文章目录 一.初识 JavaScript 1.1 JavaScript 是什么 1.2 JavaScript 的作用 1.3 HTML/CSS/JS 的关系 1.4 浏览器执行 JS 简介 1.5 J ...

最新文章

  1. SAP MM 不常用事务代码之MB59
  2. 科大讯飞陶晓东:人工智能时代的医学影像 | CCF-GAIR 2017
  3. hadoop配置文件详解系列(二)-hdfs-site.xml篇
  4. 端口报错listen eaddrinuse:::xxx
  5. 【架构一】高可用之冗余备份
  6. [渝粤教育] 山东第一医科大学 健康教育与健康促进 参考 资料
  7. iis+php解析漏洞修复,服务器解析漏洞分析和漏洞修复方法
  8. [Yii Framework] Another method to run cron in the share space server.
  9. Linux下编译android源码的步骤
  10. html设置为壁纸win10,Win10让桌面壁纸自动换的设置方法(图文教程)
  11. 【050】SylixOS全面支持C-SKY系列处理器
  12. Hive中使用sort_array函数解决collet_list列表排序混乱问题
  13. 如何解决万能地图下载器下载的地图和选择范围不一致
  14. 教程:Windows10下如何安装使用多版本Tensorflow2.x/Pytorch/paddlepaddle的GPU版本[和CUDA的安装及问题详解]【亲测可行】【详细和持续更新】
  15. 一种可以复制钟表零件的石膏模具
  16. Excel如何快速将一个工作表复制到多个工作簿中
  17. mysql计算字段文本区分度
  18. 极简而高效的沟通管理法
  19. 华为linux基础入门,Linux入门篇 —— Shell详解
  20. 使用SQL删除表中所有数据

热门文章

  1. java宿舍管理系统登录界面_JavaWeb宿舍管理系统(附 演示、源码下载地址)
  2. openssh windows10 download 下载与安装
  3. 【设计模式】软件设计七大原则 ( 迪米特原则 | 代码示例 )
  4. javascript截取字符串方法实例
  5. scrapy项目2:爬取智联招聘的金融类高端岗位(spider类)
  6. OpenAI魔法模型DALL-E论文、代码公布!
  7. python文件写入追加写入_python怎么以追加的方式写文件?
  8. matlab绘图函数:举例说明surf、mesh、pcolor联系和区别
  9. 介绍一款实用的东东——抗菌键盘保护膜
  10. C#播放flash文件(swf文件)