Programm auf "Kettenreaktion" erweitert
This commit is contained in:
BIN
Capter1/ax_game
BIN
Capter1/ax_game
Binary file not shown.
@@ -1,4 +1,5 @@
|
|||||||
#include "ax_game.hpp"
|
#include "ax_game.hpp"
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
ax_game::ax_game()
|
ax_game::ax_game()
|
||||||
{
|
{
|
||||||
@@ -7,7 +8,20 @@ ax_game::ax_game()
|
|||||||
ax_TickCounter = 0;
|
ax_TickCounter = 0;
|
||||||
ax_IsRunning = true;
|
ax_IsRunning = true;
|
||||||
|
|
||||||
ax_ball_one = ball();
|
|
||||||
|
srand(time(0));
|
||||||
|
|
||||||
|
|
||||||
|
//ax_ball_one = ball(500, 400, 0, 0);
|
||||||
|
//ax_ball_two = ball(500, 500, 0, 0);
|
||||||
|
|
||||||
|
for (int i = 0; i < 10; i++)
|
||||||
|
{
|
||||||
|
ax_balliste.emplace_back(ball(rand() % 1024, rand() % 768, (rand() % 200) -100 , (rand() % 200) -100));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ax_game::~ax_game()
|
ax_game::~ax_game()
|
||||||
@@ -64,11 +78,11 @@ void ax_game::Input(){
|
|||||||
|
|
||||||
//Tastatur auslesen
|
//Tastatur auslesen
|
||||||
const Uint8 *state = SDL_GetKeyboardState(NULL);
|
const Uint8 *state = SDL_GetKeyboardState(NULL);
|
||||||
if(state[SDL_SCANCODE_ESCAPE]) ax_IsRunning = false;
|
//if(state[SDL_SCANCODE_ESCAPE]) ax_IsRunning = false;
|
||||||
if(state[SDL_SCANCODE_S]) ax_ball_one.vely += 10;
|
//if(state[SDL_SCANCODE_S]) ax_balliste[0].vely += 10;
|
||||||
if(state[SDL_SCANCODE_W]) ax_ball_one.vely -= 10;
|
//if(state[SDL_SCANCODE_W]) ax_balliste[0].vely -= 10;
|
||||||
if(state[SDL_SCANCODE_D]) ax_ball_one.velx += 10;
|
//if(state[SDL_SCANCODE_D]) ax_balliste[0].velx += 10;
|
||||||
if(state[SDL_SCANCODE_A]) ax_ball_one.velx -= 10;
|
//if(state[SDL_SCANCODE_A]) ax_balliste[0].velx -= 10;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -83,7 +97,19 @@ void ax_game::Update(){
|
|||||||
ax_TickCounter = SDL_GetTicks();
|
ax_TickCounter = SDL_GetTicks();
|
||||||
|
|
||||||
// Update Ball
|
// Update Ball
|
||||||
ax_ball_one.Update(DeltaTime);
|
for (auto &n : ax_balliste){
|
||||||
|
n.Update(DeltaTime, ax_balliste);
|
||||||
|
}
|
||||||
|
|
||||||
|
// clean up
|
||||||
|
for (auto it = ax_balliste.begin(); it != ax_balliste.end(); )
|
||||||
|
{
|
||||||
|
if (!it->alive)
|
||||||
|
it = ax_balliste.erase(it); // erase gibt neuen gültigen Iterator zurück
|
||||||
|
else
|
||||||
|
++it; // nur erhöhen, wenn nichts gelöscht wurde
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ax_game::Output(){
|
void ax_game::Output(){
|
||||||
@@ -91,7 +117,12 @@ void ax_game::Output(){
|
|||||||
SDL_RenderClear(ax_Renderer); //Puffer leeren
|
SDL_RenderClear(ax_Renderer); //Puffer leeren
|
||||||
|
|
||||||
|
|
||||||
ax_ball_one.Draw(ax_Renderer);
|
//ax_ball_one.Draw(ax_Renderer);
|
||||||
|
//ax_ball_two.Draw(ax_Renderer);
|
||||||
|
|
||||||
|
for (auto &n : ax_balliste){
|
||||||
|
n.Draw(ax_Renderer);
|
||||||
|
}
|
||||||
|
|
||||||
SDL_RenderPresent(ax_Renderer);
|
SDL_RenderPresent(ax_Renderer);
|
||||||
}
|
}
|
||||||
@@ -14,7 +14,10 @@ private:
|
|||||||
Uint32 ax_TickCounter;
|
Uint32 ax_TickCounter;
|
||||||
bool ax_IsRunning;
|
bool ax_IsRunning;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
ball ax_ball_one;
|
ball ax_ball_one;
|
||||||
|
ball ax_ball_two;
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@@ -23,5 +26,7 @@ public:
|
|||||||
bool Init();
|
bool Init();
|
||||||
void RunLoop();
|
void RunLoop();
|
||||||
void Shutdown();
|
void Shutdown();
|
||||||
|
|
||||||
|
std::vector<ball> ax_balliste;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
BIN
Capter1/ball
BIN
Capter1/ball
Binary file not shown.
@@ -1,25 +1,35 @@
|
|||||||
#include "ball.hpp"
|
#include "ball.hpp"
|
||||||
#include "ax_funktions.hpp"
|
#include "ax_funktions.hpp"
|
||||||
|
#include <vector>
|
||||||
|
#include <math.h>
|
||||||
|
|
||||||
|
|
||||||
ball::ball()
|
ball::ball()
|
||||||
{
|
{
|
||||||
std::cout << "Ball erzeugt!"<< std::endl;
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
ball::ball(int x, int y, int vx, int vy)
|
||||||
|
{
|
||||||
|
//std::cout << "Ball erzeugt!"<< std::endl;
|
||||||
|
|
||||||
r_dir = 0;
|
r_dir = 0;
|
||||||
g_dir = -1;
|
g_dir = -1;
|
||||||
b_dir = 1;
|
b_dir = 1;
|
||||||
|
|
||||||
velx = 200;
|
velx = vx;
|
||||||
vely = 200;
|
vely = vy;
|
||||||
|
|
||||||
rect = {20,20,20,20};
|
alive = true;
|
||||||
|
|
||||||
|
rect = {x,y,20,20};
|
||||||
color = {255,0,0,255};
|
color = {255,0,0,255};
|
||||||
}
|
}
|
||||||
|
|
||||||
ball::~ball()
|
ball::~ball()
|
||||||
{
|
{
|
||||||
|
std::cout << "Ball gelöscht" << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ball::GetXPos(){
|
int ball::GetXPos(){
|
||||||
@@ -37,19 +47,24 @@ void ball::Draw(SDL_Renderer* renderer){
|
|||||||
SDL_RenderFillRect(renderer, &rect);
|
SDL_RenderFillRect(renderer, &rect);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ball::Update(float f_DeltaTime){
|
void ball::Update(float f_DeltaTime, std::vector<ball> &list){
|
||||||
|
if (this->rect.w <= 1)
|
||||||
|
{
|
||||||
|
this->alive = false;
|
||||||
|
}
|
||||||
|
|
||||||
color.r += r_dir;
|
color.r += r_dir;
|
||||||
color.g += g_dir;
|
color.g += g_dir;
|
||||||
color.b += b_dir;
|
color.b += b_dir;
|
||||||
|
|
||||||
//=================ColorCycle======================
|
//=================ColorCycle======================
|
||||||
// Clamp values between 1 and 254
|
// Clamp values between 1 and 254
|
||||||
color.g = ax::clamp_int(color.g, 1, 254);
|
//color.g = ax::clamp_int(color.g, 1, 254);
|
||||||
color.b = ax::clamp_int(color.b, 1, 254);
|
//color.b = ax::clamp_int(color.b, 1, 254);
|
||||||
color.r = ax::clamp_int(color.r, 1, 254);
|
//color.r = ax::clamp_int(color.r, 1, 254);
|
||||||
|
|
||||||
// Transition logic
|
// Transition logic
|
||||||
if (r_dir != 0 && (color.r == 254 || color.r == 1)) {
|
/*if (r_dir != 0 && (color.r == 254 || color.r == 1)) {
|
||||||
r_dir = 0;
|
r_dir = 0;
|
||||||
g_dir = (color.r == 254) ? 1 : -1;
|
g_dir = (color.r == 254) ? 1 : -1;
|
||||||
b_dir = 0;
|
b_dir = 0;
|
||||||
@@ -64,14 +79,59 @@ void ball::Update(float f_DeltaTime){
|
|||||||
r_dir = 0;
|
r_dir = 0;
|
||||||
g_dir = (color.b == 254) ? -1 : 1;
|
g_dir = (color.b == 254) ? -1 : 1;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
//=================Movement======================
|
//=================Movement======================
|
||||||
//Update Position
|
//Update Position
|
||||||
rect.x +=velx * f_DeltaTime;
|
rect.x +=velx * f_DeltaTime;
|
||||||
rect.y +=vely * f_DeltaTime;
|
rect.y +=vely * f_DeltaTime;
|
||||||
|
|
||||||
//Kollisioinstest Fenster 1024x768
|
//Kollisioinstest Fenster 1024x768
|
||||||
if(rect.x > (1024 -20) || rect.x < 0) velx *= -0.5;
|
if(rect.x > (1024 -20) || rect.x < 0)
|
||||||
if(rect.y > (768 - 20) || rect.y < 0) vely *= -0.5;
|
{
|
||||||
|
velx = (velx * -0.9) + rand() % 10;
|
||||||
|
this->rect.w -=2;
|
||||||
|
this->rect.h -=2;
|
||||||
|
}
|
||||||
|
if(rect.y > (768 - 20) || rect.y < 0){
|
||||||
|
vely = (vely * -0.9) + rand() % 10;
|
||||||
|
this->rect.w -=2;
|
||||||
|
this->rect.h -=2;
|
||||||
|
}
|
||||||
//std::cout << velx <<"|"<< vely <<std::endl;
|
//std::cout << velx <<"|"<< vely <<std::endl;
|
||||||
|
|
||||||
|
|
||||||
|
//==============Kollision=======================
|
||||||
|
|
||||||
|
for (ball &i : list){
|
||||||
|
if(&i == this) continue; // sich selbst überspringen
|
||||||
|
float dx = i.GetXPos() - this->GetXPos();
|
||||||
|
float dy = i.GetYPos() - this->GetYPos();
|
||||||
|
float distance = sqrt(dx*dx + dy*dy);
|
||||||
|
|
||||||
|
if (distance < this->rect.w)
|
||||||
|
{
|
||||||
|
this->rect.w /=2;
|
||||||
|
this->rect.h /=2;
|
||||||
|
|
||||||
|
int tempx = this->velx;
|
||||||
|
int tempy = this->vely;
|
||||||
|
|
||||||
|
this->velx = i.velx + rand() % 10;
|
||||||
|
this->vely = i.vely + rand() % 10;
|
||||||
|
|
||||||
|
i.velx = tempx + rand() % 10;
|
||||||
|
i.vely = tempy + rand() % 10;
|
||||||
|
|
||||||
|
// Split ball
|
||||||
|
if (list.size() < 1000)
|
||||||
|
{
|
||||||
|
list.emplace_back(ball(this->GetXPos() + 21 , this->GetYPos()+1, this->velx, (rand() % 200) -100));
|
||||||
|
list.back().rect.w /=2;
|
||||||
|
list.back().rect.h /=2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
#include "SDL2/SDL.h"
|
#include "SDL2/SDL.h"
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
class ball
|
class ball
|
||||||
{
|
{
|
||||||
@@ -12,13 +13,17 @@ public:
|
|||||||
SDL_Color color;
|
SDL_Color color;
|
||||||
float velx;
|
float velx;
|
||||||
float vely;
|
float vely;
|
||||||
|
bool alive;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
ball();
|
ball();
|
||||||
~ball();
|
~ball();
|
||||||
|
|
||||||
|
//ball(int x, int y);
|
||||||
|
ball(int x, int y, int vx, int vy);
|
||||||
|
|
||||||
int GetXPos();
|
int GetXPos();
|
||||||
int GetYPos();
|
int GetYPos();
|
||||||
void Update(float f_DeltaTime);
|
void Update(float f_DeltaTime, std::vector<ball> &list);
|
||||||
void Draw(SDL_Renderer* renderer);
|
void Draw(SDL_Renderer* renderer);
|
||||||
};
|
};
|
||||||
|
|||||||
BIN
Capter1/main
BIN
Capter1/main
Binary file not shown.
@@ -2,6 +2,7 @@
|
|||||||
#include "ax_game.hpp"
|
#include "ax_game.hpp"
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
|
|
||||||
int main(int argc, char** argv)
|
int main(int argc, char** argv)
|
||||||
{
|
{
|
||||||
/*Game game;
|
/*Game game;
|
||||||
@@ -17,6 +18,7 @@ int main(int argc, char** argv)
|
|||||||
ax_game AXGAME;
|
ax_game AXGAME;
|
||||||
bool success = AXGAME.Init();
|
bool success = AXGAME.Init();
|
||||||
|
|
||||||
|
|
||||||
if(success){
|
if(success){
|
||||||
AXGAME.RunLoop();
|
AXGAME.RunLoop();
|
||||||
std::cout<< i++ << std::endl;
|
std::cout<< i++ << std::endl;
|
||||||
|
|||||||
Reference in New Issue
Block a user