Inspiration
The inspiration for "Fish Eating Fish" comes from the classic and wildly popular arcade game, Feeding Frenzy, and the simple yet addictive mechanics of games like Agar.io. I've always been fascinated by ecosystem simulation games where you start small and work your way up the food chain. The core concept of a growth-based progression is universally satisfying, and I wanted to create my own take on it with a focus on smooth, aquatic movement and vibrant visuals.
What it does
"Fish Eating Fish" is a casual arcade game where the player controls a fish in a vast ocean. The core gameplay loop is simple:
- Eat to Grow: You must seek out and eat fish that are smaller than you. Each successful meal increases your size and score.
- Avoid Predators: You must constantly avoid larger fish, as they will eat you on contact, ending your game.
- Survive and Dominate: The goal is to survive as long as possible, climb the food chain, and achieve the highest score by becoming the largest creature in the sea. The game features progressively larger and more dangerous fish as your score increases.
How I built it
I built "Fish Eating Fish" using Python and the Pygame library, structuring the game with object-oriented programming by creating dedicated classes for enemies and bubble effects. The core game loop manages player input, sprite animation, and collision detection, with the player controlled by keyboard arrows and enemy AI fish spawning from off-screen with randomized sizes and speeds. I implemented a frame-based animation system for the swimming motions and background, used Pygame's collision detection for the "eat or be eaten" mechanic, and developed a state management system to handle the menu, gameplay, and game over screens, all while ensuring visual feedback through score display, heart-based lives, and dynamic particle effects.
Challenges I ran into
- Collision and "Eating" Logic: Implementing the collision detection so that a fish is only eaten if the predator is larger was tricky. I had to ensure the logic was checked at the right moment and that the smaller fish was cleanly destroyed and its "mass" value transferred to the player.
- Keeping track of all sprites: As more fish appeared on the screen, it became more difficult to keep track of all sprite collisions and make sure that the player's lives are being lost correctly.
Accomplishments that I'm proud of
- Creating a Polished Core Loop: I'm most proud of how satisfying the core "eat-to-grow" mechanic feels. The instant visual and numeric feedback you get from eating a smaller fish is incredibly rewarding and keeps you engaged.
- Smooth Player Controls: After much iteration, I achieved very responsive and smooth controls for the player's fish, making it feel natural to navigate the underwater environment.
- Completing a Functional Game: Taking the project from a simple concept to a fully playable, self-contained game with a start menu, gameplay, and a game over state is an accomplishment I'm very happy with.
What I learned
- The Importance of Game Feel: Small details like screen shake on eating, sound effects, and particle effects contribute massively to how good a game feels to play, often more than complex mechanics.
- Project Scope Management: This project reinforced the importance of starting with a Minimal Viable Product (MVP) and then adding features, rather than trying to implement every idea at once.
What's next for Fish Eating
- More Content: Adding different levels (e.g., Coral Reef, Open Ocean, Abyssal Zone) with unique visuals and enemy types for each.
- Power-ups: Introducing temporary power-ups like speed boosts, invincibility, or a magnet to attract smaller fish.
- Boss Battles: Introducing giant "boss" fish at certain score thresholds that require a strategy to defeat beyond simply eating them.
- Multiplayer Mode: The most requested feature! Implementing local or online multiplayer where players can compete against each other to be the biggest fish, either by eating AI fish or even each other.

Log in or sign up for Devpost to join the conversation.