while (isplaying)
{
if (_kbhit())
{
Keyboard(&isplaying, &x, &y);
system("cls");
cout << "X의 좌표: " << x << endl;
cout << "Y의 좌표: " << y<
Draw(hop, x * 2, y, (char*)"♥", BACKGROUND_RED);
//while (_kbhit())
//{
// _getch();
//}
}
}
여기서 //while (_kbhit())
//{
// _getch();
//}을 실행하면 getch()의 반환값을 무시합니다.라는 오류가 뜨며 실행이 되지않습니다. 그래서 주석처리를 하고 실행을 해보았더니 문제없이 프로그램이 돌아갑니다. 왜 이런건가요?
전체코드:
#include
#include "pch.h"
void Keyboard(bool* isplaying, int* x, int* y); //키입력받은걸 확인하는 함수
void Draw(HANDLE hop, int x, int y, char* str, WORD color);
int main()
{
//핸들설정
HANDLE hop;
hop = GetStdHandle(STD_OUTPUT_HANDLE);
//커서설정
CONSOLE_CURSOR_INFO curinfo;
curinfo.bVisible = false; //커서 숨기기
curinfo.dwSize = 1;
SetConsoleCursorInfo(hop, &curinfo);
bool isplaying = true;
int x = 0;
int y = 0;
Draw(hop, x * 2, y, (char*)"♥", BACKGROUND_RED);
while (isplaying)
{
if (_kbhit())
{
Keyboard(&isplaying, &x, &y);
system("cls");
cout << "X의 좌표: " << x << endl;
cout << "Y의 좌표: " << y<
Draw(hop, x * 2, y, (char*)"♥", BACKGROUND_RED);
//while (_kbhit())
//{
// _getch();
//}
}
}
return 0;
}
void Keyboard(bool* isplaying, int* x, int* y)
{
if (GetAsyncKeyState(VK_RIGHT) & 0x8000)
{
(*x)++;
}
else if (GetAsyncKeyState(VK_LEFT) & 0x8000)
{
(*x)--;
}
else if (GetAsyncKeyState(VK_UP) & 0x8000)
{
(*y)--;
}
else if (GetAsyncKeyState(VK_DOWN) & 0x8000)
{
(*y)++;
}
else if (GetAsyncKeyState(VK_ESCAPE) & 0x8000)
{
*isplaying = false;
}
}
void Draw(HANDLE hop, int x, int y, char* str, WORD color)
{
DWORD DrChW;
COORD cdFill = { (short)x,(short)y };
FillConsoleOutputAttribute(hop, color, strlen(str), cdFill, & DrChW);
WriteConsoleOutputCharacter(hop, str, strlen(str), cdFill, &DrChW);
}
안녕하세요 온라인게임아카데미 프로그래밍 강사 하민우 입니다.
비쥬얼 스튜디오 또는 언어 버전에 따라서 검사 수준이 다르게 설정되어 있어서 문제가 없이 그냥 진행이 되는 경우, 오류 또는 경고로 나오는 경우가 달라지게 됩니다. 경고까지는 프로그램 자체는 실행이 되나 오류로 분류 되는 경우 실행이 되지 않게 됩니다. 이 경우 검사 수준을 낮추는 방법이 있으나 그것 보다는 코드에서 오류를 주는 이유를 해결해 주는 것이 더 좋습니다.
실제로 반환 값을 사용을 하지는 않지만 반환 값을 받아주면 오류가 해결 됩니다.
_getch() 함수는 정수 값을 반환하기 때문에
int temp = getch();
위와 같이 수정해주면 됩니다.
항상 열공하시고 공부하다가 또 궁금한 점이 생기면 언제든지 질문 주시기 바랍니다.
감사합니다.