지금은 모르겠지만 예전에는 초등하교 문방구마다 '가위 바위 보' 게임이 있었다.
동전을 넣고 가위 바위 보 세 버튼 중 하나를 눌러 게임기가 랜덤하게 선택한 것과 겨루는 단순한 게임이었다.
오늘은 이와 유사한 게임을 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
위의 프로그램이 실행은 되지만 아직 완성도는 많이 부족한 상태이다. 여러분이 직접 완성도를 높여 보면 좋을 것 같다.