노는게 제일 좋습니다.

드래곤동굴 게임(함수,불리언,time모듈) 본문

Python/기타 공부

드래곤동굴 게임(함수,불리언,time모듈)

노는게 제일 좋습니다. 2016. 1. 27. 18:53

원 코드 출처 Al Sweigart (http://inventwithpython.com/)

 

일종의 도박게임으로 볼 수 있음.

 

게임 방법

1.플레이어가 동굴에서 두 갈래길중 하나를 선택한다.

2-1. 일정 확률로 선한 드래곤을 만나 보물을 받는다.

2-2. 일정 확률로 악한 드래곤을 만나 잡아먹힌다.

3. 2-1 또는 2-2과정 뒤에 리플레이 여부를 물어본다.

 

작성한 코드(책에 작성된 것과 조금 다름)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import random
import time
 
def displayIntro():
    print('You are in a land full of dragons. In front of you,')
    print('you see two caves. In one cave, the dragon is friendly')
    print('and will share his treasure with you. The other dragon')
    print('is greedy and hungry, and will eat you on sight.')
 
def chooseCave():
    print('Which cave will you go into? (1 or 2)')
 
 
    while True:
        choose = input()
        if choose=='1':
            break;
        elif choose=='2':
            break;
        else :
            print('Please type 1 or 2')
            continue
 
    print()
    
    return choose
 
def goCave(direction):
    print('You approach the cave...')
    time.sleep(2)
    print('It is drak and spooky...')
    time.sleep(2)
    print('A large dragon jumps out in front of you! He opens his jaws and...')
    print()
    time.sleep(2)
 
    judgement = random.randint(1,2)
 
    if direction == str(judgement):
        print('Gives you his treasure!')
 
    elif direction != str(judgement):
        print('Gobbles you down in one bite!')
 
    print()
 
def playAgain():
    print('Do you want to play again? (yes or no)')
    
    while True:
        temp=input()
        if temp == 'yes':
            print('Go Again')
            print()
            return 'yes'
        elif temp == 'no':
            print('Good Bye')
            return 'no'
        else :
            print('please type yes or no')
 
###########################################################3
 
regame = 'yes' #게임을 또 할지 결정. yes이면 계속, no이면 아님.
    
while regame=='yes':
 
    displayIntro()
    caveNumber = chooseCave()
    goCave(caveNumber)
    regame = playAgain()
cs

64~71열에서 그 전의 줄에서 정의된 함수들을 이용해 게임을 굴린다.

 

  블록 : 같은 칸 수로 들여쓰기된 여러 줄의 코드이다. 5~8열은 한 블록이다.

 

  함수 : 프로그램 안의 작은 프로그램으로 볼 수 있다. 같은 내용을 여러번 쓰지 않는 편리함을 준다.

def키워드를 사용해 정의할 수 있다. 예를들어

def 함수명(인자):

와 같이 쓴다. 인자는 없을 수도 있다. 아랫줄에 들여쓰기 후 내용을 기술한다.

return으로 값을 반환할 수 있다. 

만약 반환되는 값이 여러개이면 배열로 반환한다. [ 정확한 사실 아니며, 실험으로 얻은 추측. 문제있으면 나중에 수정하겠음. ]

1
2
3
4
5
6
7
8
9
def abc():
    print("hi")
    return 1,2
 
= abc()
print(a)
print(a[0])
print(a[1])
 
cs

 

  불리언연산자 : True또는 False를 갖는 불리언 값을 비교해 하나의 불리언 값으로 평가한다.

and는 모두 True일 때, or는 하나라도 True일 때 True를 반환한다.

16~19열을 다음과 같이 다시 쓸 수 있다.

1
2
        if choose=='1' or choose=='2':
            break;
cs

not은 뒤에 오는 불리언 값을 반대로 바꾼다. and와 or과는 다르게 하나의 불리언 값에만 적용할 수 있다.

  time.sleep() : 일정 시간동안 프로그램을 멈춘다. 인수로 숫자가 들어가는데 단위는 '초'이다.

 

  정의와 호출 순서 : 정의 전에 호출하면 오류가 난다.

 

  변수 영역 : 전역 영역(global scope)과 지역 영역(local scope)로 나뉜다.

지역 영역에서 전역에 선언된 변수의 값을 건드릴 수 없다. 이것은 서로 영역이 다르기 때문이다.

전역에 a라는 변수가 있고, 한 함수의 영역 안에서 a라는 변수에 작업을 한다고 하자.

 

그렇게 되면 함수 안에서 a에 대한 작업은 전역a가 아니라, 함수 지역영역 내에서 새로 a를 만들어 작업하는 것이다.

함수가 끝나고 나서 a에 대해 작업하면 전역영역 a에 작업이 된다.

1
2
3
4
5
6
7
8
9
= 10 # 전역변수 a를 만들어 10 대입
 
def abc():
    a=5 # 지역변수 a를 만들어 5 대입
    print(a) 
 
abc() # 지역변수 a=5 출력
print(a) #전역변수 a=10 출력
 
cs

 

Comments