Red de conocimiento informático - Conocimiento sistemático - Buscamos programación de juegos sencilla y corta

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,

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>

}

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*/

{

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*/

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*/

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

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*/

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*/

{

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*/

}

}

}

}