로또 프로그램 ( C , C++ 버전)

SangHoon Lee·2020년 4월 27일
1
post-thumbnail

안녕하세요 C++ 공부하고있는 대학생입니다.

이번에는 로또프로그램을 한번 만들어보았습니다.

언어는 C를 사용하였습니다.

먼저 제가 짠 소스코드를 보여드리겠습니다.

#include <stdio.h>
#include <conio.h>
#include <windows.h>
#include <unistd.h>
#include <queue>
#include <time.h>
#include <vector>

std::queue<int> queue;
std::queue<int> queueSetNum;
std::queue<int> luckNum;
int queueCount = 0;
int queueCountcpy = 0;
int queueX = 61;
int queueY = 21;
int insertNumber = 0;
int queueXcpy = 61;
int clearNumber = 97;

struct dataset {
	int setNum;
	int lucky;
};

void gotoxy(int x,int y) {
	COORD pos;
	pos.X = x;
	pos.Y = y;
	SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
}

void CursorView(char show)
{
    HANDLE hConsole;
    CONSOLE_CURSOR_INFO ConsoleCursor;
    hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
    ConsoleCursor.bVisible = show;
    ConsoleCursor.dwSize = 1;
    SetConsoleCursorInfo(hConsole , &ConsoleCursor);
}

int result() {
	system("cls");
	int countNum = 0;
	int specialNum = 0;
	int key;
	dataset datas;
	std::vector<dataset> data;
	
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),5);
	gotoxy(83,9);
	printf("Winning Numbers\n");
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),11);
	gotoxy(65,11);
	printf("■■■■■■■■■■■■■■■■■■■■■■■■■■\n");
	gotoxy(65,12);
	printf("■                                                ■\n");
	gotoxy(65,13);
	printf("■                                                ■\n");
	gotoxy(65,14);
	printf("■                                                ■\n");
	gotoxy(65,15);
	printf("■                                                ■\n");
	gotoxy(65,16);
	printf("■                                                ■\n");
	gotoxy(65,17);
	printf("■                                                ■\n");
	gotoxy(65,18); 
	printf("■                                                ■\n");
	gotoxy(65,19);
	printf("■                                                ■\n");
	gotoxy(65,20);
	printf("■                                                ■\n");
	gotoxy(65,21);
	printf("■■■■■■■■■■■■■■■■■■■■■■■■■■\n");

	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),8);
	gotoxy(65,24);
	printf("First place : luckyNumber : 6");
	gotoxy(65,25);
	printf("Second place : luckyNumber : 5 & bonusNumber : 1");
	gotoxy(65,26);
	printf("Third place : luckyNumber : 5");
	gotoxy(65,27);
	printf("Fourth place : luckyNumber : 4");
	gotoxy(65,28);
	printf("Fifth place : luckyNumber : 3");
	
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),2);

	gotoxy(11,7);
	printf("┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐  \n");
	gotoxy(11,8);
	printf("│    ││    ││    ││    ││    ││    ││    │    \n");
	gotoxy(11,9);
	printf("└────┘└────┘└────┘└────┘└────┘└────┘└────┘  \n");

	gotoxy(11,15);
	printf("┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐  \n");
	gotoxy(11,16);
	printf("│    ││    ││    ││    ││    ││    ││    │    \n");
	gotoxy(11,17);
	printf("└────┘└────┘└────┘└────┘└────┘└────┘└────┘  \n");

	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),11);
	gotoxy(11,25);
	printf("input A key : ESC");

	for(int i =0; i<7; i++) {
		gotoxy(14+(i*6),8);
		printf("%d",queueSetNum.front());
		gotoxy(14+(i*6),16);
		printf("%d",luckNum.front());
		datas.setNum = queueSetNum.front();
		datas.lucky = luckNum.front();
		
		queueSetNum.pop();
		luckNum.pop();
		data.push_back(datas);
	}
	
	for(int i =0; i<7; i++) {
		for(int j =0; j<7; j++) {
			if((data[i].setNum == data[j].lucky) && i<=5){
				countNum++;
				data[j].lucky = 0;
			}
			else if((data[i].setNum == data[j].lucky) && i==6) {
				specialNum++;
				data[j].lucky = 0;
			}
		}
	}
	while(1) {
		if(countNum == 6) {
			gotoxy(65,11);
			printf("■■■■■■■■■■■■■■■■■■■■■■■■■■\n");
			gotoxy(65,12);
			printf("■                                 ■■■■■■   ■\n");
			gotoxy(65,13);
			printf("■          ■                     ■             ■\n");
			gotoxy(65,14);
			printf("■          ■                     ■■■■■■   ■\n");
			gotoxy(65,15);
			printf("■          ■                                    ■\n");
			gotoxy(65,16);
			printf("■          ■                   ■■■■■■■■ ■\n");
			gotoxy(65,17);
			printf("■          ■                                    ■\n");
			gotoxy(65,18); 
			printf("■          ■                         ■■       ■\n");
			gotoxy(65,19);
			printf("■          ■                       ■    ■     ■\n");
			gotoxy(65,20);
			printf("■                                     ■■       ■\n");
			gotoxy(65,21);
			printf("■■■■■■■■■■■■■■■■■■■■■■■■■■\n");
		}
		else if(countNum == 5 && specialNum == 1) {
			gotoxy(65,11);
			printf("■■■■■■■■■■■■■■■■■■■■■■■■■■\n");
			gotoxy(65,12);
			printf("■     ■■■■■                  ■■■■■■   ■\n");
			gotoxy(65,13);
			printf("■             ■                  ■             ■\n");
			gotoxy(65,14);
			printf("■             ■                  ■■■■■■   ■\n");
			gotoxy(65,15);
			printf("■     ■■■■■                                 ■\n");
			gotoxy(65,16);
			printf("■     ■                        ■■■■■■■■ ■\n");
			gotoxy(65,17);
			printf("■     ■                                         ■\n");
			gotoxy(65,18); 
			printf("■     ■■■■■                      ■■       ■\n");
			gotoxy(65,19);
			printf("■                                   ■    ■     ■\n");
			gotoxy(65,20);
			printf("■                                     ■■       ■\n");
			gotoxy(65,21);
			printf("■■■■■■■■■■■■■■■■■■■■■■■■■■\n");
		}
		else if(countNum == 5 &&specialNum == 0) {
			gotoxy(65,11);
			printf("■■■■■■■■■■■■■■■■■■■■■■■■■■\n");
			gotoxy(65,12);
			printf("■     ■■■■■                  ■■■■■■   ■\n");
			gotoxy(65,13);
			printf("■             ■                  ■             ■\n");
			gotoxy(65,14);
			printf("■             ■                  ■■■■■■   ■\n");
			gotoxy(65,15);
			printf("■             ■                                 ■\n");
			gotoxy(65,16);
			printf("■     ■■■■■                ■■■■■■■■ ■\n");
			gotoxy(65,17);
			printf("■             ■                                 ■\n");
			gotoxy(65,18); 
			printf("■             ■                      ■■       ■\n");
			gotoxy(65,19);
			printf("■     ■■■■■                    ■    ■     ■\n");
			gotoxy(65,20);
			printf("■                                     ■■       ■\n");
			gotoxy(65,21);
			printf("■■■■■■■■■■■■■■■■■■■■■■■■■■\n");			
		}
		else if(countNum == 4 & specialNum == 0) {
			gotoxy(65,11);
			printf("■■■■■■■■■■■■■■■■■■■■■■■■■■\n");
			gotoxy(65,12);
			printf("■             ■                  ■■■■■■   ■\n");
			gotoxy(65,13);
			printf("■           ■■                  ■             ■\n");
			gotoxy(65,14);
			printf("■          ■ ■                  ■■■■■■   ■\n");
			gotoxy(65,15);
			printf("■         ■  ■                                 ■\n");
			gotoxy(65,16);
			printf("■        ■   ■                ■■■■■■■■ ■\n");
			gotoxy(65,17);
			printf("■       ■    ■                                 ■\n");
			gotoxy(65,18); 
			printf("■     ■■■■■■■                  ■■       ■\n");
			gotoxy(65,19);
			printf("■             ■                    ■    ■     ■\n");
			gotoxy(65,20);
			printf("■             ■                      ■■       ■\n");
			gotoxy(65,21);
			printf("■■■■■■■■■■■■■■■■■■■■■■■■■■\n");			
		}
		else if(countNum == 3 && specialNum == 0) {
			gotoxy(65,11);
			printf("■■■■■■■■■■■■■■■■■■■■■■■■■■\n");
			gotoxy(65,12);
			printf("■         ■■■■■■■          ■■■■■■   ■\n");
			gotoxy(65,13);
			printf("■         ■                      ■             ■\n");
			gotoxy(65,14);
			printf("■         ■                      ■■■■■■   ■\n");
			gotoxy(65,15);
			printf("■         ■■■■■                             ■\n");
			gotoxy(65,16);
			printf("■                  ■           ■■■■■■■■ ■\n");
			gotoxy(65,17);
			printf("■                    ■                          ■\n");
			gotoxy(65,18); 
			printf("■                    ■               ■■       ■\n");
			gotoxy(65,19);
			printf("■         ■         ■             ■    ■     ■\n");
			gotoxy(65,20);
			printf("■          ■■■■■                 ■■       ■\n");
			gotoxy(65,21);
			printf("■■■■■■■■■■■■■■■■■■■■■■■■■■\n");			
		}
		else{
			gotoxy(65,11);
			printf("■■■■■■■■■■■■■■■■■■■■■■■■■■\n");
			gotoxy(65,12);
			printf("■                                                ■\n");
			gotoxy(65,13);
			printf("■       ■ ■ ■ ■ ■ ■ ■         ■          ■\n");
			gotoxy(65,14);
			printf("■             ■          ■         ■          ■\n");
			gotoxy(65,15);
			printf("■             ■    ■    ■         ■          ■\n");
			gotoxy(65,16);
			printf("■                   ■               ■■■■    ■\n");
			gotoxy(65,17);
			printf("■      ■■■■■■■■■■■■      ■          ■\n");
			gotoxy(65,18); 
			printf("■                                  ■■■        ■\n");
			gotoxy(65,19);
			printf("■                                 ■    ■       ■\n");
			gotoxy(65,20);
			printf("■                                  ■■■        ■\n");
			gotoxy(65,21);
			printf("■■■■■■■■■■■■■■■■■■■■■■■■■■\n");			
		}
		
		if(kbhit()) {
			key = getch();
			
			switch(key) {
				case 97:
					exit(0);
			}
		}
	}
}

int Done() {
	system("cls");
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),2);
	gotoxy(22,5);
	printf("your select number\n");
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),7);
	gotoxy(11,7);
	printf("┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐  \n");
	gotoxy(11,8);
	printf("│    ││    ││    ││    ││    ││    ││    │    \n");
	gotoxy(11,9);
	printf("└────┘└────┘└────┘└────┘└────┘└────┘└────┘  \n");
	for(int i =0; i<7; i++) {
		gotoxy(14+(i*6),8);
		printf("%d",queue.front());
		queueSetNum.push(queue.front());
		queue.pop();
	}
	gotoxy(22,13);
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),11);
	printf("Lucky Number");
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),7);
	gotoxy(11,15);
	printf("┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐  \n");
	gotoxy(11,16);
	printf("│    ││    ││    ││    ││    ││    ││    │    \n");
	gotoxy(11,17);
	printf("└────┘└────┘└────┘└────┘└────┘└────┘└────┘  \n");
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),4);
	gotoxy(11,25);
	printf("→start");
	gotoxy(11,26);
	printf("→exit");
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),11);
	gotoxy(21,25);
	printf("◀");
	
	int key;
	int selectY = 25;
	int selectX = 21;
	int selectYcpy = 25; 
	int startX = 14;
	
	while(1){
		if(kbhit()) {
			key = getch();			
			switch(key) {
				case 72:
					if(selectY <= 25) {
						break;
					}
					gotoxy(selectX,selectY);
					printf(" ");
					selectY = 25;
					gotoxy(selectX,selectY);
					printf("◀\n");
					selectYcpy = selectY;
					break;
				case 80:
					if(selectY >=26) {
						break;
					}
					gotoxy(selectX,selectY);
					printf(" ");
					selectY = 26;
					gotoxy(selectX,selectY);
					printf("◀\n");
					selectYcpy = selectY;				
					break;
				case 13:
					if(selectYcpy <= 25) {
						for(int i =0; i<7; i++) {
							srand(time(NULL));
							int random = rand()%45;	
							if(random == 0) random = 1;					
							gotoxy(startX+(i*6),16);
							printf("%d",random);	
							luckNum.push(random);
							sleep(3);							
						}
						result();
					}
					else if(selectYcpy >=26){
						exit(0);
					}
					gotoxy(10,25);
					break;
				default:
					break;
			}
		}
	}
}

int start() {
	
	int selectX = 13;
	int selectY = 8;
	int selectXcpy, selectYcpy,key;
	system("cls");
	gotoxy(11,2);
	printf("select lotto number\n");
	gotoxy(30,5);
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),6);
	printf("Lotto\n");
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),7);
	gotoxy(11,7);
	printf("┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐\n");
	gotoxy(11,8);
	printf("│  1 ││  2 ││  3 ││  4 ││  5 ││  6 ││  7 │\n");
	gotoxy(11,9);
	printf("└────┘└────┘└────┘└────┘└────┘└────┘└────┘\n");
	
	gotoxy(11,10);
	printf("┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐\n");
	gotoxy(11,11);
	printf("│  8 ││  9 ││  10││  11││  12││  13││  14│\n");
	gotoxy(11,12);
	printf("└────┘└────┘└────┘└────┘└────┘└────┘└────┘\n");
	
	gotoxy(11,13);
	printf("┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐\n");
	gotoxy(11,14);
	printf("│  15││  16││  17││  18││  19││  20││  21│\n");
	gotoxy(11,15);
	printf("└────┘└────┘└────┘└────┘└────┘└────┘└────┘\n");
	
	gotoxy(11,16);
	printf("┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐\n");
	gotoxy(11,17);
	printf("│  22││  23││  24││  25││  26││  27││  28│\n");
	gotoxy(11,18);
	printf("└────┘└────┘└────┘└────┘└────┘└────┘└────┘\n");
	
	gotoxy(11,19);
	printf("┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐\n");
	gotoxy(11,20);
	printf("│  29││  30││  31││  32││  33││  34││  35│\n");
	gotoxy(11,21);
	printf("└────┘└────┘└────┘└────┘└────┘└────┘└────┘\n");
	
	gotoxy(11,22);
	printf("┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐\n");
	gotoxy(11,23);
	printf("│  36││  37││  38││  39││  40││  41││  42│\n");
	gotoxy(11,24);
	printf("└────┘└────┘└────┘└────┘└────┘└────┘└────┘\n");
	
	gotoxy(11,25);
	printf("┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐\n");
	gotoxy(11,26);
	printf("│  43││  44││  45││  DN││  DL││  CR││  EX│\n");
	gotoxy(11,27);
	printf("└────┘└────┘└────┘└────┘└────┘└────┘└────┘\n");
	
	gotoxy(11,28);
	printf(" DN : Done , DL : Delete , CR : Clear , EX : Exit\n");

	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),11);
	gotoxy(58,7);
	printf("1. cursor move\n");
	gotoxy(58,8);
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),7);
	printf("                      ┌───┐\n");
	gotoxy(58,9);
	printf("                      │ ↑│\n");
	gotoxy(58,10);
	printf("                  ┌───┼───┼───┐\n");
	gotoxy(58,11);
	printf("                  │ ←│ ↓│ →│\n");
	gotoxy(58,12);
	printf("                  └───┴───┴───┘\n");
	gotoxy(65,13);
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),9);
	printf("up : ↑ down : ↓ right :→ left: ←enter : select\n");
	gotoxy(58,15);
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),11);
	printf("2. * : input enter, insert current position\n");

	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),15);	
		
	gotoxy(58,19);
	printf("your lotto number\n");
	gotoxy(58,20);
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),7);	
	printf("┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐\n");
	gotoxy(58,21);
	printf("│    ││    ││    ││    ││    ││    ││    │\n");
	gotoxy(58,22);
	printf("└────┘└────┘└────┘└────┘└────┘└────┘└────┘\n");
	
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),4);
	gotoxy(selectX,selectY);
	printf("*");
	selectXcpy = selectX;
	selectYcpy = selectY;

	while(1) {
		gotoxy(selectXcpy,selectYcpy);
		printf("*");
		
		if(kbhit()) {
			key = getch();		
			switch(key) {
				case 72:  //up
					if(selectY >=11 && selectY <=26) {
						selectY = selectY - 3;
						gotoxy(selectXcpy,selectYcpy);
						printf(" ");
						gotoxy(selectX,selectY);
						printf("*");
						selectYcpy = selectY;
					}
					break;
				case 80:  //down
					if(selectY >=8 && selectY <=23) {
						selectY = selectY + 3;
						gotoxy(selectXcpy,selectYcpy);
						printf(" ");
						gotoxy(selectX,selectY);
						printf("*");
						selectYcpy = selectY;
					}
					break;
				case 75:  // left
				if(selectX >=19 && selectX <=49) {
						selectX = selectX - 6;
						gotoxy(selectXcpy,selectYcpy);
						printf(" ");
						gotoxy(selectX,selectY);
						printf("*");
						selectXcpy = selectX;
					}
					break;
				case 77:  // right
					if(selectX >=13 && selectX <=43) {
						selectX = selectX + 6;
						gotoxy(selectXcpy,selectYcpy);
						printf(" ");
						gotoxy(selectX,selectY);
						printf("*");
						selectXcpy = selectX;
					}
					break;
				case 13: // enter
					if((selectX >=8 && selectX <=49) && (selectY >=8 && selectY <=26)) {
						if((selectX >=31 && selectX <=49) && selectY ==26) {
							if(selectX == 31) { //done
								queueCountcpy = queueCount;
								if(queueCountcpy == 7) {
									Done();
								}
							}
							
							if(selectX == 37 && queueX >=61) { //delete
								gotoxy(queueXcpy-1,queueY);
								printf("   ");	
								if(queueX >=67) {
									queueX = queueX - 6;							
								}
								if(queueX <=61) {
									queueX = 61;
									queueXcpy = queueX;
								}
								queueXcpy = queueX;
								queue.pop();
								queueCount--;
								if(queueCount <0) {
									queueCount = 0;
								}
							}
							
							if(selectX == 43) { //clear
								for(int i =0; i<7; i++) {
									gotoxy(clearNumber-1,queueY);
									printf("   ");
									clearNumber = clearNumber - 6;
									queue.pop();
								}
							}
							
							if(selectX == 49) { //exit
								system("cls");
								SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),7);
								printf("good bye");
								exit(0);
							}
						}
						else { //input
							gotoxy(queueX-1,queueY);
							printf("   ");						
							gotoxy(queueX,queueY);						
							printf("%d",((selectX/6)-1)+((selectY/3)-2)*7);
							insertNumber = ((selectX/6)-1)+(((selectY/3)-2)*7);
						
							if(queueCount < 7){
								queue.push(insertNumber);
								queueCount++;
							}
							else {
								queue.pop();
								queue.push(insertNumber);
							}
							if(queueX<=91) {
								queueX = queueX + 6;
								queueXcpy = queueX;
							}
							else {
								queueX = queueX;
							}
						}
						break;
					}
				default:
					break;
			}
		}
	}
}

int loading() {
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),2);
	system("cls");
	gotoxy(5,5);
	printf("■       ■■       ■          ■      ■      ■■■■    ■■■\n");
	gotoxy(5,6);
	printf("■      ■  ■     ■■         ■              ■    ■    ■  ■\n");
	gotoxy(5,7);
	printf("■      ■  ■    ■  ■    ■■■      ■      ■    ■    ■■■\n");
	gotoxy(5,8);
	printf("■      ■  ■   ■■■■   ■  ■      ■      ■    ■        ■\n");
	gotoxy(5,9);
	printf("■■■   ■■   ■      ■  ■■■      ■      ■    ■    ■■■\n");
	
	gotoxy(5,13);
	printf("please wait 5 seconds\n");
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),7);
	sleep(5);
	start();
}


int main() {
	CursorView(0);
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),6);
	printf("Seoil university computer application electronic apartment 202024510 LEESANGHOON\n");
	
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),2);
	gotoxy(10,3);
	printf("■■■■■■■■■■■■■■■■■■■■■■");
	gotoxy(10,4);
	printf("■                                        ■");
	gotoxy(15,4);
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),9);
	printf("      select key : ↑ or  ↓");
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),2);
	gotoxy(10,5);
	printf("■                                        ■"); 
	gotoxy(10,6);
	printf("■     ■   ■■  ■■■  ■■■  ■■    ■\n");
	gotoxy(10,7);
	printf("■     ■  ■  ■   ■      ■   ■  ■   ■\n");
	gotoxy(10,8);
	printf("■     ■  ■  ■   ■      ■   ■  ■   ■\n");
	gotoxy(10,9);
	printf("■     ■  ■  ■   ■      ■   ■  ■   ■\n");
	gotoxy(10,10);
	printf("■     ■   ■■    ■      ■    ■■    ■\n");
	gotoxy(10,11);
	printf("■                                        ■");
	gotoxy(10,12);
	printf("■■■■■■■■■■■■■■■■■■■■■■");
	
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),11);
	gotoxy(10,15); 
	printf("→start\n");
	gotoxy(10,16);
	printf("→exit\n");
	
	gotoxy(20,15);
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),4);
	printf("◀\n");
	
	int selectX = 20;
	int selectY = 15;
	int selectYcpy;
	int key;
	
	while(1) {
		gotoxy(selectX,selectY);
		if(kbhit()) {
			key = getch();
		}
		
		switch(key) {	
			case 72:
				if(selectY <= 15) {
					break;
				}
				gotoxy(selectX,selectY);
				printf(" ");
				selectY = 15;
				gotoxy(selectX,selectY);
				printf("◀\n");
				selectYcpy = selectY;
				break;
			case 80:
				if(selectY >=16) {
					break;
				}
				gotoxy(selectX,selectY);
				printf(" ");
				selectY = 16;
				gotoxy(selectX,selectY);
				printf("◀\n");
				selectYcpy = selectY;				
				break;
			case 13:
				SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),7);
				if(selectYcpy <= 15) {
					loading();
				}
				else if(selectYcpy >=16){
					return 0;
				}
				gotoxy(10,25);
				break;
			default :
				break;
		}
	}
}

핵심으로 kbhit() , gotoxy(),getch() , Queue, vector, struct 를 사용하였습니다.

kbhit 함수는 키보드 동작에 관여하기 위해 사용하였습니다. 키보드 값에 대한 아스키 코드값은 인터넷을 참고하였습니다.
소스 구현은 무한루프문과, switch case문, getch() , gotoxy()으로 이루어져있습니다. case문으로 받아서 특정 동작 , 방향키 or 엔터 키 등 하였을 때, 메뉴선택, 번호선택 등 가능하게 하였습니다.

Queue는 로또번호를 받고 저장하여 출력하기 위해 사용하였습니다.

vector와 struct는 vector의 템플릿인수를 struct로 받아서 로또번호에 대한 compare를 하기위해 사용하였습니다.

사실 메뉴판 구상하고 그림그리는데에 시간을 좀 많이 사용한 것 같습니다 ㅎㅎ. 그래서 그런지 어렵지 않은 코드인데 710줄 정도 나와서 조금 놀랐습니다.

콘솔의 글자색은

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), int );

이 함수를 사용하였습니다. 색상은 인터넷의 블로그를 참고하여서 int 값을 변경하여 바꾸었습니다.

사실 STL을 많이 사용하게 되면 속도가 느려질 수 있는데, 이 프로그램은 그렇게 무거운 프로그램도 아니고, 간단한 프로그램이라 속도에 큰 영향이 없다고 판단하였고, 직접 C로 구현해서 링크 드 리스트나, Queue를 구현해서 할 수 있지만, 지금 상황에서 STL을 쓰나, 직접 구현하나 별 차이가 없을 것 같아서 만들어져있는 STL을 사용하였습니다.

