我是一个漂亮的新手c + +编码器,我开始做一个控制台冒险游戏。 我的冒险游戏目前由一个玩家角色组成,玩家角色在控制台应用程序窗口内走动,角色宽度为80字符x 40行。控制台游戏地图的巨型字符或多个字符?
我不知道如何处理存储我的游戏地图。每张地图将包含80 x 40个带有颜色属性的ASCII字符。
我应该存储每个80 x 40地图在自己的char?所以在一张地图看起来像......
int cHeight = 5; // Reduced size for this example
int cHeight = 10; // Reduced size for this example
// Set up the characters:
char map[cHeight][cWidth+1] = {
"1234567890",
"1234567890",
"1234567890",
"1234567890",
"1234567890",
};
CHAR_INFO mapA[cWidth * cHeight];
for (int y = 0; y < cHeight; ++y) {
for (int x = 0; x < cWidth; ++x) {
mapA[x + cWidth * y].Char.AsciiChar = map[y][x];
mapA[x + cWidth * y].Attributes = FOREGROUND_BLUE | Black; //I have an enum setup with background colours.
}
}
// Set up the positions:
COORD charBufSize = {cWidth,cHeight};
COORD characterPos = {0,0};
SMALL_RECT writeArea = {0,0,cWidth-1,cHeight-1};
// Write the characters:
WriteConsoleOutputA(wHnd, mapA, charBufSize, characterPos, &writeArea);
林不知道这是否是完全显示字符正确的方式,但我不认为这是一个好主意,只是COUT在每一个字符for循环。
所以..让我说我的控制台窗口(在上面的代码)是10个字符宽和5行高。 在上面的代码中,我在Char中有一个映射,所以当加载每个映射时,我会将每个映射放到它们自己的数组中。
我想整个地图放入一个单一的字符,但只显示我需要通过抵消循环中的x和y。
mapA[x + cWidth * y].Char.AsciiChar = map[y+offset][x+offset];
所以地图看起来更像这样;
char map[cHeight][cWidth+1] = {
"1234567890ABCDEFGHIJ",
"1234567890ABCDEFGHIJ",
"1234567890ABCDEFGHIJ",
"1234567890ABCDEFGHIJ",
"1234567890ABCDEFGHIJ",
};
带有偏移量我可以在5行上分别显示'1234567890'5行上的'ABCDEFGHIJ'。
所以总之我想知道最有效的方法来做到这一点,我应该有多个字符?我应该创建一个班级吗?那么我可以存储字符的颜色? (在C++中,类'对我来说仍然是新的)。
我应该只在地图上绘制地形,然后添加对象(房屋,树木)吗? 或者只是手动将它全部绘制在地图上?
我想我只是想过这个太长,需要一点点方向 谢谢!
这个问题最好在http://gamedev.stackexchange.com/上提问! – 2012-04-06 00:19:01
甚至不知道它存在。谢谢。 – FallingReign 2012-04-06 00:20:07
我认为你更大的问题在于你在C(或者下一个最好的过程语言)中思考得太多。所以,如果这个练习应该是教育性的,我建议你尝试这样做:a)没有数组b)不使用原始指针; c)没有关键字'for'和'while'。这是可能的(虽然效率可能稍低,但在应用程序中不应该受到伤害),并且会迫使您使用和学习一些C++构造和库。 – bitmask 2012-04-06 00:24:21