노드js CLI 로또프로그램

SangHoon Lee·2020년 4월 30일
1

안녕하세요 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등은 확률적으로 너무 안나와서 아쉽게도 못보았지만 잘 나오리라 생각이 됩니다.

이렇게 또 저의 부족함을 배워가면서 더 열심히 해야겠다는 생각을 가지게 되는 것 같습니다. 앞으로 더 열심히 해야할 것 같습니다.

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

0개의 댓글