每次我尝试编译程序时都会产生错误,说明字符数组中的字符太多。
char map[10][10] = { "##########",
"#@ #",
"# #",
"######## #",
"# # #",
"# # # # #",
"#+# # # #",
"## # # #",
"# # #",
"#!########" };
这个程序是我们在计算机科学课上做的一个类似RPG的游戏,但我无法弄清楚这些错误。
整个计划在这里:
#include <iostream>
#include <windows.h>
using namespace std;
void Display(); //creates display function
bool stopGame = false;
int gamespeed = 100, hp = 100, maxHP = 100, XAmount = 9, YAmount = 9;
char map[10][10] = { "##########", //creates game map
"#@ #",
"# #",
"######## #",
"# # #",
"# # # # #",
"#+# # # #",
"## # # #",
"# # #",
"#!########" };
int main()
{
Display(); //runs display function
return 0;
}
void Display()
{
while(stopGame == false)
{
Sleep(gamespeed); //sets a gamespeed
system("cls"); //clears screen
for(int posY = 0; posY <= YAmount; posY++) //prints game map to screen
{
cout << map[posY] << endl;
}
for(int posY = 0; posY <= YAmount; posY++) //gets y position
{
for(int posX = 0; posX <= XAmount; posX++) //gets x position
{
switch(map[posY][posX])
{
case '@':
{
if(GetAsyncKeyState(VK_UP) != 0) //up movement
{
int y = (posY-1);
switch(map[y][posX])
{
case ' ':
{
map[posY][posX] = ' ';
posY -= 1;
map[y][posX] = '@';
}break;
case '+':
{
map[posY][posX] = 3;
map[posY][posX] = ' ';
posY -= 1;
map[y][posX] = '@';
}break;
}
}
if(GetAsyncKeyState(VK_DOWN) != 0) //down movement
{
int y2 = (posY+1);
switch(map[y2][posX])
{
case ' ':
{
map[posY][posX] = ' ';
posY += 1;
map[y2][posX] = '@';
}break;
case '+':
{
map[posY][posX] = 3;
map[posY][posX] = ' ';
posY += 1;
map[y2][posX] = '@';
}break;
}
}
if(GetAsyncKeyState(VK_LEFT) != 0) //move left
{
int x = (posX-1);
switch(map[posY][x])
{
case ' ':
{
map[posY][posX] = ' ';
posX -= 1;
map[posY][x] = '@';
}break;
case '+':
{
map[posY][posX] = 176;
map[posY][posX] = ' ';
posX += 1;
map[posY][x] = '@';
}break;
}
}
if(GetAsyncKeyState(VK_RIGHT) != 0) //move right
{
int x2 = (posX+1);
switch(map[posY][x2])
{
case ' ':
{
map[posY][posX] = ' ';
posX += 1;
map[posY][x2] = '@';
}break;
case '+':
{
map[posY][posX] = 3;
map[posY][posX] = ' ';
posX += 1;
map[posY][x2] = '@';
}break;
}
}
}break;
case '#': //sets ascii skin
{
map[posY][posX] = 219;
}break;
case '+': //sets ascii skin
{
map[posY][posX] = 3;
}
}
}
}
}
}
如果有人能提供帮助那就太棒了。
答案 0 :(得分:1)
在C ++中,您不能从长度为10的字符串文字中初始化长度为10的char数组。
一个简单的解决方法是将其转到11,例如char tap[10][11] =
等。
此修复程序还可以使cout << map[posY] << endl;
正常工作。 (目前这会导致缓冲区溢出并搞砸你的显示器。)