Jogo defutebol simples (com gráficos)

Publicado por Samuel Leonardo 17/12/2008

[ Hits: 10.727 ]

Homepage: localhost

Download PING_PONG_LINUX.tar.gz




Jogo clone do famoso pong, um joguinho muito antigo inventado pelos  criadores da empresa Atari; fez muito sucesso nos anos 70.

Acompanha uma versão pré-compilada.

Para compilar: gcc -o pong pong.c -lSDL
Para executar: ./pong

t++!!!

  



Esconder código-fonte

// desenvolvido por Samuel Leonardo (Sam L.) -> 14/12/2008
// 
// JOGO SIMPLES DE "FUTEBOL" NO ESTILO DO GAME CLASSICO PONG.
// GAME ALTO AJUSTÁVEL, OU SEJA, SE VOCE MUDAR O TAMANHO DE QUALQUER IMAGEM DO JOGO
// NÃO PRECISARÁ MUDAR NADA NO CODIGO FONTE.
//  ATENÇÃO: VOCE PRECISA BAIXAR OS ARQUIVOS DAS IMAGENS DO JOGO.

#include <stdio.h>
#include <SDL/SDL.h>

void ControlaFPS(int delay)
{
   delay = SDL_GetTicks() - delay;
if(delay < 60)
    SDL_Delay(60 - delay);
}


