-
Notifications
You must be signed in to change notification settings - Fork 0
/
TileTraveller2.py
144 lines (120 loc) · 4.51 KB
/
TileTraveller2.py
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
# https://github.com/SindriTh/TileTraveller
# Sindri Þór Harðarson, Friðrik Tryggvi Róbertsson, Ólafur Starri Pálsson.
# Við gerðum alorithma á töflu sem var fyrir framan okkur og ákváðum að skipta vandamálinu niður í 4 föll
# Við enduðum með föllin printallowed sem prentar mögulegar hreyfingar.
# getinput sem sækir input frá notanda og kallar í fallið isallowd sem athugar hvort hreyfingin sé lögleg.
# ef isallowed er True þá keyrir getinput fallið nexttile sem skilar nýrri staðsetningu notenda.
# Strengirnir hér fyrir neðan geyma löglegar hreyfingar, því við meigum ekki nota list.
import random
moves = 0
NORTH ="n"
EAST = "e"
SOUTH = "s"
WEST = "w"
## Function 1 printallowed
# Prentar allar mögulegar hreyfingar í hverjum reit.
def printallowed(allowed_moves):
out_str = ""
length = len(allowed_moves)
for i in range(length):
if out_str != "":
out_str += " or "
if allowed_moves[i].lower() == "n":
out_str += "(N)orth"
if allowed_moves[i].lower() == "e":
out_str += "(E)ast"
if allowed_moves[i].lower() == "s":
out_str += "(S)outh"
if allowed_moves[i].lower() == "w":
out_str += "(W)est"
out_str += "."
print("You can travel:",out_str)
## Function 2 getinput
# Fær input frá notanda og ef það er löglegt, skilar hann því sem nýrri staðsetningu
def getinput(currentloc,allowed_moves):
global moves
global coins_taken
moves += 1
movement=random.choice([NORTH,EAST,SOUTH,WEST])
print('Direction: {}'.format(movement))
if isallowed(movement,allowed_moves):
coins_taken = []
return nextTile(currentloc, movement)
else:
print('Not a valid direction!')
coins_taken.append(currentloc)
return currentloc
## Function 3 allowed
# Testar hvort input frá notanda sé löglegt
def isallowed(movement,allowed_moves):
for ch in allowed_moves:
if ch.lower() == movement.lower():
return True
return False
## Funtion 4 nextTile
# Býr til næstu staðsetningu út frá innslátti notanda og núverandi staðsetningu
def nextTile(currentloc, movement):
if movement.lower() == "n":
currentloc += 1
if movement.lower() == "s":
currentloc -= 1
if movement.lower() == "e":
currentloc += 10
if movement.lower() == "w":
currentloc -= 10
return currentloc
def leaver(currentloc,tokens):
if currentloc not in coins_taken:
string = random.choice(["y", "n"])
print("Pull a lever (y/n): {}".format(string))
if string == "y":
tokens += 1
print("You received 1 coin, your total is now {}.".format(tokens))
return tokens
def play():
global coins_taken
coins_taken = []
allowed = (("n","nes","es"),("n","sw","ew"),("n","ns","sw"))
location = 11
coins = 0
global moves
moves = 0
while location != 31:
if(location == 11):
printallowed(allowed[0][0])
location = getinput(location,allowed[0][0])
elif(location == 12): # Lever
coins = leaver(location,coins)
printallowed(allowed[0][1])
location = getinput(location,allowed[0][1])
elif(location == 13):
printallowed(allowed[0][2])
location = getinput(location,allowed[0][2])
elif(location == 21):
printallowed(allowed[1][0])
location = getinput(location,allowed[1][0])
elif(location == 22): # Lever
coins = leaver(location,coins)
printallowed(allowed[1][1])
location = getinput(location,allowed[1][1])
elif(location == 23): # Lever
coins = leaver(location,coins)
printallowed(allowed[1][2])
location = getinput(location,allowed[1][2])
elif(location == 31):
printallowed(allowed[2][0])
location = getinput(location,allowed[2][0])
elif(location == 32): # Lever
coins = leaver(location,coins)
printallowed(allowed[2][1])
location = getinput(location,allowed[2][1])
elif(location == 33):
printallowed(allowed[2][2])
location = getinput(location,allowed[2][2])
print("Victory! Total coins {}. Moves {}".format(coins,moves))
playagain = "y"
rand=int(input("Input seed: "))
random.seed(rand)
while(playagain.lower() == 'y'):
play()
playagain = input("Play again (y/n): ")