Gráfico.C - Gigaflops
Transcrição
Gráfico.C - Gigaflops
/**************************************************************************** ** Módulo Grafico.c ** ** Autor: Leonardo Neves ** ** Este módulo contém as funções responsáveis por imprimir na tela os ** ** diversos componentes do jogo. Além de funções que recebem a ação do ** ** jogador. ** ** Funções presentes neste módulo: ** ** void pintarTela() ** ** void apagarCelula(TCoord Posicao) ** ** void pintarCabeca(TCoord Posicao, int Direcao) ** ** void pintarSerpente(TCoord Cabeca,TCoord Rabo) ** ** void pintarChave(TCoord Ponto) ** ** void receberAcao(int *Direcao,int Vel) ** ** void pausar() ** ** void inicializarModoGrafico() ** ** void finalizarModoGrafico() ** ** void fimdoJogo(int Pontos) ** ****************************************************************************/ /* Inclusão de bibliotecas padrão*/ #include <graphics.h> #include <stdlib.h> #include <stdio.h> #include <conio.h> #include <dos.h> /* Inclusão do módulo de definição*/ #include "DEF_SERP.H" /* Inclusão deste próprio módulo, informando que ele é o módulo servidor*/ #define GRA_SER #include "GRA_MOD.H" #undef GRA_SER /* Inclusão de módulos auxiliares*/ #include "LOG_MOD.H" /* Constrói a tela do jogo*/ void pintarTela() { settextstyle(0,0,2); setcolor(1); outtextxy(170,70,"J e"); setcolor(2); outtextxy(170,70," o t "); setcolor(4); outtextxy(170,70," g n "); setcolor(5); outtextxy(170,70," o e "); setcolor(11); outtextxy(170,70," p "); setcolor(10); outtextxy(170,70," d r "); setcolor(12); outtextxy(170,70," a e "); setcolor(13); outtextxy(170,70," S "); settextstyle(0,0,1); setcolor(4); outtextxy(130,340,"Todos os direitos reservados a Leonardo Neves"); outtextxy(1,200,"Controles:"); outtextxy(5,220,"Setas -> Move a serpente"); outtextxy(5,230,"Espaco -> Pausa o jogo"); setcolor(1); rectangle(199,149,401,261); } /* Apaga uma célula (a última) após o movimento da serpente*/ void apagarCelula(TCoord Posicao) { setfillstyle(0,0); bar(Posicao.x,Posicao.y,Posicao.x+10,Posicao.y+10); } /* Pinta no monitor a nova posição para a cabeça da serpente*/ void pintarCabeca(TCoord Posicao, int Direcao) { setfillstyle(9,2); bar(Posicao.x+1,Posicao.y+1,Posicao.x+9,Posicao.y+9); switch (Direcao){ case 1: bar(Posicao.x+1,Posicao.y+9,Posicao.x+9,Posicao.y+10); break; case 2: bar(Posicao.x+1,Posicao.y-1,Posicao.x+9,Posicao.y+1); break; case 3: bar(Posicao.x-1,Posicao.y+1,Posicao.x+1,Posicao.y+9); break; case 4: bar(Posicao.x+9,Posicao.y+1,Posicao.x+10,Posicao.y+9); break; } } /* Pinta o corpo inicial da serpente*/ void pintarSerpente(TCoord Cabeca,TCoord Rabo) { setfillstyle(9,2); bar(Rabo.x+1,Rabo.y+1,Cabeca.x+9,Cabeca.y+9); } /* Pinta o novo ponto chave no video*/ void pintarChave(TCoord Ponto) { sound(470); delay(30); nosound(); setfillstyle(6,2); bar(Ponto.x+1,Ponto.y+1,Ponto.x+9,Ponto.y+9); } /* Recebe a ação do jogador via teclado*/ void receberAcao(int *Direcao,int Vel { int DirNova, Entrada; delay(Vel); if (kbhit()){ Entrada = getch(); if (Entrada == 0){ Entrada = getch(); } } switch (Entrada){ case 72: DirNova = 1; break; case 75: DirNova = 4; break; case 77: DirNova = 3; break; case 80: DirNova = 2; break; case 32: pausar(); default: DirNova = *Direcao; break; } if ((((DirNova - *Direcao) ==1) || ((DirNova - *Direcao) ==-1)) && ((DirNova + *Direcao) != 5)){ DirNova = *Direcao; } *Direcao = DirNova; } /* Pausa o jogo*/ void pausar() { int Entrada; settextstyle(0,0,2); setcolor(10); outtextxy(260,280,"Pause"); settextstyle(0,0,1); outtextxy(145,310,"Pressione qualquer tecla para continuar..."); Entrada = getch(); if (Entrada == 0){ getch(); } setfillstyle(0,0); bar(140,270,500,330); } /* Carrega o modo gráfico no DOS*/ void inicializarModoGrafico() { /* Requere detecção automática */ int gdriver = DETECT, gmode, errorcode; /* Inicializa gráfico e variáveis locais */ initgraph(&gdriver, &gmode, ""); /* lê o resultado da inicialização */ errorcode = graphresult(); /* Se um erro ocorrer */ if (errorcode != grOk){ printf("Graphics error: %s\n", grapherrormsg(errorcode)); printf("Press any key to halt:"); getch(); exit(1); } } /* Descarrega o modo gráfico do DOS*/ void finalizarModoGrafico() { closegraph(); } /* Pinta a tela de fim do jogo*/ void fimdoJogo(int Pontos) { int Entrada = 0; double Pt; char *Pont; Pt = (double) Pontos; gcvt(Pt,3,Pont); settextstyle(0,0,1); setcolor(6); outtextxy(240,280,"Seus Pontos:"); outtextxy(340,280,Pont); outtextxy(120,300,"Fim do Jogo... Pressione ENTER para continuar..."); sound(50); delay(400); nosound(); while (Entrada != 13){ Entrada = getch(); } }