옵션 |
|
뉴를 출력한뒤 방향키를 이동하여 메뉴를 선택하고 엔터키를 누르면
선택한 메뉴의 화면을 출력하는 소스를 만들고 싶은데
이곳저곳 다뒤져봐도 도저히 답이 안나옵니다..
printMenu 함수에서 출력된 화면을 지워주고 startMenu함수를 띄워야 하는데
while문으로 무한루프 돌리다보니
printMenu 함수가 지워지지 않고 계속 남아있습니다
어떻게 해결해야 할까요ㅠ
#include <stdio.h>
#include <conio.h>
#include <Windows.h>
#include <string.h>
#include <stdlib.h>
#define LEFT 75 // 좌측방향키
#define RIGHT 77 // 우측방향키
#define UP 72 // 위쪽방향키
#define DOWN 80 // 아래방향키
#define ENTER 13 // 엔터키
int menuPos = 0;
int menuNum;
void gotoxy(int x, int y)
{
COORD Cur;
Cur.X=x;
Cur.Y=y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),Cur);
}
void hideCursor()
{
CONSOLE_CURSOR_INFO CurInfo;
CurInfo.dwSize=1;
CurInfo.bVisible=FALSE;
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&CurInfo);
}
void printMenu()
{
gotoxy(0, 0);
puts("1.게임 시작");
puts("2.게임 방법");
puts("3.게임 종료");
puts("4.만든 사람");
gotoxy(0, menuPos);
puts("★");
}
void gamestart()
{
system("cls");
puts("게임을 시작합니다.\n");
}
void tutorial()
{
system("cls");
puts("게임 설명ddddddddd.\n");
}
void endgame()
{
system("cls");
puts("게임 종료aaaaaaaaaaaa.\n");
}
void creater()
{
system("cls");
puts("만든사람ffffffffffffff\n");
}
void startMenu(int menuNum)
{
switch(menuNum)
{
case 0:
system("cls");
gamestart();
break;
case 1:
system("cls");
tutorial();
break;
case 2:
system("cls");
endgame();
break;
case 3:
system("cls");
creater();
break;
}
}
int selectMenu()
{
int ch;
ch = getch();
if( ch == 0xE0 || ch == 0x00 ) // 확장키가 눌렸다
{
ch = getch();
switch(ch)
{
case 72: // 위쪽 화살표키
menuPos--;
if(menuPos < 0)
menuPos = 0;
break;
case 80: // 아래쪽 커서키
menuPos++;
if(menuPos > 3)
menuPos = 3;
break;
}
}
if( ch==13)
{
system("cls");
menuNum=menuPos;
startMenu(menuNum);
}
return 0;
}
int main()
{
hideCursor();
while(1)
{
printMenu();
selectMenu();
}
return 0;
}