본문 바로가기
개발 이야기/C# 이야기

C# Winform으로 만든 야구게임

by 런던살자 2019. 6. 21.

안녕하세요 마블랑입니다.

 

학교다닐때 친구들과 가끔 시간때우기로 했었던 야구게임이 생각나서 C#으로 한번 구현해보았습니다.

 

오래전에 무한도전에서 야구게임을 이용하여 게임을 할때 만들어봐야지 했던것을 이제야 만들게 되었군요 ㅠㅠ

 

간단한 알고리즘으로 구현되어 있으니 프로그래밍을 처음 접하는 분들에게 공부하기 좋을거 같습니다.

 

 

기능은 크게 난수를 생성하고 결과를 확인하는 기능이 있습니다.

 

난수 생성시에는 숫자간의 중복을 체크하여 중복이 없을때까지 난수를 계속 생성을 합니다.

using System;
using System.Windows.Forms;

namespace CSharp_BaseballGame
{
    public partial class Form1 : Form
    {
        int RandomNum;
        bool bStartFlag = false;

        public Form1()
        {
            InitializeComponent();
        }

        //입력된 숫자 또는 난수의 중복된 숫자 체크
        private bool BaseballGame_OverlapCheck(String str)
        {
            String[] _str = new String[4];

            for (int i = 0; i < _str.Length; i++)   //하나씩 잘라서 넣기 
            {
                _str[i] = str.Substring(i, 1);
            }

            for (int i = 0; i < _str.Length; i++)
            {
                for (int j = 0; j < _str.Length; j++)
                {
                    if (i != j)
                    {
                        if (_str[i].Equals(_str[j]))
                        {
                            return false;
                        }
                    }
                }
            }
            return true;
        }

        //결과 체크 함수
        private String BaseballGame_ResultCheck(string strRandomNum, string strInput)
        {
            int nStrike = 0;
            int nBall = 0;

            String str = " / OUT!!";  

            //정답과 입력된 숫자를 한자리씩 배열로 나눈다.
            String[] arrayRandomNum = new String[4];
            String[] arrayInput = new String[4];

            for (int i = 0; i < arrayRandomNum.Length; i++)
            {
                arrayRandomNum[i] = strRandomNum.Substring(i, 1);
            }

            for (int i = 0; i < arrayInput.Length; i++)
            {
                arrayInput[i] = strInput.Substring(i, 1);
            }


            for (int i = 0; i < arrayInput.Length; i++)
            {
                for (int j = 0; j < arrayRandomNum.Length; j++)
                {
                    if (arrayInput[i].Equals(arrayRandomNum[j]))  //같은 숫자가 있는지 판단.
                    {
                        if (i == j) //자리수가 같으면 스트라이크
                        {
                            nStrike++;
                        }
                        else
                        {
                            nBall++;
                        }
                    }
                }
            }

            if (nStrike != 0 || nBall != 0)     // 체크결과 반환
            {
                str = " / 스트라이크 : " + nStrike + " / 볼 : " + nBall;
            }

            if (nStrike.Equals(4))   //4 스트라이크일 경우 정답 반환
            {
                bStartFlag = false;
                return "정답!!";
            }
            return str;
        }

        //난수 생성 버튼
        private void Bt_start_Click(object sender, EventArgs e)
        {
            Random r = new Random();

            while (true)
            {
                this.RandomNum = r.Next(1000, 9999);

                if (BaseballGame_OverlapCheck(this.RandomNum.ToString()))  //정답에 중복되는 숫자가 있는지 체크
                {
                    break;
                }
            }
            lb_Result.Items.Add("난수가 생성되었습니다! 수를 입력하세요");
            bStartFlag = true;

        }

        //결과 확인 버튼
        private void Bt_confirm_Click(object sender, EventArgs e)
        {
            if (bStartFlag == false)
            {
                MessageBox.Show("난수를 먼저 생성해주세요");
                return;
            }
            if (tb_number.Text.Length != 4)
            {
                MessageBox.Show("4자리 숫자를 입력해주세요.");
                return;
            }
            if (!BaseballGame_OverlapCheck(tb_number.Text) )
            {
                MessageBox.Show("중복되는 숫자가 있습니다.");
                return;
            }

            String result = BaseballGame_ResultCheck(RandomNum.ToString(), tb_number.Text);
            lb_Result.Items.Add("입력한 수 : " + tb_number.Text + " / 결과 : " + result);

            tb_number.Text = "";
        }


        //정답확인 버튼
        private void Bt_View_Click(object sender, EventArgs e)
        {
            MessageBox.Show(this.RandomNum.ToString());
        }

        //리스트 초기화 버튼
        private void Bt_reset_Click(object sender, EventArgs e)
        {
            lb_Result.Items.Clear();
        }
    }
}

 

코드에는 주석을 몇개 추가하긴 했지만 야구게임을 아시는 분이라면 설명을 드릴게 없군요..

 

4자리 숫자를 입력했을때 정답에 있는 숫자가 있고 자리가 같으면 스트라이크, 숫자는 있지만 자리가 틀리면 볼!

 

숫자가 모두 없으면 Out으로 표시가 됩니다!

 

코드를 첨부하였으니 궁금한점이 있으면 댓글을 달아주세요^^ 

 

 

CSharp_BaseballGame.zip
0.19MB

 

이상 마블랑이었습니다.

 

읽어주셔서 고맙습니다~

댓글