Red de conocimiento informático - Computadora portátil - Código fuente del juego 360

Código fuente del juego 360

Juego Buscaminas (versión en lenguaje C)

Ejecute para confirmar que ha sido compilado:

# include & ltgraphics.h & gt

# include & ltstdlib. h & gt

# include & ltdos.h & gt

#Definir LEFTPRESS 0xff01

#Definir clic izquierdo 0xff10

#Definir arrastre izquierdo Mover 0xff19

#Definir movimiento del mouse 0xff08

Estructura

{

int num/*¿Cuál es el estado actual del ¿red? 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; 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();

}

Void Init(void)/*Inicio gráfico*/

{

int gd= DETECT, GM;

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

/p>

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

{

cerrar gráfico();

}

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

{

_ AX = 0x 01;

gen interrupción(0x 33);

p>

}

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

{

_ AX = 0x02

gen interrupt(0x 33);

}

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

{

_ CX = x;

_ DX = y;

_ AX = 0x04

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

}

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

{

_ AX = 0x03

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

Retorno(_ BX & 1);

}

Int RightPress(void) /*presiona el mouse, haz clic derecho */

{

_ AX = 0x03

gen interrupt(0x 33);

return( _ BX & amp; 2);

}

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

{

_ AX = 0x03

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

MouseX = _ CX;

MouseY = _ DX

}

Void Control(void)/*Inicio, reinicio y apagado del juego*/

{

int game flag = 1 /*Bandera para determinar si se debe reiniciar; después del fallo del juego*/

while(1)

{

If(gameFLAG)/*Si el juego falla y no decides reiniciar o salir el juego, continúa juzgando*/

{

GameBegain();/*Pantalla inicial del juego*/

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

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

{

juego nuevamente = 0

Continuar;

}

}

MouseOn();

bandera del juego = 0;

If(LeftPress) ())/*Determinar si se debe reiniciar*/

{

mouse getxy();

if(MouseX & gt; 280 & amp& ampMouseX & lt300 & amp& ampMouseY & gt65 & amp& amp mouse& lt85 )

{

bandera del juego = 1

Continuar

}

}

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

Romper;

}

MouseOff();

}

Void DrawSmile(void)/*Dibujar una cara sonriente*/

{

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

bar(287, 80, 293, 81);

}

Void draw dflag (int i, int j)/*Mostrar bandera roja*/

{

establecer color(7);

setfillstyle(SOLID_FILL, rojo

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

establecer color(negro);

línea(198+j*20, 95+ i*20, 198+j*20, 95+I * 210);

}

Dibujo 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(20j*20-8, 10i*20-8, 20j*28, 100 +I * 28);

Otros

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

bar( 20 j*20-7, 10i*20-7, 20j*27, 10I * 27);

}

Ganancia de juego no válida ( void)/*Pantalla de inicio del juego*/

{

int i, j

clear device(); play!=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*/< / p>

mineNUM = 0;

setfillstyle(SOLID_FILL, 7

Bar(190, 60, 390, 290); I = 0; i<10;I++)/*Dibujar una cuadrícula*/

for(j = 0;j<10;j++)

DrawEmpty(i, j , 0, 8);

establecer color(7);

dibujar sonrisa(); /*Dibujar una cara*/

aleatorio(); >for(I = 0;I<10;I++)/*100 cuadrados se asignan aleatoriamente si hay minas*/

for(j = 0;j<10;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*/

Otras

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<10;i++)

for(j = 0;j <10;j++)

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

{

DrawEmpty(i, j, 0, RED);

setfillstyle(SOLID_FILL, black);

fillllellipse(20j * 20, 10i*20, 7, 7);

}

}

Vacío); GameWin (void)/*Mostrar victoria*/

{

set color(11);

settextstyle(0, 0, 2);

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

}

Int MineStatistics(int i, int j)/*Estadísticas alrededor de cada cuadrícula Número de Trueno* /

{

int nNUM = 0;

if(I = = 0 &&J==0)/*estadísticas de celdas netas izquierdas*/

{

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 & &J==9)/*Estadísticas de la grilla 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 cuadrícula de 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 p>

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 p>

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 de[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 p>

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(mi[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& ampmy[i-1][j].num!=1)

ShowWhite(i -1, j);

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

ShowWhite(i-1,j+1);

if (j!= 9 & amp& ampmy[i][j+1].num!=1)

ShowWhite (i, j+1);

Si (j!= 9 & amp& ampi!= 9 & amp& ampmy[i+1][j+1 ].num!=1)

ShowWhite(i+1, j+1);

if (i!= 9 & amp& ampmy[i+1][j ].num!=1)

ShowWhite(i+1,j);

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

ShowWhite(i+1, j-1);

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

ShowWhite(i, j-1);

if (i!= 0 & amp& ampj!= 0 & amp& amp mi[i-1][j-1].

número! =1)

ShowWhite(i-1, j-1);

}

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

{

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

for(I = 0;i<10;i++)

for(j = 0;j <10;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 mouse& lt85)/*Comenzar de nuevo*/

{

MouseOff();

juego otra vez = 1;

Pausa;

}

if(MouseX>190.&MouseX<390&&MouseY>90&&Mouse<290 )/*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, la tecla izquierda no válida*/

Continuar;

if(my[i][j].num!=0)/*si la grilla no ha sido procesada*/

{

If(my[i ][j].num==1)/*La cuadrícula en la que hace clic el mouse es una mina*/

{

MouseOff();

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

Romper;

}

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, utilice un algoritmo recursivo para mostrar una cuadrícula 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-;

}

p>

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;

}

}

}< / p>

}

}

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

{

mouse getxy();

if(MouseX>190.

& ampMouseX & lt390 & amp& ampMouseY & gt90 & amp& ampmouse& 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 había ninguna bandera roja, pero ahora se muestra*/

{

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

}

}