project_game/proposal.md

4.3 KiB

Game Proposal

Team

I will work alone on this project.

Game Overview

The goal of this game is to make a sprite that moves around the screen collecting "snacks." Each time the hungry man collects a snack, he will get bigger. There will also be penalty markers that if the hungry man runs into he gets smaller. The game will end (or possibly level up) when the hungry man gets to a certain size.

I was originally thinking of doing the snake game, until I saw in the video that it was one of the games provided. I then decided to try this idea because it is something similar, but will have some new twists and challenges.

The player will interact with the game using the arrow keys. After exploring the retro lab, I think I will have a better idea on how this mechanic works. I will also need a way for the snacks to move around the screen after one is picked up. I may also have the snacks move around randomly in set (or random) time intervals to add more challenge to the game. I think I will incorporate the same idea with the penalty markers.

The game will have a set frame with borders where the man can move in all directions around the screen. I expect the height of the game screen to be about twice the width of the game screen. I would also like to add some color to the snacks, man, and/or penalty markers.

I think the game will be compelling because it is similar to other sprite navigation games. I may need to incorporate additional levels or a high score option to make it even more fun.

Core Mechanics

One core mechanic of this game is the movement of the sprite. The arrow keys will be used to help the sprite navigate around the screen.

Another core mechanic is the position of the snacks (and penalty markers). I will start with the snacks. I intend to position them randomly and for a set amount of time. Later, I could further refine the position and then adjust the time as the game becomes more difficult.

Another core mechanic is that win the sprite picks up a snack, he will need to increase in size. I think this core mechanic can be broken down by first setting a score function (number of snacks) that increases by 1 every time a snack is picked up and then later create another function to have the size of the man increase based on the score. Penalty markers would negatively impact the score.

Milestone

I think a good milestone in this project would be to establish the sprite that can move around the screen and increase the score when he picks up a snack, and decrease the score when he picks up a penalty marker. I intend to get much further than this, but I think this is a good first step.

Challenges

I haven't had a chance to work through the retro lab yet (I did watch the video), but wanted to get this proposal in first. I think some of the easy movements will become more obvious to me after the retro lab. I think one challenge may be making the hungry man larger and the subsequent navigation around the screen. If this functionality does not become too challenging, I may try to add different types of snacks for the hungry man or different types of penalties.

Feedback from Chris Proctor

This sounds like a fun challenge--and I think it's a good conceptual distance from the snake game that you'll be able to study that game's code. One major challenge I anticipate is coordinating all the pixels of the man's body. The snake game has one approach--the head moves forward, and then each body segment moves into the position previously occupied by the segment (or head) in front of it. This involves propagating a message along a sequence of agents, similar to what I had to do with the blocks in my beast game (see week 13 video).

Another approach, which might work better for this game, would be to have a body manager agent, which has a position but isn't displayed directly (display = False). Then body part agents (each agent that actually shows up on the screen) each have a fixed (x, y) offset from the body manager's position, which acts as an origin point for a local reference frame. The body manager can keep all its body parts in a list, and an update_positions method which goes through each body part and sets its position to the manager's position plus the body part's offset. That way, you can move the whole body by moving the manager and then calling update_positions.

Good luck, and be in touch when you get stuck!