C# 使用键盘移动二维数组后,如何比较该数组上的光标位置?

C# 使用键盘移动二维数组后,如何比较该数组上的光标位置?,c#,.net,C#,.net,我有一个二维数组,它在屏幕上绘制一个文本地图,然后 我正在使用“WASD”在屏幕上移动一个角色。 我想测试贴图限制,这样角色就不会越界 有线索吗 这是我的密码: static void Main(string[] args) { bool GameOver = false; int playerX = 1; int playerY = 1; char[,] myCharArray = new char[16, 8];

我有一个二维数组,它在屏幕上绘制一个文本地图,然后 我正在使用“WASD”在屏幕上移动一个角色。 我想测试贴图限制,这样角色就不会越界

有线索吗

这是我的密码:

static void Main(string[] args)
    {
        bool GameOver = false;
        int playerX = 1;
        int playerY = 1;
        char[,] myCharArray = new char[16, 8];
        string[] lol = new string[8];
        lol[0] = "----------------";
        lol[1] = "-              -";
        lol[2] = "-              -";
        lol[3] = "-              -";
        lol[4] = "-              -";
        lol[5] = "-              -";
        lol[6] = "-              -";
        lol[7] = "----------------";

        for (int i = 0; i < 8; i++)
        {
            char[] letters = lol[i].ToCharArray();

            for (int j = 0; j < 16; j++)
            {
                myCharArray[j, i] = letters[j];
            }
        }

        do
        {
            for (int i = 0; i < 8; i++)
            {
                for (int j = 0; j < 16; j++)
                {
                    if (playerX == j && playerY == i)
                    {
                        Console.Write('*');
                    }
                    else
                    {
                        Console.Write(myCharArray[j, i]);
                    }
            }
            Console.WriteLine();
            }

            ConsoleKeyInfo pressedKey = Console.ReadKey();
            Console.WriteLine(pressedKey.Key.ToString());
            if (pressedKey.Key.ToString() == "A")
            {                    
                playerX--;
            }
            if (pressedKey.Key.ToString() == "S")
            {
                playerY++;
            }
            if (pressedKey.Key.ToString() == "D")
            {
                playerX++;
            }
            if (pressedKey.Key.ToString() == "W")
            {
                playerY--;
            }
            Console.Clear();
        } while (GameOver == false);

    }
static void Main(字符串[]args)
{
bool GameOver=false;
int playerX=1;
int playerY=1;
字符[,]myCharArray=新字符[16,8];
字符串[]lol=新字符串[8];
lol[0]=“-----------------------”;
lol[1]=“-”;
lol[2]=“-”;
lol[3]=“-”;
lol[4]=“-”;
lol[5]=“-”;
lol[6]=“-”;
lol[7]=“-----------------------”;
对于(int i=0;i<8;i++)
{
char[]letters=lol[i].ToCharArray();
对于(int j=0;j<16;j++)
{
myCharArray[j,i]=字母[j];
}
}
做
{
对于(int i=0;i<8;i++)
{
对于(int j=0;j<16;j++)
{
如果(playerX==j&&playerY==i)
{
Console.Write('*');
}
其他的
{
Console.Write(myCharArray[j,i]);
}
}
Console.WriteLine();
}
ConsoleKeyInfo pressedKey=Console.ReadKey();
Console.WriteLine(按Key.Key.ToString());
如果(按Key.Key.ToString()=“A”)
{                    
playerX--;
}
如果(按Key.Key.ToString()=“S”)
{
playerY++;
}
如果(按Key.Key.ToString()=“D”)
{
playerX++;
}
如果(按Key.Key.ToString()=“W”)
{
游戏——;
}
Console.Clear();
}while(GameOver==false);
}
如果出现以下情况:

  if (pressedKey.Key.ToString() == "A")
            {   
                //check if move left is possible
                if(playerX != 0)                  
                    playerX--;
            }
编辑请找到一些丰富的版本,单独找出规则:]

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

