diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a5fe594 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +build/ +deps/ +mingw32/ +.lock-waf_win32_build +waf-1.7.15-9c6c439a6416a92b3e844736c4ef3c7b/ \ No newline at end of file diff --git a/src/DejaVuSans.ttf b/src/DejaVuSans.ttf new file mode 100644 index 0000000..2f1d69e Binary files /dev/null and b/src/DejaVuSans.ttf differ diff --git a/src/bullet.cpp b/src/bullet.cpp new file mode 100644 index 0000000..ea6acaa --- /dev/null +++ b/src/bullet.cpp @@ -0,0 +1,67 @@ +#include "bullet.h" + +Bullet::Bullet(){ + _x = 0; + _y = 0; + _delta_x = 0; + _delta_y = 0; + player = false; + _radius = 3; +} + +Bullet::~Bullet(){ + +} + +Bullet::Bullet(float x, float y){ + _x = x; + _y = y; + _delta_x = 0; + _delta_y = 0; + player = false; + _radius = 3; +} + +void Bullet::move_bullet(){ + _x += _delta_x; + _y += _delta_y; +} + +void Bullet::change_delta(float new_delta_x, float new_delta_y){ + _delta_x = new_delta_x; + _delta_y = new_delta_y; +} + +void Bullet::change_position(float new_x, float new_y){ + _x = new_x; + _y = new_y; +} + +bool Bullet::hit(){ + //modifiy me later! + return false; +} + +bool Bullet::hit_enemy(){ + return false; +} + +void Bullet::add_bullet(){ + +} + +void Bullet::clear_bullet(){ + +} + +float Bullet::get_x(){ + return _x; +} + +float Bullet::get_y(){ + return _y; +} + +float Bullet::get_radius(){ + return _radius; +} diff --git a/src/bullet.h b/src/bullet.h new file mode 100644 index 0000000..dd1502c --- /dev/null +++ b/src/bullet.h @@ -0,0 +1,63 @@ +#ifndef BULLET_H +#define BULLET_H + +// c-style includes +#include +#include + +// c++ style includes +#include +#include + +#include +// local includes + +/*Two knids of bullets, one shot from player, other one from enemies +*/ +class Bullet +{ + public: + //basic functions + Bullet(); + + Bullet(float x, float y); + + ~Bullet(); + + //moving functions + void move_bullet(); + + void change_delta(float new_delta_x, float new_delta_y); + + void change_position(float new_x, float new_y); + + //damage functions + bool hit();//check if main character hit by enemy bullet + + bool hit_enemy(); + + //add/delete functions + void add_bullet(); + + void clear_bullet();//not implemented + + //position function + float get_x(); + + float get_y(); + + float get_radius(); + + bool player; + private: + float _x; //x pos of the bullet + float _y; //y pos of the bullet + float _radius; //size of the bullet + float _delta_x; //speed in x direction + float _delta_y; //speed in y direction + //sf::Texture texture;//appearance of bullet + + +}; + +#endif // EPNG_H diff --git a/src/level.cpp b/src/level.cpp new file mode 100644 index 0000000..7fc02be --- /dev/null +++ b/src/level.cpp @@ -0,0 +1,175 @@ +#include "level.h" + +const int max_width = 800; + +float player_b_radius = 3; +float enemy_b_radius = 5; +float player_damage = 2.5; +sf::Time player_attack_interval = sf::seconds(0.15f); + +sf::Clock player_clock; + +Level::Level(){ + max_enemy_size = 0; + max_bullet_size = 0; + + enemy.resize(0); + bullet.resize(0); + player_bullet.resize(0); + + player.change_position(400, 500); + game_over = false; + super_gm = false; +} + +Level::~Level(){ + +} + +//String Type(enemy type): +// "n" +// "Boss" + +//ONLY add enemies one by one! +void Level::add_enemy(string type, sf::Time entry_time, + float en_x, float en_y, float del_x, float del_y, int bullet_num, string B_type, int hp){ + + int orig_size = max_enemy_size; + max_enemy_size += 1; + enemy.resize(max_enemy_size); + + for (int i = orig_size; i < max_enemy_size; i++){ + enemy[i].change_position(en_x,en_y); + enemy[i].change_delta(del_x, del_y); + enemy[i].obj_timer = entry_time; + enemy[i].bullet_num = bullet_num; + enemy[i].B_type = B_type; + enemy[i].en_x = en_x; + enemy[i].en_y = en_y; + enemy[i].hp = hp; + } + + //add new bullets when enemy enters the field +} + +//String B_Type(bullet_type): +// "cir" +// "eli" +// "burst" +// "bomb" +// "dir_bomb" +// "search" + +void Level::add_bullets(int bullet_num, string B_type, float x, float y, int index){ + srand (time(NULL)); + + int orig_size = max_bullet_size; + max_bullet_size += bullet_num; + bullet.resize(max_bullet_size); + + for (int i = orig_size; i < max_bullet_size; i++){ + bullet[i].change_position(enemy[index].get_x()+20*sin(i),enemy[index].get_y()+20*cos(i)); + + //decide the pattern according to type + if (B_type == "cir") + bullet[i].change_delta((float)((sin(i)+0.1)/10), (float)((cos(i)+0.1)/10)); //circle + if (B_type == "burst") + bullet[i].change_delta(static_cast ((rand()) / static_cast (RAND_MAX))/5, static_cast ((rand()) / static_cast (RAND_MAX))/5);//random from 0 to 0.1 + if (B_type == "bomb") + bullet[i].change_delta(0, (float)((cos(i)+0.1)/10));// directly down + if (B_type == "dir_bomb") + bullet[i].change_delta(0, (float)((cos(i)+1.1)/10));// directly down + //bullet_v[i].change_delta((float)(rand()%200)/400, (float)(rand()%200)/400); //complete random + //bullet_v[i].change_delta((float)(sin(rand()%10+1)/50), (float)(cos(rand()%10+1)/50)); //4-block random + } +} +void Level::add_bullet_player(){ //add bullet to player + if ( (player_clock.getElapsedTime() >= player_attack_interval)&&(player.fire == true) ){ + //player.fire = false; + player_clock.restart(); + + player_bullet.resize(player_bullet.size() + 1); + + player_bullet.back().change_position(player.get_x()+37/4,player.get_y()+0.005); + + player_bullet.back().change_delta(0, -0.5); // directly up + } +} + +void Level::move_stuff(sf::Time cur_time){ + //first, move bullets + for (int i = 0; i < max_bullet_size; i++){ + if (bullet[i].get_x() < -30 || bullet[i].get_x() > max_width+10 || std::abs(bullet[i].get_y() - player.get_y()) > 600) { + std::swap(bullet[i], bullet.back()); + bullet.pop_back(); + max_bullet_size = bullet.size(); + } + else + bullet[i].move_bullet(); + } + max_bullet_size = bullet.size(); + + //Second, move player bullets + for (unsigned int j = 0; j < player_bullet.size(); j++){ + if (player_bullet[j].get_x() < -30 || player_bullet[j].get_x() > max_width+10 || std::abs(player_bullet[j].get_y() - player.get_y()) > 600) { + std::swap(player_bullet[j], player_bullet.back()); + player_bullet.pop_back(); + } + else + player_bullet[j].move_bullet(); + } + + //Third, enemies + for (int k = 0; k < max_enemy_size; k++){ + if (enemy[k].get_x() < -30 || enemy[k].get_x() > max_width+10 || enemy[k].get_y() - player.get_y() > 1800) { + enemy[k].entry_flag = 0; + std::swap(enemy[k], enemy.back()); + enemy.pop_back(); + max_enemy_size = enemy.size(); + } + else { //still in screen range + if (cur_time >= enemy[k].obj_timer){ + enemy[k].entry_flag = 1; + enemy[k].move_object(); + if (enemy[k].bullet_flag == true){ + add_bullets(enemy[k].bullet_num, enemy[k].B_type, enemy[k].en_x, enemy[k].en_y, k); + enemy[k].bullet_flag = false; + } + } + } + } + max_enemy_size = enemy.size(); +} + +void Level::damage_judging(){ + //first, player to enemy + for (unsigned int i = 0; i < player_bullet.size(); i++){ + for (unsigned int k = 0; k < enemy.size(); k++){ + float e_x = enemy[k].get_x(); + float e_y = enemy[k].get_y(); + float p_x = player_bullet[i].get_x(); + float p_y = player_bullet[i].get_y(); + float r = player_b_radius; + if ( (e_x < p_x + r) && (e_x > p_x - r) && (e_y < p_y + r) && (e_y > p_y - r) ){ + enemy[k].hp = enemy[k].hp - player_damage; + if (enemy[k].hit_enemy() == true){ + std::swap(enemy[k], enemy.back()); + enemy.pop_back(); + max_enemy_size--; + } + } + } + } + + //Second, enemy to player + for (unsigned int l = 0; l < bullet.size(); l++){ + float pl_x = player.get_x(); + float pl_y = player.get_y(); + float eb_x = bullet[l].get_x(); + float eb_y = bullet[l].get_y(); + float rb = enemy_b_radius; + if ( (pl_x < eb_x + rb) && (pl_x > eb_x - rb) && (pl_y < eb_y + rb) && (pl_y > eb_y - rb) ){ + game_over = true; + } + } +} diff --git a/src/level.cpp.txt b/src/level.cpp.txt new file mode 100644 index 0000000..cb38a2c --- /dev/null +++ b/src/level.cpp.txt @@ -0,0 +1,154 @@ +#include "level.h" + +const int max_width = 800; + +float player_b_radius = 10; +sf::Clock player_clock; + +Level::Level(){ + max_enemy_size = 0; + max_bullet_size = 0; + + enemy.resize(0); + bullet.resize(0); + player_bullet.resize(0); + + player.change_position(400, 500); +} + +Level::~Level(){ + +} + +//String Type(enemy type): +// "n" +// "Boss" + +//ONLY add enemy one by one! +void Level::add_enemy(string type, sf::Time entry_time, + float en_x, float en_y, float del_x, float del_y, int bullet_num, string B_type, int hp){ + + int orig_size = max_enemy_size; + max_enemy_size += 1; + enemy.resize(max_enemy_size); + + for (int i = orig_size; i < max_enemy_size; i++){ + enemy[i].change_position(en_x,en_y); + enemy[i].change_delta(del_x, del_y); + enemy[i].obj_timer = entry_time; + enemy[i].bullet_num = bullet_num; + enemy[i].B_type = B_type; + enemy[i].en_x = en_x; + enemy[i].en_y = en_y; + enemy[i].hp = hp; + } + + //add new bullets when enemy enters the field +} + +//String B_Type(bullet_type): +// "cir" +// "eli" +// "burst" +// "bomb" +// "dir_bomb" +// "search" + +void Level::add_bullets(int bullet_num, string B_type, float x, float y, int index){ + srand (time(NULL)); + + int orig_size = max_bullet_size; + max_bullet_size += bullet_num; + bullet.resize(max_bullet_size); + + for (int i = orig_size; i < max_bullet_size; i++){ + bullet[i].change_position(enemy[index].get_x()+20*sin(i),enemy[index].get_y()+20*cos(i)); + + //decide the pattern according to type + if (B_type == "cir") + bullet[i].change_delta((float)((sin(i)+0.1)/10), (float)((cos(i)+0.1)/10)); //circle + if (B_type == "burst") + bullet[i].change_delta(static_cast ((rand()) / static_cast (RAND_MAX))/5, static_cast ((rand()) / static_cast (RAND_MAX))/5);//random from 0 to 0.1 + if (B_type == "bomb") + bullet[i].change_delta(0, (float)((cos(i)+0.1)/10));// directly down + if (B_type == "dir_bomb") + bullet[i].change_delta(0, (float)((cos(i)+1.1)/10));// directly down + //bullet_v[i].change_delta((float)(rand()%200)/400, (float)(rand()%200)/400); //complete random + //bullet_v[i].change_delta((float)(sin(rand()%10+1)/50), (float)(cos(rand()%10+1)/50)); //4-block random + } +} +void Level::add_bullet_player(){ //add bullet to player + if ( (player_clock.getElapsedTime() >= sf::seconds(0.1f))&&(player.fire == true) ){ + //player.fire = false; + player_clock.restart(); + + player_bullet.resize(player_bullet.size() + 1); + + player_bullet.back().change_position(player.get_x()+37/4,player.get_y()+0.005); + + player_bullet.back().change_delta(0, -0.5); // directly up + } +} + +void Level::move_stuff(sf::Time cur_time){ + //first, move bullets + for (int i = 0; i < max_bullet_size; i++){ + if (bullet[i].get_x() < -30 || bullet[i].get_x() > max_width+10 || std::abs(bullet[i].get_y() - player.get_y()) > 600) { + std::swap(bullet[i], bullet.back()); + bullet.pop_back(); + max_bullet_size = bullet.size(); + } + else + bullet[i].move_bullet(); + } + max_bullet_size = bullet.size(); + + //Second, move player bullets + for (unsigned int j = 0; j < player_bullet.size(); j++){ + if (player_bullet[j].get_x() < -30 || player_bullet[j].get_x() > max_width+10 || std::abs(player_bullet[j].get_y() - player.get_y()) > 600) { + std::swap(player_bullet[j], player_bullet.back()); + player_bullet.pop_back(); + } + else + player_bullet[j].move_bullet(); + } + + //Third, enemies + for (int k = 0; k < max_enemy_size; k++){ + if (enemy[k].get_x() < -30 || enemy[k].get_x() > max_width+10 || std::abs(enemy[k].get_y() - player.get_y()) > 600) { + enemy[k].entry_flag = 0; + std::swap(enemy[k], enemy.back()); + enemy.pop_back(); + max_enemy_size = enemy.size(); + } + else { //still in screen range + if (cur_time >= enemy[k].obj_timer){ + enemy[k].entry_flag = 1; + enemy[k].move_object(); + if (enemy[k].bullet_flag == true){ + add_bullets(enemy[k].bullet_num, enemy[k].B_type, enemy[k].en_x, enemy[k].en_y, k); + enemy[k].bullet_flag = false; + } + } + } + } + max_enemy_size = enemy.size(); +} + +void Level::damage_judging(){ + //first, player to enemy + for (unsigned int i = 0; i < player_bullet.size(); i++){ + for (unsigned int k = 0; k < enemy.size(); k++){ + float e_x = enemy[k].get_x(); + float e_y = enemy[k].get_y(); + float p_x = player_bullet[i].get_x(); + float p_y = player_bullet[i].get_y(); + float r = player_b_radius; + if ( (e_x < p_x + r) && (e_x > p_x - r) && (e_y < p_y + r) && (e_x > p_x - r) ){ + std::swap(enemy[k], enemy.back()); + enemy.pop_back(); + max_enemy_size = enemy.size(); + } + } + } +} diff --git a/src/level.h b/src/level.h new file mode 100644 index 0000000..9a6bc24 --- /dev/null +++ b/src/level.h @@ -0,0 +1,44 @@ +#ifndef LEVEL_H +#define LEVEL_H + +// local includes +#include "objects.h" +#include +#include + +using namespace std; + +class Level +{ + public: + //basic functions + Level(); + + ~Level(); + + void add_enemy(string type, sf::Time entry_time, + float en_x, float en_y, float del_x, float del_y, int bullet_num, string B_type, int hp); + + void add_bullets(int bullet_num, string B_type, float x, float y, int index); + + void add_bullet_player(); + + void move_stuff(sf::Time cur_time); + + //damage judging + void damage_judging(); + + std::vector enemy; + int max_enemy_size; + + std::vector bullet; + int max_bullet_size; + + std::vector player_bullet; + + bool game_over; + bool super_gm; + + Object player; +}; +#endif // EPNG_H diff --git a/src/level.h.txt b/src/level.h.txt new file mode 100644 index 0000000..fb58061 --- /dev/null +++ b/src/level.h.txt @@ -0,0 +1,41 @@ +#ifndef LEVEL_H +#define LEVEL_H + +// local includes +#include "objects.h" +#include +#include + +using namespace std; + +class Level +{ + public: + //basic functions + Level(); + + ~Level(); + + void add_enemy(string type, sf::Time entry_time, + float en_x, float en_y, float del_x, float del_y, int bullet_num, string B_type, int hp); + + void add_bullets(int bullet_num, string B_type, float x, float y, int index); + + void add_bullet_player(); + + void move_stuff(sf::Time cur_time); + + //damage judging + void damage_judging(); + + std::vector enemy; + int max_enemy_size; + + std::vector bullet; + int max_bullet_size; + + std::vector player_bullet; + + Object player; +}; +#endif // EPNG_H diff --git a/src/main.cpp b/src/main.cpp index cd7d0fb..9f03659 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,11 +1,357 @@ #include +//local includes +#include "bullet.h" +#include "objects.h" +#include "level.h" + +//stores all the acutal game data +Level game; + +sf::Texture bgTexture; +sf::Texture playerTexture; +sf::Texture bulletTexture; +sf::Texture enemyTexture; + +float y_delta = 0.5; + +void render(sf::RenderWindow& window){ + int max_e = game.enemy.size(); + int max_b = game.bullet.size(); + int max_bp = game.player_bullet.size(); + + for (int i = 0; i < max_b; i++){ + sf::Sprite _bullet; + _bullet.setTexture(bulletTexture); + game.bullet[i].change_position(game.bullet[i].get_x(), game.bullet[i].get_y() - y_delta); + _bullet.setPosition(game.bullet[i].get_x(), game.bullet[i].get_y()); + window.draw(_bullet); + } + + //render player bullets + sf::Texture player_bullet; + player_bullet.loadFromFile("../src/sprites/bullet_player.png"); + + for (int j = 0; j < max_bp; j++){ + sf::Sprite _bullet_p; + _bullet_p.setTexture(player_bullet); + game.player_bullet[j].change_position(game.player_bullet[j].get_x(), game.player_bullet[j].get_y() - y_delta); + _bullet_p.setPosition(game.player_bullet[j].get_x(), game.player_bullet[j].get_y()); + window.draw(_bullet_p); + } + + for (int k = 0; k < max_e; k++){ + if (game.enemy[k].entry_flag == 1){ + sf::Sprite _enemy; + _enemy.setTexture(enemyTexture); + game.enemy[k].change_position(game.enemy[k].get_x(), game.enemy[k].get_y() - y_delta); + _enemy.setPosition(game.enemy[k].get_x(), game.enemy[k].get_y()); + window.draw(_enemy); + } + } + + //render the player last + sf::Sprite _player; + _player.setTexture(playerTexture); + _player.setPosition(game.player.get_x(), game.player.get_y()); + window.draw(_player); +} + +void render_game_over(sf::RenderWindow& window, float y){ + sf::Font font; + font.loadFromFile("../src/DejaVuSans.ttf"); + // Create a text + sf::Text text("Game Over", font); + text.setCharacterSize(100); + text.setPosition(100,y); + text.setStyle(sf::Text::Bold); + text.setColor(sf::Color::Red); + // Draw it + window.draw(text); +} + +void makeLevel(float offset) { + // The entire level is here: + game.add_enemy("n", sf::seconds(0.5f), + 0, offset-1000, 0.1, 0, 20, "cir", 10); + game.add_enemy("n", sf::seconds(1.0f), + 0, offset-2000, 0.1, 0, 20, "cir", 10); + game.add_enemy("n", sf::seconds(1.5f), + 0, offset-3000, 0.1, 0, 20, "cir", 10); + game.add_enemy("n", sf::seconds(2.0f), + 0, offset-4000, 0.1, 0, 20, "cir", 10); + + game.add_enemy("n", sf::seconds(3.0f), + 800, offset-500, -0.1, 0, 20, "cir", 10); + game.add_enemy("n", sf::seconds(3.5f), + 800, offset-1500, -0.1, 0, 20, "cir", 10); + game.add_enemy("n", sf::seconds(4.0f), + 800, offset-2500, -0.1, 0, 20, "cir", 10); + game.add_enemy("n", sf::seconds(4.5f), + 800, offset-3500, -0.1, 0, 20, "cir", 10); + + game.add_enemy("n", sf::seconds(6.5f), + 100, offset-5500, 0.05, 0.3, 20, "cir", 10); + game.add_enemy("n", sf::seconds(7.0f), + 100, offset-5500, 0.05, 0.3, 20, "cir", 10); + game.add_enemy("n", sf::seconds(7.5f), + 100, offset-5500, 0.05, 0.3, 20, "cir", 10); + game.add_enemy("n", sf::seconds(8.0f), + 100, offset-5500, 0.05, 0.3, 20, "cir", 10); + game.add_enemy("n", sf::seconds(8.5f), + 100, offset-5500, 0.05, 0.3, 20, "cir", 10); + + game.add_enemy("n", sf::seconds(9.0f), + 700, offset-5500, -0.05, 0.3, 20, "cir", 10); + game.add_enemy("n", sf::seconds(9.5f), + 700, offset-5500, -0.05, 0.3, 20, "cir", 10); + game.add_enemy("n", sf::seconds(10.0f), + 700, offset-5500, -0.05, 0.3, 20, "cir", 10); + game.add_enemy("n", sf::seconds(10.5f), + 700, offset-5500, -0.05, 0.3, 20, "cir", 10); + game.add_enemy("n", sf::seconds(11.0f), + 700, offset-5500, -0.05, 0.3, 20, "cir", 10); + + + game.add_enemy("n", sf::seconds(12.0f), + 0, offset-4000, 0.05, 0.3, 20, "burst", 10); + game.add_enemy("n", sf::seconds(12.5f), + 0, offset-4000, 0.05, 0.3, 20, "burst", 10); + game.add_enemy("n", sf::seconds(13.0f), + 0, offset-4000, 0.05, 0.3, 20, "burst", 10); + game.add_enemy("n", sf::seconds(13.5f), + 0, offset-4000, 0.05, 0.3, 20, "burst", 10); + game.add_enemy("n", sf::seconds(14.0f), + 0, offset-4000, 0.05, 0.3, 20, "burst", 10); + game.add_enemy("n", sf::seconds(15.5f), + 0, offset-4000, 0.05, 0.3, 20, "burst", 10); + game.add_enemy("n", sf::seconds(16.0f), + 0, offset-4000, 0.05, 0.3, 20, "burst", 10); + game.add_enemy("n", sf::seconds(16.5f), + 0, offset-4000, 0.05, 0.3, 20, "burst", 10); + game.add_enemy("n", sf::seconds(17.0f), + 0, offset-4000, 0.05, 0.3, 20, "burst", 10); + game.add_enemy("n", sf::seconds(17.5f), + 0, offset-4000, 0.05, 0.3, 20, "burst", 10); + + + game.add_enemy("n", sf::seconds(18.0f), + 750, offset-6000, -0.05, 0.3, 20, "cir", 10); + game.add_enemy("n", sf::seconds(18.5f), + 750, offset-6000, -0.05, 0.3, 20, "cir", 10); + game.add_enemy("n", sf::seconds(19.0f), + 750, offset-6000, -0.05, 0.3, 20, "cir", 10); + game.add_enemy("n", sf::seconds(19.5f), + 750, offset-6000, -0.05, 0.3, 20, "cir", 10); + game.add_enemy("n", sf::seconds(20.0f), + 750, offset-6000, -0.05, 0.3, 20, "cir", 10); + game.add_enemy("n", sf::seconds(20.5f), + 750, offset-6000, -0.05, 0.3, 20, "cir", 10); + game.add_enemy("n", sf::seconds(21.0f), + 750, offset-6000, -0.05, 0.3, 20, "cir", 10); + game.add_enemy("n", sf::seconds(21.5f), + 750, offset-6000, -0.05, 0.3, 20, "cir", 10); + game.add_enemy("n", sf::seconds(22.0f), + 750, offset-6000, -0.05, 0.3, 20, "cir", 10); + game.add_enemy("n", sf::seconds(22.5f), + 750, offset-6000, -0.05, 0.3, 20, "cir", 10); + + + game.add_enemy("n", sf::seconds(23.0f), + 350, offset-8000, -0.05, 0.3, 20, "bomb", 10); + game.add_enemy("n", sf::seconds(23.5f), + 350, offset-8000, 0.05, 0.3, 20, "bomb", 10); + game.add_enemy("n", sf::seconds(24.0f), + 350, offset-8000, -0.05, 0.3, 20, "bomb", 10); + game.add_enemy("n", sf::seconds(24.5f), + 350, offset-8000, 0.05, 0.3, 20, "bomb", 10); + game.add_enemy("n", sf::seconds(25.0f), + 350, offset-8000, -0.05, 0.3, 20, "bomb", 10); + game.add_enemy("n", sf::seconds(25.5f), + 350, offset-8000, 0.05, 0.3, 20, "bomb", 10); + game.add_enemy("n", sf::seconds(26.0f), + 350, offset-8000, -0.05, 0.3, 20, "bomb", 10); + game.add_enemy("n", sf::seconds(26.5f), + 350, offset-8000, 0.05, 0.3, 20, "bomb", 10); + game.add_enemy("n", sf::seconds(27.0f), + 350, offset-8000, -0.05, 0.3, 20, "bomb", 10); + game.add_enemy("n", sf::seconds(27.5f), + 350, offset-8000, 0.05, 0.3, 20, "bomb", 10); + + game.add_enemy("n", sf::seconds(28.0f), + 200, offset-8000, 0, 0.3, 20, "bomb", 10); + game.add_enemy("n", sf::seconds(28.5f), + 200, offset-8000, 0, -0.3, 20, "bomb", 10); + game.add_enemy("n", sf::seconds(29.0f), + 200, offset-8000, 0, 0.3, 20, "bomb", 10); + game.add_enemy("n", sf::seconds(29.5f), + 200, offset-8000, 0, -0.3, 20, "bomb", 10); + game.add_enemy("n", sf::seconds(30.0f), + 200, offset-8000, 0, 0.3, 20, "bomb", 10); + game.add_enemy("n", sf::seconds(30.5f), + 200, offset-8000, 0, -0.3, 20, "bomb", 10); + game.add_enemy("n", sf::seconds(31.0f), + 200, offset-8000, 0, 0.3, 20, "bomb", 10); + game.add_enemy("n", sf::seconds(31.5f), + 200, offset-8000, 0, -0.3, 20, "bomb", 10); + game.add_enemy("n", sf::seconds(32.0f), + 200, offset-8000, 0, 0.3, 20, "bomb", 10); + game.add_enemy("n", sf::seconds(32.5f), + 200, offset-8000, 0, -0.3, 20, "bomb", 10); + + + game.add_enemy("n", sf::seconds(28.0f), + 500, offset-8000, 0, 0.3, 20, "bomb", 10); + game.add_enemy("n", sf::seconds(28.5f), + 500, offset-8000, 0, -0.3, 20, "bomb", 10); + game.add_enemy("n", sf::seconds(29.0f), + 500, offset-8000, 0, 0.3, 20, "bomb", 10); + game.add_enemy("n", sf::seconds(29.5f), + 500, offset-8000, 0, -0.3, 20, "bomb", 10); + game.add_enemy("n", sf::seconds(30.0f), + 500, offset-8000, 0, 0.3, 20, "bomb", 10); + game.add_enemy("n", sf::seconds(30.5f), + 500, offset-8000, 0, -0.3, 20, "bomb", 10); + game.add_enemy("n", sf::seconds(31.0f), + 500, offset-8000, 0, 0.3, 20, "bomb", 10); + game.add_enemy("n", sf::seconds(31.5f), + 500, offset-8000, 0, -0.3, 20, "bomb", 10); + game.add_enemy("n", sf::seconds(32.0f), + 500, offset-8000, 0, 0.3, 20, "bomb", 10); + game.add_enemy("n", sf::seconds(32.5f), + 500, offset-8000, 0, -0.3, 20, "bomb", 10); + + game.add_enemy("n", sf::seconds(32.5f), + 50, offset-9000, 0, 0.3, 20, "cir", 10); + game.add_enemy("n", sf::seconds(33.0f), + 50, offset-9000, 0, -0.3, 20, "burst", 10); + game.add_enemy("n", sf::seconds(33.5f), + 50, offset-9000, 0, 0.3, 20, "cir", 10); + game.add_enemy("n", sf::seconds(34.0f), + 50, offset-9000, 0, -0.3, 20, "burst", 10); + game.add_enemy("n", sf::seconds(34.5f), + 50, offset-9000, 0, 0.3, 20, "cir", 10); + game.add_enemy("n", sf::seconds(35.0f), + 50, offset-9000, 0, -0.3, 20, "burst", 10); + game.add_enemy("n", sf::seconds(35.5f), + 50, offset-9000, 0, 0.3, 20, "cir", 10); + game.add_enemy("n", sf::seconds(36.0f), + 50, offset-9000, 0, -0.3, 20, "burst", 10); + game.add_enemy("n", sf::seconds(36.5f), + 50, offset-9000, 0, 0.3, 20, "cir", 10); + game.add_enemy("n", sf::seconds(37.0f), + 50, offset-9000, 0, -0.3, 20, "burst", 10); + + + game.add_enemy("n", sf::seconds(32.5f), + 650, offset-10000, 0, 0.3, 20, "cir", 10); + game.add_enemy("n", sf::seconds(33.0f), + 650, offset-10000, 0, -0.3, 20, "cir", 10); + game.add_enemy("n", sf::seconds(33.5f), + 650, offset-10000, 0, 0.3, 20, "cir", 10); + game.add_enemy("n", sf::seconds(34.0f), + 650, offset-10000, 0, -0.3, 20, "cir", 10); + game.add_enemy("n", sf::seconds(34.5f), + 650, offset-10000, 0, 0.3, 20, "cir", 10); + game.add_enemy("n", sf::seconds(35.0f), + 650, offset-10000, 0, -0.3, 20, "cir", 10); + game.add_enemy("n", sf::seconds(35.5f), + 650, offset-10000, 0, 0.3, 20, "cir", 10); + game.add_enemy("n", sf::seconds(36.0f), + 650, offset-10000, 0, -0.3, 20, "cir", 10); + game.add_enemy("n", sf::seconds(36.5f), + 650, offset-10000, 0, 0.3, 20, "cir", 10); + game.add_enemy("n", sf::seconds(37.0f), + 650, offset-10000, 0, -0.3, 20, "cir", 10); + + + game.add_enemy("n", sf::seconds(34.5f), + 650, offset-10000, -0.5, 0.03, 50, "cir", 10); + game.add_enemy("n", sf::seconds(35.0f), + 50, offset-10000, 0.5, -0.03, 50, "cir", 10); + game.add_enemy("n", sf::seconds(35.5f), + 650, offset-10000, -0.5, 0.03, 50, "cir", 10); + game.add_enemy("n", sf::seconds(36.0f), + 50, offset-10000, 0.5, -0.03, 50, "cir", 10); + game.add_enemy("n", sf::seconds(36.5f), + 650, offset-10000, -0.5, 0.03, 50, "cir", 10); + game.add_enemy("n", sf::seconds(37.0f), + 50, offset-10000, 0.5, -0.03, 50, "cir", 10); + game.add_enemy("n", sf::seconds(37.5f), + 650, offset-10000, -0.5, 0.03, 50, "cir", 10); + game.add_enemy("n", sf::seconds(38.0f), + 50, offset-10000, 0.5, -0.03, 50, "cir", 10); + game.add_enemy("n", sf::seconds(38.5f), + 650, offset-10000, -0.5, 0.03, 50, "cir", 10); + game.add_enemy("n", sf::seconds(39.0f), + 50, offset-10000, 0.5, -0.03, 50, "cir", 10); + game.add_enemy("n", sf::seconds(39.5f), + 650, offset-10000, -0.5, 0.03, 50, "cir", 10); + game.add_enemy("n", sf::seconds(40.0f), + 50, offset-10000, 0.5, -0.03, 50, "cir", 10); + game.add_enemy("n", sf::seconds(40.5f), + 650, offset-10000, -0.5, 0.03, 50, "cir", 10); + game.add_enemy("n", sf::seconds(41.0f), + 50, offset-10000, 0.5, -0.03, 50, "cir", 10); + game.add_enemy("n", sf::seconds(41.5f), + 650, offset-10000, -0.5, 0.03, 50, "cir", 10); + game.add_enemy("n", sf::seconds(42.0f), + 50, offset-10000, 0.5, -0.03, 50, "cir", 10); + // level end; +} + // Program entry point int main(int argc, char ** argv) { // Create the SFML window - sf::RenderWindow window(sf::VideoMode(800, 600), "Game!"); + sf::Vector2i screenDimensions(800, 600); + sf::RenderWindow window(sf::VideoMode(screenDimensions.x, screenDimensions.y), "Zero Requiem"); + + sf::Font font; + if (!font.loadFromFile("../src/DejaVuSans.ttf")) + return EXIT_FAILURE; + sf::Text text("", font, 30); + + // Load player sprite to display + if (!playerTexture.loadFromFile("../src/sprites/gundam_flying_up.png")) + return EXIT_FAILURE; + + // Load bullet sprites + if (!bulletTexture.loadFromFile("../src/sprites/bullet.png")) + return EXIT_FAILURE; - sf::Event event; // For polling events that SFML sends us + // Load enemy sprites + if (!enemyTexture.loadFromFile("../src/sprites/enemy.png")) + return EXIT_FAILURE; + + // Load the background + if (!bgTexture.loadFromFile("../src/sprites/background.png")) + return EXIT_FAILURE; + bgTexture.setRepeated(true); + sf::Sprite background(bgTexture); + size_t backgroundHeight = 120000; + background.setTextureRect(sf::IntRect(0,0,800,backgroundHeight)); + background.setScale((float) screenDimensions.x / bgTexture.getSize().x, 1.0f); + + float offset = backgroundHeight - screenDimensions.y; + makeLevel(offset); + + // clocks for trigger all the stuff + sf::Clock global_clock; // global clock that is only reset in the end + + sf::View view; + view.reset(sf::FloatRect(0, 0, screenDimensions.x, screenDimensions.y)); + view.setViewport(sf::FloatRect(0, 0, 0.75f, 1.0f)); + // view.setSize(screenDimensions.x * 3 / 5, screenDimensions.y); + + sf::View view2; + view2.setViewport(sf::FloatRect(0.6f, 0, 1.0f, 1.0f)); + // view2.setSize(screenDimensions.x * 2 / 5, screenDimensions.y); + + sf::Vector2f position(bgTexture.getSize().x - screenDimensions.x / 2, backgroundHeight - screenDimensions.y / 2); + game.player.change_position(bgTexture.getSize().x - screenDimensions.x / 2 - playerTexture.getSize().x / 2, backgroundHeight - screenDimensions.y / 2 + 100); + + // For polling events that SFML sends us + sf::Event event; while (window.isOpen()) { // Process any events sent by SFML since the last frame @@ -14,14 +360,85 @@ int main(int argc, char ** argv) { // SFML sent us a close event, so clean up window.close(); } + if (event.type == sf::Event::KeyPressed) { + if (event.key.code == sf::Keyboard:: LControl){ + if (game.player.fire == false) + game.player.fire = true; + else + game.player.fire = false; + } + } } + float player_x = 0; + float player_y = 0; + + if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left) && game.player.get_x() > 0) { + player_x -= 0.45f; + } + if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right) && game.player.get_x() + playerTexture.getSize().x < screenDimensions.x) { + player_x += 0.45f; + } + if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up) && game.player.get_y() > position.y - screenDimensions.y / 2) { + player_y -= 0.40f; + } + if (sf::Keyboard::isKeyPressed(sf::Keyboard::Down) && game.player.get_y() + playerTexture.getSize().y < position.y + screenDimensions.y / 2) { + player_y += 0.68f; + } + + position.y -= y_delta; + player_y -= y_delta; + + if (sf::Keyboard::isKeyPressed(sf::Keyboard::I)) { + game.super_gm = true; + } + + game.player.change_position(game.player.get_x() + player_x, game.player.get_y() + player_y); + game.add_bullet_player(); + game.damage_judging(); + + + game.move_stuff(global_clock.getElapsedTime()); + // Clear the window before we start drawing to it window.clear(); + view.setCenter(position); + window.setView(view); + + // Draw the background + window.draw(background); + + // Render major elements of the window! + if (game.game_over == false) + render(window); + else{ + if (game.super_gm == false){ + render_game_over(window, position.y); + y_delta = 0; + } + else + render(window); + } + + // Display coordinates of player + window.setView(view2); + text.setString(std::to_string(game.player.get_x()) + ", " + std::to_string(game.player.get_y())); + window.draw(text); + + // for (unsigned int j = 0; j < game.enemy.size(); j++){ + // sf::Text text2(std::to_string(game.enemy[j].get_x()) + ", " + std::to_string(game.enemy[j].get_y()), font, 30); + // text2.setPosition(sf::Vector2f(0, j*30 + 30)); + // window.draw(text2); + // } + + sf::Text text2("Lives: 1", font, 30); + text2.setPosition(sf::Vector2f(0, 30)); + window.draw(text2); + // Notify the window that we're ready to render window.display(); } - return 0; + return EXIT_SUCCESS; } diff --git a/src/main.cpp.txt b/src/main.cpp.txt new file mode 100644 index 0000000..7de204a --- /dev/null +++ b/src/main.cpp.txt @@ -0,0 +1,187 @@ +#include + +//local includes +#include "bullet.h" +#include "objects.h" +#include "level.h" + +//stores all the acutal game data +Level game; + +sf::Texture bgTexture; +sf::Texture playerTexture; +sf::Texture bulletTexture; +sf::Texture enemyTexture; + +void render(sf::RenderWindow& window){ + int max_e = game.enemy.size(); + int max_b = game.bullet.size(); + int max_bp = game.player_bullet.size(); + + for (int i = 0; i < max_b; i++){ + sf::Sprite _bullet; + _bullet.setTexture(bulletTexture); + game.bullet[i].change_position(game.bullet[i].get_x(), game.bullet[i].get_y() - 0.05); + _bullet.setPosition(game.bullet[i].get_x(), game.bullet[i].get_y()); + window.draw(_bullet); + } + + //render player bullets + for (int j = 0; j < max_bp; j++){ + sf::Sprite _bullet_p; + _bullet_p.setTexture(bulletTexture); + game.player_bullet[j].change_position(game.player_bullet[j].get_x(), game.player_bullet[j].get_y() - 0.05); + _bullet_p.setPosition(game.player_bullet[j].get_x(), game.player_bullet[j].get_y()); + window.draw(_bullet_p); + } + + for (int k = 0; k < max_e; k++){ + if (game.enemy[k].entry_flag == 1){ + sf::Sprite _enemy; + _enemy.setTexture(enemyTexture); + game.enemy[k].change_position(game.enemy[k].get_x(), game.enemy[k].get_y() - 0.05); + _enemy.setPosition(game.enemy[k].get_x(), game.enemy[k].get_y()); + window.draw(_enemy); + } + } + + //render the player last + sf::Sprite _player; + _player.setTexture(playerTexture); + _player.setPosition(game.player.get_x(), game.player.get_y()); + window.draw(_player); +} + +// Program entry point +int main(int argc, char ** argv) { + // Create the SFML window + sf::Vector2i screenDimensions(800, 600); + sf::RenderWindow window(sf::VideoMode(screenDimensions.x, screenDimensions.y), "Zero Requiem"); + + sf::Font font; + if (!font.loadFromFile("../src/DejaVuSans.ttf")) + return EXIT_FAILURE; + sf::Text text("", font, 30); + + // Load player sprite to display + if (!playerTexture.loadFromFile("../src/sprites/gundam_flying_up.png")) + return EXIT_FAILURE; + + // Load bullet sprites + if (!bulletTexture.loadFromFile("../src/sprites/bullet.png")) + return EXIT_FAILURE; + + // Load enemy sprites + if (!enemyTexture.loadFromFile("../src/sprites/enemy.png")) + return EXIT_FAILURE; + + // Load the background + if (!bgTexture.loadFromFile("../src/sprites/background.png")) + return EXIT_FAILURE; + bgTexture.setRepeated(true); + sf::Sprite background(bgTexture); + size_t backgroundHeight = 12000; + background.setTextureRect(sf::IntRect(0,0,800,backgroundHeight)); + background.setScale((float) screenDimensions.x / bgTexture.getSize().x, 1.0f); + + // The entire level is here: + game.add_enemy("test", sf::seconds(0.5f), + 0, backgroundHeight - screenDimensions.y + 100, 0.1, 0, 20, "cir", 10); + game.add_enemy("test", sf::seconds(1.0f), + 0, backgroundHeight - screenDimensions.y + 200, 0.1, 0, 20, "burst", 10); + game.add_enemy("test", sf::seconds(1.5f), + 0, backgroundHeight - screenDimensions.y + 300, 0.1, 0, 20, "bomb", 10); + game.add_enemy("test", sf::seconds(2.0f), + 0, backgroundHeight - screenDimensions.y + 400, 0.1, 0, 20, "cir", 10); + game.add_enemy("test", sf::seconds(2.5f), + 0, backgroundHeight - screenDimensions.y + 50, 0.1, 0, 20, "dir_bomb", 10); + // level end; + + // clocks for trigger all the stuff + sf::Clock global_clock; // global clock that is only reset in the end + + sf::View view; + view.reset(sf::FloatRect(0, 0, screenDimensions.x, screenDimensions.y)); + view.setViewport(sf::FloatRect(0, 0, 0.6f, 1.0f)); + // view.setSize(screenDimensions.x * 3 / 5, screenDimensions.y); + + sf::View view2; + view2.setViewport(sf::FloatRect(0.6f, 0, 1.0f, 1.0f)); + // view2.setSize(screenDimensions.x * 2 / 5, screenDimensions.y); + + sf::Vector2f position(bgTexture.getSize().x - screenDimensions.x / 2, backgroundHeight - screenDimensions.y / 2); + game.player.change_position(bgTexture.getSize().x - screenDimensions.x / 2 - playerTexture.getSize().x / 2, backgroundHeight - screenDimensions.y / 2 + 100); + + // For polling events that SFML sends us + sf::Event event; + + while (window.isOpen()) { + // Process any events sent by SFML since the last frame + while (window.pollEvent(event)) { + if (event.type == sf::Event::Closed) { + // SFML sent us a close event, so clean up + window.close(); + } + if (event.type == sf::Event::KeyPressed) { + if (event.key.code == sf::Keyboard:: LControl){ + if (game.player.fire == false) + game.player.fire = true; + else + game.player.fire = false; + } + } + } + + float player_x = 0; + float player_y = 0; + + if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left) && game.player.get_x() > 0) { + player_x -= 0.15f; + } + if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right) && game.player.get_x() + playerTexture.getSize().x < screenDimensions.x) { + player_x += 0.15f; + } + if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up) && game.player.get_y() > position.y - screenDimensions.y / 2) { + player_y -= 0.09f; + } + if (sf::Keyboard::isKeyPressed(sf::Keyboard::Down) && game.player.get_y() + playerTexture.getSize().y < position.y + screenDimensions.y / 2) { + player_y += 0.12f; + } + + position.y -= 0.05; + player_y -= 0.05; + + game.player.change_position(game.player.get_x() + player_x, game.player.get_y() + player_y); + game.add_bullet_player(); + game.damage_judging(); + game.move_stuff(global_clock.getElapsedTime()); + + // Clear the window before we start drawing to it + window.clear(); + + view.setCenter(position); + window.setView(view); + + // Draw the background + window.draw(background); + + // Render major elements of the window! + render(window); + + // Display coordinates of player + window.setView(view2); + text.setString(std::to_string(game.player.get_x()) + ", " + std::to_string(game.player.get_y())); + window.draw(text); + + for (unsigned int j = 0; j < game.enemy.size(); j++){ + sf::Text text2(std::to_string(game.enemy[j].get_x()) + ", " + std::to_string(game.enemy[j].get_y()), font, 30); + text2.setPosition(sf::Vector2f(0, j*30)); + window.draw(text2); + } + + // Notify the window that we're ready to render + window.display(); + } + + return EXIT_SUCCESS; +} \ No newline at end of file diff --git a/src/main2.cpp.txt b/src/main2.cpp.txt new file mode 100644 index 0000000..52af006 --- /dev/null +++ b/src/main2.cpp.txt @@ -0,0 +1,152 @@ +#include +#include +#include +#include +#include + +#include +#include +//wargaming(WT) +//highvoltage +//local includes +#include "bullet.h" +#include "objects.h" +#include "level.h" + +//constants: +//1.screen paras +int max_width = 800; +int max_height = 600; + +//stores all the acutal game data +Level game; + +//other constants + +void render(sf::RenderWindow& window){ + + int max_e = game.enemy.size(); + int max_b = game.bullet.size(); + int max_bp = game.player_bullet.size(); + + //render bullets first + sf::Texture texture; + texture.loadFromFile("../src/bullet.png"); + + for (int i = 0; i < max_b; i++){ + sf::Sprite _bullet; + _bullet.setTexture(texture); + //_bullet.setTextureRect(sf::IntRect(10, 10, 50, 30)); + _bullet.setPosition(game.bullet[i].get_x(), game.bullet[i].get_y()); + //_bullet.setColor(sf::Color(100, 250, 50)); + window.draw(_bullet); + } + + //render player bullets + for (int k = 0; k < max_bp; k++){ + sf::Sprite _bullet_p; + _bullet_p.setTexture(texture); + //_bullet_p.setTextureRect(sf::IntRect(10, 10, 50, 30)); + _bullet_p.setPosition(game.player_bullet[k].get_x(), game.player_bullet[k].get_y()); + //_bullet_p.setColor(sf::Color(100, 250, 50)); + window.draw(_bullet_p); + } + + //render enemies + sf::Texture e_texture; + e_texture.loadFromFile("../src/enemy.png"); + + for (int j = 0; j < max_e; j++){ + if (game.enemy[j].entry_flag == 1){ + sf::Sprite _enemy; + _enemy.setTexture(e_texture); + //_enemy.setTextureRect(sf::IntRect(10, 10, 50, 30)); + _enemy.setPosition(game.enemy[j].get_x(), game.enemy[j].get_y()); + //_enemy.setColor(sf::Color(100, 250, 50)); + window.draw(_enemy); + } + } + + //render the player last + sf::Sprite _player; + _player.setTexture(e_texture); + //_player.setTextureRect(sf::IntRect(10, 10, 50, 30)); + _player.setPosition(game.player.get_x(), game.player.get_y()); + //_player.setColor(sf::Color(100, 250, 50)); + window.draw(_player); + +} + +// Program entry point +int main(int argc, char ** argv) { + // Create the SFML window + sf::RenderWindow window(sf::VideoMode(max_width, max_height), "Zero"); + sf::Event event; // For polling events that SFML sends us + + //The entire level is here: + game.add_enemy("test", sf::seconds(0.5f), + 0, 100, 0.1, 0, 20, "cir", 10); + game.add_enemy("test", sf::seconds(1.0f), + 0, 200, 0.1, 0, 20, "burst", 10); + game.add_enemy("test", sf::seconds(1.5f), + 0, 300, 0.1, 0, 20, "bomb", 10); + game.add_enemy("test", sf::seconds(2.0f), + 0, 400, 0.1, 0, 20, "cir", 10); + game.add_enemy("test", sf::seconds(2.5f), + 0, 50, 0.1, 0, 20, "dir_bomb", 10); + + //level end; + + //clocks for trigger all the stuff + sf::Clock global_clock;//global clock that only gets reseted in the end + + //game loop + while (window.isOpen()) { + // Process any events sent by SFML since the last frame + while (window.pollEvent(event)) { + if (event.type == sf::Event::Closed) { + // SFML sent us a close event, so clean up + window.close(); + } + if (event.type == sf::Event::KeyPressed) { + if (event.key.code == sf::Keyboard:: LControl){ + if (game.player.fire == false) + game.player.fire = true; + else + game.player.fire = false; + } + } + + } + + float player_x = 0; + float player_y = 0; + + if ( (sf::Keyboard::isKeyPressed(sf::Keyboard::Down))&&(game.player.get_y() <= 580) ) + player_y += 0.35f; + if ( (sf::Keyboard::isKeyPressed(sf::Keyboard::Up))&&(game.player.get_y() >= 3) ) + player_y -= 0.35f; + if ( (sf::Keyboard::isKeyPressed(sf::Keyboard::Left))&&(game.player.get_x() >= 3) ) + player_x -= 0.35f; + if ( (sf::Keyboard::isKeyPressed(sf::Keyboard::Right))&&(game.player.get_x() <= 780) ) + player_x += 0.35f; + + game.player.change_position( (game.player.get_x()+player_x), (game.player.get_y()+player_y)); + game.add_bullet_player(); + + game.damage_judging(); + game.move_stuff(global_clock.getElapsedTime()); + + // Clear the window before we start drawing to it + window.clear(); + + //render the window! + render(window); + + // Notify the window that we're ready to render + window.display(); + } + + return 0; +} + diff --git a/src/objects.cpp b/src/objects.cpp new file mode 100644 index 0000000..41d65a6 --- /dev/null +++ b/src/objects.cpp @@ -0,0 +1,65 @@ +#include "objects.h" + +Object::Object(){ + _x = 0; + _y = 0; + _delta_x = 0; + _delta_y = 0; + entry_flag = false; + bullet_flag = true; + fire = false; +} + +Object::~Object(){ + +} + +Object::Object(float x, float y){ + _x = x; + _y = y; + _delta_x = 0; + _delta_y = 0; + entry_flag = false; + bullet_flag = true; + fire = false; +} + +void Object::move_object(){ + _x += _delta_x; + _y += _delta_y; +} + +void Object::change_delta(float new_delta_x, float new_delta_y){ + _delta_x = new_delta_x; + _delta_y = new_delta_y; +} + +void Object::change_position(float new_x, float new_y){ + _x = new_x; + _y = new_y; +} + +bool Object::hit(){ + //modifiy me later! + return false; +} + +bool Object::hit_enemy(){ + return false; +} + +void Object::add_object(){ + +} + +void Object::clear_object(){ + +} + +float Object::get_x(){ + return _x; +} + +float Object::get_y(){ + return _y; +} diff --git a/src/objects.h b/src/objects.h new file mode 100644 index 0000000..e38be79 --- /dev/null +++ b/src/objects.h @@ -0,0 +1,79 @@ +#ifndef OBJECTS_H +#define OBJECTS_H + +// c-style includes +#include +#include + +// c++ style includes +#include +#include + +// local includes +#include "bullet.h" + +//main +#include +#include +#include + +class Object +{ + public: + //basic functions + Object(); + + Object(float x, float y); + + ~Object(); + + //moving functions + void move_object(); + + void change_delta(float new_delta_x, float new_delta_y); + + void change_position(float new_x, float new_y); + + //damage functions + bool hit();//check if objects hit by bullet + + bool hit_enemy(); + + //add/delete functions + void add_object(); + + void clear_object();//not implemented + + //position function + float get_x(); + + float get_y(); + + //public storage + sf::Time obj_timer; + + bool entry_flag; + + bool bullet_flag; + + int bullet_num; + + int hp; + + std::string B_type; + + float en_x; + + float en_y; + + bool fire; + private: + float _x; //x pos of the bullet + float _y; //y pos of the bullet + float _raduis; //area of a object + float _delta_x; //speed in x direction + float _delta_y; //speed in y direction + + +}; +#endif // EPNG_H diff --git a/src/sprites/background.png b/src/sprites/background.png new file mode 100644 index 0000000..85c9444 Binary files /dev/null and b/src/sprites/background.png differ diff --git a/src/sprites/background_old.png b/src/sprites/background_old.png new file mode 100644 index 0000000..c2963c1 Binary files /dev/null and b/src/sprites/background_old.png differ diff --git a/src/sprites/bullet.png b/src/sprites/bullet.png new file mode 100644 index 0000000..4e245a1 Binary files /dev/null and b/src/sprites/bullet.png differ diff --git a/src/sprites/bullet_player.png b/src/sprites/bullet_player.png new file mode 100644 index 0000000..d6c4c9c Binary files /dev/null and b/src/sprites/bullet_player.png differ diff --git a/src/sprites/enemy.png b/src/sprites/enemy.png new file mode 100644 index 0000000..3169912 Binary files /dev/null and b/src/sprites/enemy.png differ diff --git a/src/sprites/enemy.xcf b/src/sprites/enemy.xcf new file mode 100644 index 0000000..d1b4ded Binary files /dev/null and b/src/sprites/enemy.xcf differ diff --git a/src/sprites/gundam_flying_sprites.xcf b/src/sprites/gundam_flying_sprites.xcf new file mode 100644 index 0000000..54fdef6 Binary files /dev/null and b/src/sprites/gundam_flying_sprites.xcf differ diff --git a/src/sprites/gundam_flying_up.png b/src/sprites/gundam_flying_up.png new file mode 100644 index 0000000..dc80f4a Binary files /dev/null and b/src/sprites/gundam_flying_up.png differ diff --git a/src/sprites/gundam_sprites.GIF b/src/sprites/gundam_sprites.GIF new file mode 100644 index 0000000..5adac32 Binary files /dev/null and b/src/sprites/gundam_sprites.GIF differ diff --git a/src/sprites/ocean_texture.xcf b/src/sprites/ocean_texture.xcf new file mode 100644 index 0000000..dde9e58 Binary files /dev/null and b/src/sprites/ocean_texture.xcf differ diff --git a/src/sprites/player.png b/src/sprites/player.png new file mode 100644 index 0000000..65b4972 Binary files /dev/null and b/src/sprites/player.png differ