From 538be47bc5c37ead0dcf1d911fc47bc6d027aba3 Mon Sep 17 00:00:00 2001 From: Niklas Haiden Date: Fri, 8 May 2026 16:43:55 +0200 Subject: [PATCH 1/5] feat(item): add cost attribute and getter function --- src/item.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/item.py b/src/item.py index e0cec9e..09be957 100644 --- a/src/item.py +++ b/src/item.py @@ -11,6 +11,7 @@ class Item: self.x = x self.y = y self.item_type = item_type + self.cost = random.randint(5, 10) # collision rect for player (2 times item size for width and height) self.rect = pygame.Rect(self.x, self.y, ITEM_SIZE, ITEM_SIZE) @@ -50,6 +51,9 @@ class Item: pygame.draw.rect(screen, color, draw_rect) pygame.draw.rect(screen, COLOR_HP_BAR_BG, draw_rect, 2) + def get_cost(self): + return self.cost + # try 50 times to find a free position to spawn item def _random_position(room_rect, blocked_rects): @@ -130,4 +134,4 @@ class ItemManager: # clear items when changing room def clear(self): self.items = [] - self.last_spawn_time = pygame.time.get_ticks() \ No newline at end of file + self.last_spawn_time = pygame.time.get_ticks() From 2adc490f3da62e97f5b14b54700214e713c81e5b Mon Sep 17 00:00:00 2001 From: Niklas Haiden Date: Fri, 8 May 2026 16:44:21 +0200 Subject: [PATCH 2/5] feat(ects): add some helper functions for etcs --- src/ects.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/ects.py b/src/ects.py index e746c12..ea9319d 100644 --- a/src/ects.py +++ b/src/ects.py @@ -2,6 +2,7 @@ import pygame from src.settings import START_ECTS_VALUE, ECTS_UPDATE_INTERVAL + class ECTS: def __init__(self): # total amount of ECTS the player has at the beginning @@ -24,3 +25,9 @@ class ECTS: # beer increases amount of how much ECTS are earned per second def upgrade_rate(self, extra_ects): self.ects_per_second += extra_ects + + def is_over_balance(self, amount): + return self.ects_balance >= amount + + def decrease_balance(self, amount): + self.ects_balance -= amount From 10e094d9691a825ddc6627511ece180b0f94a31b Mon Sep 17 00:00:00 2001 From: Niklas Haiden Date: Fri, 8 May 2026 16:44:47 +0200 Subject: [PATCH 3/5] feat(shop): initial shop implementation with buy functionality and item loading --- src/shop.py | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 src/shop.py diff --git a/src/shop.py b/src/shop.py new file mode 100644 index 0000000..e20548c --- /dev/null +++ b/src/shop.py @@ -0,0 +1,29 @@ +from src.item import Item + + +class Shop: + def __init__(self, ects, buyable_items): + self.ects = ects # give the ects object ot the shop + self.buyable_items: list[Item] = buyable_items # give the buyable items to the shop + + def buy(self, item_name): + item_to_buy = self.get_item(item_name) + if item_to_buy is None: + return False + + cost = item_to_buy.get_cost() + if self.ects.is_over_balance(cost): + return False + + self.ects.decrease_balance(cost) + # self.buyable_items.remove(item_to_buy) + return True + + def get_item(self, item_name): + for item in self.buyable_items: + if item.item_type == item_name: + return item + return None + + def get_items(self): + return self.buyable_items From dd1773e142aca9bc1768eae5e0069006643dbfe9 Mon Sep 17 00:00:00 2001 From: Niklas Haiden Date: Fri, 8 May 2026 16:56:14 +0200 Subject: [PATCH 4/5] fix: fix buying logic for shop --- src/shop.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/shop.py b/src/shop.py index e20548c..f0a13eb 100644 --- a/src/shop.py +++ b/src/shop.py @@ -3,8 +3,8 @@ from src.item import Item class Shop: def __init__(self, ects, buyable_items): - self.ects = ects # give the ects object ot the shop - self.buyable_items: list[Item] = buyable_items # give the buyable items to the shop + self.ects = ects # give the ects object to the shop + self.buyable_items: list[Item] = buyable_items def buy(self, item_name): item_to_buy = self.get_item(item_name) @@ -12,11 +12,12 @@ class Shop: return False cost = item_to_buy.get_cost() - if self.ects.is_over_balance(cost): + + # is_over_balance() means "has enough balance" + if not self.ects.is_over_balance(cost): return False self.ects.decrease_balance(cost) - # self.buyable_items.remove(item_to_buy) return True def get_item(self, item_name): From 83398c6eec3d2c6c7c0678f9073fe26d3234fac5 Mon Sep 17 00:00:00 2001 From: Niklas Haiden Date: Fri, 8 May 2026 17:25:34 +0200 Subject: [PATCH 5/5] refactor: remove redundant tile_size import and cleanup formatting --- src/game.py | 3 --- src/map.py | 5 ++--- src/settings.py | 3 ++- 3 files changed, 4 insertions(+), 7 deletions(-) diff --git a/src/game.py b/src/game.py index 4425c6e..9821754 100644 --- a/src/game.py +++ b/src/game.py @@ -74,7 +74,6 @@ class Game: self.update(dt) self.draw() - pygame.display.flip() frame_count += 1 @@ -144,8 +143,6 @@ class Game: self.screen.fill(color_void) self.map.draw_map(self.screen, self.font) - # Draw by Y position so actors lower on the map appear in front. for actor in sorted([self.player], key=lambda item: item.position.y): actor.draw(self.screen) - diff --git a/src/map.py b/src/map.py index 20420ff..ac4ea39 100644 --- a/src/map.py +++ b/src/map.py @@ -1,9 +1,8 @@ import pygame from src.desk import Desk -from src.settings import DESK_WIDTH, DESK_HEIGHT +from src.settings import DESK_WIDTH, DESK_HEIGHT, tile_size -# Fenstergröße und Tile Größe (Felder) -tile_size = 30 +# Fenstergröße screen_w = 1900 screen_h = 900 diff --git a/src/settings.py b/src/settings.py index fb68e0a..cfb8c5d 100644 --- a/src/settings.py +++ b/src/settings.py @@ -1,6 +1,7 @@ from typing import Mapping, Literal, Tuple -from src.map import tile_size +# Fenstergröße und Tile Größe (Felder) +tile_size = 30 # --- DESK --- DESK_WIDTH = 70