前提:

遇到许多问题,没有参考大佬一些方法是敲不出来的。。。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的更多相关文章

  1. 2d命令行小游戏源码

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  2. C#2d命令行小游戏

    [ 星 辰 · 第 二 条 约 定 ] 要求 空地:空格 | 边界/墙:'█' | 人物:'♜' 实现人物的上下左右移动 记录关系图.流程图.设计过程遇到的问题及解决 项目压缩包 [项目源码](htt ...

  3. 写了个 Markdown 命令行小工具,希望能提高园友们发文的效率!

    写了个 Markdown 命令行小工具,希望能提高园友们发文的效率! 前言 笔者使用 Typora 来编写 Markdown 格式的博文,图片采用的是本地相对路径存储(太懒了不想折腾图床). 时间久了 ...

  4. 一个打砖块的小游戏1.0 KILL THE BLOCKS !

    /******************************************** * 程序名称:MR.DUAN 的打砖块(KILL THE BLOCKS !) * 作 者:WindAutum ...

  5. 软件工程:黄金G点小游戏1.0

    我们要做的是黄金G点小游戏: N个同学(N通常大于10),每人写一个0~100之间的有理数 (不包括0或100),交给裁判,裁判算出所有数字的平均值,然后乘以0.618(所谓黄金分割常数),得到G值. ...

  6. python写的battle ship小游戏 - 1.0

    最近学python,这是今天写的一个小游戏. from random import randint class Board(object): board = [] def __init__(self, ...

  7. 分区表,桶表,外部表,以及hive一些命令行小工具

    hive中的表与hdfs中的文件通过metastore关联起来的.Hive的数据模型:内部表,分区表,外部表,桶表受控表(managed table):包括内部表,分区表,桶表 内部表: 我们删除表的 ...

  8. 2、链接数据库+mongodb基础命令行+小demo

    链接数据库并且打印出数据的流程:1.在CMD里面输入 mongod 2.在CMD里面输入 mongo 3.在输入mongodb命令行里面进行操作,首先输入 show dbs 来查看是否能够链接得上库4 ...

  9. Linux命令行小插曲

    当命令行出错活出现<时,可使用 ctrl+c强制退出

随机推荐

  1. jquery左右切换的无缝滚动轮播图

    1.HTML结构: <head> <script type="text/javascript" src="../jquery-1.8.3/jquery. ...

  2. 解决QT编程出现 C2001错误

    最近做项目时,在debug输出或者是在其他用到字符串常量的时候,总会时不时的出现C2001错误,提示"常量中有换行符", 比如 tr("删除此设备") 或者 q ...

  3. Cmd Markdown 学习

    [TOC] # Cmd Markdown 学习 Markdown 简明语法 1. 斜体和粗体 使用 * 和 ** 表示斜体和粗体. 2. 分级标题 在使用 = 表示一级标题,使用 - 表示二级标题.# ...

  4. WebAPi接口安全之公钥私钥加密

    WebAPi使用公钥私钥加密介绍和使用 随着各种设备的兴起,WebApi作为服务也越来越流行.而在无任何保护措施的情况下接口完全暴露在外面,将导致被恶意请求.最近项目的项目中由于提供给APP的接口未对 ...

  5. ASP.NET Core身份验证服务框架IdentityServer4-整体介绍

    一.整体情况 现代应用程序看起来更像这个: 最常见的相互作用: 浏览器与Web应用程序的通信 Browser -> Web App Web应用程序与Web API通信 基于浏览器的应用程序与We ...

  6. javaweb 登陆注册页面

    视图的数据修改,表中也修改引用工具类用<%@ page import=""%> <%@ page import="java.util.Date" ...

  7. HTML-移动开发技巧 响应式布局 弹性布局

    移动开发常用技巧 [viewport基本知识] 设置布局viewpoint的各种信息 1.width=device-width;设置viewport视口宽度等于设备宽度 2.initial-scale ...

  8. RDVECore来自锐动的无UI,高度抽象化API的视频编辑SDK

    1 编写目的 预期读者: 有视频编辑开发经验或者无经验的,打算或者正在使用"锐动IOS版RDVECore"的相关工程师. iOS软件工程师. 产品经理. QA 2 名词解释 分辨率 ...

  9. 设计模式(4)--AbstractFactory(抽象工厂模式)--创建型

    1.模式定义: 抽象工厂是应对产品族概念的,提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们的具体类 2.模式特点: 抽象工厂模式为创建一组对象提供了一种解决方案.与工厂方法模式相比,抽象工 ...

  10. Django导入外部js、css、图片等巨大的坑

    初学Django,踩过最大的坑只有之一.至今任然不是很明白. 通常我们导入外部js等文件都是 <script src="myScript.js"></script ...