patternpythonModerate
Text based fight game
Viewed 0 times
textgamefightbased
Problem
I learned code about a week ago and I wanna hear some recommendations and stuff I could add to my code. This is a fight system I made for my text based game. Please tell me what I could do better.
import random
import time
import sys
def fight_snake():
fdmg1 = int(random.randint(1,7))
edmg1 = int(random.randint(1,6))
print("You hit a", fdmg1)
print("The Snake hits a", edmg1)
time.sleep(1)
if edmg1 > fdmg1:
print("You died")
elif edmg1 fdmg1:
print("You died")
elif edmg_a fdmg1:
print("You died")
elif edmg_b fdmg1:
print("You died")
elif edmg_c < fdmg1:
print("You killed the Enemy")
else:
print("You didnt kill the Enemy but you managed to escape")Solution
Design
As it stands, your current design is very rigid, and not extensible in any way. The best approach for a situation like this could be to use Object Oriented Programming, but in accordance with the Python talk, Stop Writing Classes, all of your code can be shortened to one function.
Here's an example function call:
Naming
Many of your variable names are so cryptic that it's understand what they're doing, even in the context of other code. Here's a small list of some of your bad variable names.
While identifying bad names is important, fixing them is even better. Here's a small list of tips to follow when naming variables.
Nitpicks
When getting an value from
You should also be using string formatting with
Would become:
For more on
You also have to useless imports:
If you don't use the contents of these modules, the imports can be removed.
In short, I've refactored your code down to this:
Hope this helps! Enjoy!
As it stands, your current design is very rigid, and not extensible in any way. The best approach for a situation like this could be to use Object Oriented Programming, but in accordance with the Python talk, Stop Writing Classes, all of your code can be shortened to one function.
def fight_enemy(enemy_name, min_enemy_damage, max_enemy_damage, min_player_damage, max_player_damage):
enemy_damage_dealt = random.randint(min_enemy_damage, max_enemy_damage)
player_damage_dealt = random.randint(min_player_damage, max_player_damage)
if enemy_damage_dealt > player_damage_dealt:
print("Uh-oh! You died!")
elif enemy_damage_dealt < player_damage_dealt:
print("You killed the {enemy_name}".format(enemy_name=enemy_name))
else:
print("You walk away unscathed, but the {enemy_name} still lives.".format(enemy_name=enemy_name))Here's an example function call:
fight_enemy("Enemy", 1, 10, 1, 10)Naming
Many of your variable names are so cryptic that it's understand what they're doing, even in the context of other code. Here's a small list of some of your bad variable names.
fdmg1
edmg_c
While identifying bad names is important, fixing them is even better. Here's a small list of tips to follow when naming variables.
- Don't make the name too short. (Unless you're doing stuff like coordinates, with
x, andy.)
- Don't include abbreviations unless the name is long, and the abbreviations are still readable.
- Use underscores
_to separate words.
Nitpicks
When getting an value from
random.randint(), there's no need to convert to an integer using int. random.randint() already returns an integer value.You should also be using string formatting with
str.format, rather than passing multiple arguments to print(). For example, the following line:print("The Enemy hits a", edmg_b)Would become:
print("The Enemy hits a {damage}".format(damage=edmg_b))For more on
str.format, see the docs.You also have to useless imports:
import time
import sysIf you don't use the contents of these modules, the imports can be removed.
In short, I've refactored your code down to this:
import random
def fight_enemy(enemy_name, min_enemy_damage, max_enemy_damage, min_player_damage, max_player_damage):
enemy_damage_dealt = random.randint(min_enemy_damage, max_enemy_damage)
player_damage_dealt = random.randint(min_player_damage, max_player_damage)
if enemy_damage_dealt > player_damage_dealt:
print("Uh-oh! You died!")
elif enemy_damage_dealt < player_damage_dealt:
print("You killed the {enemy_name}".format(enemy_name=enemy_name))
else:
print("You walk away unscathed, but the {enemy_name} still lives.".format(enemy_name=enemy_name))Hope this helps! Enjoy!
Code Snippets
def fight_enemy(enemy_name, min_enemy_damage, max_enemy_damage, min_player_damage, max_player_damage):
enemy_damage_dealt = random.randint(min_enemy_damage, max_enemy_damage)
player_damage_dealt = random.randint(min_player_damage, max_player_damage)
if enemy_damage_dealt > player_damage_dealt:
print("Uh-oh! You died!")
elif enemy_damage_dealt < player_damage_dealt:
print("You killed the {enemy_name}".format(enemy_name=enemy_name))
else:
print("You walk away unscathed, but the {enemy_name} still lives.".format(enemy_name=enemy_name))fight_enemy("Enemy", 1, 10, 1, 10)print("The Enemy hits a", edmg_b)print("The Enemy hits a {damage}".format(damage=edmg_b))import time
import sysContext
StackExchange Code Review Q#100536, answer score: 14
Revisions (0)
No revisions yet.