Added coins

This commit is contained in:
2026-10-10 15:28:42 +02:00
parent 9030146ec8
commit 10a3d93821
7 changed files with 59 additions and 8 deletions
+2
View File
@@ -0,0 +1,2 @@
# show extra spaces after certains emojis to align them in the terminal
SHOW_EXTRA_EMOJI_SPACES=true
+2
View File
@@ -0,0 +1,2 @@
# show extra spaces after certains emojis to align them in the terminal
SHOW_EXTRA_EMOJI_SPACES=true
+2
View File
@@ -1,9 +1,11 @@
from .stoneBlock import StoneBlock
from .spawnPointBlock import SpawnPointBlock
from .finishBlock import FinishBlock
from .coinBlock import CoinBlock
BLOCKS = [
StoneBlock,
SpawnPointBlock,
FinishBlock,
CoinBlock
]
+28
View File
@@ -0,0 +1,28 @@
import os
from game.blocks.block import Block
from game.gameState import GameState
class CoinBlock(Block):
def __init__(self):
self.collected = False
@property
def character(self):
return '°'
@property
def type(self):
return 'coin'
@property
def solid(self):
return False
def on_collision(self, gameState: GameState):
if not self.collected:
gameState.add_coin()
self.collected = True
def to_string(self):
return " " if self.collected else "🪙" + (" " if os.getenv("SHOW_EXTRA_EMOJI_SPACES", "false").lower() == "true" else "")
+6 -6
View File
@@ -1,7 +1,7 @@
"""
Represents the current state of the game.
Contains :
- Player score
- Player coins
- stopGame flag
- Player position
"""
@@ -10,15 +10,12 @@ class GameState:
PLAYER_VELOCITIES = [*PLAYER_MOVEMENTS, "down"]
def __init__(self):
self.score = 0
self.playerPosition = (0, 0)
self.stopGame = False
self.movesCount = 0
self.playerVelocity = -1 # -1 means no velocity
self.gameWon = False
def add_score(self, points):
self.score += points
self.coins = 0
def set_player_position(self, x, y):
self.playerPosition = (x, y)
@@ -43,4 +40,7 @@ class GameState:
self.stopGame = stop
def set_game_won(self, won):
self.gameWon = won
self.gameWon = won
def add_coin(self):
self.coins += 1
+14 -2
View File
@@ -14,11 +14,23 @@ class UserPlayerGameHandler(GameHandler):
"""
Refresh the screen
"""
print("\033[2J\033[H" + self.game.to_string())
print("\n\033[2J") # Add margin for stupid vscode terminal
game_string = self.game.to_string()
for i, line in enumerate(game_string.splitlines()):
if i == 0:
line += "\tCoins: " + str(self.game.gameState.coins)
elif i == 1:
line += "\tMoves: " + str(self.game.gameState.movesCount)
print(line)
sleep(0.1)
def on_input_request(self) -> str:
"""
Listen for keyboard input, and map it to a gameState PLAYER_MOVEMENTS
"""
return self.game.gameState.PLAYER_MOVEMENTS[self.KEYBOARD_INPUTS.index(input(f"Enter a movement ({', '.join(self.KEYBOARD_INPUTS)}): "))]
user_input = input(f"Enter a movement ({', '.join(self.KEYBOARD_INPUTS)}): ")
if user_input not in self.KEYBOARD_INPUTS:
print(f"Invalid input: {user_input}. Please enter one of {', '.join(self.KEYBOARD_INPUTS)}.")
return self.on_input_request()
return self.game.gameState.PLAYER_MOVEMENTS[self.KEYBOARD_INPUTS.index(user_input)]
+5
View File
@@ -1,9 +1,14 @@
from dotenv import load_dotenv
from game.game import Game
from game.gameState import GameState
from game.handlers import GAME_HANDLERS
from game.map import Map
from game.mapReader import MapReader
from game.mapSet import MapSet
# loading variables from .env file
load_dotenv()
if __name__ == "__main__":
mapReader = MapReader()