그러면 간단히 동작되는것을 영상으로 보여드리고싶지만.. 사진으로 보여드리자면,

시작, 메뉴화면입니다. start 랑 exit 기능만 구현하였습니다. 키보드 위 아래 방향키로 스타트 옆에 ◀ 모양을 움직여서 원하는 메뉴에 놓은다음, 엔터키를 누르면 원하는 기능을 수행합니다.
start를 누르면,

로딩창이 뜨는데, 시간은 5초로 하였습니다.

5초후에,

이렇게 로또를 선택 할 수 있는 창이 뜹니다. 왼쪽에 로또를 잘 보시면, 별 모양이 빨간색으로 있습니다. 컨트롤키는, 키보드 화살표 동서남북이며, 숫자 선택은 *모양을 원하는 숫자에 가서 엔터키를 누르시면 your lotto number 라는 곳에 저장이 됩니다.

그리고, DN은 7개 번호를 모두 선택하였을때 엔터 누르기가 가능하고, DL은 Delete로, 자신이 선택한 마지막 로또번호를 지웁니다. CR 은 Clear로 모든 로또선택을 초기화시켜버립니다. EX는 EXIT로 프로그램을 종료해버립니다.

Delete를 누르면 이렇게 마지막 숫자를 제거합니다.

그리고 최종적으로 7개 숫자를 모두 선택하고 DN을 통해 들어간다면,

이렇게 다른창으로 가서 내가 선택한 로또번호를 볼 수 있으며, 스타트를 선택 할 시, 랜덤으로 로또번호를 7개를 각각 추첨을 합니다. 각각 추첨시, 한 개의 번호당 3초의 시간이 걸리게 됩니다.

모든 7개의번호가 나오고 3초후에, 이렇게 결과창을 나타내줍니다.
참고로 저는 15번해서 5등을 한번 해 보았습니다. 1등 2등 3등 4등 모두 출력되는것을 확인 해 보고 싶었지만, 정말 안나옵니다. 잘 나올거라 믿습니다..
마지막으로 a키를 누르면 프로그램을 종료함으로써 끝이 납니다.

아직 많이 부족한 실력이어서, 메모리 관리나 코드 최적화 같은 작업을 제대로 하지 못한 기능을 우선시 한 프로그램이라 개인적으로 많이 아쉬웠습니다. 조금 더 열심히 공부해서 앞으로 더 깔금한 프로그래밍을 할 수 있도록 노력을 해야 할 것 같습니다.

혹시 실행하는 프로그램 궁금하신 분 계실 수 있을 것 같아서, 링크 남겨둡니다.
https://drive.google.com/open?id=1Yu-JF4Qov2HqqZocWzqCrdukMuZCepWL

이제.. 노드버전으로 만들어서 다음에 올려보겠습니다.

profile
C++ 공부하고있는 대학생입니다.

2개의 댓글

comment-user-thumbnail
2020년 4월 27일

ncurses 라이브러리 살펴보세요.

1개의 답글