반도체, 임베디드 Study/C#

C# - 코딩 연습 / 1. Lotto 제작 / 2. 가위바위보 게임

잇(IT) 2024. 4. 22. 09:46
728x90

Lotto 제작

 

아래 코드는 6개의 무작위 숫자를 입력 받아 로또 당첨을 시뮬레이션 해보는 코드다.

실제 로또 방식과 동일하게 6개 전부 맞추면 1등, 5개 + 보너스를 맞추면 2등, 5개를 맞추면 3등, 4개를 맞추면 4등, 3개를 맞추면 3등을 표시한다.

 

Random 클래스를 이용하여 6개의 로또 번호를 생성하고, 보너스 번호를 추가로 하나 생성한다.

for 혹은 foreach문을 통해 무작위 6+1개의 숫자와 사용자가 입력한 6개의 숫자를 비교한다.

 

* 중복을 확인하기 위한 변수(flag)와 입력받은 숫자를 임시로 저장하여 비교하기 위한 변수(temp)를 생성하여 사용하는 것이 코드 작성에 좋다고 생각한다.

temp에 입력 받은 숫자를 넣고, 중복 검사를 받은 뒤 통과가 되면 (flag 값을 통해 확인) 배열에 넣는 방식이 보다 깔끔한 코딩 방식이라고 생각한다.

또한 로또 번호는 1~45까지이기 때문에 숫자 범위 제한도 만들어 준다.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace lotto
{
    class Program
    {
        static int[] selNum = new int[6];
        static int[] lottoNum = new int[7];
        static int win = 0;
        static int bonus = 0;

        public static void selectNum()
        {
            Console.WriteLine("로또 번호를 6개 입력하세요 (1~45)");
            for (int i = 0; i < 6; i++)
            {
                
                Console.WriteLine($"\n[{i+1}]번째 숫자를 입력해주세요");
                int num = Convert.ToInt32(Console.ReadLine());
                if(num < 46 && num > 0)
                {
                    for (int j = 0; j < 6; j++)
                    {
                        if(selNum[j] == num)
                        {
                            Console.WriteLine("!!!!!중복!!!!!\n중복된 숫자가 입력되었습니다.");
                            i--;
                        }
                    }
                    selNum[i] = num;
                }
                else
                {
                    Console.WriteLine("!!!!!1~45 사이의 숫자를 입력해주세요!!!!!");
                    i--;
                }
            }   
        }

        public static void makeNum()
        {
            Random ran = new Random();
            int temp = 0;
            for(int i = 0; i < 7; i++)
            {
                temp = ran.Next(45) + 1;
                bool flag = false;
                if(i > 0 && i < 7)
                {
                    //로또 번호가 중복되는지 확인
                    for(int j = 0; j <= i; j++)
                    {
                        if(lottoNum[j] == temp)
                        {
                            flag = true;
                        }
                    }
                }
                if (flag)
                {
                    --i;
                }
                else
                {
                    lottoNum[i] = temp;
                }
            }
        }

        public static void checkNum()
        {
            foreach(int x in lottoNum.Take(6))
            {
                foreach(int y in selNum)
                {
                    if(x == y)
                    {
                        win++;
                    }
                }
            }
            foreach(int x in selNum)
            {
                if(x == lottoNum[6])
                {
                    bonus++;
                }
            }
            switch (win)
            {
                case 6:
                    Console.WriteLine($"\n* {win}개 번호 전부 맞추셨습니다. 1등입니다. 축하드립니다.");
                    break;
                case 5:
                    if(bonus == 1)
                    {
                        Console.WriteLine($"\n* 보너스를 포함하여 {win}개 번호 맞추셨습니다. 2등입니다. 축하드립니다.");
                    }
                    else
                    {
                        Console.WriteLine($"\n*{win}개 번호 맞추셨습니다. 2등입니다. 축하드립니다.");
                    }
                    break;
                case 4:
                    Console.WriteLine($"\n* {win}개 번호 맞추셨습니다. 3등입니다. 축하드립니다.");
                    break;
                case 3:
                    Console.WriteLine($"\n*{win}개 번호 맞추셨습니다. 4등입니다. 축하드립니다.");
                    break;
                default:
                    Console.WriteLine($"\n* {win}개 번호를 맞추셨습니다. 안타깝지만 당첨되지 않으셨습니다.");
                    break;

            }
        }
        static void Main(string[] args)
        {
            makeNum();
            selectNum();

            Console.Write($"\n[이번주 로또 당첨 번호]\n");
            foreach (int x in lottoNum)
            {
                Console.Write($"{x}\t");
            }
            Console.WriteLine();
            Console.Write($"[입력하신 로또 번호]\n");
            foreach (int x in selNum)
            {
                Console.Write($"{x}\t");
            }

            checkNum();
        }
    }
}


