C#学习编写的飞行棋游戏
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace 飞行棋
{
class Program
{
public static string strformat = "";
public static int[] Map = new int[100];
public static int[] PlayerPos = new int[2];
public static string[] PlayerName = new string[2];
public static bool[] flags = new bool[] { false, false };
private static Timer tm;
static char[] S = new char[512];
static int n = 0;
static void Main(string[] args)
{
Console.SetWindowPosition(0,0);//设置控制台在屏幕中的位置
Console.SetWindowSize(80,36);//设置控制台宽度和高度
ShowUI();//显示游戏标题
InitMap();//初始化地图
PlayerName = Login();//用户登录
Console.Clear();//清屏
ShowUI();//显示游戏标题
Console.WriteLine("一场轰轰烈烈的爱情追逐战即将开始……\n");
Console.WriteLine("首先上场的是我们的萌妹纸 {0} 美女……\n",PlayerName[0]);
Console.WriteLine("紧随而来的是我们的帅小伙 {0} 帅哥……\n",PlayerName[1]);
DrawMap();
Console.WriteLine("按任意键开始爱情追逐!");
Console.ReadKey(true);
Console.Clear();
DrawMap();
Console.WriteLine("爱情追逐已经开始了……");
Console.WriteLine("毫无疑问,萌妹纸 {0} 先掷骰子!\n",PlayerName[0]);
//游戏过程
while (PlayerPos[0] < 99 && PlayerPos[1] < 99)
{
//第一个问题,玩家的坐标大于99了,玩家显示的位置可能不在地图上
//判断 玩家每走一次,或者说涉及到坐标发生改变,就应该检查一下当前位置是否大于99
//第二个问题,玩家的坐标可能小于0
//第一个人掷骰子
if (flags[0] == false)
{
RowDo(0);
}
else
{
flags[0] = false;
}
//判断第一个人是否胜利
if(PlayerPos[0] == 99)
{
Win(0);
break;
}
//第二个人掷骰子
if (flags[1] == false)
{
RowDo(1);
}
else
{
flags[1] = false;
}
//判断第二个人是否胜利
if (PlayerPos[1] == 99)
{
Win(1);
break;
}
}
Console.Clear();
Console.ReadKey();
}
/// <summary>
/// 游戏标题部分显示,封装为一个方法
/// </summary>
public static void ShowUI()
{
Console.WriteLine("");
Console.WriteLine(" **************************************");
Console.WriteLine(" * *");
Console.Write(" * >>>>>> ");
Console.ForegroundColor = ConsoleColor.Red;
Console.Write("情侣终极飞行棋");
Console.ForegroundColor = ConsoleColor.Gray;
Console.WriteLine(" <<<<<< *");
Console.WriteLine(" * *");
Console.WriteLine(" **************************************");
Console.WriteLine("");
Console.WriteLine("");
}
/// <summary>
/// 初始化地图
/// 1:幸运轮盘 2、失之交臂 3、暂停一次 4、爱神丘比特
/// </summary>
public static void InitMap()
{
//map数组中一共有100个元素,现在默认是每个元素里的值都是0
//让某些元素中的值发生变化
int[] luckyturn = new int[6]{ 6, 23, 40, 55, 69, 83 };//幸运轮盘
int[] landMine = new int[9] { 5, 13, 17, 33, 38, 50, 64, 80, 94 };//失之交臂
int[] pause = new int[4] { 9, 27, 60, 93 };//暂停一次
int[] timeTunnel = new int[7] { 20, 25, 45, 63, 72, 88, 90 };//爱神丘比特
for (int i = 0; i < luckyturn.Length; i++)
{
Map[luckyturn[i]] = 1;
}
for (int i = 0; i < landMine.Length; i++)
{
Map[landMine[i]] = 2;
}
for (int i = 0; i < pause.Length; i++)
{
Map[pause[i]] = 3;
}
for (int i = 0; i < timeTunnel.Length; i++)
{
Map[timeTunnel[i]] = 4;
}
}
/// <summary>
/// 画地图
/// </summary>
public static void DrawMap()
{
Console.WriteLine("图例:幸运轮盘:◎ 失之交臂:☆ 暂停一次:▲ 爱神丘比特:卐\n");
Console.Write(" 起点-> ");
#region 画第一横行
DrawMapLeftToRight(0, 29);
#endregion
Console.WriteLine("");
#region 画第一竖列
for (int i = 30; i <= 34; i++)
{
for (int j = 0; j < 34; j++)
{
Console.Write(" ");
}
Console.WriteLine(DrawMapString(i));
}
#endregion
Console.Write(" ");
#region 画第二横行
for (int i = 64; i >= 35; i--)
{
Console.Write(DrawMapString(i));
}
#endregion
Console.WriteLine("");
#region 画第二竖列
for (int i = 65; i <= 69; i++)
{
Console.Write(" ");
Console.WriteLine(DrawMapString(i));
}
#endregion
Console.Write(" ");
#region 画第三横行
DrawMapLeftToRight(70, 99);
#endregion
Console.Write(" <-终点");
Console.WriteLine("\n");
}
/// <summary>
/// 画地图显示图案
/// </summary>
/// <param name="pos">坐标</param>
/// <returns></returns>
public static string DrawMapString(int pos)
{
string str = "";
if (PlayerPos[0] == PlayerPos[1] && PlayerPos[0] == pos)
{
Console.ForegroundColor = ConsoleColor.Yellow;
str = "爱";
}
else if (PlayerPos[0] == pos)
{
Console.ForegroundColor = ConsoleColor.Yellow;
str = "妻";
}
else if (PlayerPos[1] == pos)
{
Console.ForegroundColor = ConsoleColor.Yellow;
str = "夫";
}
else
{
switch (Map[pos])
{
case 0:
Console.ForegroundColor = ConsoleColor.White;
str = "□";
break;
case 1:
Console.ForegroundColor = ConsoleColor.Red;
str = "◎";
break;
case 2:
Console.ForegroundColor = ConsoleColor.DarkMagenta;
str = "☆";
break;
case 3:
Console.ForegroundColor = ConsoleColor.Cyan;
str = "▲";
break;
case 4:
Console.ForegroundColor = ConsoleColor.Blue;
str = "卐";
break;
}//end switch
}//end else
return str;
}
/// <summary>
/// 从左到右画地图
/// </summary>
/// <param name="left">开始坐标</param>
/// <param name="right">结束坐标</param>
public static void DrawMapLeftToRight(int left, int right)
{
for (int i = left; i <= right; i++)
{
Console.Write(DrawMapString(i));
}
}
/// <summary>
/// 登录
/// </summary>
/// <returns>登录用户</returns>
public static string[] Login()
{
string[] Player = new string[2];
Console.WriteLine("请输入萌妹纸的名字:");
do
{
Player[0] = Console.ReadLine();
if (Player[0] == "")
{
Console.WriteLine("难道是传说中的女王无名?还是老实交代妹纸的芳名吧……");
}
}while(Player[0] == "");
Console.WriteLine("请输入帅小伙的名字:");
Player[1] = Console.ReadLine();
while (Player[0] == Player[1] || Player[1] == "")
{
if (Player[0] == Player[1])
{
Console.WriteLine("你忍心和一个萌妹纸抢名字么?骚年,还是换个名字吧……");
}
else
{
Console.WriteLine("难道是传说中的土豪无名?骚年,还是老实交代自己的名字吧……");
}
Player[1] = Console.ReadLine();
}
return Player;
}
/// <summary>
/// 判断用户输入的是不是规定范围内的数字
/// </summary>
/// <param name="str">提示语</param>
/// <param name="min">最小值</param>
/// <param name="max">最大值</param>
/// <returns></returns>
public static int ReadInt(string str,int min,int max)
{
//一、用户输入的如果不是数字就一直提醒输入
//二、用户输入的数字只能是1和2
while (true)
{
Console.WriteLine(str);
try
{
int num = Convert.ToInt32(Console.ReadLine());
if (num >= min && num <= max)
{
return num;
}
else
{
Console.WriteLine("输入的数字不在{0}和{1}之间,请重新输入……");
}
}
catch
{
Console.WriteLine("输入的不是数字,请重新输入……");
}
}
}
/// <summary>
/// 移动位置
/// </summary>
/// <param name="start">起点位置</param>
/// <param name="end">终点位置</param>
/// <param name="pos">当前位置</param>
/// <param name="move">移动步数</param>
/// <returns></returns>
public static int Move(int start, int end, int pos, int move)
{
if(pos + move < start)
{
pos = start;
}
else if (pos + move > end)
{
pos = end;
}
else
{
pos = pos + move;
}
return pos;
}
/// <summary>
/// 幸运轮盘判断
/// </summary>
/// <param name="pos">触发人</param>
public static void LuckTurn(int pos)
{
int number = ReadInt(string.Format(" {0} 走到了幸运轮盘,1--你侬我侬,互换位置,2--咫尺天涯,送你回去", PlayerName[pos]), 1, 2);
if (number == 1)
{
//交换位置
int temp = PlayerPos[pos];
PlayerPos[pos] = PlayerPos[1 - pos];
PlayerPos[1 - pos] = temp;
Console.WriteLine(" {0} 对 {1} 使用了你侬我侬,两人交换位置。", PlayerName[pos], PlayerName[1 - pos]);
}
else
{
//退6步,需要判断退6步后是否超出起点
PlayerPos[1-pos] = Move(0, Map.Length - 1, PlayerPos[1 - pos], -6);
Console.WriteLine(" {0} 对 {1} 使用了咫尺天涯, {1} 退后六步。", PlayerName[pos], PlayerName[1 - pos], PlayerName[1 - pos]);
}
}
/// <summary>
/// 检查位置是否越界
/// </summary>
public static void CheckPos()
{
if (PlayerPos[0] > 99)
{
PlayerPos[0] = 99;
}
if (PlayerPos[1] > 99)
{
PlayerPos[1] = 99;
}
if (PlayerPos[0] < 0)
{
PlayerPos[0] = 0;
}
if (PlayerPos[1] < 0)
{
PlayerPos[1] = 0;
}
}
/// <summary>
/// 掷骰子过程
/// </summary>
/// <param name="pos">当前玩家</param>
public static void RowDo(int pos)
{
Random r = new Random();
int num = r.Next(1, 7);
Console.WriteLine(" {0} 按任意键掷骰子……",PlayerName[pos]);
Console.ReadKey(true);
Console.WriteLine(" {0} 掷出了{1}", PlayerName[pos], num);
Console.WriteLine(" {0} 按任意键开始行动……\n", PlayerName[pos]);
Console.ReadKey(true);
PlayerPos[pos] = Move(0, Map.Length - 1, PlayerPos[pos], num);
//判断两个玩家有没有谁踩到谁
if (PlayerPos[pos] == PlayerPos[1 - pos])
{
PlayerPos[1 - pos] = 0;
strformat = string.Format(" {1} 与 {0} 不期而遇, {0} 被 {1} 送回了原点",PlayerName[pos],PlayerName[1-pos],PlayerName[1-pos],PlayerName[pos]);
}
else
{
switch (Map[PlayerPos[pos]])
{
case 0:
strformat = string.Format(" {0} 行动完毕!",PlayerName[pos]);
break;
case 1:
LuckTurn(pos);
break;
case 2:
PlayerPos[pos] = Move(0, Map.Length - 1, PlayerPos[pos], -6);
strformat = string.Format(" {0} 与对方失之交臂,后退6步……", PlayerName[pos]);
break;
case 3:
flags[pos] = true;
strformat = string.Format(" {0} 陷入情网不能自拔,暂停一回合……", PlayerName[pos]);
break;
case 4:
PlayerPos[pos] = Move(0, Map.Length - 1, PlayerPos[pos], 10);
strformat = string.Format(" {0} 遇见了爱神丘比特,得到祝福,前进10步……", PlayerName[pos]);
break;
}
}
//重新画地图
Console.Clear();
DrawMap();
Console.WriteLine(strformat);
Console.WriteLine("");
}
public static void Win(int pos)
{
Console.Clear();
DrawMap();
//画心
int[] tab ={0,1,0,0,0,1,0,
1,0,1,0,1,0,1,
1,0,0,1,0,0,1,
1,0,0,0,0,0,1,
0,1,0,0,0,1,0,
0,0,1,0,1,0,0,
0,0,0,1,0,0,0,};
for (int i = 0; i < 49; i++)
{
if (i % 7 == 0)
{
Console.Write(" \n");
}
if (tab[i] == 0)
{
Console.Write(" ");//注意这里双引号之间有两个空格
}
else
{
Console.Write(" *");//注意这里*前有个空格
}
}
Console.WriteLine();
//按照一定的速率输出要显示的内容
S = "爱情,没有谁赢谁输,也无关对错,只要相伴走过一生,你也像我一样深深的眷恋。。。亲爱的,我爱你,我就是要好好的宠着你,养着你,让你任性,让你奢侈,让你无忧无虑的生活着。。。我爱你,亲爱的老婆。。。".ToCharArray();
tm = new System.Threading.Timer(new TimerCallback(timer_Elapsed), null, 0, 300);
Console.ReadLine();
}
private static void timer_Elapsed(object sender)
{
if (n < S.Count())
{
Console.Write(S[n]);
n++;
}
}
}
}
C#学习编写的飞行棋游戏相关推荐
- Python飞行棋游戏源代码,基于socket网络通信的小游戏,可设置多个游戏房间及参与飞行棋游戏的玩家
直接运行ludoServer.py即可,然后用浏览器打开http://127.0.0.1:4399/,完成房间创建.房间设置及玩家设备即可开始游戏 完整程序代码下载地址:Python飞行棋游戏源代码 ...
- C#飞行棋游戏源码WinForm版本详细教程
C#做的飞行棋游戏(WinForm)版本 逻辑不是很难,很好理解,适合新手练手 先看一下游戏规则 两个人轮流掷骰子红人和绿人(必须自定义名称否则无法进行游戏) 投掷出2,4,6点出门,投掷出6点可以在 ...
- 黑马程序员_学习日记2_飞行棋
---------------------- Windows Phone 7手机开发. .Net培训.期待与您交流! ---------------------- 4月13日 今天看了一天的视频,把骑 ...
- 飞行棋游戏代码(C#)
220224飞行器v1.0 using System;namespace AeroplaneChess {class Program{//地图static int[] Maps = new int[1 ...
- C#基础(10)——飞行棋游戏
1.打印游戏头 using System; using System.Collections.Generic; using System.Linq; using System.Text; using ...
- c#飞行棋游戏(控制台)
需求分析 1.制作游戏头部:游戏头部介绍 2.绘制地图 使用一维数组装整个地图的路线 如果这个位置是0,绘制普通格子□ 如果这个位置是1,绘制幸运轮盘◎ 如果这个位置是2,绘制地雷★ 如果这个位置是3 ...
- C#学习第六天 基础语法练习游戏--飞行棋
前几天学习的实践:游戏---飞行棋 步骤: 1.画游戏头 2.初始化地图(加载地图所需要的资源) 将整个数组中的数字变成控制台中显示的特殊字符串的过程,就是初始化地图 int[100]代表100个符号 ...
- 【全栈计划 —— 编程语言之C#】 C# 实现双人飞行棋小游戏
文章目录 前言 项目结构流程图 项目实现 一.游戏开始界面 二.初始化游戏地图 三.绘制飞行棋地图 四.玩游戏具体逻辑 ① 创建两个玩家角色 ② 具体走到每个关卡触发的结果 ③ 判断胜利 ④ 回首调优 ...
- C#入门学习——飞行棋
用之前学习的内容做一个飞行棋游戏 当我们打开程序,显示出飞行棋游戏1.0这一部分内容,然后是要求用户输入玩家姓名. 当玩家姓名输入无误之后,显示如上界面.这一部分为玩家棋子和地图. 可以看到输入的玩家 ...
最新文章
- Outlook数据提取工具readpst
- codeforces 667A A. Pouring Rain(水题)
- python爬虫06 | 你的第一个爬虫,爬取当当网 Top 500 本五星好评书籍
- Django从理论到实战(part35)--QuerySetAPI
- windows server 2012 初安装体验
- DOS窗口的编码页从UTF-8调回GBK
- mysql安装数据自定义_mysql数据库自定义怎么安装
- SAP License:SAP菜单修改
- 使用xml文件存储数据使用xpath查询
- 三年探索:一条自控、电信/科类学生的技术成长路线
- CE-RTI开源软件代码学习笔记(一)
- 携程Java后台开发三面面经
- 轻松实现钉钉机器人定时发消息
- ME525做网络收音机和学外文用了……(安卓4.4.4系统,20190817更新)
- Dual-Resolution Correspondence Networks 2020
- MySql常用函数及命令
- mysql jail_2.1.5 jail在生产环境下的注意事项
- mysql索引长度超过767bytes问题解决。Specified key was too long; max key length is 767 bytes
- linux usb音频,audio - 如何从linux USB捕获设备捕获与ffmpeg同步的音频和视频 - 堆栈内存溢出...
- 2023年国产CRM客户管理系统软件排名