2D命令行小游戏Beta1.0
前提:
遇到许多问题,没有参考大佬一些方法是敲不出来的。。。Orz
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace control_move
{
class Map
{
public const int mapsize = 11;
private int r;//行
private int c;//列
public string[,] map = new string[mapsize,mapsize];
public void creat()//画边界
{
for(r=0;r<mapsize;r++)
{
for(c=0;c<mapsize;c++)
{
if (r == 0 || r == 10)
map[r, c] = "█";
else map[r, c] = " ";
map[r, 0] = "█";
map[r, 10] = "█";
Console.Write(map[r, c]);
}
Console.WriteLine();
}
}
}
class body//物体属性
{
public int x = 1,y=1;//一开始位置
public string mark = "sb";//人物图标
}
class play//进行操作变化
{
body p = new body();
public char move;//输入键
public void movement(char move, Map map)
{
switch (move)
{
case 'a':
case 'A':
{
if(map.map[p.y-1,p.x]!= "█")//不撞墙
{
map.map[p.y, p.x] = " ";//将原本位置的人物标识,变空
Console.SetCursorPosition(2 * p.y, p.x);//这边真的不太懂,没有这个是不行的,会出错,会出现重复像
Console.Write(map.map[p.y, p.x]);//这边输出
p.y = p.y - 1;
map.map[p.y, p.x] = p.mark;//移动到的位置
Console.SetCursorPosition(2 * p.y, p.x);
Console.Write(map.map[p.y, p.x]);//输出该位置,以下同理
}
break;
}
case 'd':
case 'D':
{
if (map.map[p.y + 1, p.x] != "█")
{
map.map[p.y, p.x] = " ";
Console.SetCursorPosition(2 * p.y, p.x);
Console.Write(map.map[p.y, p.x]);
p.y = p.y + 1;
map.map[p.y, p.x] = p.mark;
Console.SetCursorPosition(2 * p.y, p.x);
Console.Write(map.map[p.y, p.x]);
}
break;
}
case 'w':
case 'W':
{
if (map.map[p.y, p.x-1] != "█")
{
map.map[p.y, p.x] = " ";
Console.SetCursorPosition(2 * p.y, p.x);
Console.Write(map.map[p.y, p.x]);
p.x = p.x - 1;
map.map[p.y, p.x] = p.mark;
Console.SetCursorPosition(2 * p.y, p.x);
Console.Write(map.map[p.y, p.x]);
}
break;
}
case 's':
case 'S':
{
if (map.map[p.y, p.x+1] != "█")
{
map.map[p.y, p.x] = " ";
Console.SetCursorPosition(2 * p.y, p.x);
Console.Write(map.map[p.y, p.x]);
p.x = p.x + 1;
map.map[p.y, p.x] = p.mark;
Console.SetCursorPosition(2 * p.y, p.x);
Console.Write(map.map[p.y, p.x]);
}
break;
}
}
}
}
class Program
{
static void Main(string[] args)
{
Map world = new Map();
play player = new play();
ConsoleKeyInfo input;//从键盘键入
world.creat();
while(true)
{
input = Console.ReadKey();//输入方向
player.move = input.KeyChar;//进行转化
player.movement(player.move, world);
Console.SetCursorPosition(0,11);//重置光标位置
Console.Write(' ');//
Console.SetCursorPosition(0, 11);//没有以下这几个会使得你输入的键出现在游戏中
}
}
}
}
大部分问题都还好,最后都能知道其操作方法了,就是光标的重置问题不是很懂
github
2D命令行小游戏Beta1.0的更多相关文章
- 2d命令行小游戏源码
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- C#2d命令行小游戏
[ 星 辰 · 第 二 条 约 定 ] 要求 空地:空格 | 边界/墙:'█' | 人物:'♜' 实现人物的上下左右移动 记录关系图.流程图.设计过程遇到的问题及解决 项目压缩包 [项目源码](htt ...
- 写了个 Markdown 命令行小工具,希望能提高园友们发文的效率!
写了个 Markdown 命令行小工具,希望能提高园友们发文的效率! 前言 笔者使用 Typora 来编写 Markdown 格式的博文,图片采用的是本地相对路径存储(太懒了不想折腾图床). 时间久了 ...
- 一个打砖块的小游戏1.0 KILL THE BLOCKS !
/******************************************** * 程序名称:MR.DUAN 的打砖块(KILL THE BLOCKS !) * 作 者:WindAutum ...
- 软件工程:黄金G点小游戏1.0
我们要做的是黄金G点小游戏: N个同学(N通常大于10),每人写一个0~100之间的有理数 (不包括0或100),交给裁判,裁判算出所有数字的平均值,然后乘以0.618(所谓黄金分割常数),得到G值. ...
- python写的battle ship小游戏 - 1.0
最近学python,这是今天写的一个小游戏. from random import randint class Board(object): board = [] def __init__(self, ...
- 分区表,桶表,外部表,以及hive一些命令行小工具
hive中的表与hdfs中的文件通过metastore关联起来的.Hive的数据模型:内部表,分区表,外部表,桶表受控表(managed table):包括内部表,分区表,桶表 内部表: 我们删除表的 ...
- 2、链接数据库+mongodb基础命令行+小demo
链接数据库并且打印出数据的流程:1.在CMD里面输入 mongod 2.在CMD里面输入 mongo 3.在输入mongodb命令行里面进行操作,首先输入 show dbs 来查看是否能够链接得上库4 ...
- Linux命令行小插曲
当命令行出错活出现<时,可使用 ctrl+c强制退出
随机推荐
- ida和idr机制分析(盘符分配机制)
# ida和idr机制分析 ida和idr的机制在我个人看来,是内核管理整数资源的一种方法.在内核中,许多地方都用到了该结构(例如class的id,disk的id),更直观的说,硬盘的sda到sdz的 ...
- NYOJ 71 独木舟上的旅行(贪心)
独木舟上的旅行 时间限制:3000 ms | 内存限制:65535 KB 难度:2 描述 进行一次独木舟的旅行活动,独木舟可以在港口租到,并且之间没有区别.一条独木舟最多只能乘坐两个人,且乘客 ...
- IAT重定向之修复
.. 仅允许非商业转载,转载请注明出处
- seajs和requirejs对比;node初识
seajs 引包 载入主模块(seajs.use('./main')) 定义模块define(function(require,exports,module)) 模块化的好处 1.开发效率高 2.可以 ...
- Eclipse快捷键:同时显示两个一模一样的代码窗口
如图: 同样的一个HTML文件,在代码编辑窗口,显示两个. 快捷键: Ctrl + Shift + -(减号) 既可以展示两个,也可以只显示一个 附加一个快捷键: Ctrl + Shift + ...
- Java企业微信开发_07_素材管理之上传本地临时素材文件
一.本节要点 1.临时素材有效期 media_id是可复用的,同一个media_id可用于消息的多次发送(3天内有效) 2.上传文件时的http请求里都有啥 具体原理可参看: 为什么上传文件的表单需要 ...
- volatile可见性的一些认识
一.前言 volatile的关键词的使用在JVM内存模型中已是老生常谈了,这篇文章主要结合自己对可见性的一些认识和一些直观的例子来谈谈volatile.文章正文大致分为三部分,首先会介绍一下happe ...
- mysql为什么范围查询(>,<,between,%like,like%)之后的索引无效
因为使用了范围索引,所以会使用满足范围的所有的值,也就是说存储引擎在这个时候会提取出满足之后条件的所有值,并遍历获取满足之后条件的值. http://www.itpub.net/thread-1901 ...
- angularjs select一些坑
用select下拉框时,很容易出现第一个默认选择框是空白的情况. 就像这样: 平常我们可以在options中设置selected属性达到默认选择的目的. 同样的,我们可以在控制器中写入select的初 ...
- linux 下 Fatal error: Class ‘mysqli’ not found in
先试用这种方法 http://blog.csdn.net/u010429424/article/details/43063211 我不知道自己安装的php 没他们路径,所以用了以下这种方法处理,并且不 ...