diff --git a/Assignment3Project/Assignment3Project/Assignment3Project.vcxproj b/Assignment3Project/Assignment3Project/Assignment3Project.vcxproj index eb85e82..433431e 100644 --- a/Assignment3Project/Assignment3Project/Assignment3Project.vcxproj +++ b/Assignment3Project/Assignment3Project/Assignment3Project.vcxproj @@ -1,155 +1,169 @@ - - - - - Debug - Win32 - - - Release - Win32 - - - Debug - x64 - - - Release - x64 - - - - 15.0 - {8A067FEB-7D3A-45FB-BED3-77A1965E41D8} - Assignment3Project - 10.0.17134.0 - - - - Application - true - v141 - MultiByte - - - Application - false - v141 - true - MultiByte - - - Application - true - v141 - MultiByte - - - Application - false - v141 - true - MultiByte - - - - - - - - - - - - - - - - - - - - - true - true - true - true - true - true - true - - - - Level3 - Disabled - true - true - - - - - Level3 - Disabled - true - true - - - - - Level3 - MaxSpeed - true - true - true - true - - - true - true - - - - - Level3 - MaxSpeed - true - true - true - true - - - true - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 15.0 + {8A067FEB-7D3A-45FB-BED3-77A1965E41D8} + Assignment3Project + 10.0.17134.0 + + + + Application + true + v141 + MultiByte + + + Application + false + v141 + true + MultiByte + + + Application + true + v141 + MultiByte + + + Application + false + v141 + true + MultiByte + + + + + + + + + + + + + + + + + + + + + true + true + true + true + true + true + true + + + true + true + true + true + true + true + true + + + + Level3 + Disabled + true + true + + + + + Level3 + Disabled + true + true + + + Windows + + + + + Level3 + MaxSpeed + true + true + true + true + + + true + true + + + + + Level3 + MaxSpeed + true + true + true + true + + + true + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + \ No newline at end of file diff --git a/Assignment3Project/Assignment3Project/Assignment3Project.vcxproj.filters b/Assignment3Project/Assignment3Project/Assignment3Project.vcxproj.filters index 5bbc6d0..96d7034 100644 --- a/Assignment3Project/Assignment3Project/Assignment3Project.vcxproj.filters +++ b/Assignment3Project/Assignment3Project/Assignment3Project.vcxproj.filters @@ -1,75 +1,81 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hh;hpp;hxx;hm;inl;inc;ipp;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms - - - {b3cfe90b-396f-4928-8b95-6b453c9cdee6} - - - {079f6f25-ed43-4671-bb66-1a1c580b5f6b} - - - {e9904f71-fa80-4ab4-a0ee-7fc1c8c3f92e} - - - {60b0cc02-34f3-4b2f-a55d-aae1f622f730} - - - {df34ca78-eaef-42da-84e1-e081ee065499} - - - {d177d104-1e60-4cd4-81d4-232c379ac302} - - - - - Header Files\Engine - - - Header Files\Engine - - - Header Files\Screens - - - Header Files\Engine - - - Header Files\Assignment3 - - - Header Files\Screens - - - - - Source Files - - - Source Files\ScreensImplement - - - Source Files\EngineImplement - - - Source Files\EngineImplement - - - Source Files\ScreensImplement - - - - - + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + {b3cfe90b-396f-4928-8b95-6b453c9cdee6} + + + {079f6f25-ed43-4671-bb66-1a1c580b5f6b} + + + {e9904f71-fa80-4ab4-a0ee-7fc1c8c3f92e} + + + {60b0cc02-34f3-4b2f-a55d-aae1f622f730} + + + {df34ca78-eaef-42da-84e1-e081ee065499} + + + {d177d104-1e60-4cd4-81d4-232c379ac302} + + + + + Header Files\Engine + + + Header Files\Engine + + + Header Files\Screens + + + Header Files\Engine + + + Header Files\Assignment3 + + + Header Files\Screens + + + Header Files\Assignment3 + + + + + Source Files + + + Source Files\ScreensImplement + + + Source Files\EngineImplement + + + Source Files\EngineImplement + + + Source Files\ScreensImplement + + + Source Files + + + + + \ No newline at end of file diff --git a/Assignment3Project/Assignment3Project/bullet.cpp b/Assignment3Project/Assignment3Project/bullet.cpp new file mode 100644 index 0000000..130f189 --- /dev/null +++ b/Assignment3Project/Assignment3Project/bullet.cpp @@ -0,0 +1,19 @@ +#include "bullet.h" + +Bullet::Bullet() { + speed = 1.0; + height = 20; + width = 5; +} + +void Bullet::reset_pos(float x, float y) { + x_pos = x; + y_pos = y; +} + +void Bullet::draw() { + al_draw_filled_rectangle(x_pos, y_pos, x_pos + width, y_pos + height, al_map_rgb(0,0,0)); +} + +void Bullet::move(Direction dir) { +} diff --git a/Assignment3Project/Assignment3Project/bullet.h b/Assignment3Project/Assignment3Project/bullet.h new file mode 100644 index 0000000..85a0544 --- /dev/null +++ b/Assignment3Project/Assignment3Project/bullet.h @@ -0,0 +1,14 @@ +#pragma once +#include +#include + +#include "game_element.h" + +class Bullet : public GameElement { +public: + Bullet(); + + void reset_pos(float x, float y); + void draw(); + void move(Direction dir); +}; \ No newline at end of file diff --git a/Assignment3Project/Assignment3Project/enums.h b/Assignment3Project/Assignment3Project/enums.h index 9ec40eb..62ce4b6 100644 --- a/Assignment3Project/Assignment3Project/enums.h +++ b/Assignment3Project/Assignment3Project/enums.h @@ -5,4 +5,15 @@ enum State { Gameplay, End, Exit +}; + +enum Direction { + U, + D, + L, + R, + UR, + UL, + DR, + DL }; \ No newline at end of file diff --git a/Assignment3Project/Assignment3Project/game.cpp b/Assignment3Project/Assignment3Project/game.cpp index 30b7390..7cefbca 100644 --- a/Assignment3Project/Assignment3Project/game.cpp +++ b/Assignment3Project/Assignment3Project/game.cpp @@ -1,6 +1,4 @@ #include "game.h" -#include "start_screen.h" -#include "game_screen.h" using std::string; using std::map; @@ -13,12 +11,13 @@ Game::Game() { void Game::init() { score = 0; state = Start; - //sprites.insert(pair("Title", al_load_bitmap("logo.bmp"))); + sprites.insert(pair("Ship", al_load_bitmap("placeholder.bmp"))); //al_reserve_samples(4); //samples.insert(pair("Theme", al_load_sample("rasputin.wav"))); + font = al_create_builtin_font(); } @@ -30,7 +29,22 @@ void Game::reset() { //Run the game state machine void Game::run() { //Load screens - + StartScreen start_screen(sprites); + GameScreen game_screen(sprites, samples); + + while (state != Exit) { + switch (state) { + case Start: + start_screen.run(font); + state = start_screen.next_state; + break; + case Gameplay: + game_screen.reset(); + game_screen.run(font); + state = start_screen.next_state; + break; + } + } //Garbage collection map::iterator it; diff --git a/Assignment3Project/Assignment3Project/game.h b/Assignment3Project/Assignment3Project/game.h index da5eda2..9d91c12 100644 --- a/Assignment3Project/Assignment3Project/game.h +++ b/Assignment3Project/Assignment3Project/game.h @@ -11,7 +11,8 @@ #include #include "enums.h" -#include "screen.h" +#include "start_screen.h" +#include "game_screen.h" //Game state machine, contains data global to game class Game { diff --git a/Assignment3Project/Assignment3Project/game_element.h b/Assignment3Project/Assignment3Project/game_element.h new file mode 100644 index 0000000..beaa938 --- /dev/null +++ b/Assignment3Project/Assignment3Project/game_element.h @@ -0,0 +1,16 @@ +#pragma once + +#include "enums.h" + +class GameElement { +public: + float x_pos; + float y_pos; + float speed; + int height; + int width; + + virtual void reset_pos(float x, float y) = 0; + virtual void move() = 0; + virtual void draw(Direction dir) = 0; +}; \ No newline at end of file diff --git a/Assignment3Project/Assignment3Project/game_screen.cpp b/Assignment3Project/Assignment3Project/game_screen.cpp index 6554a5d..a147057 100644 --- a/Assignment3Project/Assignment3Project/game_screen.cpp +++ b/Assignment3Project/Assignment3Project/game_screen.cpp @@ -20,7 +20,7 @@ using std::map; using std::pair; enum KEYS { - KEYUP, KEYDOWN, KEYSPACE, KEYCTRL, KEYH, KEYM, KEYESC + KEYUP, KEYDOWN, KEYLEFT, KEYRIGHT, KEYSPACE, KEYCTRL, KEYH, KEYM, KEYESC }; GameScreen::GameScreen(std::map _sprites, std::map _samples) { @@ -30,8 +30,9 @@ GameScreen::GameScreen(std::map _sprites, std::map } //Resets game to default values, and uses new given values -void GameScreen::reset(int _lines, int _max_catchers, int _difficulty) { - +void GameScreen::reset() { + ship.set_sprite(sprites["Ship"]); + ship.reset_pos(SCREEN_W / 2, SCREEN_H / 8); } //If a sample needs to be played while it is still being played, it will be stopped first. @@ -50,7 +51,7 @@ void GameScreen::run(ALLEGRO_FONT* font) { al_register_event_source(event_queue, al_get_keyboard_event_source()); ALLEGRO_TIMER* timer = NULL; - timer = al_create_timer(1.0 / FPS); //Universally a "tick" in the context of the game is 1/10 of a second. + timer = al_create_timer(1.0 / FPS); al_register_event_source(event_queue, al_get_timer_event_source(timer)); redraw(font); @@ -64,10 +65,40 @@ void GameScreen::run(ALLEGRO_FONT* font) { while (!exit_screen) { ALLEGRO_EVENT ev; al_wait_for_event(event_queue, &ev); - if (ev.type == ALLEGRO_EVENT_TIMER) { + if (ev.type == ALLEGRO_EVENT_TIMER) { //Check per frame if (keys[KEYUP]) { - //Up is pressed! + if (keys[KEYRIGHT]) { + ship.move(UR); + } + else if (keys[KEYLEFT]) { + ship.move(UL); + } + else { + ship.move(U); + } } + else if (keys[KEYDOWN]) { + if (keys[KEYRIGHT]) { + ship.move(DR); + } + else if (keys[KEYLEFT]) { + ship.move(DL); + } + else { + ship.move(D); + } + } + else if (keys[KEYLEFT]) { + ship.move(L); + } + else if (keys[KEYRIGHT]) { + ship.move(R); + } + + //Global refresh + al_clear_to_color(al_map_rgb(0, 0, 0)); + redraw(font); + al_flip_display(); } if (ev.type == ALLEGRO_EVENT_KEY_DOWN) { switch (ev.keyboard.keycode) { @@ -77,6 +108,12 @@ void GameScreen::run(ALLEGRO_FONT* font) { case ALLEGRO_KEY_UP: keys[KEYUP] = true; break; + case ALLEGRO_KEY_RIGHT: + keys[KEYRIGHT] = true; + break; + case ALLEGRO_KEY_LEFT: + keys[KEYLEFT] = true; + break; case ALLEGRO_KEY_SPACE: keys[KEYSPACE] = true; break; @@ -94,36 +131,38 @@ void GameScreen::run(ALLEGRO_FONT* font) { keys[KEYCTRL] = true; break; } - if (ev.type == ALLEGRO_EVENT_KEY_UP) { - switch (ev.keyboard.keycode) { - case ALLEGRO_KEY_DOWN: - keys[KEYDOWN] = false; - break; - case ALLEGRO_KEY_UP: - keys[KEYUP] = false; - break; - case ALLEGRO_KEY_SPACE: - keys[KEYSPACE] = false; - break; - case ALLEGRO_KEY_M: - keys[KEYM] = false; - break; - case ALLEGRO_KEY_H: - keys[KEYH] = false; - break; - case ALLEGRO_KEY_ESCAPE: - keys[KEYESC] = false; - break; - case ALLEGRO_KEY_LCTRL: - case ALLEGRO_KEY_RCTRL: - keys[KEYCTRL] = false; - break; - } + } + else if (ev.type == ALLEGRO_EVENT_KEY_UP) { + switch (ev.keyboard.keycode) { + case ALLEGRO_KEY_DOWN: + keys[KEYDOWN] = false; + break; + case ALLEGRO_KEY_UP: + keys[KEYUP] = false; + break; + case ALLEGRO_KEY_RIGHT: + keys[KEYRIGHT] = false; + break; + case ALLEGRO_KEY_LEFT: + keys[KEYLEFT] = false; + break; + case ALLEGRO_KEY_SPACE: + keys[KEYSPACE] = false; + break; + case ALLEGRO_KEY_M: + keys[KEYM] = false; + break; + case ALLEGRO_KEY_H: + keys[KEYH] = false; + break; + case ALLEGRO_KEY_ESCAPE: + keys[KEYESC] = false; + break; + case ALLEGRO_KEY_LCTRL: + case ALLEGRO_KEY_RCTRL: + keys[KEYCTRL] = false; + break; } - //Global refresh - al_clear_to_color(al_map_rgb(0, 0, 0)); - redraw(font); - al_flip_display(); } } if (next_state != Exit) { //If the game loop was exited naturally rather than forced by Esc @@ -137,7 +176,7 @@ void GameScreen::run(ALLEGRO_FONT* font) { //Redraw all elements of the screen void GameScreen::redraw(ALLEGRO_FONT* font) { - + ship.draw(); } void GameScreen::back() { diff --git a/Assignment3Project/Assignment3Project/game_screen.h b/Assignment3Project/Assignment3Project/game_screen.h index 777f34f..484fcd5 100644 --- a/Assignment3Project/Assignment3Project/game_screen.h +++ b/Assignment3Project/Assignment3Project/game_screen.h @@ -1,23 +1,24 @@ #pragma once #include #include + #include "screen.h" +#include "ship.h" //Main screen for gameplay class GameScreen : public Screen { public: std::map sprites; std::map samples; - unsigned int selected; - int max_catchers; - int catchers; + int score; - int difficulty; + int level; bool music; + Ship ship; GameScreen(std::map _sprites, std::map _samples); - void reset(int _lines, int _max_catchers, int _difficulty); + void reset(); void run(ALLEGRO_FONT* font); void redraw(ALLEGRO_FONT* font); void back(); diff --git a/Assignment3Project/Assignment3Project/main.cpp b/Assignment3Project/Assignment3Project/main.cpp index 36bd308..ec31aa5 100644 --- a/Assignment3Project/Assignment3Project/main.cpp +++ b/Assignment3Project/Assignment3Project/main.cpp @@ -27,6 +27,9 @@ int main() { if (!al_install_keyboard()) { fprintf(stderr, "Could not install keyboard!"); } + if (!al_init_primitives_addon()) { + fprintf(stderr, "Could not initialize primitives addon!"); + } ALLEGRO_DISPLAY* display = NULL; display = al_create_display(SCREEN_W, SCREEN_H); diff --git a/Assignment3Project/Assignment3Project/placeholder.bmp b/Assignment3Project/Assignment3Project/placeholder.bmp index a8e1408..79954e8 100644 Binary files a/Assignment3Project/Assignment3Project/placeholder.bmp and b/Assignment3Project/Assignment3Project/placeholder.bmp differ diff --git a/Assignment3Project/Assignment3Project/ship.cpp b/Assignment3Project/Assignment3Project/ship.cpp new file mode 100644 index 0000000..319cf03 --- /dev/null +++ b/Assignment3Project/Assignment3Project/ship.cpp @@ -0,0 +1,58 @@ +#include "ship.h" + +Ship::Ship() { + speed = 1.0; + height = 40; + width = 40; +} + +void Ship::reset_pos(float x, float y) { + x_pos = x; + y_pos = y; +} + +void Ship::set_sprite(ALLEGRO_BITMAP* _sprite) { + sprite = _sprite; +} + +void Ship::draw() { + al_draw_bitmap(sprite, x_pos, y_pos, NULL); +} + +void Ship::move(Direction dir) { + float factor = 4 * speed; + switch (dir) { + case U: + y_pos -= factor; + break; + case D: + y_pos += factor; + break; + case R: + x_pos += factor; + break; + case L: + x_pos -= factor; + break; + case UR: + x_pos += factor; + y_pos -= factor; + break; + case UL: + x_pos -= factor; + y_pos -= factor; + break; + case DR: + x_pos += factor; + y_pos += factor; + break; + case DL: + x_pos -= factor; + y_pos += factor; + break; + } +} + +void Ship::fire() { + +} \ No newline at end of file diff --git a/Assignment3Project/Assignment3Project/ship.h b/Assignment3Project/Assignment3Project/ship.h new file mode 100644 index 0000000..0a818b6 --- /dev/null +++ b/Assignment3Project/Assignment3Project/ship.h @@ -0,0 +1,18 @@ +#pragma once +#include + +#include "enums.h" +#include "game_element.h" + +class Ship : public GameElement { +public: + ALLEGRO_BITMAP* sprite; + + Ship(); + + void reset_pos(float x, float y); + void set_sprite(ALLEGRO_BITMAP* _sprite); + void draw(); + void move(Direction dir); + void fire(); +}; \ No newline at end of file diff --git a/Assignment3Project/Assignment3Project/start_screen.cpp b/Assignment3Project/Assignment3Project/start_screen.cpp index c018add..a2e66af 100644 --- a/Assignment3Project/Assignment3Project/start_screen.cpp +++ b/Assignment3Project/Assignment3Project/start_screen.cpp @@ -64,12 +64,14 @@ void StartScreen::run(ALLEGRO_FONT * font) { void StartScreen::redraw(ALLEGRO_FONT* font) { //al_draw_bitmap(sprites["Title"], SCREEN_W / 2 - 240, 20, NULL); //logo - //Instructions - al_draw_text(font, al_map_rgb(255, 255, 255), SCREEN_W / 2, SCREEN_H / 2 + 10, ALLEGRO_ALIGN_CENTER, "Mr. Manager wants to run a teambuilding exercise for his employees."); - al_draw_text(font, al_map_rgb(255, 255, 255), SCREEN_W / 2, SCREEN_H / 2 + 20, ALLEGRO_ALIGN_CENTER, "Help Mr.Manager place his 5 catchers at the end of his"); - al_draw_text(font, al_map_rgb(255, 255, 255), SCREEN_W / 2, SCREEN_H / 2 + 30, ALLEGRO_ALIGN_CENTER, "conveyor belts to make sure no other employees fall off."); - al_draw_text(font, al_map_rgb(255, 255, 255), SCREEN_W / 2, SCREEN_H / 2 + 40, ALLEGRO_ALIGN_CENTER, "Try to catch enough to help the team bond!"); + //Instructions + al_draw_text(font, al_map_rgb(255, 255, 255), SCREEN_W / 2, SCREEN_H / 2 + 10, ALLEGRO_ALIGN_CENTER, "This is going to be a shootemup."); + al_draw_text(font, al_map_rgb(255, 255, 255), SCREEN_W / 2, SCREEN_H / 2 + 20, ALLEGRO_ALIGN_CENTER, "Eventually."); + al_draw_text(font, al_map_rgb(255, 255, 255), SCREEN_W / 2, SCREEN_H / 2 + 30, ALLEGRO_ALIGN_CENTER, "We'll see."); + al_draw_text(font, al_map_rgb(255, 255, 255), SCREEN_W / 2, SCREEN_H / 2 + 40, ALLEGRO_ALIGN_CENTER, "idek."); + + /* //Keys and their associated functions al_draw_bitmap(sprites["KeyUp"], SCREEN_W / 8, SCREEN_H / 2 + 60, NULL); al_draw_bitmap(sprites["KeyUp"], SCREEN_W / 8 + 34, SCREEN_H / 2 + 60, ALLEGRO_FLIP_VERTICAL); @@ -92,6 +94,7 @@ void StartScreen::redraw(ALLEGRO_FONT* font) { al_draw_text(font, al_map_rgb(255, 255, 255), SCREEN_W / 2 + 70, SCREEN_H / 2 + 110, ALLEGRO_ALIGN_LEFT, "+"); al_draw_bitmap(sprites["KeyM"], SCREEN_W / 2 + 78, SCREEN_H / 2 + 100, NULL); al_draw_text(font, al_map_rgb(255, 255, 255), SCREEN_W / 2 + 113, SCREEN_H / 1.3 - 20, ALLEGRO_ALIGN_LEFT, "Toggle Music"); + */ al_draw_text(font, al_map_rgb(255, 255, 255), 0, SCREEN_H - 10, ALLEGRO_ALIGN_LEFT, "Copyright 2019 Braydon Kains"); } diff --git a/Try2.xcf b/Try2.xcf new file mode 100644 index 0000000..e5da701 Binary files /dev/null and b/Try2.xcf differ