int main(int argc, char *argv[])
{
 char player[30];
 printf("COMANDOS:\n");
 printf("\t-Setas para cima e para baixo controlam o paddle.\n");
 printf("\t-Barra de espaço (Re)inicia o jogo.\n");
 printf("\t-Botão 'x' aumenta ou diminui a velocidade da bola.\n");
 printf("\t-Botão 'Esc' finaliza o jogo.\n");
 printf("\tVoce se encontra à esquerda\n");
 printf("Digite seu nome:\n");
 scanf(" %[^\n]s",&player);
 
 system("clear");
 printf("Galvão_Bueno: \n\t -Bem amigos da rede Globo vai começar a partida\n");
 printf("\tentre '%s' e CPU pela copa Linux de futebol virtual.\n\n", player);
sleep(1);
 printf("Sam L.: -PUXA VIDA ESSA FOI DE LASCAR!:P hehehe!!!\n\n");
 
 
 SDL_Init(SDL_INIT_VIDEO);
 SDL_Surface *screen, *paddle, *ball, *campo;
 
 //posicões dos jogadores e da bola
 SDL_Rect jogador, cpu, ball_dst;
 
 paddle = SDL_LoadBMP("paddle.bmp");
 ball   = SDL_LoadBMP("bola.bmp");
 campo  = SDL_LoadBMP("campo.bmp");
 
 jogador  = (SDL_Rect){0,campo->h/2,paddle->w,paddle->h};
 cpu      = (SDL_Rect){(campo->w - paddle->w),campo->h/2,paddle->w,paddle->h};
 ball_dst = (SDL_Rect){campo->w/2,campo->h/2,ball->w,ball->h};
 screen = SDL_SetVideoMode(campo->w,campo->h,16,SDL_SWSURFACE | SDL_ANYFORMAT);


 int velo_x=5,velo_y=5, iniciar=0;
 int ponto_cpu=0,ponto_player=0;
 int fim=0, tempo_agora;

 while(fim == 0)
 {
 tempo_agora = SDL_GetTicks();
 
  Uint8 *teclado;
  SDL_PumpEvents();
  teclado = SDL_GetKeyState(0);
//COMEÇAR O JOGO?
  if(teclado[SDLK_SPACE])
      iniciar = 1;
//TERMINAR O JOGO?
  if(teclado[SDLK_ESCAPE])
      fim = 1;

//ALMENTAR OU DIMINUIR A VELOCIDADE DO JOGO?
  if((teclado[SDLK_x]))
     {
      velo_x = velo_x + 1;
      velo_y = velo_y + 1;
     }


//CONTROLA O JOGADOR
  if((teclado[SDLK_UP])&&(jogador.y > 0))
     jogador.y = jogador.y - 13;
  if((teclado[SDLK_DOWN])&&(jogador.y + jogador.h < campo->h))
     jogador.y = jogador.y + 13;

//MOVIMENTA A BOLA E A CPU
  if(iniciar == 1)
     {
      ball_dst.x = ball_dst.x + velo_x;
      ball_dst.y = ball_dst.y + velo_y;
   //I.A. da CPU
      cpu.y = ball_dst.y - 5;
     }

  
//REBATENDO A BOLA NAS BORDAS DO CAMPO
  if((ball_dst.y + velo_y < 0) || (ball_dst.y + velo_y + ball_dst.h > campo->h))
       velo_y = -velo_y;
//CONTANDO OS PONTOS...
//...CONTRA O JOGADOR OU CONTRA A CPU...
//... E REBATENDO A BOLA NAS LATERAIS DO CAMPO

    if((ball_dst.y + velo_y <= jogador.y + jogador.h)  && 
       (ball_dst.y + velo_y + ball_dst.h >= jogador.y) &&
       (ball_dst.x + velo_x <= jogador.x + jogador.w))
        {
         velo_x = -velo_x;
         printf("Galvão_Bueno: \n\t-'%s' rebate a bola!!!\n", player);
        }
else
  {
   if(ball_dst.x + velo_x < 0)
        {
         iniciar = 0;
         ball_dst.x = campo->w/2;
         ball_dst.y = campo->h/2;
         ponto_cpu++;
         printf("Galvão_Bueno:\n\t -Goool da CPU!!!\n");
        }
  }


    if((ball_dst.y + velo_y <= cpu.y + cpu.h)      &&
       (ball_dst.y + velo_y + ball_dst.h >= cpu.y) &&
       (ball_dst.x + velo_x + ball_dst.w >= cpu.x))
        {
         velo_x = -velo_x;
         printf("Galvão_Bueno: \n\t-CPU rebate a bola!!!\n");
        }
    else
        {
         if(ball_dst.x + velo_x + ball_dst.w > campo->w)
           {
            iniciar = 0;
            ball_dst.x = campo->w/2;
            ball_dst.y = campo->h/2;
            ponto_player++;
            printf("Galvão_Bueno:\n\t -Goooool eeeeeehhhh do '%s'!!!\n", player);
           }
        }

 SDL_BlitSurface(campo,NULL,screen,NULL);
 SDL_BlitSurface(paddle,NULL,screen,&jogador);
 SDL_BlitSurface(paddle,NULL,screen,&cpu);
 SDL_BlitSurface(ball,NULL,screen,&ball_dst);
 SDL_Flip(screen);
 
 ControlaFPS(tempo_agora);
}

SDL_Quit();
printf("Galvão_Bueno: \n\t-Com o placa de '%s' %d X %d CPU\n",player,ponto_player,ponto_cpu);
printf("\t-Terminamos mais um jogo de '%s' contra CPU.\n", player);
return 0;
}

Scripts recomendados

Controle de estoque com listas

S. MarioBros - Editor de fase 0.1

[C] Fatorial ilimitado

Arquivos utilizados no artigo: "Desenvolvendo um plugin para o XMMS"

Ordenar sequência de números


  

Comentários
[1] Comentário enviado por slackmen em 17/12/2008 - 19:34h

Ta ae gostei desse teu jogo. Pensei q era em OpenGL mas vi q eu em SDL somente. Gostei hehehehe

[2] Comentário enviado por SamL em 12/06/2009 - 22:16h

.

[3] Comentário enviado por coelhoposa em 27/02/2012 - 17:42h

ei, samuel, estava pensando se podia incluir alguns jogos seus no SimplyOS. Se deixar fazer isso, coloco o jogo na Distro e coloco o seu nome na lista dos colaboradores

[4] Comentário enviado por SamL em 29/02/2012 - 14:05h

Cara te enviei um email pelo VOL. Perguntei quando é o lançamento da distro, para poder "ajustar" os games.

[5] Comentário enviado por removido em 30/06/2012 - 16:26h

bom demais!!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts