Jogo em C

Relembrando a programação de C, decidi fazer um pequeno jogo.
Utilizando, obviamente, o  programa Dev C++.



Download AQUI.
Código:



#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <windows.h>
#include "psi_tools.h"
#include <ctype.h>

#define y_ultimo 80
#define n_inimigos 10
#define jogo_numero 20
#define x 2
#define cls system("cls");

struct ultimo{
        int pos_x;
        int pos_bala;
        int pos_bala_y;
};
struct inimigos{
            int pos_i_y;
            int pos_i_x;
};
struct jogador{
            char nome[50];
            int pos_y;
            int pontuacao;              
};
struct tiro{
            int pos_bala;
            int pos_bala_y;
            int disparou;
};

struct ultimo ultimo;
struct tiro bala;
struct jogador dados_j[50];
struct inimigos alien[n_inimigos];          

char nave='b';
char cart='-';

int n_jogo=0;
int contar=0; // variavel aplicada ao ultimo (mover)

///////////////////////////////////////

void desenhar_alien(void);
void introducao (void);
void menu (void);
void move_cima (void);
void move_baixo (void);
void posicao_inicial(void);
void dispara(void);
void cordenar_inimigos(void);
void move_jogo(void);
void move_alien(void);
void matar_inimigo(void);
void ecolher_nave(void);
void controlos (void);
void pontuacao(void);
void melhor_pontuacao(void);
void limpar_pontuacoes(void);
void game_over(int &parar);
void posicao_inicial_ultimo(void);
void mover_ultimo(void);
void mover_ultimo_cima(void);
void mover_ultimo_baixo(void);
void diparar_ultimo(void);
void ordenar_pontuacoes(void);

////////////////////////////////////////
int main (int argc,char* argv[])
{
    limpar_pontuacoes();
    bala.disparou=0;
    ultimo.pos_bala=1;  
    menu();
}
////////////////////////////////////
void introducao (void)
{
  cls;
  printf("Ola capitao, para comecar esta  aventura pelo espaco\nvou precisar de saber o teu nome\nNome: ");
  _flushall();
  le_string(dados_j[n_jogo].nome,13,7,3);
  cls;
  printf("Capitao ");
  printf("%s",dados_j[n_jogo].nome);
  printf(" seja bem vindo a SpaceShipOne a nave mais veloz do mundo.\nEsperemos que esteja a altura de a comandar\nA equipa conta consigo\n");
  printf("\nPrima uma tecla para comecar a aventura\n");
  getch();
  move_jogo();
}
////////////////////////////////////
void menu (void)
{
  char *opcoes[]={
           "|          Jogar               |",
           "|       Mudar a nave           |",
           "|        Controlos             |",
           "|        Pontuacao             |",
           "|        Terminar              |"
               
  };
int op;
       do{
        op=menu(opcoes,5,30,8,AZUL,BRANCO);
        if(op==1){
             introducao();
             n_jogo++;
        }  
        if(op==2) ecolher_nave();
        if(op==3) controlos();
        if(op==4) ordenar_pontuacoes();
       }while(op!=5);      
}
////////////////////////////////////////////
void move_cima (void)
{
 if(dados_j[n_jogo].pos_y>2)
    dados_j[n_jogo].pos_y--;

}
/////////////////////////////////////////
void move_baixo (void)
{
  if(dados_j[n_jogo].pos_y<=23)
    dados_j[n_jogo].pos_y++;
}
////////////////////////////////////////
void move_jogo (void)
{
 char tecla;
 int parar=0;

          posicao_inicial();
          posicao_inicial_ultimo();
          cordenar_inimigos();
          do{  
             cls;
             goto_xy(x,dados_j[n_jogo].pos_y);
             printf("%c",nave);
             tecla=0;
             desenhar_alien();
             if(kbhit()){
                 tecla=getch();    
                 tecla=tolower(tecla);
             }
             if(tecla==27){
                    cls;
                    goto_xy(10,14);
                    printf("Tem a certeza que quer sair?(S,N)");
                    tecla=getch();    
                    tecla=tolower(tecla);
                    if(tecla=='s')
                        break;
             }
             if(tecla=='s' || tecla=='w' || tecla=='f'){
                  if(tecla=='w'){
                      move_cima();
                      goto_xy(x,dados_j[n_jogo].pos_y);
                      printf("%c",nave);
                 }if(tecla=='s'){
                      move_baixo();
                      goto_xy(x,dados_j[n_jogo].pos_y);
                      printf("%c",nave);
                 }if(bala.disparou==0)
                       if(tecla=='f'){
                             Beep(2000,100); //faz um som com uma frequenca de 2000 Hertz e com  100 milisegundos de duraçao
                             bala.pos_bala=3;
                             bala.disparou=1;// esta a bala a executar
                             bala.pos_bala_y=dados_j[n_jogo].pos_y;
                             bala.pos_bala=x;
                             move_alien();
                       }
             }
             dispara();
             pontuacao();
             game_over(parar);
             mover_ultimo();
             diparar_ultimo();
             if(parar==1)
                  break;
         }while(dados_j[n_jogo].pontuacao!=10);
         cls;
         if(dados_j[n_jogo].pontuacao==10)
            printf("Conseguiste ganhar \nMas nada de excesso de confianca ainda ha muito trabalho a fazer\n");
         if(parar==1)
            printf("Nao acredito, destruiste a minha querida nave \nIsto ira ter consequencias \n");
         system("pause");
}
//////////////////////////////////////////
void posicao_inicial(void)
{
    dados_j[n_jogo].pos_y=11;
    goto_xy(x,dados_j[n_jogo].pos_y);
    printf("%c",nave);
    for(int i=0;i<n_inimigos;i++)
      alien[i].pos_i_x=79;
 
}
///////////////////////////////////////////
void dispara (void)
{
 
    if(bala.disparou==1){  
       bala.pos_bala++;  
       goto_xy(bala.pos_bala,bala.pos_bala_y);
       printf("%c",cart);
       matar_inimigo();
    }
    if(bala.pos_bala>=81)
        bala.disparou=0;
    if(bala.pos_bala==ultimo.pos_bala && bala.pos_bala_y==ultimo.pos_bala_y
       || bala.pos_bala==ultimo.pos_bala-1 && bala.pos_bala_y==ultimo.pos_bala_y
       || bala.pos_bala==ultimo.pos_bala+1 && bala.pos_bala_y==ultimo.pos_bala_y){
         bala.disparou=0;
    }
}
///////////////////////////////////////////////
void desenhar_alien(void)
{

int i;

   for(i=0;i<n_inimigos;i++){    
        if(alien[i].pos_i_x!=0 && alien[i].pos_i_y!=0){  
            cor_texto(PRETO);
            goto_xy(alien[i].pos_i_x,alien[i].pos_i_y);
             printf("X");
        }
   }

}
//////////////////////////////////////////////
void cordenar_inimigos()
{
                   alien[0].pos_i_y=10;
                   alien[1].pos_i_y=16;
                   alien[2].pos_i_y=4;
                   alien[3].pos_i_y=9;
                   alien[4].pos_i_y=20;
                   alien[5].pos_i_y=22;
                   alien[6].pos_i_y=18;
                   alien[7].pos_i_y=13;
                   alien[8].pos_i_y=3;
                   alien[9].pos_i_y=7;                  
}
///////////////////////////////////////////////////
void move_alien(void)
{
    for(int i=0;i<n_inimigos;i++){    
       if(alien[i].pos_i_x!=0 && alien[i].pos_i_y!=0){
           alien[i].pos_i_x--;
           alien[i].pos_i_x--;
           goto_xy(alien[i].pos_i_x,alien[i].pos_i_y);
           printf("X");
       }
    }
}
///////////////////////////////////////////
void matar_inimigo(void)
{
   for(int i=0;i<n_inimigos;i++)
      if(bala.pos_bala==alien[i].pos_i_x && bala.pos_bala_y==alien[i].pos_i_y){
         alien[i].pos_i_x=0;
         alien[i].pos_i_y=0;
         bala.disparou=0;
         break;
      }
}
/////////////////////////////////////////////
void ecolher_nave(void)
{
    cls;
    printf(" A SpaceShipOne deixa-te produzir um modelo  da nave:\n\n ");
    printf("Escolhe tua nave: ");
    scanf("%c",&nave);
    printf("Escolhe o teu missil: ");
    _flushall();
    scanf("%c",&cart);
    menu();  
}
////////////////////////////////////////////////
void controlos (void)
{
  char sair;
          do{
            cls;
            printf("Constrolos\n");
            printf("W - Mover a nave para cima\n");
            printf("S - Mover a nave para baixo\n");
            printf("F - Disparar\n");
            printf("Prime Esc para sair");
            sair=getch();
         }while(sair!=27);
}
/////////////////////////////////////////////////
void pontuacao(void)
{
    dados_j[n_jogo].pontuacao=0;
    for(int i=0;i<n_inimigos;i++)  
       if(alien[i].pos_i_x==0 && alien[i].pos_i_y==0)
             dados_j[n_jogo].pontuacao++;
    goto_xy(1,1);
    printf("Pontuacao: %d",dados_j[n_jogo].pontuacao);
}
///////////////////////////////////////////////////
void limpar_pontuacoes(void)
{
  for(int i=0;i<jogo_numero;i++)
        dados_j[n_jogo].pontuacao=0;    
}
//////////////////////////////////////////////////
void game_over(int &parar)
{
      for(int i=0;i<n_inimigos;i++)  
        if(alien[i].pos_i_x==x)
           dados_j[n_jogo].pontuacao=10;
      if(ultimo.pos_bala_y==dados_j[n_jogo].pos_y && ultimo.pos_bala==x)
           parar=1;  
}
///////////////////////////////////////////////////////
void posicao_inicial_ultimo(void)
{
    ultimo.pos_x=3;
    goto_xy(y_ultimo,ultimo.pos_x);
    printf("A");  
}
//////////////////////////////////////////////////////////
void mover_ultimo(void)
{
           
             if(ultimo.pos_x==3)
                    contar=1;                  
             if(ultimo.pos_x>21)
                     contar=2;                  
             mover_ultimo_cima();
             mover_ultimo_baixo();
             goto_xy(y_ultimo,ultimo.pos_x);
             printf("A");
       
   
}
////////////////////////////////////////////////////////////
void mover_ultimo_cima(void)
{
    if(contar==2)
        ultimo.pos_x--;  
}
//////////////////////////////////////////////////////////
void mover_ultimo_baixo(void)
{
     if(contar==1)
        ultimo.pos_x++;
}
////////////////////////////////////////////////////////////
void diparar_ultimo(void)
{
        if(bala.pos_bala==ultimo.pos_bala && bala.pos_bala_y==ultimo.pos_bala_y
         || bala.pos_bala==ultimo.pos_bala-1 && bala.pos_bala_y==ultimo.pos_bala_y
         || bala.pos_bala==ultimo.pos_bala+1 && bala.pos_bala_y==ultimo.pos_bala_y )
              ultimo.pos_bala=1;
        if(ultimo.pos_bala==1){
              ultimo.pos_bala_y=ultimo.pos_x;
              ultimo.pos_bala=79;
        }
        if(ultimo.pos_x!=1){
             goto_xy(ultimo.pos_bala--,ultimo.pos_bala_y);
             printf("*");
        }

}
////////////////////////////////////////////////////////////
void ordenar_pontuacoes(void)
{
 char sair;
  do{
      cls;
      for(int i=0;i<n_jogo;i++)  
         if(dados_j[i].pontuacao==10)
             printf(" %s %d\n",dados_j[i].nome,dados_j[i].pontuacao);
      for(int i=0;i<n_jogo;i++)  
         if(dados_j[i].pontuacao==9)
              printf(" %s %d\n",dados_j[i].nome,dados_j[i].pontuacao);
      for(int i=0;i<n_jogo;i++)  
         if(dados_j[i].pontuacao==8)
             printf(" %s %d\n",dados_j[i].nome,dados_j[i].pontuacao);
      for(int i=0;i<n_jogo;i++)  
         if(dados_j[i].pontuacao==7)
             printf(" %s %d\n",dados_j[i].nome,dados_j[i].pontuacao);
      for(int i=0;i<n_jogo;i++)  
         if(dados_j[i].pontuacao==6)
             printf(" %s %d\n",dados_j[i].nome,dados_j[i].pontuacao);
      for(int i=0;i<n_jogo;i++)  
         if(dados_j[i].pontuacao==5)
              printf(" %s %d\n",dados_j[i].nome,dados_j[i].pontuacao);
      for(int i=0;i<n_jogo;i++)  
         if(dados_j[i].pontuacao==4)
             printf("%s %d\n",dados_j[i].nome,dados_j[i].pontuacao);
      for(int i=0;i<n_jogo;i++)  
         if(dados_j[i].pontuacao==3)
             printf(" %s %d\n",dados_j[i].nome,dados_j[i].pontuacao);
      for(int i=0;i<n_jogo;i++)  
         if(dados_j[i].pontuacao==2)
             printf(" %s %d\n",dados_j[i].nome,dados_j[i].pontuacao);
      for(int i=0;i<n_jogo;i++)  
         if(dados_j[i].pontuacao==1)
             printf(" %s %d\n",dados_j[i].nome,dados_j[i].pontuacao);
      for(int i=0;i<n_jogo;i++)  
        if(dados_j[i].pontuacao==0)
             printf(" %s %d\n",dados_j[i].nome,dados_j[i].pontuacao);          
      printf("\nPrime Esc para sair");
      sair=getch();
  }while(sair!=27);
}

Sem comentários: