【发布时间】:2017-12-22 21:14:58
【问题描述】:
现在我在程序员和我试图制作一个基于文本的游戏方面有点好。我从今天开始,我做了一些世界地图,以后会更新,我会把它做得很大!但对于我的生活,我无法正确更新框架。我使用普通窗口,我把我的代码放在下面。请帮我彻底更新我的框架!
地图类和标头
#include<string>
#include <Windows.h>
class map {
protected:
char mep[200][50];
public:
map();
~map();
void bs();
void buildTree(int X, int Y);
void addTree();
void buildMap();
void printMap(int X, int Y);
};
#include"map.h"
map::map() {
buildMap();
printMap(0, 0);
}
map::~map() {
}
void map::bs() {
//this builds a square world later cool things like trees get added
for (int x = 0; x<200; x++) {
for (int y = 0; y<500; y++) {
mep[x][y] = '_';
}
}
}
void map::buildTree(int X, int Y) {
//¨ /\¨ [x][y-4]
// / \"[x][y-3]
//¨ /-o \¨ [x][y-2]
//¨ /-o-o- \¨[x][y-1]
//¨ / o0-o \¨ [x][y]
//¨/o-ooo- \¨[x][y+1]
//¨ ||||¨ [x][y+2]
//¨ ||||¨ [x][y+3]
mep[X][Y - 4] = '/'; mep[X + 1][Y - 4] = '\\';
mep[X - 1][Y - 3] = '/'; mep[X][Y - 3] = ' '; mep[X + 1][Y - 3] = ' '; mep[X + 2][Y - 3] = '\\';
mep[X - 2][Y - 2] = '/'; mep[X - 1][Y - 2] = '-'; mep[X][Y - 2] = 'o'; mep[X + 1][Y - 2] = ' '; mep[X + 2][Y - 2] = ' '; mep[X + 3][Y - 2] = '\\';
mep[X - 3][Y - 1] = '/'; mep[X - 2][Y - 1] = '-'; mep[X - 1][Y - 1] = 'o'; mep[X][Y - 1] = '-'; mep[X + 1][Y - 1] = 'o'; mep[X + 2][Y - 1] = '-'; mep[X + 3][Y - 1] = ' '; mep[X + 4][Y - 1] = '\\';
mep[X - 3][Y] = '/'; mep[X - 2][Y] = ' '; mep[X - 1][Y] = 'o'; mep[X][Y] = '0'; mep[X + 1][Y] = '-'; mep[X + 2][Y] = 'o'; mep[X + 3][Y] = ' '; mep[X + 4][Y] = '\\';
mep[X - 4][Y + 1] = '/'; mep[X - 3][Y + 1] = 'o'; mep[X - 2][Y + 1] = '-'; mep[X - 1][Y + 1] = 'o'; mep[X][Y + 1] = 'o'; mep[X + 1][Y + 1] = 'o'; mep[X + 2][Y + 1] = '-'; mep[X + 3][Y + 1] = ' '; mep[X + 4][Y + 1] = ' '; mep[X + 5][Y + 1] = '\\';
mep[X - 1][Y + 2] = '|'; mep[X][Y + 2] = '|'; mep[X + 1][Y + 2] = '|'; mep[X + 2][Y + 2] = '|';
mep[X - 1][Y + 3] = '|'; mep[X][Y + 3] = '|'; mep[X + 1][Y + 3] = '|'; mep[X + 2][Y + 3] = '|';
}
void map::addTree() {
buildTree(74, 69);
buildTree(5, 6);
//add 18 more
}
void map::buildMap() {
bs();
addTree();
}
void map::printMap(int X, int Y) {
//this is what the players will see
std::string viewMap[15];
for (int x = 0; x<15; x++) {
for (int y = 0; y <= 70; y++) {
viewMap[x] += mep[Y + y][X + x];
}
}
//this prints the visible map for the players
std::cout << viewMap[1] + "\n" + viewMap[2] + "\n" + viewMap[3]
+ "\n" + viewMap[4] + "\n" + viewMap[5] + "\n" + viewMap[6]
+ "\n" + viewMap[7] + "\n" + viewMap[8] + "\n" + viewMap[9]
+ "\n" + viewMap[10] + "\n" + viewMap[11] + "\n" + viewMap[12]
+ "\n" + viewMap[13] + "\n" + viewMap[14] << std::endl;
}
int main()
{
//this is my main im using it as an update frames right now
while (1) {
//also i will have the world render and build it self as a whole first and only loop the frame update ik its given but ill say it anway
map mp;
mp.~map();
}
}
【问题讨论】:
-
不要手动调用析构函数。
-
我一开始是使用析构函数来清除屏幕,我习惯于谷歌文档,它为我做上限。
-
对象的析构函数会在对象的生命周期结束时自动调用。在极少数情况下应该显式调用它,而这不是其中之一。
-
至于您的实际问题:答案将取决于您使用的终端类型。还有像 ncurses 这样的库可以抽象出底层的终端差异,让你的代码在各种平台上工作。
-
嗨,所以在深入研究之后,我了解了我的问题,以及如何澄清我的问题并向你们说明我在问什么。我的游戏使用了一个基本的 while(1) 循环和 system("cls") ,我知道这很糟糕,但基本上是为了总结我的问题,我如何制作一个基本的帧 snyc 函数。我使用普通的视觉工作室,没有任何很酷的独特库,我有点不想改变它。我将如何制作一个简单的帧同步功能/类
标签: c++ text-based