루비 행맨게임 코드 예제
★프로그래밍/Ruby :: 2015. 9. 14. 14:57루비로 짠 행맨게임 코드 예제입니다.
필자가 중학교 때 영어수업시간에 했던 게임 중 하나로,
영어 단어를 한 글자씩 맞히고 틀리면 교수형 당하는 사람 그려지는 그 게임 맞습니다.
여기서는 루비의 문자열 값을 다루기 위한 예시로 행맨게임을 이용했습니다.
코드는 다음과 같습니다.
def init # 문제를 출제할 배열 @q_list = ["KOREA", "ENGLAND", "FRANCE", "GERMANY", "ITALY", "SPAIN", "DENMARK", "SWEDEN", "PORTUGAL", "NORWAY", "FINLAND", "POLAND", "CZECH", "AUSTRIA", "ICELAND", "BELGUIM", "NETHERLANDS", "UNITED STATES", "CANADA", "MEXICO", "BRAZIL", "ARGENTINA", "COLOMBIA", "AUSTRALIA", "NEW ZEALAND", "SOUTH AFRICA", "EGYPT", "MOROCCO", "NIGERIA", "CAMEROON", "GHANA", "IVORY COAST", "KENYA", "TANZANIA", "UNITED ARAB EMIRATES", "SAUDI ARABIA"] @max_wrong = 10 #10번 틀리면 끝 end def prompt(*args) print(*args) gets end def newgame @answer = @q_list.sample.upcase # 문제 배열에서 랜덤추출+대문자화 @viewans = "" # 화면에 표시할 문제 변수 for i in 0..(@answer.size - 1) # 글자가 들어갈 자리를 밑줄로 표시 if @answer[i] == " " @viewans += " " else @viewans += "_" end end # a부터 z까지 입력줄 저장 aa = " a".upto(" z").to_a @a_list = "" for i in 0..(aa.count - 1) @a_list += aa[i] end @wrong = 0 #오답 횟수 초기화 @success = false #성공 여부 저장 @w_list = "" #오답들 저장 end def ingame puts puts sprintf(" [ %s ]", @viewans) puts sprintf(" 보기: %s", @a_list) puts sprintf(" - 현재 오답 횟수: %d회 (%d회 오답시 실패)", @wrong, @max_wrong) @ch = prompt " - 글자를 고르세요. (A-Z): " cc = @ch[0].downcase if cc.strip == "" #아무것도 안 적은 경우 puts " 고를 글자가 입력되지 않았습니다." elsif @a_list.include? cc #보기에서 적은 경우 if @answer.include? cc.upcase #정답 @a_list.gsub!(cc, cc.upcase) for i in 0..(@answer.size - 1) @viewans[i] = @answer[i] if @answer[i] == cc.upcase end @success = true if !@viewans.include? "_" else #오답 @a_list.gsub!(cc, "-") @wrong += 1 @w_list += cc end elsif (@a_list.include? cc.upcase) || (@w_list.include? cc) #이미 나온 답 puts " 이미 선택된 답입니다." else puts " 잘못 입력하셨습니다." end end quit = false init begin newgame begin ingame #성공 혹은 일정 횟수 이상 오답까지 반복 end while (@wrong < @max_wrong) && !@success puts if @success puts " 축하합니다! 성공하셨습니다!" else puts " 안타깝게도 실패하셨습니다!" end puts sprintf(" 정답은 %s입니다.", @answer) q = prompt " 다시 하시겠습니까? (Y/N): " quit = true if q[0].upcase != "Y" #Y가 아니면 끝냄 end while !quit
여기서는 단지 예를 들기 위해 출제될 단어들을 코드 안에 넣었지만 실제로는 외부 파일에 저장해 놓고 불러오는 것도 가능합니다.
아래는 이 코드를 실행한 스크린샷입니다.
유용하게 활용하시기 바랍니다.