Challenge:
Make a arkanoid or krakout game with all core features from the original game from ~80,
including a similar art-style and game mechanics,
but playable on any PC in a modern environment (720p/1080p with 32 bit colors).
Tasks:
1.) Window and game loop
Create a window and render it black colored for every 1/60 of a second in fixed size of 1280x720.
Ensure that it updates at max 60 times per second. Prepare for detecting keyboard and gamepad input.
* Tip: Render random pixels for every frame, so you can test it properly.
* Tip: Printing out the actual frame time helps as well
2.) Paddle
Render a paddle rectangle with one color on the bottom of the screen.
Detect horizontal input and move the player around with Left/Right keyboard or gamepad digital pad in the x-direction only - with no drag or friction.
Speed should be similar to the original. The movement should be frame rate independent.
Limit the player x-movement to never leave the left or right side of the screen.
3.) Ball
Render a quad with one color in the middle of the screen and move it at start direction of 45 degrees on every frame.
Detect collisions for all 4 sides of the screen and reflect the movement when it collides and let it bounce off in a correct physical way.
Pause the movement of the ball and lock the position above the paddle but ensures that it moves in x-direction when the paddle moves like glueing the ball on the paddle.
Unglue the ball when hitting the space key and shot it in either 45 or 125 degrees.
Detect collision when ball hits the bottom of the screen and pause/glue it back to the paddle - without bouncing it back.
4.) Paddle vs Ball
Detect collisions for ball and paddle and reflect the ball when it collides without the ball getting stuck.
Add spin to make y-collisions on the paddle more fun by including the x-speed of the paddle in the new reflecting ball direction/speed.
* Tip: Use a sliding scale to modify the X speed depending on the location on the paddle.
5.) Bricks
Render 13x6 bricks in a table style on the top of the screen, each row with a different color.
Detect collisions for each brick and the ball and reflect the ball movement when it hits a brick.
Destroy bricks when it gets hit and count it.
6.) Lifes and Score
Setup a some lifes starting with 3 and a score starting at zero and render both as text in the top left and top right corners.
When a brick gets destroyed increase the score by 1.
When the ball collides with the bottom screen decrease one life and reset the entire game when this reaches zero.
Keep a time when the last brick was hit, so you can increase the score when it hits another brick in less than some millisecond amount (250 ms).
7.) Sprites and animation
Instead of simple colors, make and draw sprites for the paddle, the ball and the bricks as well.
Render the side and top bars and draw a background behind the entire screen.
Setup a way to optionally animate sprites.
Make it as close as possible to the original art.
8.) Different brick types
Watch the original game and implement all brick types (i am too lazy to look them up right now).
Some may require different sprites, like the harder ones change appeareance.
Setup your initial level to contain all the brick types, so you can test it properly.
9.) Power ups
Watch the original game and implement some power ups: Up/Downgrade of speed/size + Multiball + Autoglue etc..
Setup your initial level to contain all the power ups behind certain bricks, so you can test it properly.
Keep in mind that the speed of the ball/paddle must be clamped to a max/min range!
10.) Enemies
Watch the original game and implement some enemies spawned randomly.
Limit the enemies to at max 5. Dont spawn enemies too often.
* Tip: Use time and total number of destroyed bricks to decide when new enemies gets spawned.
11.) Make 5 levels and add level transition
Create at least 5 different levels with increasing difficulty.
When a level has been completed (All bricks gots destroyed and player is still alive) then start the next level immediatly.
* Tip: You can store the levels in a textfile so that you can make one easiely - without need to modify the actual code.
12.) Finalize the game
Polish the game so that everything works as expected, dont crashes and can be played/compiled by everyone.
If needed provide a make documentation when the dependencies/libraries are not included.
Rules:
- Write in C++
- Use any libraries but no engines
- Include the full source
Time frame:
The challenge starts at 2017-11-01 and ends at end 2017-11-30.
All submissions in this time frame are being reviewed and get achievements.
Additional achievements (Not sure about this...):
- Add sound and music to the game
- Add a title/menu screen so that you can start/exit the game and load levels
- Write an integrated level editor and store each level into a textfile in the users home game directory
- Add the ability to toggle window and fullscreen mode
- Make the input system rock solid, so that you can plug/unplug controllers and the game still works.
- Add a quake like console to load a level, setup certain properties like ball/paddle speed/size, push a powerup to the player, etc.