본문 바로가기
카테고리 없음

가위 바위 보 게임 만들기

by 경자꿈사 2024. 7. 5.

<출처: 나무위키>

 

지금은 모르겠지만 예전에는 초등하교 문방구마다 '가위 바위 보' 게임이 있었다.

동전을 넣고 가위 바위 보 세 버튼 중 하나를 눌러 게임기가 랜덤하게 선택한 것과 겨루는 단순한 게임이었다.

오늘은 이와 유사한 게임을 Ruby 로 만들어 보자.

>> rand
=> 0.6561499107772369
>> rand
=> 0.019294971234185887
>> rand
=> 0.20463444271223508
>> rand(3)
=> 2
>> rand(3)
=> 0
>> rand(3)
=> 1
>> rand(3)
=> 1
>> rand(3)
=> 0

우선 '가위 바위 보' 중 하나를 컴퓨터가 랜덤하게 선택해야 하므로 Ruby 에서 랜덤한 값을 뽑아내는 방법을 알아야 하는데 위와 같이 rand('random' 을 뜻함) 메서드를 사용하면 된다.

인수를 주지않고 그냥 rand 라고만 쓰면 0(포함) 과 1(제외) 사이의 임의의 실수를 결과로 주고, 인수로 정수를 주면 0(포함) 과 인수(제외) 사이의 정수 중 임의의 하나를 결과로 준다. 즉, rand(5) 를 실행하면 결과는 0,1,2,3,4 중 하나가 된다는 얘기다.

컴퓨터는 '가위 바위 보' 셋 중 하나를 선택해야 하므로 프로그램에선 rand(3) 을 사용하면 된다.

그 다음 생각할 건 rand(3) 의 결과인 0 과 2 사이의 정수를 '가위 바위 보' 중 하나로 표현해 보여줘야 한다.

가위, 바위, 보 각각을 나타내는 이미지를 화면에 보여주면 더 실감이 나겠지만 여기선 프로그램을 간단히 작성하기 위해 문자 형태로 보여주도록 하자.

아래처럼 배열을 사용하면 정수와 원하는 값을 대응 시켜 처리할 수 있는데, 배열 안에 들어 있는 각 요소에 접근하기 위해서는 0 부터 시작하는 배열 요소의 위치 값(인덱스)을 대괄호 안에 넣어주면 된다.

rand(3) 의 결과 값(0,1,2 중 하나)에 해당 하는 위치에 있는 배열의 요소가 우리가 최종적으로 원하는 값이므로 대괄호 안에 rand(3) 을 넣어주면 된다.

>> arr = ["가위", "바위", "보"]
=> ["가위", "바위", "보"]
>> arr[0]
=> "가위"
>> arr[1]
=> "바위"
>> arr[2]
=> "보"
>> arr[rand(3)]
=> "바위"
>> arr[rand(3)]
=> "보"
>> arr[rand(3)]
=> "바위"
>> arr[rand(3)]
=> "바위"
>> arr[rand(3)]
=> "가위"

이제 앞서 배운 키보드 입력 처리와 반복문을 사용하여 '가위 바위 보' 게임 을 작성해보면 아래과 같다.

arr = ["가위", "바위", "보"]

while true
  input = STDIN.gets
  break if input == "\n"
  
  computer_select = arr[rand(3)]
  user_select = arr[input.to_i]
  puts "#{computer_select} vs #{user_select}"
  
  if computer_select == user_select
    puts "비겼습니다"
  elsif computer_select == "가위" && user_select == "바위"
    puts "이겼습니다"  
  elsif computer_select == "가위" && user_select == "보"
    puts "졌습니다"  
  elsif computer_select == "바위" && user_select == "가위"
    puts "졌습니다"  
  elsif computer_select == "바위" && user_select == "보"
    puts "이겼습니다"  
  elsif computer_select == "보" && user_select == "가위"
    puts "이겼습니다"
  elsif computer_select == "보" && user_select == "바위"
    puts "졌습니다"
  end
end

 

코드를 보면 if 와 elsif 가 보이는데 이건 Ruby 프로그램에서 특정 조건의 참과 거짓에 따라 처리를 다르게 하고 싶을 때 사용하며 아래 보이는 형식으로 작성하면 된다.

 

if 조건1

  조건1이 참일 때 실행

elsif 조건2

  조건2가 참일 때 실행

elsif 조건3

  조건3이 참일 때 실행

else

  위의 조건들이 모두 거짓일 때 실행

end

 

위의 프로그램이 실행은 되지만 아직 완성도는 많이 부족한 상태이다. 여러분이 직접 완성도를 높여 보면 좋을 것 같다.