namespace FunnyStuff
{
    class Program
    {
        static void Main(string[] args)
        {
            bool GameOver = true;
            int playerX = 1;
            int playerY = 1;

            int[] enemy = new int[2];
            Random random = new Random();
            int randomNumber = random.Next(0, 100);
            enemy[0] = random.Next(1, 15);
            enemy[1] = random.Next(1, 6);
            char[,] myCharArray = new char[16, 8];
            string[] lol = new string[8];
            lol[0] = "----------------";
            lol[1] = "-              -";
            lol[2] = "-              -";
            lol[3] = "-              -";
            lol[4] = "-              -";
            lol[5] = "-              -";
            lol[6] = "-              -";
            lol[7] = "----------------";

            for (int i = 0; i < 8; i++)
            {
                char[] letters = lol[i].ToCharArray();

                for (int j = 0; j < 16; j++)
                {
                    myCharArray[j, i] = letters[j];
                }
            }

            do
            {
                for (int i = 0; i < 8; i++)
                {
                    for (int j = 0; j < 16; j++)
                    {
                        if (playerX == j && playerY == i)
                        {
                            Console.Write('*');
                        }
                        else if (enemy[0] == j && enemy[1] == i)
                        {
                            Console.Write('+');
                        }
                        else
                        {
                            Console.Write(myCharArray[j, i]);
                        }
                    }
                    Console.WriteLine();
                }

                int rx = random.Next(-1, 2);
                int ry = random.Next(-1, 2);
                enemy[0] = (rx+enemy[0] != 1 || rx+enemy[0] != 14) ? rx+enemy[0] : enemy[0];
                enemy[1] = (ry + enemy[1] != 1 || ry + enemy[0] != 6) ? ry + enemy[1] : enemy[1];

                ConsoleKeyInfo pressedKey = Console.ReadKey();
                Console.WriteLine(pressedKey.Key.ToString());
                if (pressedKey.Key.ToString() == "A")
                {
                    if (playerX != 1) 
                    playerX--;
                }
                if (pressedKey.Key.ToString() == "S")
                {
                    if (playerY != 6)
                    playerY++;
                }
                if (pressedKey.Key.ToString() == "D")
                {
                    if (playerX != 14)
                    playerX++;
                }
                if (pressedKey.Key.ToString() == "W")
                {
                    if (playerY != 1) 
                    playerY--;
                }

                if (playerX == enemy[0] && playerY == enemy[1])
                {
                    GameOver = false;
                }

                Console.Clear();
            } while (GameOver );

        }
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
名称空间趣味凝灰岩
{
班级计划
{
静态void Main(字符串[]参数)
{
bool GameOver=true;
int playerX=1;
int playerY=1;
int[]敌人=新int[2];
随机=新随机();
int randomNumber=random.Next(0,100);
敌人[0]=随机。下一步(1,15);
敌人[1]=随机。下一个(1,6);
字符[,]myCharArray=新字符[16,8];
字符串[]lol=新字符串[8];
lol[0]=“-----------------------”;
lol[1]=“-”;
lol[2]=“-”;
lol[3]=“-”;
lol[4]=“-”;
lol[5]=“-”;
lol[6]=“-”;
lol[7]=“-----------------------”;
对于(int i=0;i<8;i++)
{
char[]letters=lol[i].ToCharArray();
对于(int j=0;j<16;j++)
{
myCharArray[j,i]=字母[j];
}
}
做
{
对于(int i=0;i<8;i++)
{
对于(int j=0;j<16;j++)
{
如果(playerX==j&&playerY==i)
{
控制台。写入('*');
}
否则如果(敌人[0]==j和敌人[1]==i)
{
Console.Write('+');
}
其他的
{
Console.Write(myCharArray[j,i]);
}
}
Console.WriteLine();
}
int rx=随机。下一步(-1,2);
int ry=随机。下一步(-1,2);
敌人[0]=(rx+敌人[0]!=1 | | rx+敌人[0]!=14)?rx+敌人[0]:敌人[0];
敌人[1]=(ry+敌人[1]!=1 | | ry+敌人[0]!=6)?ry+敌人[1]:敌人[1];
ConsoleKeyInfo pressedKey=Console.ReadKey();
Console.WriteLine(按Key.Key.ToString());
如果(按Key.Key.ToString()=“A”)
{
如果(playerX!=1)
playerX--;
}
如果(按Key.Key.ToString()=“S”)
{
if(playerY!=6)
playerY++;
}
如果(按Key.Key.ToString()=“D”)
{
如果(playerX!=14)
playerX++;
}
如果(按Key.Key.ToString()=“W”)
{
if(playerY!=1)
游戏——;
}
如果(playerX==敌人[0]&&playerY==敌人[1])
{
GameOver=false;
}
Console.Clear();
}while(GameOver);
}
}
}

@bamed答案有帮助吗?是的,有帮助。谢谢,酷。但4年的消化时间似乎很长。祝你好运哈哈。我花了4年的时间才记住检查我的收件箱。我很惭愧,但这是真的。这是一个开始,谢谢。当你移动的时候,如果你再按一次键,你就可以进入极限,所以我认为最好的方法是循环。我试试看。它已经在循环中了。将GameOver设置为TRUE,并在游戏结束时添加一些条件。德国劳埃德船级社!这将使它起作用。”如果(myCharArray[playerX-1,playerY]!='-'){