diff --git a/game-maguro/README.md b/game-maguro/README.md
new file mode 100644
index 0000000..61fd392
--- /dev/null
+++ b/game-maguro/README.md
@@ -0,0 +1,57 @@
+#
đŖđą MAGURO CAT GAME đąđŖ
+
+
+
+**Maguro Cat Game** is a whimsical arcade-style game where you play as a sushi-loving cat! Catch delicious sushi, avoid the dreaded wasabi, and grow bigger with every bite. A soothing soundtrack and drifting petals set the tone for this cute yet challenging experience.
+
+---
+
+## đŽ Gameplay Overview
+
+You control a growing cat standing at the bottom of the screen. Sushi, edamame, and wasabi rain from the sky. Your job is to:
+
+* đĨĸ Catch sushi to score points and grow!
+* đĢ Catch edamame for bonus points.
+* â Avoid wasabi or it's game over!
+
+As time progresses, objects fall faster, raising the stakes!
+
+---
+
+## đšī¸ Controls
+
+### Keyboard
+
+* **Move Left:** `A` or `â`
+* **Move Right:** `D` or `â`
+* **Pause / Unpause:** `Esc`
+* **Quit Game:** `Q`
+
+### Controller (Optional)
+
+* **Move Left / Right:** Left Stick, Right Stick
+* **Pause / Unpause:** `Start`
+* **Quit Game:** `Start` then `X`
+
+---
+
+## đ Features
+
+* Fullscreen immersive gameplay
+* Controller and keyboard support
+* Dynamic difficulty scaling over time
+* Satisfying chomp and meow sound effects
+* Growing cat mechanic
+* Randomized sushi visuals and falling edamame
+* Peaceful petals and drifting clouds
+
+---
+
+## đ Getting Started
+
+Run the game using Python (and Pygame):
+
+```bash
+python3 maguro-game.py
+```
+
diff --git a/game-maguro/audio_chomp.mp3 b/game-maguro/audio_chomp.mp3
new file mode 100644
index 0000000..d8fb9ed
Binary files /dev/null and b/game-maguro/audio_chomp.mp3 differ
diff --git a/game-maguro/audio_chomp_high.mp3 b/game-maguro/audio_chomp_high.mp3
new file mode 100644
index 0000000..1f1ce91
Binary files /dev/null and b/game-maguro/audio_chomp_high.mp3 differ
diff --git a/game-maguro/audio_chomp_low.mp3 b/game-maguro/audio_chomp_low.mp3
new file mode 100644
index 0000000..3b8778c
Binary files /dev/null and b/game-maguro/audio_chomp_low.mp3 differ
diff --git a/game-maguro/audio_gameover.mp3 b/game-maguro/audio_gameover.mp3
new file mode 100644
index 0000000..3222d6b
Binary files /dev/null and b/game-maguro/audio_gameover.mp3 differ
diff --git a/game-maguro/audio_gamestart.mp3 b/game-maguro/audio_gamestart.mp3
new file mode 100644
index 0000000..c74995f
Binary files /dev/null and b/game-maguro/audio_gamestart.mp3 differ
diff --git a/game-maguro/audio_meow.mp3 b/game-maguro/audio_meow.mp3
new file mode 100644
index 0000000..95e26f6
Binary files /dev/null and b/game-maguro/audio_meow.mp3 differ
diff --git a/game-maguro/audio_music.mp3 b/game-maguro/audio_music.mp3
new file mode 100644
index 0000000..841f23c
Binary files /dev/null and b/game-maguro/audio_music.mp3 differ
diff --git a/game-maguro/audio_oof.mp3 b/game-maguro/audio_oof.mp3
new file mode 100644
index 0000000..eb5ac80
Binary files /dev/null and b/game-maguro/audio_oof.mp3 differ
diff --git a/game-maguro/audio_paused.mp3 b/game-maguro/audio_paused.mp3
new file mode 100644
index 0000000..45137b0
Binary files /dev/null and b/game-maguro/audio_paused.mp3 differ
diff --git a/game-maguro/audio_unpaused.mp3 b/game-maguro/audio_unpaused.mp3
new file mode 100644
index 0000000..849b54b
Binary files /dev/null and b/game-maguro/audio_unpaused.mp3 differ
diff --git a/game-maguro/font_8bit.otf b/game-maguro/font_8bit.otf
new file mode 100644
index 0000000..381a44d
Binary files /dev/null and b/game-maguro/font_8bit.otf differ
diff --git a/game-maguro/font_notosansjp.ttf b/game-maguro/font_notosansjp.ttf
new file mode 100644
index 0000000..7c15c59
Binary files /dev/null and b/game-maguro/font_notosansjp.ttf differ
diff --git a/game-maguro/image_cat.png b/game-maguro/image_cat.png
new file mode 100644
index 0000000..2e63de0
Binary files /dev/null and b/game-maguro/image_cat.png differ
diff --git a/game-maguro/image_cloud.png b/game-maguro/image_cloud.png
new file mode 100644
index 0000000..6375de8
Binary files /dev/null and b/game-maguro/image_cloud.png differ
diff --git a/game-maguro/image_edamame.png b/game-maguro/image_edamame.png
new file mode 100644
index 0000000..7958c1c
Binary files /dev/null and b/game-maguro/image_edamame.png differ
diff --git a/game-maguro/image_grumpy.png b/game-maguro/image_grumpy.png
new file mode 100644
index 0000000..d203037
Binary files /dev/null and b/game-maguro/image_grumpy.png differ
diff --git a/game-maguro/image_petal.png b/game-maguro/image_petal.png
new file mode 100644
index 0000000..bf8dfcc
Binary files /dev/null and b/game-maguro/image_petal.png differ
diff --git a/game-maguro/image_sushi1.png b/game-maguro/image_sushi1.png
new file mode 100644
index 0000000..d048e0e
Binary files /dev/null and b/game-maguro/image_sushi1.png differ
diff --git a/game-maguro/image_sushi2.png b/game-maguro/image_sushi2.png
new file mode 100644
index 0000000..aae54b6
Binary files /dev/null and b/game-maguro/image_sushi2.png differ
diff --git a/game-maguro/image_sushi3.png b/game-maguro/image_sushi3.png
new file mode 100644
index 0000000..8285ae9
Binary files /dev/null and b/game-maguro/image_sushi3.png differ
diff --git a/game-maguro/image_sushi4.png b/game-maguro/image_sushi4.png
new file mode 100644
index 0000000..c1e7c66
Binary files /dev/null and b/game-maguro/image_sushi4.png differ
diff --git a/game-maguro/image_wallpaper.jpg b/game-maguro/image_wallpaper.jpg
new file mode 100644
index 0000000..59670eb
Binary files /dev/null and b/game-maguro/image_wallpaper.jpg differ
diff --git a/game-maguro/image_wallpaper.png b/game-maguro/image_wallpaper.png
new file mode 100644
index 0000000..b68cb07
Binary files /dev/null and b/game-maguro/image_wallpaper.png differ
diff --git a/game-maguro/image_wasabi.png b/game-maguro/image_wasabi.png
new file mode 100644
index 0000000..f002d1a
Binary files /dev/null and b/game-maguro/image_wasabi.png differ
diff --git a/game-maguro/maguro-game.py b/game-maguro/maguro-game.py
new file mode 100644
index 0000000..aa497ee
--- /dev/null
+++ b/game-maguro/maguro-game.py
@@ -0,0 +1,533 @@
+import pygame
+import random
+import sys
+import math
+
+pygame.init()
+pygame.mixer.init()
+pygame.joystick.init()
+
+WIDTH, HEIGHT = pygame.display.Info().current_w, pygame.display.Info().current_h
+SCREEN_SIZE = (WIDTH, HEIGHT)
+CAT_INITIAL_SIZE = [160, 160]
+CAT_MAX_SIZE = [320, 320]
+SUSHI_SIZE = (75, 75)
+WASABI_SIZE = (100,100)
+CLOUD_SIZE = (200, 120)
+PETAL_SIZE = (30, 30)
+GAME_OVER_DELAY = 3000
+WASABI_CHANCE = 0.1
+
+def quit_game():
+ pygame.quit()
+ sys.exit()
+
+class Cat:
+ def __init__(self, cat_right_img, pos, speed):
+ self.cat_right_base = cat_right_img
+ self.size = CAT_INITIAL_SIZE.copy()
+ self.speed = speed
+ self.facing = "right"
+ self.image_right = pygame.transform.smoothscale(self.cat_right_base, self.size)
+ self.image_left = pygame.transform.flip(self.image_right, True, False)
+ self.image = self.image_right
+ self.rect = self.image.get_rect()
+ self.rect.centerx, self.rect.bottom = pos
+ self.grow_step = 1
+
+ def update_image(self):
+ if self.facing == "left":
+ self.image = pygame.transform.flip(self.image_right, True, False)
+ else:
+ self.image = self.image_right
+
+ def move(self, dx):
+ self.rect.x += dx * self.speed
+ self.rect.x = max(0, min(WIDTH - self.rect.width, self.rect.x))
+ self.rect.bottom = HEIGHT
+
+ def grow(self):
+ self.size[0] = min(self.size[0] + self.grow_step, CAT_MAX_SIZE[0])
+ self.size[1] = min(self.size[1] + self.grow_step, CAT_MAX_SIZE[1])
+ self.image_right = pygame.transform.smoothscale(self.cat_right_base, self.size)
+ self.update_image()
+ mid_x = self.rect.centerx
+ self.rect = self.image.get_rect()
+ self.rect.centerx = mid_x
+ self.rect.bottom = HEIGHT
+
+ def draw(self, surface):
+ surface.blit(self.image, self.rect)
+
+class Sushi:
+ def __init__(self, image, pos, wasabi=False, speed=5):
+ self.image = image
+ self.rect = self.image.get_rect(midtop=pos)
+ self.wasabi = wasabi
+ self.speed = speed
+
+ def update(self, dt):
+ self.rect.y += self.speed * dt / 16.67
+
+ def draw(self, surface):
+ surface.blit(self.image, self.rect)
+
+ def off_screen(self):
+ return self.rect.top > HEIGHT
+
+class Cloud:
+ def __init__(self, image, speed_multiplier=1.0):
+ self.image = image
+ self.speed_multiplier = speed_multiplier
+ self.size = self.image.get_size()
+ self.y = 50
+ self.phase = random.uniform(0, 2 * math.pi)
+ self.speed = random.choice([-1.5, 1.5]) * speed_multiplier
+ if self.speed > 0:
+ self.rect = self.image.get_rect(topleft=(-self.size[0], self.y))
+ else:
+ self.rect = self.image.get_rect(topleft=(WIDTH + self.size[0], self.y))
+ self.base_y = self.y
+
+ def update(self, dt, now):
+ self.rect.x += self.speed * dt / 16.67
+ vertical_offset = 10 * math.sin(2 * math.pi * now / 1000 + self.phase)
+ self.rect.y = self.base_y + vertical_offset
+
+ def off_screen(self):
+ if self.speed > 0:
+ return self.rect.left > WIDTH
+ else:
+ return self.rect.right < 0
+
+ def draw(self, surface):
+ surface.blit(self.image, self.rect)
+
+class Petal:
+ def __init__(self, image, pos, petal_toggle, speed_multiplier=1.0):
+ self.image = image
+ self.rect = self.image.get_rect(topleft=pos)
+ self.speed_multiplier = speed_multiplier
+ self.drift = random.uniform(-0.0, 0.1)
+ self.phase = random.uniform(0, 2 * math.pi)
+ self.base_x = pos[0]
+ self.spawn_time = pygame.time.get_ticks()
+ self.petal_toggle = petal_toggle
+
+ def update(self, dt, now):
+ self.rect.y += 3 * self.speed_multiplier * dt / 16.67
+ sway = 15 * math.sin(0.5 * now / 1000 + self.phase)
+ time_since_spawn = (now - self.spawn_time) / 1000
+ drift_speed = 1.5 * self.speed_multiplier
+ self.rect.x = self.base_x + sway + self.drift * self.speed_multiplier + drift_speed * time_since_spawn * 60
+
+ def off_screen(self):
+ return self.rect.top > HEIGHT
+
+ def draw(self, surface):
+ surface.blit(self.image, self.rect)
+
+class Edamame:
+ def __init__(self, image, pos, speed=4):
+ self.image = image
+ self.rect = self.image.get_rect(midtop=pos)
+ self.speed = speed
+ self.phase = random.uniform(0, 2 * math.pi)
+ self.base_x = self.rect.x
+
+ def update(self, dt, now):
+ self.rect.y += self.speed * dt / 16.67
+ sway = 20 * math.sin(0.005 * now + self.phase)
+ self.rect.x = self.base_x + sway
+
+ def off_screen(self):
+ return self.rect.top > HEIGHT
+
+ def draw(self, surface):
+ surface.blit(self.image, self.rect)
+
+class Spawner:
+ def __init__(self, spawn_interval_ms):
+ self.spawn_interval = spawn_interval_ms
+ self.last_spawn = 0
+
+ def can_spawn(self, now):
+ return now - self.last_spawn > self.spawn_interval
+
+ def update_spawn_time(self, now):
+ self.last_spawn = now
+
+class Game:
+ def __init__(self):
+ self.screen = pygame.display.set_mode(SCREEN_SIZE, pygame.FULLSCREEN)
+ pygame.mouse.set_visible(False)
+ pygame.display.set_caption("Maguro Cat Game")
+
+ self.wallpaper = pygame.image.load("image_wallpaper.png").convert()
+ self.wallpaper = pygame.transform.scale(self.wallpaper, SCREEN_SIZE)
+
+ self.cat_right_base = pygame.image.load("image_cat.png").convert_alpha()
+
+ self.sushi_images = []
+ for i in [1, 2, 4, 3]:
+ img = pygame.image.load(f"image_sushi{i}.png").convert_alpha()
+ img = pygame.transform.smoothscale(img, SUSHI_SIZE)
+ self.sushi_images.append(img)
+
+ self.wasabi_img = pygame.image.load("image_wasabi.png").convert_alpha()
+ self.wasabi_img = pygame.transform.smoothscale(self.wasabi_img, WASABI_SIZE)
+
+ self.cloud_base = pygame.image.load("image_cloud.png").convert_alpha()
+ self.cloud_img = pygame.transform.smoothscale(self.cloud_base, CLOUD_SIZE)
+
+ self.petal_base = pygame.image.load("image_petal.png").convert_alpha()
+ self.petal_img = pygame.transform.smoothscale(self.petal_base, PETAL_SIZE)
+ self.petal_img_flipped = pygame.transform.flip(self.petal_img, True, False)
+
+ self.edamame_img = pygame.image.load("image_edamame.png").convert_alpha()
+ self.edamame_img = pygame.transform.smoothscale(self.edamame_img, SUSHI_SIZE)
+
+ self.grumpy_img = pygame.transform.smoothscale(
+ pygame.image.load("image_grumpy.png").convert_alpha(),
+ (200, 200)
+ )
+
+ self.music_file = "audio_music.mp3"
+ self.chomp_sounds = [
+ pygame.mixer.Sound("audio_chomp_low.mp3"),
+ pygame.mixer.Sound("audio_chomp.mp3"),
+ pygame.mixer.Sound("audio_chomp_high.mp3")
+ ]
+ self.meow_sound = pygame.mixer.Sound("audio_meow.mp3")
+ self.gamestart_sound = pygame.mixer.Sound("audio_gamestart.mp3")
+ self.gameover_sound = pygame.mixer.Sound("audio_gameover.mp3")
+ self.paused_sound = pygame.mixer.Sound("audio_paused.mp3")
+ self.unpaused_sound = pygame.mixer.Sound("audio_unpaused.mp3")
+ self.oof_sound = pygame.mixer.Sound("audio_oof.mp3")
+
+ self.joysticks = []
+ self.check_controllers()
+
+ self.font = pygame.font.Font("font_8bit.otf", 160)
+ self.jp_font = pygame.font.Font("font_notosansjp.ttf", 64)
+ self.small_font = pygame.font.SysFont(None, 32)
+ self.clock = pygame.time.Clock()
+
+ self.sushis = []
+ self.clouds = []
+ self.petals = []
+ self.edamames = []
+
+ self.reset_game()
+
+ def check_controllers(self):
+ self.joysticks.clear()
+ for i in range(pygame.joystick.get_count()):
+ joy = pygame.joystick.Joystick(i)
+ joy.init()
+ self.joysticks.append(joy)
+
+ def draw_intro(self):
+ now = pygame.time.get_ticks()
+ elapsed = now - self.intro_start_time
+ if elapsed >= 3000:
+ pygame.mixer.music.load(self.music_file)
+ pygame.mixer.music.set_volume(0.5)
+ pygame.mixer.music.play(-1)
+ return False
+ maguro_surf = self.font.render("MAGURO", True, (255, 255, 255))
+ jp_surf = self.jp_font.render("ãã°ã", True, (255, 255, 255))
+ self.screen.blit(maguro_surf, maguro_surf.get_rect(center=(WIDTH // 2, HEIGHT // 2 - 80)))
+ self.screen.blit(jp_surf, jp_surf.get_rect(center=(WIDTH // 2, HEIGHT // 2 + 40)))
+ return True
+
+ def spawn_sushi(self):
+ x = random.randint(50, WIDTH - 50)
+ is_wasabi = random.random() < WASABI_CHANCE
+ img = self.wasabi_img if is_wasabi else random.choice(self.sushi_images)
+ sushi = Sushi(img, (x, -40), wasabi=is_wasabi, speed=self.sushi_fall_speed)
+ self.sushis.append(sushi)
+
+ def spawn_cloud(self):
+ cloud = Cloud(self.cloud_img, self.cloud_speed_multiplier)
+ self.clouds.append(cloud)
+
+ def spawn_petal(self):
+ x = random.randint(0, WIDTH)
+ image = self.petal_img_flipped if self.petal_toggle else self.petal_img
+ self.petal_toggle = not self.petal_toggle
+ petal = Petal(image, (x, -PETAL_SIZE[1]), self.petal_toggle, self.petal_speed_multiplier)
+ self.petals.append(petal)
+
+ def spawn_edamame(self):
+ x = random.randint(50, WIDTH - 50)
+ flipped = random.choice([True, False])
+ image = pygame.transform.flip(self.edamame_img, True, False) if flipped else self.edamame_img
+ edamame = Edamame(image, (x, -40), speed=self.edamame_fall_speed)
+ self.edamames.append(edamame)
+
+ def reset_game(self):
+ self.score = 0
+ self.sushis.clear()
+ self.clouds.clear()
+ self.petals.clear()
+ self.edamames.clear()
+ self.petal_toggle = False
+ self.game_over = False
+ self.game_over_time = None
+ self.paused = False
+ self.pause_by_controller = False
+ self.sushi_fall_speed = 5
+ self.cloud_speed_multiplier = 1.0
+ self.petal_speed_multiplier = 1.0
+ self.edamame_fall_speed = 2
+ self.cat = Cat(self.cat_right_base, (WIDTH // 2, HEIGHT), 14)
+ self.sushi_spawner = Spawner(125)
+ self.cloud_spawner = Spawner(4000)
+ self.petal_spawner = Spawner(200)
+ self.edamame_spawner = Spawner(1500)
+ self.speed_increase_time = pygame.time.get_ticks()
+ self.intro_start_time = pygame.time.get_ticks()
+ self.gamestart_sound.play()
+
+ def pause(self, by_controller=False):
+ if not self.paused and not self.show_intro:
+ self.paused = True
+ self.pause_by_controller = by_controller
+ pygame.mixer.music.pause()
+ self.paused_sound.play()
+
+ def unpause(self):
+ if self.paused:
+ self.paused = False
+ pygame.mixer.music.unpause()
+ self.unpaused_sound.play()
+
+ def run(self):
+ deadzone = 0.2
+ self.show_intro = True
+
+ while True:
+ dt = self.clock.tick(60)
+ now = pygame.time.get_ticks()
+ self.screen.blit(self.wallpaper, (0, 0))
+ keys = pygame.key.get_pressed()
+ move = 0
+
+ self.check_controllers()
+
+ for event in pygame.event.get():
+ if event.type == pygame.QUIT:
+ quit_game()
+ if event.type == pygame.KEYDOWN:
+ if self.game_over:
+ self.reset_game()
+ elif event.key == pygame.K_ESCAPE:
+ if not self.game_over and not self.show_intro:
+ if self.paused:
+ self.unpause()
+ else:
+ self.pause(by_controller=False)
+ elif event.key == pygame.K_q:
+ quit_game()
+ if event.type == pygame.JOYBUTTONDOWN:
+ if self.game_over:
+ self.reset_game()
+ elif event.button in [7, 6]:
+ if not self.game_over and not self.show_intro:
+ if self.paused:
+ self.unpause()
+ else:
+ self.pause(by_controller=True)
+ elif self.paused and event.button == 2:
+ quit_game()
+
+ if self.show_intro:
+ if self.draw_intro():
+ pygame.display.flip()
+ continue
+ else:
+ self.show_intro = False
+
+ if self.paused:
+ self.draw_centered_text("PAUSED", (255, 255, 255))
+ if self.pause_by_controller:
+ instruction = self.small_font.render("Press START to resume or X to quit.", True, (255, 255, 255))
+ else:
+ instruction = self.small_font.render("Press ESC to resume or Q to quit.", True, (255, 255, 255))
+ instr_rect = instruction.get_rect(center=(WIDTH // 2, HEIGHT // 2 + 40))
+ self.screen.blit(instruction, instr_rect)
+ pygame.display.flip()
+ continue
+
+ if now - self.speed_increase_time > 30000:
+ self.sushi_fall_speed += 1
+ self.cloud_speed_multiplier += 0.1
+ self.petal_speed_multiplier += 0.1
+ self.edamame_fall_speed += 0.1
+ self.speed_increase_time = now
+
+ if self.cloud_spawner.can_spawn(now):
+ self.spawn_cloud()
+ self.cloud_spawner.update_spawn_time(now)
+ if self.petal_spawner.can_spawn(now):
+ self.spawn_petal()
+ self.petal_spawner.update_spawn_time(now)
+ if self.edamame_spawner.can_spawn(now):
+ self.spawn_edamame()
+ self.edamame_spawner.update_spawn_time(now)
+ if not self.game_over and self.sushi_spawner.can_spawn(now):
+ self.spawn_sushi()
+ self.sushi_spawner.update_spawn_time(now)
+
+ for cloud in self.clouds[:]:
+ cloud.update(dt, now)
+ if cloud.off_screen():
+ self.clouds.remove(cloud)
+
+ for petal in self.petals[:]:
+ petal.update(dt, now)
+ if petal.off_screen():
+ self.petals.remove(petal)
+
+ for edamame in self.edamames[:]:
+ edamame.update(dt, now)
+ if edamame.off_screen():
+ self.edamames.remove(edamame)
+
+ if not self.game_over:
+ if keys[pygame.K_a] or keys[pygame.K_LEFT]:
+ move = -1
+ self.cat.facing = "left"
+ elif keys[pygame.K_d] or keys[pygame.K_RIGHT]:
+ move = 1
+ self.cat.facing = "right"
+
+ for joy in self.joysticks:
+ axis0 = joy.get_axis(0)
+ axis2 = joy.get_axis(2)
+ if joy.get_numhats() > 0:
+ hat_x, _ = joy.get_hat(0)
+ else:
+ hat_x = 0
+
+ if move == 0:
+ if abs(axis0) > deadzone:
+ move = int(axis0 / abs(axis0))
+ self.cat.facing = "left" if axis0 < 0 else "right"
+ elif abs(axis2) > deadzone:
+ move = int(axis2 / abs(axis2))
+ self.cat.facing = "left" if axis2 < 0 else "right"
+ elif hat_x != 0:
+ move = hat_x
+ self.cat.facing = "left" if hat_x < 0 else "right"
+
+ self.cat.update_image()
+ self.cat.move(move)
+
+ cat_mid_y = self.cat.rect.top + self.cat.rect.height // 2
+
+ for sushi in self.sushis[:]:
+ sushi.speed = self.sushi_fall_speed
+ sushi.update(dt)
+
+ horizontal_overlap = sushi.rect.right > self.cat.rect.left and sushi.rect.left < self.cat.rect.right
+ if horizontal_overlap and sushi.rect.bottom >= cat_mid_y:
+ if sushi.wasabi:
+ self.meow_sound.play()
+ pygame.mixer.music.stop()
+ self.gameover_sound.play()
+ self.game_over = True
+ self.game_over_time = None
+ else:
+ self.score += 1
+ random.choice(self.chomp_sounds).play()
+ self.cat.grow()
+ self.sushis.remove(sushi)
+ elif sushi.off_screen():
+ self.sushis.remove(sushi)
+
+ for edamame in self.edamames[:]:
+ edamame.speed = self.edamame_fall_speed
+ edamame.update(dt, now)
+
+ horizontal_overlap = edamame.rect.right > self.cat.rect.left and edamame.rect.left < self.cat.rect.right
+ if horizontal_overlap and edamame.rect.bottom >= cat_mid_y:
+ self.oof_sound.play()
+ self.score += 1
+ self.edamames.remove(edamame)
+ elif edamame.off_screen():
+ self.edamames.remove(edamame)
+
+ else:
+ if self.game_over_time is None:
+ self.game_over_time = now
+ elif now - self.game_over_time >= GAME_OVER_DELAY:
+ quit_game()
+
+ for cloud in self.clouds:
+ cloud.draw(self.screen)
+ for petal in self.petals:
+ petal.draw(self.screen)
+ self.cat.draw(self.screen)
+ for sushi in self.sushis:
+ sushi.draw(self.screen)
+ for edamame in self.edamames:
+ edamame.draw(self.screen)
+
+ self.draw_text(f"Score: {self.score}", (10, 10))
+
+ if self.game_over:
+ big_font = pygame.font.Font(None, 96)
+ small_font = pygame.font.Font(None, 32)
+
+ grumpy_rect = self.grumpy_img.get_rect(center=(WIDTH // 2, HEIGHT // 2 - 160))
+ self.screen.blit(self.grumpy_img, grumpy_rect)
+
+ self.draw_centered_multiline_text(["GAME OVER"], color=(255, 0, 0), font=big_font, line_spacing=0)
+ game_over_surf = big_font.render("GAME OVER", True, (255, 0, 0))
+ x_center = WIDTH // 2
+ y_start = (HEIGHT // 2) + game_over_surf.get_height() // 2 + 20
+
+ if self.joysticks:
+ prompt_text = "Press any button to try again!"
+ else:
+ prompt_text = "Press any key to try again!"
+ prompt_surf = small_font.render(prompt_text, True, (255, 255, 255))
+
+
+ prompt_rect = prompt_surf.get_rect(center=(x_center, y_start + prompt_surf.get_height() // 2))
+ self.screen.blit(prompt_surf, prompt_rect)
+
+ pygame.display.flip()
+
+ def draw_text(self, text, pos, color=(255, 255, 255)):
+ surf = self.small_font.render(text, True, color)
+ self.screen.blit(surf, pos)
+
+ def draw_centered_text(self, text, color=(255, 255, 255)):
+ surf = self.small_font.render(text, True, color)
+ rect = surf.get_rect(center=(WIDTH // 2, HEIGHT // 2))
+ self.screen.blit(surf, rect)
+
+ def draw_centered_multiline_text(self, lines, color=(255, 255, 255), line_spacing=10, font=None):
+ if font is None:
+ font = self.small_font
+ total_height = 0
+ rendered_lines = []
+ for line in lines:
+ surf = font.render(line, True, color)
+ rendered_lines.append(surf)
+ total_height += surf.get_height() + line_spacing
+ total_height -= line_spacing
+ y = (HEIGHT - total_height) // 2
+ for surf in rendered_lines:
+ rect = surf.get_rect(center=(WIDTH // 2, y + surf.get_height() // 2))
+ self.screen.blit(surf, rect)
+ y += surf.get_height() + line_spacing
+
+if __name__ == "__main__":
+ game = Game()
+ game.reset_game()
+ game.run()
+
diff --git a/game-maguro/screenshot_maguro.png b/game-maguro/screenshot_maguro.png
new file mode 100644
index 0000000..831eecc
Binary files /dev/null and b/game-maguro/screenshot_maguro.png differ