C# 使用键盘移动二维数组后,如何比较该数组上的光标位置?
我有一个二维数组,它在屏幕上绘制一个文本地图,然后 我正在使用“WASD”在屏幕上移动一个角色。 我想测试贴图限制,这样角色就不会越界 有线索吗 这是我的密码: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];
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]!='-'){