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.