가위바위보 게임

마찬가지로 가위바위보 게임을 코드로 짜보았다.

 

Lotto 프로그램과 유사하게 Random 클래스를 이용하여 임의의 값을 받아 가위, 바위, 보를 할당하고, 사용자 입력을 받아서 두 숫자를 비교해서 승패를 비교한다.

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace rsp_game
{
    class Program
    {

        static int iRandom = 0;
        static int iSelection = 0;
        static string[] choice = { "가위", "바위", "보" };
        static int win = 0;
        static int lose = 0;
        static int same = 0;
        static int sel = 0;
        static int play = 0;

        static void play_game()
        {
            iRandom = (new Random()).Next(1, 4);

            Console.Write("1(가위), 2(바위), 3(보) 입력 : _\b");
            iSelection = Convert.ToInt32(Console.ReadLine());

            Console.WriteLine("\n 사용자 : {0}", choice[iSelection - 1]);
            Console.WriteLine(" 컴퓨터 : {0}\n", choice[iRandom - 1]);

            if (iSelection == iRandom)
            {
                Console.WriteLine("비김");
                same++;
            }
            else
            {
                switch (iSelection)
                {
                    case 1: 
                        Console.WriteLine((iRandom == 3) ? "승": "패");
                        if(iRandom == 3)
                        {
                            win++;
                        } else
                        {
                            lose++;
                        }
                        break;
                    case 2: 
                        Console.WriteLine((iRandom == 1) ? "승" : "패");
                        if(iRandom == 1)
                        {
                            win++;
                        } else
                        {
                            lose++;
                        }
                        break;
                    case 3: 
                        Console.WriteLine((iRandom == 2) ? "승" : "패");
                        if(iRandom == 2)
                        {
                            win++;
                        }
                        else
                        {
                            lose++;
                        }
                        break;
                }
            }
            play++;
        }

        static void score()
        {
            Console.WriteLine($"\n[{play}]번 게임을 해서 [{win}]번 이기고, [{lose}]번 지고, [{same}]번 비겼습니다.");
        }
        static void Main()
        {
            
            while (true)
            {
                Console.WriteLine($"\n1. 가위바위보 게임하기\n2. 전적보기\n3. 게임종료");
                sel = Convert.ToInt32(Console.ReadLine());
                switch (sel)
                {
                    case 1:
                        play_game();
                        break;
                    case 2:
                        score();
                        break;
                }
                if(sel == 3)
                {
                    Console.WriteLine("게임 종료");
                    break;
                }
            }
        }
    }
}

728x90

'반도체, 임베디드 Study > C#' 카테고리의 다른 글

C# 컬렉션, 제네릭, 널(null), LINQ  (0) 2024.04.29
C# - 문자열 / 예외 처리  (0) 2024.04.22
C# - 클래스  (1) 2024.04.15
C# - 구조체 / 열거형  (0) 2024.04.15
C# - 코드 작성 연습 (숫자 맞추기 게임)  (0) 2024.04.10