C# 숫자야구게임으로 배워보는 Random(난수)과 ListBox 컨트롤 사용 방법


숫자 야구게임이라고 있습니다.
숫자 야구게임은 Random으로 생성된 서로 다른 3자리 숫자를 맞추는 게임입니다. Random으로 생성된 숫자와 플레이어가 입력한 3자리 숫자 중 서로 자릿수(위치)가 일치하는 경우에는 Strike, 그리고 3자리 Random 숫자에는 포함 되지만 서로 위치한 자릿수가 틀릴 경우 Ball 판정을 내리는 비교적 단순한 게임입니다.

이렇게 반복해서 숫자를 입력하면서 몇 번만에 랜덤으로 생성된 3자리 숫자를 정확히 맞추는지 확인해 보는 게임입니다.
단순하지만 나름 머리를 써야 최대한 빨리 맞출 수 있는 게임입니다. 다른 사람과 대결에서 빨리 맞추는 사람이 승자가 되는 게임이기도 합니다.

이번 글에서는 C#으로 숫자 야구 게임을 개발하면서 난수를 처리하는 Random 클래스 사용 방법과 ListBox 컨트롤의 사용 방법에 대해 알아보겠습니다.

본문에 작성한 소스는 C# 숫자야구게임으로 바로 실행해 볼 수 있는 프로그램입니다.

C# 숫자야구게임으로 배워보는 Random(난수)과 ListBox 컨트롤 사용 방법

C#에서 Random(난수 발생) 사용하기

– C#에서 랜덤(난수 발생)을 사용하기 위해 Random 클래스를 사용합니다.

– 랜덤 값을 가져오기 위해서는 Next() 메소드를 사용하게 됩니다.

  • Next(); – 정수(int) 값 리턴
  • Next(int minValue, int maxValue); – 정수(int) 값 리턴, maxValue – 1
  • Next(int maxValue); – 정수(int) 값 리턴
  • NextBytes(byte[] buffer);
  • NextDouble(); –  0.0에서 1.0 미만까지의 단일 부동 소수점 값 리턴
private void MenuNewGame_Click(object sender, EventArgs e)
{
    int value1 = 0, value2 = 0, value3 = 0;
 
    //난수 생성을 위한 클래스 선언
    Random random = new Random();
 
    //서로 다른 3자리 숫자를 만들기 위해 계속 반복 작업 수행
    //무한루트를 방지하기 위해 1000번까지만 반복
    for (int i = 0; i < 1000; i++)
    {
        int rnd = random.Next(110);   //1~9 사이의 단일 정수
 
        if (value1 == 0)
            value1 = rnd;
        else if (value1 != 0 && value2 == 0 && value1 != rnd)
            value2 = rnd;
        else if (value1 != 0 && value2 != 0 && value3 == 0 && value1 != rnd && value2 != rnd)
            value3 = rnd;
 
        if (value3 != 0)
            break;
    }
 
    //난수 생성으로 만들어진 서로 다른 3자리 숫자를 합침 = 찾아야 할 3자리 숫자
    if (value1 != 0 && value2 != 0 && value3 != 0)
        ResultNumber = value1.ToString() + value2.ToString() + value3.ToString();
 
    //리스트박스, 실행 횟수 클리어
    listBox.Items.Clear();
    labelCount.Text = “0”;
 
}
 
 

C#에서 ListBox 컨트롤 사용하기

– C#에서 ListBox에 리스트를 추가한다는 것은 Items에 인덱스가 추가된다는 의미입니다.

  • listBox.Items.Add(item) : ListBox의 마지막에 항목을 추가
  • listBox.Items.AddRange(collectionValue) : ListBox에 한번에 컬렉션한 내용을 추가
  • listBox.Items.Insert(index, item) : ListBox의 지정 인덱스 위치에 항목 삽입
  • listBox.Items.Clear() : ListBox를 클리어 시킴
  • listBox.Items.RemoveAt(index) : ListBox의 지정 인덱스 위치의 항목을 삭제
private void NumberCheck()
{
    if (ResultNumber == null || ResultNumber == “”)
    {
        MessageBox.Show(“Menu에서 [새로 시작하기]를 해 주세요.”);
        return;
    }
 
    if (textNumber.Text.Length != 3)
    {
        MessageBox.Show(“서로 다른 3자리 숫자를 입력하세요.”);
        return;
    }
 
    if (textNumber.Text.Substring(01== textNumber.Text.Substring(11||
        textNumber.Text.Substring(01== textNumber.Text.Substring(21||
        textNumber.Text.Substring(11== textNumber.Text.Substring(21))
    {
        MessageBox.Show(“서로 다른 3자리 숫자를 입력하세요.”);
        return;
    }
 
    //시도 횟수를 1씩 누적시킴
    labelCount.Text = (int.Parse(labelCount.Text) + 1).ToString();
 
    int Strike = 0, Ball = 0;
 
    //위치하는 자리수가 일치하면 Strike 판정
    if (ResultNumber.Substring(01== textNumber.Text.Substring(01))
        Strike += 1;
    if (ResultNumber.Substring(11== textNumber.Text.Substring(11))
        Strike += 1;
    if (ResultNumber.Substring(21== textNumber.Text.Substring(21))
        Strike += 1;
 
    //3자리 숫자에 포함은 되지만 위치하는 자리수가 다른 경우 Ball 판정
    if (ResultNumber.Substring(01== textNumber.Text.Substring(11|| ResultNumber.Substring(01== textNumber.Text.Substring(21))
        Ball += 1;
    if (ResultNumber.Substring(11== textNumber.Text.Substring(01|| ResultNumber.Substring(11== textNumber.Text.Substring(21))
        Ball += 1;
    if (ResultNumber.Substring(21== textNumber.Text.Substring(01|| ResultNumber.Substring(21== textNumber.Text.Substring(11))
        Ball += 1;
 
    //리스트박스에 판정결과 출력
    string ResultMsg = string.Format(“{0} Strike {1} Ball”, Strike.ToString(), Ball.ToString());
 
    //마지막 입력한 내용이 첫째줄에 오도록 Insert() 인덱스 0에 추가함
    //끝줄에 출력되도록 하려면 listBox.Items.Add()로 해주면 됨
    listBox.Items.Insert(0string.Format(“[{0}] {1} – {2}”, labelCount.Text, textNumber.Text, ResultMsg));
 
    if (Strike == 3)
    {
        MessageBox.Show(“숫자를 모두 맞추었습니다.”);
        //현재 게임을 종료함
        ResultNumber = “”;
    }
 
    textNumber.Text = “”;
}
 
 


※ 이상으로 C#에서 난수 발생을 위한 Random 사용 방법과 목록을 출력할 ListBox 사용 방법을 실제 예제를 통해 알아보았습니다.





이 글이 도움이 되었기를 바랍니다. ^-^


답글 남기기