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();
}
}