반응형
- 프로젝트 목표
- 숫자 야구 게임 만들기
- MaskedTextBox를 이용하여 원하는 데이터만 받기
- 중복되지 않는 난수(Random) 만들기
- 프로젝트 내용
- 게임 방법
- 게임 시작을 하면 플레이어가 알지 못하게 4자리의 난수를 생성(= 문제 숫자, qNum)
- 난수는 0~9로 각기 다른 숫자로 구성
- 플레이어는 9번의 기회동안 숫자를 입력하여 문제 숫자를 맞추면 승리
- 숫자와 위치 둘다 맞추면 1Strike, 숫자는 맞추되 위치를 틀리면 1ball
- 게임 시작을 하면 플레이어가 알지 못하게 4자리의 난수를 생성(= 문제 숫자, qNum)
- 주요 사항
- 난수 4자리를 각기 다른 숫자로 구성할 것
- 각 자리의 중복 확인 구조를 넣을 것
- 입력받는 값은 4자리의 숫자일 것
- 윈폼의 MaskedTextBox를 이용하여 원하는 값만 받아 처리
- 난수 4자리를 각기 다른 숫자로 구성할 것
- 게임 방법
- 전체 코드
-
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 Number_Baseball { public partial class Form1 : Form { public string qNum; public Boolean gameStartFlag; public int try_Count; int strikeCount = 0; int ballCount = 0; public Form1() { InitializeComponent(); gameStartFlag = false; } private void btn_Start_Click(object sender, EventArgs e) { //문제 숫자 만들기 Random rd = new Random(); string tempNum = ""; bool flag = true; int cc = 0; //문제 숫자4자리의 중복 제거 while(flag) { tempNum = ""; for(int k=0; k<4; k++) { tempNum += rd.Next(0, 10).ToString(); } Console.WriteLine(tempNum); cc = 0; for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { if (tempNum[i] == tempNum[j]) { cc += 1; } } } if(cc == 4) { flag = false; } } qNum = tempNum; gameStartFlag = true; try_Count = 0; //Try Label 초기화 label_Num1.Text = "----"; label_Num2.Text = "----"; label_Num3.Text = "----"; label_Num4.Text = "----"; label_Num5.Text = "----"; label_Num6.Text = "----"; label_Num7.Text = "----"; label_Num8.Text = "----"; label_Num9.Text = "----"; //Result Label 초기화 label_Result1.Text = "----"; label_Result2.Text = "----"; label_Result3.Text = "----"; label_Result4.Text = "----"; label_Result5.Text = "----"; label_Result6.Text = "----"; label_Result7.Text = "----"; label_Result8.Text = "----"; label_Result9.Text = "----"; //숫자 입력창 입력 제한 해제 maskedtxt_Try.ReadOnly = false; //숫자 입력창 마스크 형식 설정(0은 정수만 가능한 자리수 표시) maskedtxt_Try.Mask = "0000"; } private void btn_Retire_Click(object sender, EventArgs e) { qNum = ""; MessageBox.Show("Sorry about that..."); gameStartFlag = false; } private void btn_send_Click(object sender, EventArgs e) { string tryNum; tryNum = maskedtxt_Try.Text; try_Count += 1; string name = "label_Result" + try_Count.ToString(); Control ctnResult = this.Controls[name]; string name2 = "label_Num" + try_Count.ToString(); Control ctnNum = this.Controls[name2]; strikeCount = 0; ballCount = 0; if (gameStartFlag == true) { if (maskedtxt_Try.MaskCompleted) { compareCheck(tryNum, qNum); ctnNum.Text = tryNum; ctnResult.Text = strikeCount + " S " + ballCount + " B"; } else { MessageBox.Show("Enter the number!"); try_Count -= 1; } } else { MessageBox.Show("Please Press Start Button."); Console.WriteLine("3"); } maskedtxt_Try.Clear(); if(strikeCount == 4) { MessageBox.Show("You Win"); } else if(try_Count == 9 && strikeCount != 4) { MessageBox.Show("You Lose"); } } public void compareCheck(string a, string b) { for (int k = 0; k < 4; k++) { if (a[k] == b[k]) { strikeCount += 1; } } for (int i=0; i<4; i++) { for(int j=0; j<4; j++) { if(a[i] == b[j]) { ballCount += 1; } } } ballCount -= strikeCount; } } }
-
- 윈폼 화면 구성
- Check Point
- MaskedTextBox
- 일반적인 텍스트 박스(TextBox, RichTextBox등)과 다르게 프로그래머가 원하는 형식, 값만 사용자가 작성 가능하다.
- 위의 코드중 95번째줄을 보면 마스크 설정을 한 것을 알 수 있다.
- maskedtxt_try.Mask = "0000";
- 텍스트박스에 숫자4자리만 들어 갈 수 있도록 설정함 (0이 숫자를, 네개가 네자리를 뜻함)
- 관련 자료는 아래 MSDN에서 확인 가능
- random 난수 만들기 (중복 없는 4자리수 만들기)
-
while(flag) { tempNum = ""; for(int k=0; k<4; k++) { tempNum += rd.Next(0, 10).ToString(); } Console.WriteLine(tempNum); cc = 0; for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { if (tempNum[i] == tempNum[j]) { cc += 1; } } } if(cc == 4) { flag = false; } }
-
- MaskedTextBox
- 다운로드
반응형