Pin Gioco (SDL)

 
Salve a tutti, ora vi pubblico un pezzo di codice che avevo fatto circa 1 anno fa!
Si tratta di un “giochino” molto semplice grazie all’utilizzo delle SDL.
Il codice ovviamente si può migliorare, ma dato che l’ho tralasciato è da un po’ che è fermo.
Vi presento il codice qui sotto.
Se volete avere il progetto intero contattatemi

Salve a tutti, ora vi pubblico un pezzo di codice che avevo fatto circa 1 anno fa!
Si tratta di un “giochino” molto semplice grazie all’utilizzo delle SDL.
Il codice ovviamente si può migliorare, ma dato che l’ho tralasciato è da un po’ che è fermo.
Vi presento il codice qui sotto.
Se volete avere il progetto intero contattatemi
/*

Creato da: Mateo Nunez 

Classe: 3^IA

OPEN SOURCE

© Ping Pong

*/

#include <iostream>

#include <SDL.h>

#include <SDL_ttf.h>

#include <time.h>

#include <windows.h>

#include <stdlib.h>

#include <string.h>

#define SPEEDP 20

using namespace std;
int main(int argc, char* argv[]) 

{

srand(unsigned(time(NULL)));

short int cont[3]; //Contatori

char punt[256]; //Punteggio finale

unsigned short int casual = rand()%4;

bool run, runS, runD, runA, runB;

float PlayerY = 35;

float Player2Y = 35;

float BallX = 300;

float BallY = rand()%300;

float SPEED = 81+rand()%151;

runS = runD = runA = runB = false;

//Assegno cont a 0

for(int i=0; i<3; i++) {

cont[i] = 0;

}

//Avvio l’SDL

if (SDL_Init(SDL_INIT_VIDEO) != 0) {

cerr << “SDL_Init() Fallita: ” << SDL_GetError() << endl;

exit(1); 

}

//Set del video

SDL_Surface* display;

display = SDL_SetVideoMode(640, 380, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);

if (display == NULL) //Errore nell’assegnamento

{

cerr << “SDL_SetVideoMode() Fallita: ” << SDL_GetError() << endl;

exit(1);

}

//Set delle font

TTF_Init();

TTF_Font* font;

font = TTF_OpenFont(“./arial.ttf”,20);

SDL_Surface *ScoreSurface;

SDL_Rect ScoreRect; //Canvas dei Rect

SDL_Color ScoreColor;

//Coordinate del testo e colore;

ScoreRect.x = 300;

ScoreRect.y = 5;

ScoreColor.r = ScoreColor.g = ScoreColor.b = 255;

//Set figure

SDL_Rect Player;

SDL_Rect Player2;

SDL_Rect Ball;

//Coordinate delle racchette e palline

Player.x = 5;

Player2.x = 625;

Ball.x = static_cast<int>(BallX);

Ball.y = static_cast<int>(BallY);

//Forma delle racchette e pallina

Player.h = Player2.h = 60;

Player.w = Player2.w = 10;

Ball.h = Ball.w = 10;

//Titolo Applicazione

SDL_WM_SetCaption(“Ping Pong By: Nunez”, “Titolo”);

//Input tasti

Uint8 *keys = SDL_GetKeyState(NULL);

//Tempo

Uint32 old_time, current_time; //Set del tempo

float ftime; 

current_time = SDL_GetTicks();

//Evento

SDL_Event event;

run=true;

while(run) {

while(cont[1]<5 && cont[2]<5) 

{

//In caso di chiusura

if (SDL_PollEvent(&event)) {

if (event.type == SDL_QUIT)

break;

}

//Testo
//Calcolo di tempi

old_time = current_time;

current_time = SDL_GetTicks();

ftime = (current_time – old_time) / 1000.0f;

//Premuta tassti e tempi

if(keys[SDLK_DOWN])

{

Player2Y += SPEEDP * ftime;

if(Player2Y>305)

Player2Y=305.0f;

if(keys[SDLK_UP])

{

Player2Y -= SPEEDP * ftime;

if(Player2Y<15)

Player2Y=15.0f;

Player2.y = static_cast<int>(Player2Y);

if(keys[SDLK_s])

{

PlayerY += SPEEDP * ftime;

if(PlayerY>305)

PlayerY=305.0f;

if(keys[SDLK_w])

{

PlayerY -= SPEEDP * ftime;

if(PlayerY<15)

PlayerY=15.0f;

Player.y = static_cast<int>(PlayerY);

//Avvio Andamento Pallina

if(event.type == SDL_MOUSEBUTTONDOWN)

{

if(event.button.button == SDL_BUTTON_LEFT)

{

if(casual==0) {

runD=true;

runA=true;

}

if(casual==1) {

runD=true;

runB=true;

}

if(casual==2) {

runS=true;

runA=true;

}

if(casual==3) {

runS=true;

runB=true;

}

}

}

if(event.type == SDL_MOUSEBUTTONDOWN)

{

if(event.button.button == SDL_BUTTON_RIGHT)

{

runD=false;

runB=false;

runA=false;

runS=false;

}

}

//Andamento Pallina 

if(runD) {

BallX += (SPEED);

Ball.x = static_cast<int>(BallX);

}

if(runS) {

BallX -= (SPEED);

Ball.x = static_cast<int>(BallX);

}

if(runA) {

BallY -= (SPEED);

Ball.y = static_cast<int>(BallY);

}

if(runB) {

BallY += (SPEED);

Ball.y = static_cast<int>(BallY);

}

//Rimbalzo

if(Ball.y>=345) {

runB=false;

runA=true;

}

if(Ball.y<=35) {

runB=true;

runA=false;

}

if(Ball.x<=Player.x+Ball.w && Ball.x>=Player.x-Player.w) {

if(Ball.y<=Player.y+Player.h && Ball.y>=Player.y) {

SPEED+=rand()%35;

runS=false;

runD=true;

}

}

if(Ball.x>=Player2.x-Player.w && Ball.x<=Player2.x+Player2.w) {

if(Ball.y<=Player2.y+Player.h && Ball.y>=Player2.y) {

SPEED+=rand()%35;

runS=true;

runD=false;

}

}

if(Ball.x<Player.x+Player.w) {

cont[1]++;

BallX = 300;

BallY = rand()%300;

sprintf(punt, “%d – %d”, cont[2], cont[1]);

ScoreSurface = TTF_RenderText_Solid(font, punt, ScoreColor);

casual = rand()%4;

SPEED = 81+rand()%151; 

}

if(Ball.x>Player2.x-Player2.w) {

cont[2]++;

BallX = 300;

BallY = rand()%300;

sprintf(punt, “%d – %d”, cont[2], cont[1]);

ScoreSurface = TTF_RenderText_Solid(font, punt, ScoreColor);

casual = rand()%4;

SPEED = 81+rand()%151;

}

//Display dello sfondo

if (SDL_FillRect(display, 

NULL,

SDL_MapRGB( display->format, 0,0,0))

!= 0)

{

cerr << “SDL_Fillsnake() Fallita: ” << SDL_GetError() << endl;

break;

}

SDL_BlitSurface( ScoreSurface , NULL , display , &ScoreRect );
//Display delle racchette e pallina

if (SDL_FillRect(display, 

&Player,

SDL_MapRGB(display->format, 255,0,0))

!= 0 || SDL_FillRect(display, 

&Player2,

SDL_MapRGB(display->format, 255,0,0))

!= 0 || SDL_FillRect(display, 

&Ball,

SDL_MapRGB(display->format, 255,255,255))

!= 0) {

cerr << “SDL_FillRect() Fallita: ” << SDL_GetError() << endl;

break;

}

else {

SDL_Flip(display);

}

}

_sleep(100);

run = false;

}

TTF_Quit();

SDL_Quit();

return 0;

}

 
Annunci
Contrassegnato da tag , , ,

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

%d blogger hanno fatto clic su Mi Piace per questo: