Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit fcdea08

Browse files
typing added
1 parent e085b03 commit fcdea08

File tree

1 file changed

+54
-48
lines changed

1 file changed

+54
-48
lines changed

‎05_Game_Engine_Using_OOP/game_engine.py

Lines changed: 54 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,67 +1,67 @@
11
import random
22

33
class Game:
4-
def __init__(self, name, description):
5-
self.name = name
6-
self.description = description
4+
def __init__(self, name: str, description: str) ->None:
5+
self.name: str = name
6+
self.description: str = description
77

8-
def get_info(self):
8+
def get_info(self)->None:
99
print(f"Game: {self.name}")
1010
print(f"Description: {self.description}")
1111

12-
def start(self):
12+
def start(self)->None:
1313
self.play()
1414

15+
def play(self) -> None:
16+
raise NotImplementedError("Subclasses must implement this method.")
17+
1518

1619
class HighLow(Game):
17-
def __init__(self):
20+
def __init__(self)->None:
1821
super().__init__("High Low", "Guess if your number is higher than or lower than the computer's.")
1922

20-
def play(self):
23+
def play(self)->None:
2124
self.game()
2225

23-
def welcome_message(self):
26+
def welcome_message(self)->None:
2427
print("Welcome to the High-Low Game!")
2528
print("Guess if your number is higher or lower than the computer's.")
2629

27-
def generate_numbers(self):
28-
player_number = random.randint(1, 100)
29-
computer_number = random.randint(1, 100)
30+
def generate_numbers(self)->tuple[int, int]:
31+
player_number: int = random.randint(1, 100)
32+
computer_number: int = random.randint(1, 100)
3033
return player_number, computer_number
3134

32-
def get_player_guess(self):
33-
guess = input("Do you think your number is 'higher' or 'lower' than the computer's number? ").strip().lower()
34-
return guess
35+
def get_player_guess(self) -> str:
36+
while True:
37+
guess: str = input("Do you think your number is 'higher' or 'lower' than the computer's number? ").strip().lower()
38+
if guess in ["higher", "lower"]:
39+
return guess
40+
print("Invalid input. Please enter 'higher' or 'lower'.")
3541

36-
def check_guess(self, player_number, computer_number, guess):
42+
def check_guess(self, player_number: int, computer_number: int, guess: str) ->bool:
3743
if guess == "higher":
3844
return player_number > computer_number
3945
elif guess == "lower":
4046
return player_number < computer_number
41-
else:
42-
print("Invalid guess. Please enter 'higher' or 'lower'.")
43-
return None
4447

45-
def play_round(self):
48+
def play_round(self)->bool:
4649
player_number, computer_number = self.generate_numbers()
4750
print(f"\nYour number is: {player_number}")
48-
guess = self.get_player_guess()
51+
guess: str = self.get_player_guess()
4952

50-
is_correct = self.check_guess(player_number, computer_number, guess)
51-
if is_correct is None:
52-
print("Invalid guess. Try again.")
53-
return False
54-
elif is_correct:
53+
is_correct: bool = self.check_guess(player_number, computer_number, guess)
54+
if is_correct:
5555
print("Correct guess! You scored a point.")
5656
return True
5757
else:
5858
print("Incorrect guess.")
5959
print(f"The computer's number was: {computer_number}")
6060
return False
6161

62-
def game(self):
63-
rounds = 5
64-
score = 0
62+
def game(self)->None:
63+
rounds: int = 5
64+
score: int = 0
6565
self.welcome_message()
6666

6767
for round_num in range(1, rounds + 1):
@@ -78,55 +78,61 @@ def game(self):
7878

7979

8080
class NumberGuess(Game):
81-
def __init__(self):
81+
def __init__(self)->None:
8282
super().__init__("Number Guess", "Guessing the computer's number")
8383

84-
def play(self):
85-
secret_number = random.randint(1, 99)
84+
def play(self)->None:
85+
secret_number: int = random.randint(1, 99)
8686
print("I am thinking of a number between 1 and 99...")
8787

8888
while True:
89-
guess = int(input("Enter a guess: "))
90-
if guess == secret_number:
91-
print("Congratulations! You guessed the number.")
92-
break
93-
elif guess < secret_number:
94-
print("Your guess is too low.")
95-
else:
96-
print("Your guess is too high.")
89+
try:
90+
guess: int = int(input("Enter a guess: "))
91+
if 1 <= guess <= 99:
92+
if guess == secret_number:
93+
print("Congratulations! You guessed the number.")
94+
break
95+
elif guess < secret_number:
96+
print("Your guess is too low.")
97+
else:
98+
print("Your guess is too high.")
99+
else:
100+
print("Please enter a number between 1 and 99.")
101+
except ValueError:
102+
print("Invalid input. Please enter a valid number.")
97103

98104

99105
class GameEngine:
100-
def __init__(self):
101-
self.games = []
106+
def __init__(self)->None:
107+
self.games: list[Game] = []
102108

103-
def add_game(self, game):
109+
def add_game(self, game: Game) ->None:
104110
self.games.append(game)
105111

106-
def menu(self):
112+
def menu(self)->None:
107113
print("Available Games:")
108114
for i, game in enumerate(self.games, 1):
109115
print(f"{i}. {game.name}: {game.description}")
110116

111117
while True:
112118
choice = input("Enter the number of the game you want to play (or 'q' to quit): ")
113-
if choice == 'q':
119+
if choice.strip().lower() == 'q':
114120
break
115121

116122
try:
117-
choice = int(choice)
123+
choice: int = int(choice)
118124
if 1 <= choice <= len(self.games):
119125
self.games[choice - 1].start() # Call the start method of the chosen game
120126
else:
121-
print("Invalid choice. Please try again.")
127+
print("Invalid choice. Please enter a valid game number.")
122128
except ValueError:
123129
print("Invalid input. Please enter a number.")
124130

125131

126132
# Create the game engine and add games
127-
game_engine = GameEngine()
133+
game_engine: GameEngine = GameEngine()
128134
game_engine.add_game(HighLow())
129135
game_engine.add_game(NumberGuess())
130136

131137
# Run the menu
132-
game_engine.menu()
138+
game_engine.menu()

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /