Red de conocimiento informático - Espacio del host - Colección de códigos fuente de juegos de disparos para dispositivos móviles

Colección de códigos fuente de juegos de disparos para dispositivos móviles

Juego Buscaminas (versión en lenguaje C)

Ejecute para confirmar que se ha compilado:

# include ltgraphics.h gt

# include ltstdlib.h gt

# incluir ltdos.h gt

#Definir LEFTPRESS 0xff01

#Definir clic izquierdo 0xff10

#Definir arrastre izquierdo 0xff19

#Definir movimiento del mouse 0xff08

Estructura

{

int num/*¿Cuál es el estado actual de la grilla? 1 tiene minas, 0 ha mostrado números o cuadrículas en blanco*/

int roundnum/*Cuenta cuántas minas hay alrededor de la cuadrícula*/

int signo /*clic derecho Mostrar el bandera roja bandera, 0 no tiene bandera roja bandera, 1 tiene bandera roja bandera*/

}mío[10][10];

int juego otra vez = 0;/*Si para reiniciar Variable */

int gamePLAY = 0 /*¿Es la primera vez que juegas?*/

int mineNUM/*Calcular el número de cuadrículas procesadas*/

char randmineNUM[3] /*Mostrar una cadena de números*/

int Keystate

int MouseExist

int MouseButton

int MouseX

int MouseY

void Init(void); /*Controlador de gráficos*/

void MouseOn(void); * Visualización del cursor del mouse*/

void MouseOff(void); /*Cursor del mouse oculto*/

void MouseSetXY(int, int /*Establecer posición actual*/

int pulsación izquierda(void);/*pulsación izquierda*/

int pulsación derecha(void);/*presiona el botón derecho del ratón*/

void mouse getxy( void); /*Obtener la posición actual*/

Control no válido (void); /*Inicio, reinicio y apagado del juego*/

void GameBegain(void); *El juego comienza en pantalla*/

void DrawSmile(void); /*Dibuja una sonrisa*/

void DrawRedflag(int, int); /*Mostrar bandera roja*/

void DrawEmpty(int, int, int, int); /*Mostrar dos espacios*/

void game over(void /*Game over*/

void GameWin(invalid); /*Mostrar victoria*/

int MineStatistics(int, int /*Calcular el número de minas alrededor de cada cuadrícula*/

int ShowWhite( int , int); /*Mostrar la parte en blanco sin campos minados*/

void gameplay (void); /*Proceso del juego*/

void Close (no válido); Cerrar*/

Administrador no válido (no válido)

{

init();

control();

close();

}

Inicio vacío(vacío)/

*Inicio del gráfico*/

{

int gd=DETECT,GM;

init gráfico(amp;gd,ampgm," c:\\TC" );

}

Cerrar vacío(vacío)/*cerrar gráfico*/

{

cerrargraf();

}

Void MouseOn(void)/*Visualización del cursor del mouse*/

{

_ AX = 0x 01;

generación de interrupción(0x 33);

}

Void MouseOff(void)/*Cursor del mouse oculto*/

{

_ AX = 0x02

gen interrupción(0x 33);

}

Void MouseSetXY(int x, int y)/*Establecer la posición actual* /

{

_ CX = x

_ DX = y

_ AX = 0x04

gen interrupción(0x 33);

}

Int LeftPress(void)/*Presione el botón izquierdo del mouse*/

{

_ AX = 0x03

interrupción de generación(0x 33);

retorno(_ BX amp;1);

}

Int RightPress(void)/*Presione el botón derecho del mouse*/

{

_ AX = 0x03

gen interrupción(0x 33);

Return(_ BX amp; 2);

}

Voidmousetxy (void)/*Obtener la posición actual*/

{

_ AX = 0x03

interrupción gen(0x 33);

MouseX = _ CX;

MouseY = _ DX

}

Control de vacío(void)/*Inicio, reinicio y apagado del juego*/

{

int game flag = 1 /*; Después de un error en el juego Bandera para determinar si se debe reiniciar*/

while(1)

{

If(gameFLAG)/*Si el juego falla y no decide reiniciar o salir del juego, Continuar juzgando*/

{

GameBegain() /*Pantalla inicial del juego*/

Gameplay(); /*Juego específico*/

If(gameAGAIN==1)/*Reiniciar en el juego*/

{

juego otra vez = 0;

Continuar;

}

}

MouseOn();

bandera del juego = 0

<; p>If(LeftPress() )/*Determinar si se debe reiniciar*/

{

mouse getxy();

if(MouseX gt; 280 amp ampMouseX lt300 ampMouseY gt65 amp amp Mouselt85)

{

bandera del juego = 1;

Continuar;

}

}

If(kbhit())/*Determinar si presionar la tecla para salir*/

Pausa;

}

MouseOff();

}

Void DrawSmile(void)/* Dibuja una sonrisa* /

{

setfillstyle(SOLID_FILL, amarillo);

fillllellipse(290, 75, 10, 10);

setcolor( amarillo);

setfillstyle(SOLID_FILL, negro); /*ojos*/

fillllellipse(285, 75, 2, 2); >fillllellipse(295, 75, 2, 2);

setcolor(negro); /*boca*/

bar(287, 80, 293, 81); >

}

Anular dibujar dflag (int i, int j)/*Mostrar bandera roja*/

{

set color(7);

setfillstyle(SOLID_FILL, rojo);

bar(198 j*20, 95 i*20, 198 j*20 5, 95 I * 20 5);

setcolor (negro);

line(198 j*20, 95 i*20, 198 j*20, 95 I * 20 10);

}

Dibujar vacío vacío (int i, int j, int mode, int color)/*Mostrar dos tipos de espacios en blanco*/

{

setcolor(color);

setfillstyle(SOLID_FILL, color);

If(mode==0)/*Cuadrícula grande sin hacer clic*/

bar(200 j*20-8, 100 i*20-8, 200 j*20 8, 100 I * 20 8);

Otros

If(mode==1)/*Haga clic en la pequeña cuadrícula en blanco* /

barra(200 j*20-7, 100 i*20-7, 200 j*20 7, 100 I * 20 7

}

<); p>Ganancia de juego no válida (anular)/*pantalla de inicio del juego*/

{

int i, j;

borrar dispositivo();

Si(¡jugar! =1)

{

MouseSetXY(290, 70); /*La posición inicial del mouse se utiliza como coordenada inicial*/

MouseX = 290

MouseY = 70

}

Juego = 1; /*El mouse no se reinicializará la próxima vez que presiones reiniciar*/

mineNUM = 0;

setfillstyle(SOLID_FILL, 7);

Bar(190, 60, 390, 290);

for(I = 0 ;I lt10; I )/*Dibujar una cuadrícula*/

for(j = 0;j lt10;j)

DrawEmpty(i, j, 0, 8);

establecer color(7);

dibujar sonrisa() /* dibujar uno

face*/

randomize();__page_break__

for(I = 0; I lt10; I )/*100 cuadrados se asignan aleatoriamente si hay minas terrestres*/

for(j = 0; j lt10; j )

{

Mi[i][j]. num = random(8); /*Si el resultado del número aleatorio es 1, significa que hay una mina en esta cuadrícula*/

if (my [i][j].num== 1)

p>

minenum;/*Suma 1 al número de minas existentes*/

Otros

Mi [I] [j]. num = 2;

Mi[i][j]. flag = 0; /*Indica que no hay bandera roja*/

}

sprintf(randmineNUM, "d", mineNUM); tiempo* * * *

set color(1);

settextstyle(0, 0, 2

outtextxy(210, 70, randmineNUM);

mineNUM = 100-mineNUM; /*El número de celdas en blanco en la variable*/

MouseOn();

}

Void GameOver(void)/ *Pantalla final del juego*/

{

int i, j

set color(0);

for(I = 0;i lt10;i)

for(j = 0;j lt10;j)

Si(mi[i][j].num ==1)/* Mostrar todas las minas*/

{

DrawEmpty(i, j, 0, RED);

setfillstyle(SOLID_FILL, black) ;

fillllellipse(200 j * 20, 100 i*20, 7, 7); (void)/*mostrar Victoria*/

{

set color(11

settextstyle(0, 0, 2);

outtextxy(230 , 30, "¡Tú ganas!");

}

Int MineStatistics(int i, int j)/*Estadísticas del número de minas alrededor de cada una. grid*/

{

int nNUM = 0

if(I = = 0 amp; ampJ==0)/*Estadísticas de la parte superior izquierda grid*/

{

if(mi[0][1]). num==1)

nnum;

if(mi[1][0]). num==1)

nnum;

if(mi[1][1].num==1)

nnum;

}

Otros

if(I = = 0 amp; ampJ==9)/*Estadísticas de la cuadrícula superior derecha*/

{

if(mi[0][8]). num==1)

nnum;

if(mi[1][9]). num==1)

nnum;

if(mi[1][8]).

num==1)

nnum;

}

Otros

if(I == 9 amp; ampJ==0) /*Estadísticas de la grilla en la esquina inferior izquierda*/

{

if(my[8][0]). num==1)

nnum;

if(mi[9][1]). num==1)

nnum;

if(mi[8][1]). num==1)

nnum;

}

Otros

if(I = = 9 amp; ampJ==9) /*Estadísticas de la grilla en la esquina inferior derecha*/

{

If (my[9][8]). num==1)

nnum;

if (mi[8][9]). num==1)

nnum;

if(mi[8][8]). num==1)

nnum;

}

Else if(j==0)/*Estadísticas del grid en la primera columna de la izquierda */

{

if(mi[i][j 1]). num==1)

nnum;

if(mi[i 1][j].num==1)

nnum;

if(mi[i-1][j].num==1)

nnum;

if(mi[i-1][j 1 ]). num==1)

nnum;

if(mi[i 1][j 1]). num==1)

nnum;

}

Else if(j==9)/*Estadísticas del grid en la primera columna de la derecha */

{

if(mi[i][j-1]). num==1)

nnum;

if(mi[i 1][j].num==1)

nnum;

if(mi[i-1][j].num==1)

nnum;

if(mi[i-1][j- 1]) . num==1)

nnum;

if(mi[i 1][j-1]). num==1)

nnum;

}

Else if(i==0)/*Estadísticas de la primera grilla*/

{

if(mi[i 1][j].num==1)

nnum;

if(mi [i][ j-1]). num==1)

nnum;

if(mi[i][j 1]). num==1)

nnum;

if(mi[i 1][j-1]). num==1)

nnum;

if(mi[i 1][j 1]). num==1)

nnum;

}

Else if(i==9)/*Estadísticas de la última grilla*/

{

if(mi[i-1][j].num==1)

nnum;

if(mi [i] [j-1]). num==1)

nnum;

if(mi[i][j 1]).

num==1)

nnum;

if(mi[i-1][j-1]). num==1)

nnum;

if(mi[i-1][j 1]). num==1)

nnum;

}

Else/*Estadísticas de cuadrícula normal*/

{

if(mi[i-1][j].num==1)

nnum;

if(mi[i-1][j 1] ). num==1)

nnum;

if(mi[i][j 1]). num==1)

nnum;

if(mi[i 1][j 1]). num==1)

nnum;

if(mi[i 1][j].num==1)

nnum;

si(mi[i 1][j-1]). num==1)

nnum;

if(mi[i][j-1]). num==1)

nnum;

if(mi[i-1][j-1]). num==1)

nnum;

}__page_break__

Return (nNUM); /*Devuelve los resultados estadísticos de cuántos relámpagos hay alrededor de la red* * * *

}

Int ShowWhite(int i, int j)/*Mostrar la parte en blanco sin campos minados*/

{

If(my[I][j].flag == 1 ||mine[I][j].num == 0)/*Si hay una bandera roja o la grilla ha sido procesada, no se emitirá ningún juicio made*/

Return;

mineNUM-;/*La cuadrícula que muestra números o espacios indica que se ha procesado otra cuadrícula. Cuando todas las cuadrículas han sido procesadas, significa victoria*/.

if(my[i][j].roundnum==0. ampmy[i][j].num!=1)/*display space*/

{

DrawEmpty(i,j,1,7);

Mi[i][j]. num = 0;

}

Otros

if(my[i][j].roundnum!=0)/*Número de rayo de salida*/

{

DrawEmpty(i, j, 0, 8);

sprintf(randmineNUM, " d ", Mine[i][j]. round num );

setcolor(rojo);

outtextxy(195 j*20, 95 i*20, randmineNUM);

Mi [I][ j] . num = 0; /*Una cuadrícula que tiene números de relámpagos de salida indica que la cuadrícula se ha utilizado con 0*/

Return;

}

/* Muestra recursivamente todas las cuadrículas en blanco en 8 direcciones*/

if (i!= 0 amp amp my[i-1][j].num!=1)

ShowWhite(i -1, j);

Si (i!= 0 amp ampj!= 9 amp amp my[i-1][j 1].num!=1)

ShowWhite (i-1, j 1);

if (j!= 9 amp amp my[i][j 1].

número! =1)

ShowWhite(i, j 1);

If (j!= 9 amp ampi!= 9 amp ampmy[i 1][j 1]. num!= 1)

ShowWhite(i 1, j 1);

if (i!= 9 amperios ampmy[i 1][j].num!=1 )

ShowWhite(i 1, j);

if (i!= 9 amp ampj!= 0 amp amp my[i 1][j-1]. num! =1)

ShowWhite(i 1, j-1);

Si (j!= 0 amp amp my[i][j-1].num!=1 )

ShowWhite(i, j-1);

if (i!= 0 amp ampj!= 0 amp amp my[i-1][j-1]. num! =1)

ShowWhite(i-1, j-1);

}

Juego vacío (void)/*proceso de juego*/

{

int i, j, Num/*Num se usa para recibir la función estadística y devolver cuántas minas hay alrededor de una cuadrícula*/

for( i = 0; i lt10; i )

for(j = 0; j lt10; j )

mi[i][j]. roundnum=MineStatistics(i,j);/*Calcular cuántas minas hay alrededor de cada cuadrícula*/

And (!kbhit())

{

If(LeftPress())/*Presione el botón izquierdo del mouse*/

{

mouse getxy();

if(MouseX gt; 280 amp ampMouseX lt300 amp ampMouseY gt65 amp amp mouselt85)/*Comenzar de nuevo*/

{

MouseOff();

juego de nuevo = 1;

Break;

}

if(MouseX gt; 190. ampMouseX lt390 amp ampMouseY gt90 amp amp mouse lt290)/*La posición actual del mouse está dentro de la cuadrícula*/

{

j =(MouseX-190)/20;/*coordenada x*/

I =(MouseY-90)/20;/*coordenada y */

If(my[i][j].flag==1)/*Si la cuadrícula tiene una bandera roja, el clic izquierdo no es válido*/

Continuar;

if(my[i][j].num!=0)/*Si la grilla no se procesa*/

{

If(i de[i][j].

num==1)/*La cuadrícula en la que hace clic el mouse es una mina*/

{

MouseOff();

game over();/ *El juego falló */

Pausa;

}

Else/*La cuadrícula presionada por el mouse no es una mina*/

{

MouseOff();

Num=MineStatistics(i,j);

If(Num==0)/*Si no hay minas alrededor, use un algoritmo recursivo para mostrar una cuadrícula neta en blanco*/

ShowWhite(i,j);

Else/*Press grid. Hay minas alrededor*/

{

sprintf(randmineNUM, " d ", Num); /* Muestra el número de minas alrededor de la cuadrícula actual */

setcolor(rojo);

outtextxy(195 j*20, 95 i*20, randmineNUM);

mineNUM-;

}

MouseOn();

Mi[i][j]. num = 0 /*El número de minas alrededor de la cuadrícula seleccionada cambia a 0, lo que indica que la cuadrícula ha sido utilizada*/

if(mineNUM lt; 1)/*Victoria*/

{

GameWin();

Romper;

}

}

}

}

}

If(RightPress())/*Botón derecho del ratón y pulsación del teclado*/

{

mouse getxy();

if(MouseX gt; 190. ampMouseX lt390 amp ampMouseY gt90 amp amp mouse lt290)/*La posición actual del mouse está dentro de la cuadrícula*/

{

j =(MouseX-190)/20;/*coordenada x*/

I =(MouseY-90)/20;/*coordenada y*/

MouseOff();

if(my[i][j].flag==0 amp ampmy[i][j].num!=0)/*No hubo ninguna señal de alerta , pero ahora se muestra Salió*/

{

DrawRedflag(i,j);

Mi [i][j]. flag = 1;

}

Otros

If(my[i][j].flag==1)/*Si hay una bandera roja , Presione el botón derecho y la bandera roja desaparecerá*/

{

DrawEmpty(i, j, 0, 8);

Mi [i] [ j]. bandera = 0;

}

}

MouseOn()

Dormir(1); }

}

}