안녕하세요 C++을 공부하고있는 대학생입니다. 이번에는 노드JS 에 대해서 과제도 있었고, 저번 글에 이어 로또프로그램 노드JS버전을 만들어보기로 했기때문에 올리게되었습니다.
우선 코드 먼저 간략하게 보여드리겠습니다.
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
function sleep(num4) {
let count3 = 0;
for(let i =0; i<num4; i++) {
count3++;
}
}
var Lotto = [];
var RLotto = [];
let onecount = 0;
let twocount = 0;
function pushLotto(num) {
Lotto.push(num);
}
function pushRLotto(num3) {
RLotto.push(num3);
}
function checkNumber(checknumber,n1) {
if(checknumber==6) return 1;
else {
for(let i =n1; i<7; i++) {
if(i<6) {
for(let j = i+1; j<7; j++) {
if(Lotto[i] == Lotto[j]) {
let x = Math.floor(Math.random()*45)+1;
Lotto[i] = x;
n1 = i;
return checkNumber(checknumber+1,n1);
}
}
}
}
}
}
function checkNumber2(checknumber2,n) {
if(checknumber2==6) return 1;
else {
for(let i =n; i<7; i++) {
if(i<6) {
for(let j = i+1; j<7; j++) {
if(RLotto[i] == RLotto[j]) {
let y = Math.floor(Math.random()*45)+1;
RLotto[i] = y;
n = i;
return checkNumber2(checknumber2+1,n);
}
}
}
}
}
}
function RandomLotto() {
for(let i = 0; i<7; i++) {
pushRLotto(Math.floor(Math.random() * 45) +1);
}
checkNumber2(0,0);
for(let i =0; i<7; i++) {
if(i == 6) {
console.log("(보너스)로또의 "+ (i+1) +"번째 당첨번호는" + RLotto[i] + " 입니다.");
}
else {
console.log("로또의 "+ (i+1) +"번째 당첨번호는" + RLotto[i] + " 입니다.");
}
}
}
function place() {
console.log("\n\n");
console.log("당신의 등수는..");
for(let i =0; i <6; i++) {
if(i<6) {
for(let j =0; j<6; j++) {
if(Lotto[i] == RLotto[j]) {
onecount++;
}
}
}
}
if (Lotto[6] == RLotto[6]) twocount ++;
if(onecount ==6) {
console.log("\n\n");
console.log("■ ■■■■■■");
console.log("■ ■");
console.log("■ ■■■■■■");
console.log("■");
console.log("■ ■■■■■■■■");
console.log("■");
console.log("■ ■■");
console.log("■ ■■");
}
else if (onecount == 5 && twocount == 1) {
console.log("■■■■■■ ■■■■■■");
console.log(" ■ ■");
console.log(" ■ ■■■■■■");
console.log(" ■");
console.log("■■■■■■ ■■■■■■■■■");
console.log("■");
console.log("■ ■■");
console.log("■■■■■■ ■■");
}
else if (onecount == 5 && twocount == 0) {
console.log("■■■■■■ ■■■■■■");
console.log(" ■ ■");
console.log(" ■ ■■■■■■");
console.log(" ■");
console.log("■■■■■■ ■■■■■■■■■");
console.log(" ■");
console.log(" ■ ■■");
console.log("■■■■■■ ■■");
}
else if ((onecount == 3 && twocount == 1) && (onecount == 4 && twocount == 0)) {
console.log(" ■■ ■■■■■■");
console.log(" ■ ■ ■");
console.log(" ■ ■ ■■■■■■");
console.log(" ■ ■");
console.log(" ■■■■■■ ■■■■■■■");
console.log(" ■");
console.log(" ■ ■■");
console.log(" ■ ■■");
}
else if (onecount == 5 && twocount == 1) {
console.log("■■■■■■ ■■■■■■");
console.log("■ ■");
console.log("■ ■■■■■■");
console.log("■");
console.log("■■■■■■ ■■■■■■■■■");
console.log(" ■");
console.log(" ■ ■■");
console.log("■■■■■■ ■■");
}
else {
console.log("■■■■■■■ ■ ");
console.log(" ■ ■ ■");
console.log(" ■ ■ ■■■■■■");
console.log(" ■ ■ ■ ■");
console.log(" ■ ■");
console.log("■■■■■■■■");
console.log(" ■■");
console.log(" ■■");
}
}
function startLotto() {
for(let i = 0; i<7; i++) {
pushLotto(Math.floor(Math.random() * 45) +1);
}
checkNumber(0,0);
for(let i =0; i<7; i++) {
if(i == 6) {
console.log("(보너스)당신의 "+ (i+1) +"번째 번호는" + Lotto[i] + " 입니다.");
}
else {
console.log("당신의 "+ (i+1) +"번째 번호는" + Lotto[i] + " 입니다.");
}
}
console.log("\n\n");
console.log("잠시만 기다려 주세요.");
console.log("\n\n");
sleep(5000000000);
RandomLotto();
console.log("\n\n");
console.log("당첨 발표하겠습니다 잠시만 기다려 주십시오.")
sleep(5000000000);
place();
}
function main() {
console.log("\n");
console.log("■■■■■■■■■■■■■■■■■■■■■");
console.log("■ 1■ 2■ 3■ 4■ 5■ 6■ 7■ 8■ 9■10■")
console.log("■■■■■■■■■■■■■■■■■■■■■");
console.log("■11■12■13■14■15■16■17■18■19■20■")
console.log("■■■■■■■■■■■■■■■■■■■■■");
console.log("■21■22■23■24■25■26■27■28■29■30■")
console.log("■■■■■■■■■■■■■■■■■■■■■");
console.log("■31■32■33■34■35■36■37■38■39■40■")
console.log("■■■■■■■■■■■■■■■■■■■■■");
console.log("■41■42■43■44■45■")
console.log("■■■■■■■■■■■");
console.log("\n");
var answer;
console.log("안녕하세요 로또 프로그램 입니다.");
console.log("\n");
console.log("1. 게임 시작, 2. 나가기")
console.log("\n");
rl.question('메뉴를 골라주세요.(숫자로 입력)', answer => {
console.log(`${answer} 를(을) 선택하셨습니다.\n`);
if(answer == 1) {
console.log("지금부터 6개의 일반 번호와, 1개의 랜덤한 보너스 번호가 선택이 됩니다..");
startLotto();
}
else if(answer == 2) {
process.exit();
}
else {
console.log("다시 입력 해 주세요.")
// rl.prompt();
}
rl.close();
});
}
main();
제가 노드를 처음쓰는 언어는 아니지만 거의 처음 수준인 실력이기때문에, 생각보다 많이 어려웠습니다. 어쩌다보니 코드가 너무 길어져서 230줄이나 짜게 되었는데, 이번에는 저번과는 다르게 그림보다 코드에 대한 내용이 길어져서 길게 코딩 한 것 같습니다.
맨 처음에 입력을 받아서 프로그램을 진행하는 형식으로 하려고했는데, 입력받는게 C언어 C++언어 와 다르게 readline 이라는 것을 가지고와서 해야해서 당황했었습니다. 그래도 구글에서 잘 참고해서 사용하게 되었습니다. 그리고 math에 random함수를 가지고와서 난수를 넣었습니다. 중복 수를 제거하는데 indexOf? 라는것을 쓰는걸 보았습니다. 사실 이것을쓰면 더 편하게 할 수 있었으나, 그래도 저는 공부하는 입장이기때문에 제 스스로 효율적인 방법이 없나 생각하다가, 재귀함수를 통해서 구현을 한번 해 보았습니다. 숫자가 6일때를 탈출기점으로 하여서 중복 수를 찾습니다. 중복 수 발견 시, 재귀함수로 현재 인덱스 번호와 함께, count 수를 증가시켜서 숫자가 6이 되면 탈출하는 것이 제가 짠 재귀함수의 원리입니다. 물론 다른분들이 만든것에비해 효율적이라고는 장담하지 못하지만, 프로그램 실행하는데에 있어서 버벅거리거나 오버플로우 같은 문제는 발생하지 않았으므로 괜찮은 것 같습니다.
그럼 마지막으로 프로그램 실행했던 것을 영상으로 보여드리고싶으나 제한이 되기때문에 사진으로 간략하게 보여드리겠습니다.
처음 실행화면입니다. 숫자를 타이핑함으로써 메뉴를 선택 할 수 있게 하였습니다.
두번 째 시작을 눌렀을 때 화면입니다. 바로 6개의 일반숫자와 보너스숫자 한개를 랜덤으로 뽑아주고, 약 5초의 시간 뒤에 로또의 당첨번호를 자동으로 추첨하게 됩니다.
이렇게 로또의 추첨 번호가 나오고,
마지막으로 결과가 나오면서 프로그램이 끝이 나게 됩니다.
제가 한 20번 돌렸는데 운좋게도 5등을 한번 해서 5등이 나오는 것까지 확인 해 보았습니다.
1,2,3,4등은 확률적으로 너무 안나와서 아쉽게도 못보았지만 잘 나오리라 생각이 됩니다.
이렇게 또 저의 부족함을 배워가면서 더 열심히 해야겠다는 생각을 가지게 되는 것 같습니다. 앞으로 더 열심히 해야할 것 같습니다.