1. - 1 -
1. 프로그램 개요
확률 조정이 가능한 가위바위보 게임 기계
Ÿ 1부터 10까지 난이도 설정 가능
Ÿ 난이도에 따라 이길 확률과 질 확률이 달라짐
Ÿ 이기거나 졌을 때만 코인 감소
Ÿ 사실 이름은 가위바위보지만 사용자의 입력 값은 전혀 상관없는 프로그램
2. 소스 코드
프로그램 명 : 확률 조정이 가능한 가위바위보 게임 기계
작성자 : 16038020 김희진
2. - 2 -
## 추억의 짱깸뽀 기계 - 확률 조정 가능, 초기자본 : 코인5개##
## 16038020 김희진 ##
## 변수 선언 부분
numbers=[1,1,1,1,2,2,2,4,4,7,7,20] #당첨금액
num,select,get=0,0,0
difficulty=1 #어려움 설정(1~10) 숫자가 높을수록 당첨되기 어려움
coin = 5 #초기 자본
a=3+(difficulty-1)*2 #분모
b=(a//2+1)//2+1 #분자
## 메인(main) 코드 부분
import random
import time
while coin>0 :
print("~ 추억의 짱깸뽀 기계 ~ 나의 코인 : %d" % coin)
select = int(input("1.가위 2.바위 3.보 : "))
if (select<1) or (select>3) :
print("1,2,3 중에서 다시 선택하세요!n")
continue
print("가위..")
3. - 3 -
time.sleep(1)
print("바위..")
time.sleep(1)
print("보..!")
time.sleep(1)
num=random.randrange(1,a)
if num==1 : #이긴 경우
get=numbers[random.randrange(0,len(numbers))] #랜덤한 당첨금액
print("이겼습니다! %d 코인을 획득했습니다!n" % get)
coin+=get #당첨금액만큼 코인에 추가
elif (1<num) and (num<=b) : #비긴 경우
print("비겼습니다!n")
continue #코인 감소 없이 리게임
else :
print("졌습니다!n")
coin-=1 #한 게임이 끝나면 코인 감소
print("GAME OVER! 코인이 다 떨어졌어요..:(")
3. 변수 선언
난이도 a 이길 확률 b 비길 확률 질 확률
1 3 1/3(0.33) 2 1/3(0.33) 1/3(0.33)
2 4 1/4(0.25) 2 1/4(0.25) 2/4(0.5)
3 6 1/6(0.17) 3 2/6(0.33) 3/6(0.5)
4 8 1/8(0.13) 3 2/8(0.25) 5/8(0.63)
5 10 1/10(0.1) 4 3/10(0.33) 6/10(0.6)
6 12 1/12(0.08) 4 3/12(0.25) 8/12(0.66)
7 14 1/14(0.07) 5 4/14(0.28) 9/14(0.64)
8 16 1/16(0.06) 5 4/16(0.25) 11/16(0.69)
9 18 1/18(0.06) 6 5/18(0.28) 12/18(0.67)
10 20 1/20(0.05) 6 5/20(0.25) 14/20(0.7)
§ numbers 라는 리스트에 당첨금액을 저장해놓았다. 1개의 경우 제일 당첨되기 쉽고
20이 제일 당첨되기 어렵게 개수를 조정해놓았다. 랜덤하게 get에 저장된다.
§ select는 제대로 된 값을 입력했는지 확인하기 위한 값이다.
§ difficulty에 따라 num값의 범위와 이에 따른 확률이 달라진다.
§ a는 전체적인 확률을 위해 만든 변수이며 2씩 증가한다.
§ b는 비길 확률을 만들기 위해서 만들어진 변수이며 두 수가 한 쌍일 때 1씩 증가한
다.
4. 메인 코드
4. - 4 -
§ 코인이 0이 되면 while문을 빠져나가 프로그램이 종료된다.
§ select로 값을 입력받고 잘못 입력받았을 경우 while문의 처음으로 되돌아간다.
§ num은 1에서 a까지의 값 중 하나를 랜덤으로 받는다. 1인 경우 이기고 1보다 크고
b보다 작은 경우 비기고 나머지의 경우 진다.
§ 이겼을 경우 numbers 리스트에서 값 하나를 랜덤하게 받아 get에 저장하고 그 값만
큼 coin에 추가하고 coin을 1만큼 감소시키고 다시 while문을 수행한다.
§ 비겼을 경우 while문의 처음으로 되돌아간다.
§ 졌을 경우 coin을 1만큼 감소시키고 다시 while문을 수행한다.
§ 마지막에 coin을 1만큼 감소시키는 이유는 게임비용만큼 감소하는 것이다.
5. 실행 결과
잘못 입력했을 경우 난이도 1 난이도 10
5. - 5 -
6. 평가
§ 난이도 1과 10의 차이가 크다.
§ 이길 확률은 난이도가 높아질수록 확실히 낮아지지만 비길 확률은 불규칙하다. 질 확
률은 난이도가 높아질수록 높아지는 편이긴 하지만 일정하지는 않아서 아쉽다.
§ 변수 a,b의 경우 확률을 맞추려고 임의로 만든 변수라서 처음 본 사람은 이해하기 어
려울 것 같다.
§ 변수 선언 부분과 메인 코드 부분을 나눠서 가독성이 좋다.