#include "SDL_Sidekick.h" int main( int argc, char* args[] ) { //Init function if (init_SDL() == 0) return 1; srand(time(NULL)); while (quit == false) { SDL_Flip(Screen); SDL_Delay( 2); if( SDL_PollEvent( &event ) ) { //Checks if user wants to quit switch (event.type) { case SDL_QUIT: { quit = true; break; } case SDL_MOUSEBUTTONDOWN: { if( event.button.button == SDL_BUTTON_LEFT ) { break; } } case SDL_KEYDOWN: { switch( event.key.keysym.sym ) { break; } } } } } return 0; } #include "SDL_Sidekick.h" struct S_Location { int X; int Y; }; struct S_Box { //Natural Speed of the Box float Speed; //Coordinates float X; float Y; //Speeds float X_speed; float Y_speed; //Size of Box int X_size; int Y_size; S_Box() : X_speed(0), Y_speed(0), X_size(16), Y_size(16), X( 32 ), Y( 32 ), Speed (1) {} }; //Enemy linked list structure struct Enemy_node { S_Box Info; Enemy_node *Next; }; int Calc_Box_Dest(S_Box &Object, S_Location Destination) { //Distance between player and desired position float Dist_X = Object.X - Destination.X ; float Dist_Y = Object.Y - Destination.Y ; //Corrects float accuracy loss if( Dist_X < Object.Speed && Dist_X > -Object.Speed) {Object.X = (int)Destination.X; } if( Dist_Y < Object.Speed && Dist_Y > -Object.Speed) {Object.Y = (int)Destination.Y; } //Relation between Dist_X and Dist_Y; float Relation; //Case Players distance is negative if( Dist_X<0 ) {Dist_X=Dist_X*-1;} if( Dist_Y<0 ) {Dist_Y=Dist_Y*-1;} //If point is farther in X axis than Y axis if(Dist_X >= Dist_Y) { if(Dist_Y==0) {Relation =0;} else {Relation = Dist_Y / Dist_X;} if(Object.X == Destination.X) { Object.X_speed = 0; } else if(Object.X > Destination.X) { Object.X_speed = Object.Speed*-1; } else if(Object.X < Destination.X) { Object.X_speed = Object.Speed; } if(Object.Y == Destination.Y) { Object.Y_speed = 0; } else if(Object.Y > Destination.Y) { Object.Y_speed = Relation*Object.Speed*-1; } else if(Object.Y < Destination.Y) { Object.Y_speed = Relation*Object.Speed; } } //If point is farther in Y axis than X axis if(Dist_X <= Dist_Y) { if(Dist_X==0) {Relation =0;} else {Relation = Dist_X / Dist_Y;} if(Object.X == Destination.X) { Object.X_speed = 0; } else if(Object.X > Destination.X) { Object.X_speed = Relation*Object.Speed*-1; } else if(Object.X < Destination.X) { Object.X_speed = Relation*Object.Speed; } if(Object.Y == Destination.Y) { Object.Y_speed = 0; } else if(Object.Y > Destination.Y) { Object.Y_speed = Object.Speed*-1; } else if(Object.Y < Destination.Y) { Object.Y_speed = Object.Speed; } } } int Calc_Box_location( S_Box &A_Box) { //OUT OF BOUNDS CHECK if( A_Box.Y + A_Box.Y_speed <= 0) { A_Box.Y_speed = A_Box.Y_speed*-1;} if( A_Box.Y + A_Box.Y_speed >= 480-A_Box.Y_size) { A_Box.Y_speed = A_Box.Y_speed*-1;} if( A_Box.X + A_Box.X_speed <= 0) { A_Box.X_speed = A_Box.X_speed*-1;} if( A_Box.X + A_Box.X_speed >= 640-A_Box.X_size) { A_Box.X_speed = A_Box.X_speed*-1;} A_Box.Y = A_Box.Y + (A_Box.Y_speed); A_Box.X = A_Box.X + (A_Box.X_speed); } int game() { //Sets up game srand(time(NULL)); //Player Declared S_Box Player; Player.X = rand()%640-Player.X_size; Player.Y = rand()%480-Player.X_size; //Bullet Declared S_Box Weapon; Weapon.X = Player.X; Weapon.Y = Player.Y; Weapon.X_size = 8; Weapon.Y_size = 8; Weapon.Speed = 4; //Enemy Declared Enemy_node *EN_Conductor; Enemy_node *EN_Root; EN_Root = new Enemy_node; EN_Conductor = EN_Root; EN_Conductor->Info.X= rand()%640-Player.X_size; EN_Conductor->Info.Y= rand()%480-Player.Y_size; EN_Conductor->Next = NULL; S_Location Enemy_dest; //Player Moving S_Location Player_dest; Player_dest.X = (int)Player.X; Player_dest.Y = (int)Player.Y; //Player Shooting S_Location Weapon_dest; Weapon_dest.X =(int)Player.X; Weapon_dest.Y =(int)Player.Y; while (quit == false) { //Monster Moving EN_Conductor = EN_Root; //Player Moving Calc_Box_Dest( Player, Player_dest); Calc_Box_location(Player); //Bullet Moving Calc_Box_Dest( Weapon, Weapon_dest); Calc_Box_location(Weapon); //Returning Bullet back to player if it has no target if((int)Weapon.X_speed == 0 && (int)Weapon.Y_speed == 0 ) { Weapon_dest.X =(int)Player.X-2; Weapon_dest.Y =(int)Player.Y-2; } apply_surface( 0, 0, Background, Screen); apply_surface( (int)Player.X, (int)Player.Y, Person, Screen); apply_surface( (int)Weapon.X, (int)Weapon.Y, Bullet, Screen ); while(true) { Enemy_dest.X = (int)Player.X; Enemy_dest.Y = (int)Player.Y; Calc_Box_Dest( EN_Conductor->Info, Enemy_dest); Calc_Box_location(EN_Conductor->Info); apply_surface((int)EN_Conductor->Info.X,(int)EN_Conductor->Info.Y, Monster, Screen ); if( EN_Conductor->Next == NULL ) { break;} else { EN_Conductor = EN_Conductor->Next;} } SDL_Flip(Screen); SDL_Delay( 2); if( SDL_PollEvent( &event ) ) { //Checks if user wants to quit switch (event.type) { case SDL_QUIT: { quit = true; break; } case SDL_MOUSEBUTTONDOWN: { if( event.button.button == SDL_BUTTON_LEFT ) { Player_dest.X = event.button.x; Player_dest.Y = event.button.y; } if( event.button.button == SDL_BUTTON_RIGHT ) { Weapon_dest.X = event.button.x; Weapon_dest.Y = event.button.y; } } case SDL_KEYDOWN: { switch( event.key.keysym.sym ) { break; } } } } } return 0; }