forked from bajajvinamr/HacktoberFest2020
-
Notifications
You must be signed in to change notification settings - Fork 0
/
game of python
109 lines (104 loc) · 3.71 KB
/
game of python
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
class Character:
def __init__(self):
self.name = ""
self.health = 1
self.health_max = 1
def do_damage(self, enemy):
damage = min(
max(randint(0, self.health) - randint(0, enemy.health), 0),
enemy.health)
enemy.health = enemy.health - damage
if damage == 0: print "%s evades %s's attack." % (enemy.name, self.name)
else: print "%s hurts %s!" % (self.name, enemy.name)
return enemy.health <= 0
class Enemy(Character):
def __init__(self, player):
Character.__init__(self)
self.name = 'a goblin'
self.health = randint(1, player.health)
class Player(Character):
def __init__(self):
Character.__init__(self)
self.state = 'normal'
self.health = 10
self.health_max = 10
def quit(self):
print "%s can't find the way back home, and dies of starvation.\nR.I.P." % self.name
self.health = 0
def help(self): print Commands.keys()
def status(self): print "%s's health: %d/%d" % (self.name, self.health, self.health_max)
def tired(self):
print "%s feels tired." % self.name
self.health = max(1, self.health - 1)
def rest(self):
if self.state != 'normal': print "%s can't rest now!" % self.name; self.enemy_attacks()
else:
print "%s rests." % self.name
if randint(0, 1):
self.enemy = Enemy(self)
print "%s is rudely awakened by %s!" % (self.name, self.enemy.name)
self.state = 'fight'
self.enemy_attacks()
else:
if self.health < self.health_max:
self.health = self.health + 1
else: print "%s slept too much." % self.name; self.health = self.health - 1
def explore(self):
if self.state != 'normal':
print "%s is too busy right now!" % self.name
self.enemy_attacks()
else:
print "%s explores a twisty passage." % self.name
if randint(0, 1):
self.enemy = Enemy(self)
print "%s encounters %s!" % (self.name, self.enemy.name)
self.state = 'fight'
else:
if randint(0, 1): self.tired()
def flee(self):
if self.state != 'fight': print "%s runs in circles for a while." % self.name; self.tired()
else:
if randint(1, self.health + 5) > randint(1, self.enemy.health):
print "%s flees from %s." % (self.name, self.enemy.name)
self.enemy = None
self.state = 'normal'
else: print "%s couldn't escape from %s!" % (self.name, self.enemy.name); self.enemy_attacks()
def attack(self):
if self.state != 'fight': print "%s swats the air, without notable results." % self.name; self.tired()
else:
if self.do_damage(self.enemy):
print "%s executes %s!" % (self.name, self.enemy.name)
self.enemy = None
self.state = 'normal'
if randint(0, self.health) < 10:
self.health = self.health + 1
self.health_max = self.health_max + 1
print "%s feels stronger!" % self.name
else: self.enemy_attacks()
def enemy_attacks(self):
if self.enemy.do_damage(self): print "%s was slaughtered by %s!!!\nR.I.P." %(self.name, self.enemy.name)
Commands = {
'quit': Player.quit,
'help': Player.help,
'status': Player.status,
'rest': Player.rest,
'explore': Player.explore,
'flee': Player.flee,
'attack': Player.attack,
}
p = Player()
p.name = raw_input("What is your character's name? ")
print "(type help to get a list of actions)\n"
print "%s enters a dark cave, searching for adventure." % p.name
while(p.health > 0):
line = raw_input("> ")
args = line.split()
if len(args) > 0:
commandFound = False
for c in Commands.keys():
if args[0] == c[:len(args[0])]:
Commands[c](p)
commandFound = True
break
if not commandFound:
print "%s doesn't understand the suggestion." % p.name