Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed Gamepad N5110 mbed-rtos
Diff: GameEngine/GameEngine.cpp
- Revision:
- 0:99fa5a619081
- Child:
- 1:45493d1d0689
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/GameEngine/GameEngine.cpp Sat Apr 13 01:13:53 2019 +0000 @@ -0,0 +1,713 @@ +#include "GameEngine.h" + +GameEngine::GameEngine() +{ + +} + +GameEngine::~GameEngine() +{ + +} +int backgrounds [48][84] = { + +{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, +{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, +{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, +{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, +{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, +{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, +{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, +{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, +{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, +{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, +{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, +{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, +{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, +{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, +{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, +{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, +{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, +{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, +{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, +{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, +{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, +{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, +{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, +{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, +{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, +{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, +{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, +{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, +{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, +{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, +{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, +{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, +{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, +{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, +{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, +{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, +{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, +{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, +{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, +{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, +{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, +{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, +{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, +{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, +{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, +{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, +{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, +{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, + +}; +int r [3][13] = { + +{0,1,0,0,0,0,0,0,0,0,0,1,0}, +{1,1,1,0,0,0,0,0,0,0,1,1,1}, +{0,1,0,0,1,1,1,1,1,0,0,1,0}, + +}; + +int e [3][3] = { + +{0,1,0}, +{1,1,1}, +{0,1,0}, + +}; + +int x [3][19] = { + +{0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0}, +{0,0,0,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,0}, +{1,1,1,1,1,0,0,1,0,0,0,1,0,0,1,1,1,1,1}, + +}; + +int explosion [23] [23] = { + +{0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0}, +{0,0,0,0,0,0,1,1,1,1,0,0,1,1,1,1,1,0,0,0,0,0,0}, +{0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0}, +{0,0,0,0,1,1,1,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,0}, +{0,0,0,1,1,1,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0}, +{0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0}, +{0,1,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,1,1,1,0}, +{0,1,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,1,0}, +{0,1,1,0,0,0,0,1,1,1,0,0,0,0,1,0,0,0,0,0,1,0,0}, +{0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0}, +{0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1}, +{0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1}, +{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1}, +{0,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0}, +{0,1,1,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0}, +{0,0,1,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,1,0,0}, +{0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0}, +{0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0}, +{0,1,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,1,1,1,0,0}, +{0,0,1,1,1,1,0,0,0,1,1,1,0,0,0,0,1,1,1,1,0,0,0}, +{0,0,0,1,1,1,0,0,1,1,0,1,1,0,0,0,1,1,0,0,0,0,0}, +{0,0,0,0,0,0,1,1,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0}, +{0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0}, + +}; + +void GameEngine::init(int spacecraft_xpos,int spacecraft_ypos,int enemy_xpos, int enemy_ypos,int enemy2_xpos, int enemy2_ypos,int beam_size,int beam2_size, int speed) +{ + // initialise the game parameters + _spacecraft_xpos = spacecraft_xpos; + _spacecraft_ypos = spacecraft_ypos; + + _enemy_xpos = enemy_xpos; + _enemy_ypos = enemy_ypos; + + _enemy2_xpos = enemy2_xpos; + _enemy2_ypos = enemy2_ypos; + + + _beam_size = beam_size; + _beam2_size = beam2_size; + _speed = speed; + + + _p1x = GAP; + // x position on screen - WIDTH is defined in N5110.h + _e1a = WIDTH-_enemy_xpos; //12 + _e1b = HEIGHT/2-_enemy_ypos;//4 + + _e2a = WIDTH-_enemy2_xpos; //12 + _e21b = HEIGHT/2 +_enemy2_ypos; + _e22b = HEIGHT/2 -_enemy2_ypos;//4 + // puts spacecraft and enemy in middle + _p1.init(_spacecraft_xpos,_spacecraft_ypos); + _e1.init(_e1a,_e1b); + _e21.init(_e2a,_e21b,_speed); + _e22.init(_e2a,_e22b,_speed); + _stage = 0; + //_enemybeam.init(_beam_size,_e1a,_e1b); + +} + +void GameEngine::read_input(Gamepad &pad) +{ + _d = pad.get_direction(); + _mag = pad.get_mag(); + _R = pad.check_event(Gamepad::R_PRESSED); + +} + +void GameEngine::draw(Gamepad &pad,N5110 &lcd) +{ + // draw the background of the game + lcd.drawSprite(0,0,48,84,(int *)backgrounds); + lcd.drawSprite(6,4,3,13,(int *)r); + //health + draw_enemy_health(lcd); + draw_spacecraft_health(pad); + // spacecraft + _p1.character(lcd); + // enemy 1 + _e1.enemy(lcd); + // spacecraft beam + _beam.draw(lcd); + // enemy beam + _enemybeam.draw(lcd); + // level one completion + // mission_one_complete(lcd); + // level one fail + // mission_one_fail(lcd,pad); + + +} +void GameEngine::draw2(Gamepad &pad,N5110 &lcd) +{ + lcd.drawSprite(0,0,48,84,(int *)backgrounds); + lcd.drawSprite(6,4,3,3,(int *)e); + draw_spacecraft_health(pad); + draw_enemy21_health(lcd); + draw_enemy22_health(lcd); + // spacecraft + _p1.character(lcd); + _e21.enemy2(lcd); + _e22.enemy2(lcd); + _beam.draw(lcd); + _enemybeam2.draw(lcd); + +} + +void GameEngine::update(Gamepad &pad,N5110 &lcd) +{ + check_goal(pad); + check_enemybeam_collisions(pad); + // check_beam_pressed(pad,lcd); + // important to update paddles and ball before checking collisions so can + // correct for it before updating the display + _p1.update(_d,_mag); + _beam.update(); + _enemybeam.update(); + check_enemy_collisions(pad); + check_spacecraft_collisions(pad); + spacecraft_dead(lcd,pad); + enemy_dead(lcd,pad); + check_mission_one(pad); + // if (_second_mission == true){ + // _p1.update(_d,_mag); + // _e21.update(); + // _e22.update(); +} + +void GameEngine::update2(Gamepad &pad,N5110 &lcd) +{ + check_goal(pad); + check_enemybeam2_collisions(pad); + // check_beam_pressed(pad,lcd); + // important to update paddles and ball before checking collisions so can + // correct for it before updating the display + _p1.update(_d,_mag); + _beam.update(); + _enemybeam2.update(); + _e21.update(); + _e22.update(); + check_enemy2_collisions(pad); + check_spacecraft2_collisions(pad); + check_wall_collisions(pad); + spacecraft2_dead(lcd,pad); + enemy2_dead(lcd,pad); + check_mission_two(pad); + +} + +void GameEngine::check_enemy_collisions(Gamepad &pad) +{ + + Vector2D beam_pos = _beam.get_pos(); + // check e1 next + Vector2D e1_pos = _e1.get_enemy_pos(); + + // see if ball has hit the paddle by checking for overlaps + if ( + (beam_pos.y >= e1_pos.y) && //top + (beam_pos.y <= e1_pos.y + 7) && //bottom + (beam_pos.x + _beam_size >= _e1a) && //left + (beam_pos.x + _beam_size <= _e1a + 8) //right + ) { + // if it has, fix position and reflect x velocity + // beam_pos.x = _e1a - _beam_size; + // beam_velocity.x = -beam_velocity.x; + // audio feedback + _e1.add_health(); + //_beam.init(_beam_size,p1_pos.x,p1_pos.y); + pad.tone(1000.0,0.1); + } + + // write new attributes + _beam.set_pos(beam_pos); +} + +void GameEngine::check_enemy2_collisions(Gamepad &pad) +{ + + Vector2D beam_pos = _beam.get_pos(); + // check e1 next + Vector2D e21_pos = _e21.get_enemy21_pos(); + Vector2D e22_pos = _e22.get_enemy22_pos(); + + // see if ball has hit the paddle by checking for overlaps + if ( + (beam_pos.y >= e21_pos.y) && //top + (beam_pos.y <= e21_pos.y + 7) && //bottom + (beam_pos.x + _beam_size >= _e2a) && //left + (beam_pos.x + _beam_size <= _e2a + 7) //right + ) { + // if it has, fix position and reflect x velocity + // beam_pos.x = _e1a - _beam_size; + // beam_velocity.x = -beam_velocity.x; + // audio feedback + _e21.add_health(); + //_beam.init(_beam_size,p1_pos.x,p1_pos.y); + pad.tone(1000.0,0.1); + } + if ( + (beam_pos.y >= e22_pos.y) && //top + (beam_pos.y <= e22_pos.y + 7) && //bottom + (beam_pos.x + _beam_size >= _e2a) && //left + (beam_pos.x + _beam_size <= _e2a + 7) //right + ) { + // if it has, fix position and reflect x velocity + // beam_pos.x = _e1a - _beam_size; + // beam_velocity.x = -beam_velocity.x; + // audio feedback + _e22.add_health(); + //_beam.init(_beam_size,p1_pos.x,p1_pos.y); + pad.tone(1000.0,0.1); + } + // write new attributes + _beam.set_pos(beam_pos); +} + +void GameEngine::check_goal(Gamepad &pad) +{ + Vector2D p1_pos = _p1.get_pos(); + Vector2D beam_pos = _beam.get_pos(); + // P2 has scored + if (beam_pos.x + _beam_size > WIDTH) { + if(_R == true){ + _beam.init(_beam_size,p1_pos.x,p1_pos.y); + } +} +} + +void GameEngine::check_enemybeam_collisions(Gamepad &pad) +{ + Vector2D enemybeam_pos = _enemybeam.get_pos(); + // P2 has scored + if ((_ebeam == true)||(enemybeam_pos.x - _beam_size < 0)) { + _enemybeam.init(_beam_size,_e1a,_e1b); + _ebeam = false; + } +} + +void GameEngine::check_enemybeam2_collisions(Gamepad &pad) +{ + Vector2D enemy21_pos = _e21.get_enemy21_pos(); + Vector2D enemy22_pos = _e22.get_enemy22_pos(); + Vector2D enemybeam21_pos = _enemybeam2.get_pos_21(); + Vector2D enemybeam22_pos = _enemybeam2.get_pos_22(); + // P2 has scored + if ((_ebeam21 == true)||(_ebeam22 == true)||(enemybeam21_pos.x - _beam2_size < 0)||(enemybeam22_pos.x - _beam2_size < 0)) { + _enemybeam2.init(_beam2_size,enemy21_pos.x,enemy21_pos.y,enemy22_pos.x,enemy22_pos.y); + _ebeam21 = false; + _ebeam22 = false; + } +} + +void GameEngine::check_spacecraft_collisions(Gamepad &pad) +{ + Vector2D enemybeam_pos = _enemybeam.get_pos(); + Vector2D p1_pos = _p1.get_pos(); + + // see if beam has hit the enemy by checking for overlaps + if ( + (enemybeam_pos.y >= p1_pos.y) && //top + (enemybeam_pos.y <= p1_pos.y + 11) && //bottom + (enemybeam_pos.x >= _p1x) && //left + (enemybeam_pos.x <= _p1x + 11) //right + ) { + _p1.add_health(); + _ebeam = true; + pad.tone(1000.0,0.1); + } + + _enemybeam.set_pos(enemybeam_pos); + +} + +void GameEngine::check_spacecraft2_collisions(Gamepad &pad) +{ + Vector2D enemybeam21_pos = _enemybeam2.get_pos_21(); + Vector2D enemybeam22_pos = _enemybeam2.get_pos_22(); + Vector2D p1_pos = _p1.get_pos(); + + // see if beam has hit the enemy by checking for overlaps + if ( + (enemybeam21_pos.y >= p1_pos.y) && //top + (enemybeam21_pos.y <= p1_pos.y + 11) && //bottom + (enemybeam21_pos.x >= _p1x) && //left + (enemybeam21_pos.x <= _p1x + 11) //right + ) { + _p1.add_health(); + _ebeam21 = true; + pad.tone(1000.0,0.1); + } + if ( + (enemybeam22_pos.y >= p1_pos.y) && //top + (enemybeam22_pos.y <= p1_pos.y + 11) && //bottom + (enemybeam22_pos.x >= _p1x) && //left + (enemybeam22_pos.x <= _p1x + 11) //right + ) { + _p1.add_health(); + _ebeam22 = true; + pad.tone(1000.0,0.1); + } + _enemybeam2.set_pos_21(enemybeam21_pos); + _enemybeam2.set_pos_22(enemybeam22_pos); + +} +void GameEngine::check_wall_collisions(Gamepad &pad) +{ + // read current ball attributes + Vector2D enemy21_pos = _e21.get_enemy21_pos(); + Vector2D enemy22_pos = _e22.get_enemy22_pos(); + Vector2D enemy21_movement = _e21.get_movement(); + Vector2D enemy22_movement = _e22.get_movement(); + + // check if hit top wall + if (enemy21_pos.y <= 1) { // 1 due to 1 pixel boundary + enemy21_pos.y = 1; // bounce off ceiling without going off screen + enemy21_movement.y = -enemy21_movement.y; + } + // check if hit bottom wall + else if (enemy21_pos.y + 7 >= (HEIGHT-1) ) { // bottom pixel is 47 + // hit bottom + enemy21_pos.y = (HEIGHT-1) - 7; // stops ball going off screen + enemy21_movement.y = -enemy21_movement.y; + // audio feedback + } else if (enemy22_pos.y + 7 >= (HEIGHT-1) ) { // bottom pixel is 47 + // hit bottom + enemy22_pos.y = (HEIGHT-1) - 7; // stops ball going off screen + enemy22_movement.y = -enemy22_movement.y; + // audio feedback + } else if (enemy22_pos.y <= 1) { // 1 due to 1 pixel boundary + enemy22_pos.y = 1; // bounce off ceiling without going off screen + enemy22_movement.y = -enemy22_movement.y; + } + + // update ball parameters + _e21.set_movement(enemy21_movement); + _e22.set_movement(enemy22_movement); + _e21.set_enemy21_pos(enemy21_pos); + _e22.set_enemy22_pos(enemy22_pos); +} +void GameEngine::enemy_dead(N5110 &lcd, Gamepad &pad){ + int e1_health = _e1.get_health(); + Vector2D e1_pos = _e1.get_enemy_pos(); + if (e1_health == 10){ + lcd.drawSprite(e1_pos.x-10,e1_pos.y-10,23,23,(int *)explosion); + pad.tone(1000.0,0.5); + pad.tone(800.0,0.5); + pad.tone(600.0,0.5); + pad.tone(400.0,0.5); + // lcd.refresh(); + wait(0.5); + lcd.drawSprite(e1_pos.x-10,e1_pos.y-10,23,23,(int *)explosion); + _e1.update(); + // wait(2.0); + _stage = 2; + _e1.add_health(); + lcd.refresh(); + } + +} + +void GameEngine::enemy2_dead(N5110 &lcd, Gamepad &pad){ + + int e21_health = _e21.get_health(); + int e22_health = _e22.get_health(); + + Vector2D e21_pos = _e21.get_enemy21_pos(); + Vector2D e22_pos = _e22.get_enemy22_pos(); + + if ((e21_health >= 10) && (e22_health >= 10)){ + lcd.drawSprite(e21_pos.x-10,e21_pos.y-10,23,23,(int *)explosion); + lcd.drawSprite(e22_pos.x-10,e22_pos.y-10,23,23,(int *)explosion); + pad.tone(1000.0,0.5); + pad.tone(800.0,0.5); + pad.tone(600.0,0.5); + pad.tone(400.0,0.5); + // lcd.refresh(); + wait(0.2); + lcd.drawSprite(e21_pos.x-10,e21_pos.y-10,23,23,(int *)explosion); + lcd.drawSprite(e22_pos.x-10,e22_pos.y-10,23,23,(int *)explosion); + _stage = 4; + _e21.add_health(); + _e22.add_health(); + lcd.refresh(); + } + +} +void GameEngine::spacecraft_dead(N5110 &lcd, Gamepad &pad) +{ + + int p1_health = _p1.get_health(); + Vector2D p1_pos = _p1.get_pos(); + + if (p1_health == 6){ + + lcd.drawSprite(p1_pos.x-5,p1_pos.y-7,23,23,(int *)explosion); + pad.tone(1000.0,0.5); + pad.tone(800.0,0.5); + pad.tone(600.0,0.5); + pad.tone(400.0,0.5); + wait(0.5); + lcd.refresh(); + wait(0.1); + lcd.drawSprite(p1_pos.x-5,p1_pos.y-7,23,23,(int *)explosion); + _p1.update_move(); + // wait(2.0); + _stage = 1; + _p1.add_health(); + lcd.refresh(); + } + +} + +void GameEngine::spacecraft2_dead(N5110 &lcd, Gamepad &pad) +{ + + int p1_health = _p1.get_health(); + Vector2D p1_pos = _p1.get_pos(); + + if (p1_health == 6){ + + lcd.drawSprite(p1_pos.x-5,p1_pos.y-7,23,23,(int *)explosion); + pad.tone(1000.0,0.5); + pad.tone(800.0,0.5); + pad.tone(600.0,0.5); + pad.tone(400.0,0.5); + wait(0.5); + lcd.refresh(); + wait(0.1); + lcd.drawSprite(p1_pos.x-5,p1_pos.y-7,23,23,(int *)explosion); + _p1.update_move(); + // wait(2.0); + _stage = 3; + _p1.add_health(); + lcd.refresh(); + } + +} +void GameEngine::check_mission_one(Gamepad &pad){ + + if (_stage == 1){ + pad.tone(233.0,0.5); + wait(0.5); + pad.tone(184.0,0.5); + wait(0.5); + pad.tone(174.0,2.0); + wait(1.0); + } else if (_stage == 2){ + + pad.leds_off(); + pad.tone(184.0,0.2); + wait(0.5); + pad.tone(233.0,0.2); + wait(0.5); + pad.tone(184.0,0.2); + wait(0.5); + pad.tone(233.0,0.2); + wait(0.5); + pad.tone(184.0,0.2); + wait(0.5); + pad.tone(233.0,0.2); + wait(0.5); + pad.tone(184.0,2.0); + wait(0.5); + } +} + +void GameEngine::check_mission_two(Gamepad &pad){ + + if (_stage == 3){ + pad.tone(233.0,0.5); + wait(0.5); + pad.tone(184.0,0.5); + wait(0.5); + pad.tone(174.0,2.0); + wait(1.0); + } else if (_stage == 4){ + + pad.leds_off(); + pad.tone(184.0,0.2); + wait(0.5); + pad.tone(233.0,0.2); + wait(0.5); + pad.tone(184.0,0.2); + wait(0.5); + pad.tone(233.0,0.2); + wait(0.5); + pad.tone(184.0,0.2); + wait(0.5); + pad.tone(233.0,0.2); + wait(0.5); + pad.tone(184.0,2.0); + wait(0.5); + } +} +//void GameEngine::mission_one_complete(N5110 &lcd){ + + // if (_stage_two == true){ + // lcd.clear(); + // lcd.drawSprite(0,0,48,84,(int *)mission_one); + // lcd.refresh(); + // } + +//} + +//void GameEngine::mission_one_fail(N5110 &lcd,Gamepad &pad) +//{ + // if (_stage_one == true){ + // lcd.clear(); + // lcd.drawSprite(6,5,42,73,(int *)mission_one_failure); + // lcd.refresh(); + // if (pad.check_event(Gamepad::B_PRESSED)){ + // lcd.init(); + // pad.init(); + // } + // } +//} + +void GameEngine::draw_enemy_health(N5110 &lcd) +{ + // get health of the enemy + int e1_health = _e1.get_health(); + + lcd.drawRect(56,40,20,4,FILL_TRANSPARENT); + lcd.drawRect(56,40,20-2*e1_health,4,FILL_BLACK); + + + +} + +void GameEngine::draw_enemy21_health(N5110 &lcd) +{ + // get health of the enemy + int e21_health = _e21.get_health(); + + if (e21_health < 10){ + lcd.drawRect(60,22,20,4,FILL_TRANSPARENT); + lcd.drawRect(60,22,20-2*e21_health,4,FILL_BLACK); + } + else { + lcd.drawRect(60,22,20,4,FILL_TRANSPARENT); + } +} + +void GameEngine::draw_enemy22_health(N5110 &lcd) +{ + // get health of the enemy + int e22_health = _e22.get_health(); + + if (e22_health < 10){ + lcd.drawRect(60,28,20,4,FILL_TRANSPARENT); + lcd.drawRect(60,28,20-2*e22_health,4,FILL_BLACK); + } + else { + lcd.drawRect(60,28,20,4,FILL_TRANSPARENT); + } + +} + +void GameEngine::draw_spacecraft_health(Gamepad &pad) +{ + //get the health of the spacecraft + int p1_health = _p1.get_health(); + + if (p1_health == 0){ + pad.leds_on(); + }else if (p1_health == 1){ + pad.led(1,0); + pad.led(2,1); + pad.led(3,1); + pad.led(4,1); + pad.led(5,1); + pad.led(6,1); + + }else if (p1_health == 2){ + pad.led(1,0); + pad.led(2,0); + pad.led(3,1); + pad.led(4,1); + pad.led(5,1); + pad.led(6,1); + }else if (p1_health == 3){ + pad.led(1,0); + pad.led(2,0); + pad.led(3,0); + pad.led(4,1); + pad.led(5,1); + pad.led(6,1); + + }else if (p1_health == 4){ + pad.led(1,0); + pad.led(2,0); + pad.led(3,0); + pad.led(4,0); + pad.led(5,1); + pad.led(6,1); + + }else if (p1_health == 5){ + pad.led(1,0); + pad.led(2,0); + pad.led(3,0); + pad.led(4,0); + pad.led(5,0); + pad.led(6,1); + + } else { + pad.leds_off(); + } + +} + +int GameEngine::get_game_stage() { + int stage = _stage; + return stage; +} + +int GameEngine::restart_game_stage() { + int stage = _stage; + + stage = 0; + return stage; +} \ No newline at end of file