Buscamos programación de juegos sencilla y corta
#include
#include
#include
# incluir
#include
#define KEY_ESC 0x01
#define KEY_SPACE 0x39
# define KEY_UP 0x48
#define KEY_LEFT 0x4b
#define KEY_RIGHT 0x4d
#define KEY_DOWN 0x50
/*1 piedra, 2 ladrillos Bloque, 3 agua, 5 ciudad natal, 8 jugadores, 9 enemigos*/
int map[20][20]={1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,
1,9,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,1,
1,0,2,2,2,2,0,0,2,2,2,2, 0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,2,0,0,2,0,1 ,1,1,1,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,1,
1,2,2,2,2,2,2,2,0,0,0,0,0,0,0,2,2 ,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2, 0,1,
1,0,1,1,1,1,3,3,3,3,0,0,0,0,0,0,0,2,0,1 ,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, p>
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,1,
1 ,0,0,0,0,0,0,0,0,0,0,1,1,1,1,3,3,3,0,1,
1,0, 0,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0, 3,3,3,1,1,1,1,1,1,1,1,0,0,0,0,1,
1,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,2,2,0,0,0,0, 0,0,0,0,3,0,0,0,0,0,0,1,
1,0,2,2,0,0,0,0,2,2 ,2,0,0,0
,2,2,0,0,0,1,
1,0,0,0,0,0,0,8,2,5,2,0,0,0,0, 0,0,0,0,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1};
estructura f
{
int x
int
int dirección;
};
struct play
{
int x;/*coordenadas de fila*/
int y;/*coordenadas de columna*/
int dirección;/*dirección*/
struct f fire[5];/*5 balas*/ < / p>
int puntuación;/*puntuación*/
}Playone;
estructura a
{
int x ;
int y;
int color;
int dirección;
int direccióndos;/*Se utiliza para determinar si el camino tomado es Ida y vuelta*/
int fireplay;/*Variable si atacar, generada aleatoriamente*/
struct f fire
}amy[5];/ * De hecho, se pueden agregar diferentes colores a la estructura del enemigo para representar diferentes tipos de tanques*/
char key_state[128],key_pressed[128]
void Init(); ;/ *Se inicia el controlador de imagen*/
void End();/*El controlador de imagen finaliza*/
void DrawMap();/*Dibujar un mapa*/
void DrawWater(int x,int y);/*Dibujar agua*/
void DrawBrick(int x,int y);/*Dibujar ladrillo*/
void DrawTone (int x,int y);/*Dibujar una piedra*/
void DrawHome(int x,int y);/*Dibujar una ciudad natal*/
void DrawBlack( int x, int y);/*Eliminar contenido*/
void DrawPlay(int x,int y);/*Draw player*/
void DrawAmy(int x,int y,int i);/*Dibuja al enemigo*/
void Score();/*Puntuación de salida*/
void GamePlay();/*Proceso de juego*/
void GameOver();/*El juego falló*/
void TimeDelay(unsigned long microsec); /*La función de retardo pasa en el número de microsegundos*/
int GetKey (int ScanCode);/*Las funciones clave comienzan aquí*/
voidrupt far (*OldInt9Handler)();
void farrupt NewInt9();
void InstallKeyboard();
void ShutDownKeyboard();
void main(void)
{
Init()
DrawMap();
Juego();
/p>
End();
}
void TimeDelay(unsigned long microsec) /*La función de retardo pasa en el número de microsegundos*/
{
unión REGS r;
r.h.ah=0x86;
r.x.cx=microsec>>16; = microsec;
int86(0x15,&r,&r);
}
void Init()/*El controlador de imagen se inicia*/
{int gd=DETECT,gm;
initgraph(&gd,&gm,"d:\\tc\\tc");
cleardevice();
InstallKeyboard();
}
void End()/*Fin del controlador de imagen*/
{
ShutDownKeyboard ( );
closegraph();
}
void DrawTone(int x,int y)/*Dibujar una piedra*/
{
setfillstyle(SOLID_FILL,7);
bar(10x*20-9,5y*20-9,10x*29,5y) *29);
}
void DrawWater(int x,int y)/*draw water*/
{
setfillstyle(SOLID_FILL,BLUE);
bar(10x*20-9,5y*20-9,10x*29,5y*29 ); p> p>
}
void DrawBrick(int x,int y)/*Draw Brick*/
{
setfillstyle(SOLID_FILL,6
bar(10x*20-9,5y*20-9,10x*29,5y*29); (15
línea(10x*20-9,5y*20-4,10x*29,5y*20-4); >línea (10x*20-9,5y*24,10x*29,5y*24
línea(10x*20-4); ,50 +y*20-9,10x*20-4,5y*29
línea(10x*24,5y*20-9,10x); *20 +4,5y*29);
}
void DrawHome(int x,int y)/*draw ciudad natal*/
{
setcolor(0);
setfillstyle(SOLID_FILL,GREEN
fillellipse(10x*20,5y*20,9); ,9 );
}
void DrawBlack(int x,int y)/*Eliminar contenido*/
{
setcolor (0 );
setfillstyle(SOLID_FILL,0
barra(10x*20-9,5y*20-9,10x*29,50); +y *20
+9);
}
void DrawPlay(int x,int y)/*draw jugador*/
{
setcolor (4);/*El reproductor es rojo*/
circle(10x*20,5y*20,7);
switch(Playone.direction)/ * Determinar la dirección del jugador*/
{
caso 1:line(10x*20,5y*20,10x*20,5y*20-9 ); romper;/*upper*/
caso 2:line(10x*20,5y*20,10x*29,5y*20);break;/* derecha* /
caso 3:line(10x*20,5y*20,10x*20,5y*29);break;/*Siguiente*/
caso 4:line(10x*20,5y*20,10x*20-9,5y*20);break;/*left*/
}
}
void DrawAmy(int x,int y,int i)/*Dibuja al enemigo*/
{
if( amy.color ==12)
setcolor(12);
else if(amy.color==13)
setcolor(13); p>
else/*Aquí están los tres colores de los tanques*/
setcolor(14
circle(10x*20,5y*20, 7)
switch(amy.direction)/*determinar dirección del jugador*/
{
caso 1:line(10x*20,50 +y *20,10x*20,5y*20-9);break;/*upper*/
caso 2:line(10x*20,5y*20,10x *20 +9,5y*20);break;/*right*/
caso 3:line(10x*20,5y*20,10x*20,5y *20 +9);break;/*Siguiente*/
caso 4:line(10x*20,5y*20,10x*20-9,5y*20); break /*Izquierda*/
}
}
void Score()/*Puntuación de salida*/
{ p>
char s[10];
Playone.puntuación+=10;
sprintf(s,"%d",Playone.puntuación
<); p> setfillstyle(SOLID_FILL,0);bar(550,100,640,130);
settextstyle(0,0,2);
setcolor(AMARILLO); /p >
outtextxy(550,115,s);
}
void DrawMap()/*Dibujar un mapa*/
{int i, j,k ;
para(i=0;i<20;i++)
{
para(j=0;j<20;j++)
if(map[j]==1)
DrawTone(j,i
);
else if(mapa[j]==2)
DrawBrick(j,i
else if(mapa[j]==3)
DrawWater(j,i);
else if(map[j]==5)
DrawHome(j,i
else if(map); [j]==8)
{
Playone.x=i
Playone.y=j; dirección=1;
DrawPlay(j,i);
for(k=0;k<5;k++)
Playone.fire[k] .direction=-1;/*Las direcciones de las 5 viñetas son todas -1, lo que significa que no existen*/
}
else if(map[j]= =9)
{
amy[0].x=1;amy[0].y=1;amy[0].direction=amy[0].directiontwo= 3;/* El primer enemigo*/
amy[0].color=12
DrawAmy(j,i,0); /p>
}
for(i=1;i<5;i++)/*No aparecen enemigos*/
amy.direction=amy.fire.direction= -1 ;
outtextxy(210,450,"2003.10.1 milo_zy");
settextstyle(0,0,2);/*Primera puntuación de salida*/
setcolor(9);
outtextxy(525,80,"Puntuación");
setcolor(AMARILLO);
outtextxy(550,115,"0); ") ;
}
nulo interrupción remota NewInt9(void)
{
carácter sin firmar ScanCode,temp;
ScanCode=inportb(0x60);
temp=inportb(0x61);
salidab(0x61,temp | 0x80
salidab(0x61); ,temp & 0x7f);
if(ScanCode&0x80)
{
ScanCode&=0x7f;
key_state[ScanCode]=0;
p>
}
else
{
key_state[ScanCode]=1
; key_pressed[ScanCode]=1;
}
outportb(0x20,0x20);
}
void InstallKeyboard(void)
{
int i
for(i=0;i<128;i++)
key_s
tate=key_pressed=0;
OldInt9Handler=getvect(9); /*Valor del vector de interrupción*/
setvect(9,NewInt9) /*La dirección NewInt9 del programa de interrupción está almacenada; en el INT 09H*/ especificado en la tabla de vectores de interrupción
}
void ShutDownKeyboard(void)
{
setvect(9 ,OldInt9Handler)
}
int GetKey(int ScanCode)
{
int res; res=key_state [ScanCode]|key_pressed[ScanCode];
key_pressed[ScanCode]=0
return res; >void GameOver ()/*El juego falló*/
{
setcolor(0);
setfillstyle(SOLID_FILL,0);/*Eliminar ciudad natal* /
fillellipse(109*20,518*20,9,9);
nosound();
setcolor(ROJO);
settextstyle(0,0,4);
outtextxy(150,5,"JUEGO TERMINADO");
mientras(1)
{
if(GetKey(KEY_ESC))
descanso
}
}
void GamePlay()/*El proceso de jugar*/
{
int i,j,lose=0;/*Cuando perder es 1, significa fracaso*/
int t=0;
aleatorio();
mientras(1)
{
para (i=0 ;i<5;i++)/*Dibuja las balas enemigas*/
{
if(amy.fire.direction>0)
putpixel(100 +amy.fire.y*20,5amy.fire.x*20,11
}
for(i=0;i<=4); ;i++) /*Dibujar viñetas de jugador*/
{
if(Playone.fire.direction>0)/*mayor que 0 significa que existen viñetas de jugador*/
putpixel (10Playone.fire.y*20,5Playone.fire.x*20,11
}
TimeDelay(500000);/* Cambios de tiempo clave */
for(i=0;i<5;i++)/*Eliminar balas enemigas*/
{
if(amy. fuego. dirección>0)
putpixel(10amy.fire.y*20,5amy.fire.x*20,0);
para(i=0;i
<=4;i++)/*Eliminar jugadores y eliminar balas*/
{
if(Playone.fire.direction>0)
putpixel(100 + Playone.fire.y*20,5Playone.fire.x*20,0
}
for(i=0;i<=4;i++) / *Cambios en la posición de la bala del jugador*/
{
if(Playone.fire.direction<0)
continuar
if (Playone.fire.direction==1)
{Playone.fire.x--;Playone.fire.y=Playone.fire.y;}
else if( Playone .fire.direction==2)
{Playone.fire.y++;Playone.fire.y=Playone.fire.y;}
else if(Playone.fire. dirección ==3)
{Playone.fire.x++;Playone.fire.y=Playone.fire.y;}
else if(Playone.fire.direction==4 )
{Playone.fire.y--;Playone.fire.y=Playone.fire.y;}
/*Reduce las balas al golpear rocas o ladrillos*/ p>
if(map[Playone.fire.x][Playone.fire.y]==1)/*Golpea la piedra*/
Playone.fire.direction=-1 ;/ *La bala desaparece*/
if(map[Playone.fire.x][Playone.fire.y]==2)/*Golpea el ladrillo*/
{
Playone.fire.direction=-1;
DrawBlack(Playone.fire.y,Playone.fire.x);/*Bloquear*/
map[Playone.fire.x][Playone.fire.y]=0;/*El lugar destruido se convierte en un lugar transitable*/
}
if(map[ Playone.fire.x][Playone.fire.y]==5)/*Vuelve a casa tú solo*/
{lose=1;break;}
for(j =0;j<5;j++)
{
if(amy[j].direction<0)/*No juzgar si no existe*/ p >
continuar
if(amy[j].x==Playone.fire.x&&amy[j].y==Playone.fire.y)/*golpea al enemigo*/ < / p>
{
Playone.fire.direction=-1;
Dra.
wBlack(Playone.fire.y,Playone.fire.x);
map[Playone.fire.x][Playone.fire.y]=0;/*El lugar eliminado queda disponible Dónde go*/
amy[j].fire.direction=amy[j].direction=-1;/*Este enemigo desaparece*/
Score();/ *Salida puntuación*/
}
}
}
for(i=0;i<5;i++)/* Cambios en posición de la bala enemiga*/
{
if(amy.direction<0||amy.fire.direction<0)
continuar
p>if(amy.fire.direction==1)
{amy.fire.x--;amy.fire.y=amy.fire.y;}
si no (amy.fire.direction==2)
{amy.fire.y++;amy.fire.x=amy.fire.x;}
si no (amy.fire.direction==3)
{amy.fire.x++;amy.fire.y=amy.fire.y;}
else if(amy.fire .direction==4)
{amy.fire.y--;amy.fire.x=amy.fire.x;}
/*golpear piedras o ladrillos Reducir balas */
if(map[amy.fire.x][amy.fire.y]==1)/*Golpea una roca*/
amy. -1;/*La bala desaparece*/
if(map[amy.fire.x][amy.fire.y]==2)/*Golpea el ladrillo*/
p >{
amy.fire.direction=-1;
DrawBlack(amy.fire.y,amy.fire.x);/*Derriba el ladrillo* /
map[amy.fire.x][amy.fire.y]=0;/*El lugar destruido se convierte en un lugar transitable*/
}
if(map[amy.fire.x][amy.fire.y]==5)/*El enemigo golpea a casa*/
{lose=1;break;} p>
if(amy.fire.x==Playone.x&&amy.fire.y==Playone.y)/*hit player*/
{
for( j=0;j<5;j++)
Playone.fire[j].direction=-1;/*Las balas del jugador desaparecen*/
amy.fire .direction= -1;
DrawBlack(amy.fire.y,amy.fire.x
mapa[amy.fire.x][amy);
.fire.y]=0;/*El lugar que fue noqueado se convierte en un lugar transitable*/
lose=1;break;/*Una buena persona fracasa después de ser asesinada*/
}
}
nosound();
for(i=0;i<5;i++)/*La dirección del enemigo cambia aleatoriamente * /
{
if(amy.direction<0)
continuar
mientras(1)
{
amy.directiontwo=random(4)+1;
if(amy.direction==1&&amy.directiontwo==3)
continuar ;
if(amy.direction==3&&amy.directiontwo==1)
continuar
if(amy.direction==2&&amy.directiontwo== 4 )
continue;
if(amy.direction==4&&amy.directiontwo==2)/*Los cuatro if aquí son para determinar si hay un viaje de ida y vuelta*/ p>
continuar
if(amy.directiontwo==3&&(map[amy.x+1][amy.y]==3||map[amy.x+1][ amy. y]==1||map[amy.x+1][amy.y]==2))
continuar
if(amy.directiontwo== 1&&( mapa[amy.x-1][amy.y]==3||mapa[amy.x-1][amy.y]==1||mapa[amy.x-1][amy.y ]= =2))
continuar
if(amy.directiontwo==2&&(map[amy.x][amy.y+1]==3||mapa [amy .x][amy.y+1]==1||map[amy.x][amy.y+1]==2))
continuar
if (amy.directiontwo==4&&(mapa[amy.x][amy.y-1]==3||mapa[amy.x][amy.y-1]==1||mapa[amy. x] [amy.y-1]==2))
continuar;/*Los 4 anteriores son si encontraron paredes o agua*/
DrawBlack(amy.y, amy.x);/*Borrar el lugar original*/
amy.direction=amy.directiontwo
if(amy.direction==1)
{amy.x--;amy.y=amy.y;}
if(amy.direction==3)
{amy.x++;amy.y =amy .y;}
if(amy.direc
ción==2)
{amy.y++;amy.x=amy.x;}
if(amy.direction==4)
{ amy.y--;amy.x=amy.x;}
if(amy.x==Playone.x&&amy.y==Playone.y)/*colisión*/
perder=1;
if(map[amy.x][amy.y]==5)/*El enemigo ataca su ciudad natal*/
perder=1;
DrawAmy(amy.y,amy.x,i);/*Dibuja al enemigo*/
if(amy.fire.direction<0)
amy.fireplay=random(4);
if(amy.fireplay==1&&amy.fire.direction<0)/*Launch*/
{
amy.fire.direction=amy.direction;/*La dirección de la bala es consistente con la dirección del enemigo*/
amy.fire.x=amy.x
amy; .fire.y =amy.y;
}
romper
}
}
si; (perder)/ *No se pudo salir del bucle debido a una falla*/
{GameOver();break;}
if(GetKey(KEY_ESC))
romper
p>
if(GetKey(KEY_UP))/*Arriba*/
{
if(Playone.direction= =1&&map[Playone.x-1][Playone .y]!=1&&map[Playone.x-1][Playone.y]!=2)
{
if( map[Playone.x-1][Playone. y]==3)
continuar
DrawBlack(Playone.y,Playone.x);/*Esto si es movimiento , siempre que la dirección sea consistente con la dirección presionada */
Playone.x--;
Playone.direction=1
DrawPlay(Playone). .y,Playone.x);
}
else/*Solo ajusta la dirección del cabezal de la pistola*/
{
DrawBlack(Playone.y,Playone.x);
Playone.direction=1
DrawPlay(Playone.y,Playone.x); }
}
else if(GetKey(KEY_DOWN))/*abajo*/
{
if(Playone.direction= =3&&
amp;map[Playone.x+1][Playone.y]!=1&&map[Playone.x+1][Playone.y]!=2)
{
si (mapa[Playone.x+1][Playone.y]==3)
continuar
DrawBlack(Playone.y,Playone.x); p> Playone.x++;
Playone.direction=3;
DrawPlay(Playone.y,Playone.x
}
<); p> else{
DrawBlack(Playone.y,Playone.x
Playone.direction=3
DrawPlay); (Playone.y,Playone.x);
}
}
if(GetKey(KEY_RIGHT))/*Ir a la derecha*/ p>
{
if(Playone.direction==2&&map[Playone.x][Playone.y+1]!=1&&map[Playone.x][Playone.y+1]!= 2)
{
if(map[Playone.x][Playone.y+1]==3)
continuar
<; p> DrawBlack(Playone.y,Playone.x);Playone.y++;
Playone.direction=2
DrawPlay(Playone.y, Playone.x);
}
más
{
DrawBlack(Playone.y,Playone.x); >
Playone.direction=2;
DrawPlay(Playone.y,Playone.x
}
}
if (GetKey(KEY_LEFT))/*Ir a la izquierda*/
{
if(Playone.direction==4&&map[Playone.x][Playone.y-1]! =1&&mapa [Playone.x][Playone.y-1]!=2)
{
if(mapa[Playone.x][Playone.y-1]== 3)
continuar
DrawBlack(Playone.y,Playone.x
Playone.y--; .dirección =4;
DrawPlay(Playone.y,Playone.x
} <
/p>
else
{
DrawBlack(Playone.y,Playone.x
Playone.direction=4;
DrawPlay(Playone.y,Playone.x);
}
}
if(GetKey(KEY_SPACE))/*Disparar balas*/
{
for(i=0;i<5;i++)/*Usa un bucle para saber si hay viñetas disponibles*/
if (Playone .fire.direction<0)
{
sonido(300
Playone.fire.direction=Playone.direction;/*Dirección de bala); y tanque Misma dirección*/
Playone.fire.x=Playone.x;
Playone.fire.y=Playone.y
break;/ *encontrado Luego salta del bucle*/
}
}
if(map[Playone.x][Playone.y]==5) /*El jugador mismo golpea a casa*/
lost=1;
for(i=0;i<5;i++)/*Juzga si golpeas al enemigo debido a tu control propio*/
{
if(amy.direction<0)
continuar
if(amy.x== Playone.x&&amy.y== Playone.y)/*colisión*/
perder=1
}
if(perder)/*escapar; del bucle y fallo de visualización debido a un fallo* /
{GameOver();break;}
t++;/*Aparecerán nuevos enemigos cuando se agregue un determinado programa*/
if(t= =30) /*Es hora de agregar más enemigos*/
{t=0;
for(i=0;i< 5;i++)
if(amy.direction<0)
{
amy.direction=amy.directiontwo=3
amy.x=1;
amy.y=random(3);/*Dirección aleatoria*/
if(amy.y==0)
amy.y=1;
else if(amy.y==1)
amy.y=9
else/*Los dos; los juicios aquí y arriba son para juzgar la posición inicial del enemigo */
amy.y=18
amy.color=random(3)+12;/*Random color */
DrawAmy(amy. y,amy.x,i);
break;/*Salir del ciclo después de encontrar uno*/
}
}
}
}