안녕하세요 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
이제.. 노드버전으로 만들어서 다음에 올려보겠습니다.
ncurses 라이브러리 살펴보세요.