Kuten otsikossa mainitsin, kyseessä on pong-klooni
# Pong v0.1 Makefile CC = gcc -Wall -ansi -pedantic CFLAGS = -g `sdl-config --cflags --libs` -Wall -ansi SRC = main.c TARGET = Pong all: $(TARGET) $(TARGET): $(SRC) $(CC) $(CFLAGS) -o $(TARGET) $(SRC) clean: rm -f pong rm -f core # Aleksander Tervanotko # 21.04.2005 <stWasm1.0@gmail.com>
/*************************************************************************** main.c - pong-clone ------------------- begin : 21.04.2005 copyright : (C) 2005 by Aleksander "stWasm1.0" Tervanotko email : <stWasm1.0@gmal.com> ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ /* sisällytettävät kirjastot */ #include <SDL/SDL.h> /*/ VAKTIOT ///////////////////////////////////////////////////////////////////*/ #define NAYTON_KORKEUS 768 #define NAYTON_LEVEYS 1024 /* mailojen sijainti y-akselilla */ #define MAILA1_Y 30 #define MAILA2_Y 728 /* mailojen korkeus ja leveys */ #define MAILAN_KORKEUS 30 #define MAILAN_LEVEYS 100 /* pallon korkeus ja leveys */ #define PALLON_LEVEYS 10 #define PALLON_KORKEUS 10 /*/ MUUTTUJAT ////////////////////////////////////////////////////////////////*/ /* pinnat */ SDL_Surface *naytto = NULL; int lopetus = 0; SDL_Event tapahtuma; Uint8 *nappi; /* mailojen sijainti x-akselilla (y on vakio) */ int maila1_x = 462; int maila2_x = 462; /* pallon tiedot */ int pallo_x = 500; int pallo_y = 70; int pallo_xv = 4; int pallo_yv = 4; SDL_Rect alue; /*/ FUNKTIOT /////////////////////////////////////////////////////////////////*/ /* --- Suoritetaan kaikki alustustoimenpiteet täällä ***************************/ void Alustus( void ) { /* alustetaan SDL */ SDL_Init( SDL_INIT_VIDEO ); /* asetetaan näyttötila */ naytto = SDL_SetVideoMode(1024, 768, 32, SDL_HWSURFACE|SDL_FULLSCREEN|SDL_DOUBLEBUF); /* * tässä minä tavallisesti lataan kaikki tarvittavat bittikartat ja tulostan logon, * mutta nyt vältän käyttämästä bittikarttoja */ } /* --- Haetaan pelaajan syöte ********************************************/ void Hae_Pelaajan_Syote( void ) { SDL_PollEvent( &tapahtuma ); if( tapahtuma.type == SDL_QUIT ) lopetus = 1; if( tapahtuma.type == SDL_KEYDOWN ) { if( tapahtuma.key.keysym.sym == SDLK_ESCAPE) lopetus = 1; } nappi = SDL_GetKeyState( NULL ); if( nappi[SDLK_LEFT] ) { /* siirretään maila 1 */ maila1_x -= 7; /* testataan mennäänkö rajojen ulkopuolelle */ if( maila1_x < 2 ) maila1_x = 2; } if( nappi[SDLK_RIGHT] ) { /* siirretään maila 1 */ maila1_x += 7; /* testataan mennäänkö rajojen ulkopuolelle */ if( maila1_x > 922 ) maila1_x = 922; } if( nappi[SDLK_a] ) { /* siirretään maila 2 */ maila2_x -= 7; /* testataan mennäänkö rajojen ulkopuolelle */ if( maila2_x < 2 ) maila2_x = 2; } if( nappi[SDLK_d] ) { /* siirretään maila 2 */ maila2_x += 7; /* testataan mennäänkö rajojen ulkopuolelle */ if( maila2_x > 922 ) maila2_x = 922; } } /* --- Tarkistetaan kaikki törmäykset ********************************************/ void Tarkista_Tormaukset( void ) { /* tarkistetaan vasen ja oikea reuna */ if( ( pallo_x < 2 ) || ( pallo_x > 1012 ) ) pallo_xv = -pallo_xv; /* tarkistetaan ylä- ja alareunat */ if( ( pallo_y < 2 ) || ( pallo_y > 756 ) ) pallo_yv = -pallo_yv; /* tarkistetaan ensimmäinen maila */ if( ( pallo_x > maila1_x ) && ( pallo_x < (maila1_x+100) ) && ( pallo_y > MAILA1_Y ) && ( pallo_y < (MAILA1_Y+30) ) ) pallo_yv = -pallo_yv; /* tarkistetaan toinen maila */ if( ( pallo_x > maila2_x ) && ( pallo_x < (maila2_x+100) ) && ( pallo_y > MAILA2_Y ) && ( pallo_y < (MAILA2_Y+30) ) ) pallo_yv = -pallo_yv; /* tarkistetaan voitto */ if ( ( pallo_y < 2 ) || ( pallo_y > 756 ) ) lopetus = 1; } /* --- Piirretään molemmat mailat ***********************************************/ void Piirra_Mailat( void ) { /* piirretään ensmmäinen maila */ alue.x = maila1_x; alue.y = MAILA1_Y; alue.h = MAILAN_KORKEUS; alue.w = MAILAN_LEVEYS; SDL_FillRect( naytto, &alue, SDL_MapRGB(naytto->format, 100, 100, 100) ); /* ja nyt toinen maila */ alue.x = maila2_x; alue.y = MAILA2_Y; SDL_FillRect( naytto, &alue, SDL_MapRGB(naytto->format, 200, 200, 200) ); } /* --- Päivitetään pallon paikka ************************************************/ void Paivita_Pallo( void ) { pallo_x += pallo_xv; pallo_y += pallo_yv; } /* --- Tyhjennetään puskuri ******************************************************/ void Tyhjenna_Puskuri( void ) { alue.x = 0; alue.y = 0; alue.h = NAYTON_KORKEUS; alue.w = NAYTON_LEVEYS; SDL_FillRect( naytto, &alue, SDL_MapRGB(naytto->format, 0, 0, 0) ); } /* --- Piirretään pallo *********************************************************/ void Piirra_Pallo( void ) { alue.x = pallo_x; alue.y = pallo_y; alue.h = PALLON_KORKEUS; alue.w = PALLON_LEVEYS; SDL_FillRect( naytto, &alue, SDL_MapRGB(naytto->format, 20, 68, 87) ); } /* --- Jokaisen ohjelman keskus *************************************************/ int main( int argc, char *argv[] ) { /* suoritetaan kaikki alustustoimenpiteet täällä */ Alustus(); while( lopetus == 0 ) { /* tyhjennetään puskuri */ Tyhjenna_Puskuri(); /* haetaan pelaajan syöte */ Hae_Pelaajan_Syote(); /* päivitetään pallon paikka */ Paivita_Pallo(); /* tarkistetaan mahdolliset virheet */ Tarkista_Tormaukset(); /* piirretään mailat */ Piirra_Mailat(); /* piirretään pallo */ Piirra_Pallo(); /* Pyöräytetään pinnat */ SDL_Flip( naytto ); } /* suljetaan SDL */ SDL_Quit(); return 0; }
Aihe on jo aika vanha, joten et voi enää vastata siihen.