-
Notifications
You must be signed in to change notification settings - Fork 1
/
AS91897_JamesRobionyRogers_Advenced_Processes.py
232 lines (185 loc) · 8.8 KB
/
AS91897_JamesRobionyRogers_Advenced_Processes.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
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
import random
import time
import sys
import os
# importing game settings
from AS91897_JamesRobionyRogers_Settings import *
# Setting Vairables
running = True
# Defining classes
class Characters():
def __init__(self):
# initiating the player vairables
self.set_display_name = self.set_display_name()
self.player_health = PLAYER_HEALTH
self.all_weapons = ALL_WEAPONS # dict with weapon name and damange
self.available_weapons = {}
self.player_selected_weapon = ""
self.player_damage = 0
# assigning default available weapons
self.available_weapons = self.all_weapons
# initiating the opponent vairables
self.opponent_name = OPPONENT_NAME
self.opponent_health = OPPONENT_HEALTH
self.opponent_damage = OPPONENT_DAMAGE
self.opponent_attack_text = OPPONENT_ATTACK_TEXT
def set_display_name(self):
type("\nWhat is your display name: ", letter_pause=0.01)
self.display_name = input()
def select_weapon(self): # component refined during sprint 2
# Setup Top Lines of the Table
type("|----------------------------------------|\n", table=True)
type("| Weapons Available |\n", table=True)
type("|----------------------------------------|\n", table=True)
type("| Weapon Name | Weapon Damage |//////|\n", table=True)
type("|----------------------------------------|\n", table=True)
# itterate through available weapons and assign random damage values
for weapon in self.available_weapons:
self.available_weapons[weapon] = random.randint(10, 18)
damage_string = f" {self.available_weapons[weapon]} "
type(formatted_print(weapon, damage_string, " - "), table=True)
type("|________________________________________|\n", table=True)
# selecting weapon
while self.player_selected_weapon not in self.available_weapons:
type("\nWeapon of choice: ")
self.player_selected_weapon = input()
# setting the remainder of the vairables for the turn
self.player_damage = self.available_weapons[self.player_selected_weapon]
# confirming to player what has been chosen
type(f"\nChosen weapon: {self.player_selected_weapon} with a damage of {self.player_damage}\n")
def player_attack(self):
# attack message
type(f"\n{self.display_name} swung the {self.player_selected_weapon} potentialy causing {self.player_damage} points of damage\n")
# reduce the health of opponent unless dodged (8%)
if random.randint(1, 100) <= DODGE_CHANCE: # opponent dodged message
type("Unfortunatly, the opponent managed to dodge. Your attack was ineffective this time...\n\n")
else:
self.opponent_health -= self.player_damage
def opponent_attack(self):
# setting random damage value
self.opponent_damage = random.randint(OPPONENT_DAMAGE_RANGE[0], OPPONENT_DAMAGE_RANGE[1]) # CHECK if this is working, doesn seem like it is
# attack message
type(random.choice(self.opponent_attack_text))
# reduce the health of player unless dodged (8%)
if random.randint(1, 100) <= 8: # player dodged message
print(f"\nFortunatly you were able to dodge the {self.opponent_name}'s attack. No damage was taken...\n")
else:
self.player_health -= self.opponent_damage
class Game:
def __init__(self):
# defining game constants
self.TITLE = TITLE
self.HOW_TO_PLAY = HOW_TO_PLAY
self.DENTAL_HYGIENE_PRACTICES = DENTAL_HYGIENE_PRACTICES
# Defining game vairables
self.running = True
self.turn_count = 1
# present player the intro to game
self.intro()
# initiate player and opponent class' after introduction
self.character = Characters()
def intro(self): # component refined during sprint 2
type(f"Welcome to {self.TITLE} \n", letter_pause=0.01, enter_pause=0.3)
type(self.HOW_TO_PLAY, letter_pause=0.008, enter_pause=0.2)
def win_condition(self):
# congratulation message
type(f"\nWell done {self.character.display_name} you have managed to successfully eradicate the {self.character.opponent_name}\n")
# game stats
self.game_details()
# game development credits
self.credits()
# exit game loop
self.running = False
def lose_condition(self):
# losing message
type(f"\nUnfortunatly {self.character.opponent_name} was able to defeat you :(")
type(f"\nTry again and see if you have the courage to defeat the dential enemies\n")
# game stats
self.game_details()
# game development cradits
self.credits()
# exit game loop
self.running = False
def turn(self):
clear_screen()
type(f"\nTurn: {self.turn_count}\n", enter_pause=0)
# choose weapon
self.character.select_weapon()
# attack opponent
self.character.player_attack()
# NEED TO DO: remove opponent health from player attack
self.game_details()
# recieve attack from opponent
if self.character.opponent_health >= 0: # if opponent is NOT dead
self.character.opponent_attack()
# NEED TO DO: remove opponent health from player attack
self.game_details()
# proceed when player clicks enter
self.dental_practices()
self.pause()
# update general game game stats
self.turn_count += 1
# reset needed vairables for next turn:
self.character.player_selected_weapon = ''
def credits(self):
# title of the Game
type(f"\nThank you for playing {self.TITLE}\n")
type("This is a school project for the Advanced Processes Internal in Year 12 at Onslow College for the year of 2020\n\n")
type("Game developed by: James Robiony-Rogers")
def game_details(self): # component refined during srint 2
# Printing out table
type("|----------------------------------------|\n", table=True)
type("| Game Details |\n", table=True)
type("|----------------------------------------|\n", table=True)
type("| Player Health | Opponent Health | Turn |\n", table=True)
type("|----------------------------------------|\n", table=True)
type(formatted_print(self.character.player_health, self.character.opponent_health, self.turn_count), table=True)
type("|________________________________________|\n\n", table=True)
def pause(self):
input()
def dental_practices(self):
time.sleep(0.55)
try:
type(self.DENTAL_HYGIENE_PRACTICES[(self.turn_count - 1)], letter_pause=0.015, enter_pause=0.02)
except: # in the case that the turn count has exceded the amount of DENTAL_HYGIENE_PRACTICES
pass
def run_game(self):
# intro to game has already been executed
type("\nWhat are we waiting for? Lets get right into it...\n")
while self.running:
self.turn()
# when player dies
if self.character.player_health <= 0:
self.lose_condition()
# when opponent dies
if self.character.opponent_health <= 0:
self.win_condition()
def type(string, letter_pause=0.015, enter_pause=0.5, table=False): # sourced from: https://stackoverflow.com/questions/9246076/how-to-print-one-character-at-a-time-on-one-line
# setting pauses for type table
if table:
letter_pause = TABLE_LETTER_PAUSE
enter_pause = TABLE_ENTER_PAUSE
for letter in string:
sys.stdout.write(letter)
sys.stdout.flush()
if letter == "\n":
time.sleep(enter_pause)
else:
time.sleep(letter_pause)
def formatted_print(value1=0, value2=0, value3=0): # sourced from: https://stackoverflow.com/questions/11245381/formatting-console-output
return "| %-13s | %-15s | %-4s |\n" % (value1, value2, value3) # "%-13s" corrisponds to the max width of the left hand width
def clear_screen():
# Sourced from:
# https://www.csestack.org/clear-python-interpreter-console/#:~:text=You%20can%20clear%20the%20Python,system%2C%20cls%20clear%20the%20console. and
# https://stackoverflow.com/questions/18937058/clear-screen-in-shell/47296211
# checking for opperating system in order to provide the right command
try:
if sys.platform == 'linux' or sys.platform == 'linux2' or sys.platform == 'darwin': # clear command for Lynicx and Mac opperating systems
os.system('clear')
elif sys.platform == 'win32':
os.system('cls')
except:
pass
# running code
game = Game()
game.run_game()