DEV Community

Cover image for What If Exam Finals Were a Game? A Pinoy College-Themed Endless Arcade Made with Amazon Q and Pygame-CE
Justin Dominic S. Veloso
Justin Dominic S. Veloso

Posted on

What If Exam Finals Were a Game? A Pinoy College-Themed Endless Arcade Made with Amazon Q and Pygame-CE

As a student developer who is exploring AWS technologies, I recently came across Amazon Q and its current event. The event encouraged participants to build a game, and that instantly hit a nostalgic chord in me. A few years ago, I've created a simple game in Unity without knowing how to code. Now, equipped with two years of coding experience and the help of Amazon Q, I managed to recreate that idea as a full parody arcade game using pygame-ce in just one day!

Although AI tools are not new to me and to everybody, it still amazes me how much faster development becomes with the use of it. So in this short post, I’ll be sharing a quick look at how Amazon Q helped me bring this fun small project to life. The game is called the "The Last Bluebook".

Github Repository: https://github.com/ThatDott/The-Last-Bluebook

The Game Concept

The Last Bluebook is an arcade-style projectile-avoiding game where you play as the final bluebook (exam book) during the final exam of the last semester. Inspired by the real academic pressure in Philippine universities, the game pokes fun at our collective fear of the singko or 5.00 (failing grade). You collect checkmarks representing correct answers while dodging flying numeric grades, starting from 5.00 all the way to 1.00 (highest grade).

Honestly, this was just a fun random idea that I thought of. Nothing serious, just a cutesy parody of Filipino college experience during the finals. The mechanics of the game is similar to the game I made before, but with a better and a relatable concept, meme sound effects, and better gameplay.

Thanks to Amazon Q and pygame-ce, I was able to rebuild the game from scratch in just one day. The idea was goofy, but AI made it real—and fast, which shows how easy ideas become reality with these technology.


Effective Prompting Techniques I Discovered

Be Specific About Implementation Details

Prompt:

"I want the multiplier to change color per level. Purple for highest, white for lowest."

Result: Amazon Q generated a full system for visual feedback based on multiplier values.


Provide Clear Visual/Functional Requirements

Prompt:

"I want the projectiles to be numeric grades that evolve with difficulty (from 5.00 to 1.00)."

Result: Amazon Q handled sprite asset switching logic, making implementation smooth and bug-free; leaving me a template wherein I can easily just import my assets.


Request Incremental Changes

Prompt:

"Add background music and loop it."

"Now add two game over sound effects: one for passing, one for failing."

Benefit: Helped build features layer by layer. This retains code context, reducing more bugs and confusion.


Refine and Simplify When Needed

Prompt:

"Undo the multiple game over sounds; just have two types based on pass/fail."

Benefit: Fast iteration when something felt too bloated.


How AI Handled Classic Programming Challenges

Resource Management
Amazon Q helped build a reliable system for loading images and sounds with fallback behavior if assets were missing.

State Management
It organized game states like the start screen, gameplay, and game over screen using simple flags and clear conditions. This made transitions smooth and easy to control.

Collision Detection
It helped me implement sprite collision logic using bounding boxes, which made both the collectibles (checkmarks) and hazards (grades) work exactly as they should.

Difficulty Scaling
The game gets harder every 5 points scored, and Amazon Q helped create a dynamic system that reasonably increased projectile rate that keeps the game hard but still enjoyable.


Examples of Development Automation That Saved Me Time

Audio System Setup
I asked for background music with a mute toggle, and Amazon Q gave me the full implementation, including a looping playback using pygame-ce.

Sprite Variants & Grade System
I prompted that different projectile should have different sprites based on difficulty, and it automatically mapped each grade (5.00 to 1.00) to a respective sprite. All I had to do is match the asset names.

Multiplier System
I wanted a score multiplier that changed color based on level, and Q generated a complete UI system with color feedback, score tracking, and timer-based reset. I also followed up a prompt to add a pop-up effect for each collected score, and it implemented it the way I wanted it to be.

Game-Over Logic
I asked Q to revert my initial complex changes and just use two different sounds and messages based on whether the player passed or failed, and the AI handled the whole logic and conditionals perfectly.


Code Examples of Interesting AI-Generated Solutions

Dynamic Grade Sprite Selection

def get_projectile_image_for_level(level):
    grade = GRADE_SEQUENCE[min(level, len(GRADE_SEQUENCE) - 1)]
    return load_image(f"{grade}.png")
Enter fullscreen mode Exit fullscreen mode

This function matches the right sprite depending on the difficulty level (e.g. 5.00, 3.00, 1.00).

Randomized Projectile Angle

angle_deviation = math.radians(random.uniform(-max_angle_deviation, max_angle_deviation))
final_angle = base_angle + angle_deviation
self.dx = math.cos(final_angle) * projectile_speed
self.dy = math.sin(final_angle) * projectile_speed
Enter fullscreen mode Exit fullscreen mode

This gives projectiles a bit of unpredictability, so dodging them becomes more engaging over time.

Smart Point Placement to Avoid Spawning at Center

def generate_point_position():
    """Generate a random position for the point object away from the center"""
    while True:
        x = random.randint(point_size, SCREEN_WIDTH - point_size)
        y = random.randint(point_size + 30, SCREEN_HEIGHT - point_size)

        # Check distance from center
        dx = x - CENTER_X
        dy = y - CENTER_Y
        distance = math.sqrt(dx*dx + dy*dy)

        if distance >= min_distance_from_center:
            return [x, y]
Enter fullscreen mode Exit fullscreen mode

This function ensures that new collectible points spawn randomly, but not too close to the center, where projectiles often originate. This small detail keeps gameplay fair and engaging.


Screenshots of Gameplay

Starting Screen
Starting Screen

Gameplay at 3.00 Grade
Gameplay at 3.00 Grade

Gameplay at 1.50 Grade
Gameplay at 1.50 Grade

Gameover at 5.00 Grade
Gameover at 5.00 Grade


And that sums up my short journey! Honestly, I never thought I’d actually recreate this game. But with Amazon Q and a bit of free time, I pulled it off in a day. Super fun experience to explore game development with py-game too! Hope this game gets to Filipino College students. Unta relatable siya sainyo! HAHAHAHA


Download Link Here:
https://github.com/ThatDott/The-Last-Bluebook/releases/tag/v1.1

Top comments (0)