Перемещение игрока C++
Я не знаю как сделать чтобы у меня в цикле двигался символ (игрок) по нажатиям клавиш (события на клавиши уже готовы). Напишите пожалуйста как сделать движение символа в консоли C++ Вот мой предварительный код:
#include <iostream>
#include <conio.h>
#include <string>
#include <windows.h>
using namespace std;
int main(int argc, char const *argv[])
{
char keyboard = _getch(); // Keyboard Event
bool game = true;
bool gameOver = false;
/* код */
if (keyboard == 'w') { // Forward
} else if (keyboard == 'a') { // Left
} else if (keyboard == 's') { // Back
} else if (keyboard == 'd') { // Right
}
return 0;
}
Ответы (1 шт):
Автор решения: S.H.
→ Ссылка
Идея программы - печатать звёздочку, управляемую клавишами w,a,s,d.
Мне EOF подсказал ошибку в моём первом примере, и с его помощью удалось сделатьрабочий пример.
А в целом - в первом комментарии к вопросу был приведен верный ответ - ссылка на набор функций, которые можно использовать. В целом - копать надо в сторону скрин буфера
#include <iostream>
#include <conio.h>
#include <windows.h>
using namespace std;
int main(){
cout << "Use 's' and 'd' for move star, and q to quit" << endl;
cout << endl;
HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE);
if ( h==INVALID_HANDLE_VALUE ){
cout << "Error in CreateConsoleScreenBuffer(), exited"<<endl;
return 1;
}
AttachConsole(ATTACH_PARENT_PROCESS);
_COORD coord;
coord.X = 25;
coord.Y = 10;
char ch;
DWORD numberOfCharsWritten;
do{
ch = getch();
// печатаем пробел на старом месте
if ( !SetConsoleCursorPosition(h, coord) ){
cout << "Error in SetConsoleCursorPosition(), exited"<<endl;
return 1;
}
if ( ! WriteConsoleA(h, " ", 1, &numberOfCharsWritten, NULL) ){
cout << "Error in WriteConsole(), exited"<<endl;
return 1;
}
switch (ch){
case 's':
if(coord.X>0)
coord.X--;
break;
case 'd':
if (coord.X<50)
coord.X++;
break;
case 'w':
if(coord.Y>0)
coord.Y--;
break;
case 'a':
if (coord.Y<20)
coord.Y++;
break;
}
// печатаем звездочку на новом месте
if ( !SetConsoleCursorPosition(h, coord) ){
cout << "Error in SetConsoleCursorPosition(), exited"<<endl;
return 1;
}
if ( ! WriteConsoleA(h, "*", 1, &numberOfCharsWritten, NULL) ){
cout << "Error in WriteConsole(), exited"<<endl;
return 1;
}
} while (ch!='q');
return 0;
}