命令行小游戏Beta1.0

本文介绍了一个简单的控制台游戏开发实例,使用C#语言通过控制台读取键盘输入并更新游戏状态,同时解决了屏幕闪烁问题,实现了玩家角色的移动。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

遇到的问题:

1.Console.ReadKey() 返回的是一个 ConsoleKeyInfo 对象,表示按键的状态,包括按下的键位、以及 Shift、Alt 和 Ctrl 的状态等等

2.Console.ReadKey() 可以传递一个 Boolean 参数,表示是否隐藏回显,默认是 false。如果传递 true 的话,用户的输入就不会回显在控制台上。

    ConsoleKeyInfo kinfo = Console.ReadKey(true);
    var op= Console.ReadKey(true);
        switch (op.KeyChar)

3.用Console.clear() 屏幕闪烁严重。参考了其他人的做法 改成用Console.SetCursorPosition(x,y);只重绘了前后两个位置。



using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


namespace Beta1._0
{
    class Game
    {
        private int MapHight ;
        private int MapWidth;
        private int PlayerX;
        private int PlayerY;
        public  Game ()
        {
            MapHight = 20;
            MapWidth = 40;
            PlayerX = 5;
            PlayerY = 5;
        }
        public void Move ()
        {
            var  op= Console.ReadKey(true);
            switch (op.KeyChar)
            {
                case 'w':
                case 'W':
                    if (PlayerY > 1)
                    {
                        Console.SetCursorPosition(PlayerX, PlayerY);
                        Console.Write(" ");
                        PlayerY--;
                        Console.SetCursorPosition(PlayerX, PlayerY);
                        Console.Write("♜");
                    }
                    break;
                case 's':
                case 'S':
                    if (PlayerY <MapHight-1)
                    {
                        Console.SetCursorPosition(PlayerX, PlayerY);
                        Console.Write(" ");
                        PlayerY++;
                        Console.SetCursorPosition(PlayerX, PlayerY);
                        Console.Write("♜");
                    }
                    break;
                case 'a':
                case 'A':
                    if (PlayerX > 1)
                    {
                        Console.SetCursorPosition(PlayerX, PlayerY);
                        Console.Write(" ");
                        PlayerX--;
                        Console.SetCursorPosition(PlayerX, PlayerY);
                        Console.Write("♜");
                    }
                    break;
                case 'd':
                case 'D':
                    if (PlayerX < MapWidth - 1)
                    {
                        Console.SetCursorPosition(PlayerX, PlayerY);
                        Console.Write(" ");
                        PlayerX++;
                        Console.SetCursorPosition(PlayerX, PlayerY);
                        Console.Write("♜");
                    }
                    break;
            }
        }
        public void show()
        {
            int i, j;
            for (i = 0; i <= MapHight; i++)
            {
                for (j = 0; j <= MapWidth; j++)
                {
                    if (i == 0 || i == MapHight  || j == 0 || j == MapWidth)
                        Console.Write("#");
                    else if (i == PlayerY && j == PlayerX)
                        Console.Write("♜");
                    else Console.Write(" ");
                }
                Console.WriteLine();
            }
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Game g=new Game  ();
            g.show();
            while(true)
            {
                g.Move();
            }
           Console.ReadKey();
        }
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值