본문 바로가기

C#/개발

[C#] 숫자 야구

사실 프로그램 기능 구현은 어려울게 없어서 코드를 최대한 간결하게 짜려고 노력했다. 요즘 애들은 숫자 야구 모르겟지? 

 

※ 구현 기능

○ New Game 버튼 클릭 시 0~9까지 각자 다른 난수 3개 생성 후 숫자 선택 버튼 활성화

○ 숫자 버튼 클릭 시 값을 기억하고 버튼은 사라짐. 숫자 버튼 3개를 선택하면 Hit 버튼 활성화, 숫자버튼은 더이상 반응안함

○ Hit 버튼 클릭 시 선택한 숫자 3개와 난수3개를 비교 후 값이 존재하지만 위치가 다르면 Ball, 값과 위치가 모두 같으면 Strike로 계산하여 출력. Hit 버튼 비활성화

○ 9이닝 안에  삼진에 성공하면 승리 메세지 출력, 실패하면 패배 메세지 출력. 양쪽 모두 New Game 버튼 외 비활성화

 

엄청 빨리 푸는 것처럼 보이는 이유는 고민하는 시간을 편집해서 그렇다.

 

코드

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Baseball
{
    public partial class Form1 : Form
    {
        int inning=1;
        List<int> pitchList = new List<int>();
        List<int> hitList = new List<int>();
        List<Button> btnList = new List<Button>();
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            btnList.Add(btn0);
            btnList.Add(btn1);
            btnList.Add(btn2);
            btnList.Add(btn3);
            btnList.Add(btn4);
            btnList.Add(btn5);
            btnList.Add(btn6);
            btnList.Add(btn7);
            btnList.Add(btn8);
            btnList.Add(btn9);
            btnHit.Enabled = false;
            btnEnable(false);
        }
        public void setPitch()
        {
            pitchList.Clear();
            Random r = new Random(DateTime.Now.Millisecond);
            while (pitchList.Count < 3)
            {
                int tmp = r.Next(10);
                if (!pitchList.Contains(tmp))
                    pitchList.Add(tmp);
            }
        }
        public void setHit(int number, Button btn)
        {
            if (hitList.Count < 3)
            {
                hitList.Add(number);
                btn.Visible = false;
            }
            if (hitList.Count == 3)
                btnHit.Enabled = true;
        }
        public void refree()
        {
            int strike = 0;
            int ball = 0;
            for (int i = 0; i < 3; i++)
            {
                if (pitchList.Contains(hitList[i]))
                {
                    if (hitList[i] == pitchList[i])
                        strike++;
                    else
                        ball++;
                }
            }
            richTextBox1.AppendText(inning+"이닝: "+hitList[0] +"-"+ hitList[1] +"-"+ hitList[2]+" ["
                +strike+" Strike "+ball+" Ball]\n");
            lbResult.Text="["+strike+" Strike "+ball+" Ball]";
            if (strike == 3){
                MessageBox.Show("You Win!");
                btnEnable(false);
                btnHit.Enabled=false;
                lbResult.Text = "   You Win!";
                return;
            }
            inning++;
            if (inning == 10)
            {
                MessageBox.Show("You Lose.");
                btnEnable(false);
                btnHit.Enabled = false;
                lbResult.Text = "   You Lose.";
            }
        }
        private void btnNew_Click(object sender, EventArgs e)
        {
            richTextBox1.Clear();
            hitList.Clear();
            setPitch();
            btnVisible(true);
            btnEnable(true);
            btnHit.Enabled = false;
            inning = 1;
            lbResult.Text = "   Play Ball!";
        }
        private void btnHit_Click(object sender, EventArgs e)
        {
            refree();
            hitList.Clear();
            btnVisible(true);
            btnHit.Enabled = false;
        }
        private void btnNum_Click(object sender, EventArgs e)
        {
            if (sender as Button == btn0) {setHit(0,btn0);}
            else if (sender as Button == btn1) {setHit(1,btn1);}
            else if (sender as Button == btn2) {setHit(2,btn2);}
            else if (sender as Button == btn3) {setHit(3,btn3);}
            else if (sender as Button == btn4) {setHit(4,btn4);}
            else if (sender as Button == btn5) {setHit(5,btn5);}
            else if (sender as Button == btn6) {setHit(6,btn6);}
            else if (sender as Button == btn7) {setHit(7,btn7);}
            else if (sender as Button == btn8) {setHit(8,btn8);}
            else if (sender as Button == btn9) {setHit(9,btn9);}
        }
        public void btnVisible(bool v)
        {
            foreach (Button b in btnList)
            {
                b.Visible = v;
            }
        }
        public void btnEnable(bool v)
        {
            foreach (Button b in btnList)
            {
                b.Enabled = v;
            }
        }
    }
}

'C# > 개발' 카테고리의 다른 글

[C#] 웹 브라우저  (0) 2022.08.05
[C#] 지하철 최단거리  (0) 2022.08.05
[C#] 아날로그 시계  (0) 2022.08.05
[C#] 바이오리듬  (0) 2022.08.05
[C#] 하노이의 탑  (0) 2022.08.05