c++ ASCII游戏控制台屏幕闪烁
C++ ASCII game console screen flickering
我正在用c++做一个简单的游戏这只是一个带有ASCII地图的贴图游戏。游戏本身运行良好,但当我移动玩家时,主机屏幕(地图)闪烁,我不知道如何解决这个问题。任何帮助,感谢!
代码:#include <iostream>
#include <windows.h>
#include <conio.h>
#include <ctime>
#include <vector>
#include <string>
#include <cstdlib>
#include <fstream>
using namespace std;
vector<string> map;
int playerX = 10;
int playerY = 10;
int oldPlayerX;
int oldPlayerY;
bool done = false;
void loadMap();
void printMap();
void setPosition(int y, int x);
void eventHandling();
int main()
{
loadMap();
map[playerY][playerX] = '@';
printMap();
while(!done){
eventHandling();
printMap();
}
exit(1);
return 0;
}
void eventHandling(){
char command;
command = _getch();
system("cls");
oldPlayerX = playerX;
oldPlayerY = playerY;
if(command == 'w'){
playerY--;
}else if(command == 'a'){
playerX--;
}else if(command == 'd'){
playerX++;
}else if(command == 's'){
playerY++;
}
if(map[playerY][playerX] == '#'){
playerX = oldPlayerX;
playerY = oldPlayerY;
}
setPosition(playerY,playerX);
}
void setPosition(int y, int x){
map[oldPlayerY][oldPlayerX] = '.';
map[y][x] = '@';
}
void printMap(){
for(int i = 0 ; i < map.size() ; i++){
cout << map[i] << endl;
}
}
void loadMap(){
ifstream file;
file.open("level.txt");
string line;
while(getline(file, line)){
map.push_back(line);
}
}
std::cout
不打算这样使用。
您应该参考目标操作系统和环境的系统特定API。例如,对于Windows,您应该使用控制台API函数来实现您的目的。这些函数在Wincon.h
中定义,包括file.
如果您使用双缓冲系统,这样每帧只更改需要覆盖的内容,这也会有所帮助。IO操作非常昂贵,所以应该尽量减少。
Cameron给出了一个非常全面的描述如何做到这一点
但实际上,您将使用两个数组,一个包含映射的当前状态,一个包含以前的状态,并且只写入已更改的特定位置。
在许多系统上清除屏幕的一种方法是打印表单输入字符f
。Linux控制台支持这一点,如果加载ansi.sys
, MS-DOS也支持。Unix有ncurses
和terminfo
来抽象这些函数
相关文章:
- UE4-如何在给定4个屏幕坐标的情况下缩放纹理或材质
- 如何在GTK程序运行时禁用屏幕保护程序/电源管理/屏幕消隐
- 处理闪烁窗口事件
- 使用 SFML 和 C++ 将 Pixel 打印到屏幕上
- 如何避免LED在循环状态变化中闪烁?
- 在 Windows 8/10 技术中完全实时的屏幕捕获,没有延迟
- Winapi:屏幕截图未显示在窗口中
- 如何在快板的屏幕中显示子位图的绘制?
- 按回车键后输出屏幕关闭
- 要在屏幕上绘制一些小瓷砖,我应该使用 QQuickItem 还是 QQuickPaintedItem?
- SFML 向下移动时如何围绕屏幕中心旋转?
- 截取屏幕截图后程序卡住
- C++鼠标单击时的屏幕截图不起作用
- 如何在 Win32 应用中拖动纯色矩形,而不会产生白色闪烁,也不会干扰其他屏幕对象
- 如何在Qt中进行多个图形更改时最大程度地减少屏幕闪烁
- 如何修复闪烁的led矩阵和液晶菜单屏幕
- OpenGL闪烁屏幕
- 简单的动画会导致c++中的屏幕闪烁
- C++生成随机数而不重复.输出屏幕只是一片空白,光标在闪烁
- c++ ASCII游戏控制台屏幕闪烁