Urgente, mi amigo necesita urgentemente el código fuente del buscaminas compilado en lenguaje C en VC6.+. ¡Puedes obtenerlo y usarlo sin ninguna corrección!
#include
#include
#define LEFTPRESS 0xff01
#define LEFTCLICK 0xff10
#define LEFTDRAG 0xff19
#define MOUSEMOVE 0xff08
struct
{
int num;/* ¿Cuál es el estado actual de la red? 0 Número mostrado o cuadrícula en blanco*/
int roundnum;/* Estadísticas de cuántas minas hay alrededor de la cuadrícula*/
int flag;/* Haga clic derecho para mostrar la bandera roja , 0 sin bandera roja, 1 bandera roja*/
}Mine[10][10];
int gameAGAIN=0;/* Variable que indica si se debe reiniciar*/< / p>
int gamePLAY=0;/* Bandera que indica si se juega por primera vez*/
int mineNUM;/* Número de cuadrículas para procesamiento estadístico*/
char randmineNUM[3];
int Keystate;
int MouseExist;
int MouseButton;
int MouseX; p >
int MouseY;
void Init(void);/* Controlador de gráficos**/
void MouseOn(void);/*Mostrar cursor del mouse*/
void MouseOff(void);/*Ocultar el cursor del mouse*/
void MouseSetXY(int,int);/* Establecer la posición actual*/
int LeftPress( void) ;/* Botón izquierdo presionado*/
int RightPress(void);/* Botón derecho del mouse presionado*/
void MouseGetXY(void);/* Obtener la posición actual*/
void Control(void);/* Inicio, reinicio y apagado del juego**/
void GameSetXY(int,int);/* Configuración del juego XY(int,int); /* Configuración del juego XY(int,int);/* Configuración del juego XY(int,int);/* Configuración del juego XY(int,int);/* Configuración del juego XY(int,int);/* Configuración del juego XY( int, int);/* Configuración del juego XY(int,int);/* Configuración del juego XY(int,int);//
void GameBegain(void);/* Pantalla de inicio del juego*/
void DrawSmile(void);/* Dibujar una sonrisa*/
void DrawRedflag(int,int);/* Mostrar una bandera roja*/
void DrawEmpty (int,int,int,int);/* Muestra dos tipos de espacios*/
void GameOver(void);/* Game over*/
void GameWin(void );/* Mostrar victoria */
int MineStatistics(int,int) ;/* Cuente el número de minas alrededor de cada cuadrícula*/
int S
howWhite(int,int);/* Mostrar un área en blanco sin campos minados*/
void GamePlay(void);/* GamePlay*/
void Close(void);/ * Cerrar el gráfico*/
void main(void)
{
Init();
Control();
Cerrar();
}
void Init(void)/* Iniciar gráficos*/
{
int gd= DETECT,gm;
initgraph(&gd,&gm, "c.\\tc");
Intgraph(&gd,&gm, "c.\\tc");
Intgraph(&gd,&gm, "c.:\\tc");
}
void Close(void)/* gráfico cerrar**
{
closegraph();
}
void MouseOn(void)/*mostrar cursor del mouse**
{
_AX=0x01;
geninterrupt(0x33);
}
void MouseOff(void)/* cursor del mouse Ocultar***
{
_AX=0x02;
geninterrupt(0x33);
}
void MouseSetXY(int x,int y)/* Establecer la posición actual***
{
_CX=x;
_DX=y; p >
_AX=0x04;
geninterrupt(0x33);
}
int LeftPress(void)/* Botón izquierdo del ratón presionado**
{
_AX=0x03;
geninterrupt( 0x33);
return(_BX&1);
}
int RightPress(void)/* Botón derecho del mouse presionado**
{
_AX=0x03
geninterrupt(0x33) ;
return(_BX&2);
}
void MouseGetXY(void)/* Obtener la posición actual*
{
_AX=0x03;
geninterrupt(0x33);
MouseX=_ CX;
MouseY=_DX;
} p >
void Control(void)/* Inicio del juego, reinicio, cierre**
{
int gameFLAG=1 /* Bandera utilizada para determinar si se debe reiniciar el juego; juego cuando falla Iniciar el juego**
while(1)
{
if(gameFLAG)/* Continuar determinando si el juego falló sin determinar si reiniciar o salir del juego */
{
GameBegain() /* Pantalla inicial del juego*/
GamePlay() /* Juego específico; */
if(gameAGAIN==1)/* Reiniciar en el juego**
{
gameAGAIN
=0;
continuar;
}
}
MouseOn();
gameFLAG=0;
if (LeftPress())/* Determinar si reiniciar es una buena idea**
{
MouseGetXY();
if(MouseX>280&&MouseX<300&&MouseY>65&&MouseY<85)
{
gameFLAG=1;
continuar;
}
}
}
if(kbhit())/* Determina si se debe presionar la tecla para salir*/
break;
p>}
MouseOff();
}
void DrawSmile(void)/* Dibuja una sonrisa**
{
setfillstyle(SOLID_FILL,AMARILLO);
fillellipse(290,75,10,10);
setcolor(AMARILLO );
setfillstyle(SOLID_FILL,BLACK);/* ojos**/
fillellipse(285,75,2,2);
fillellipse(295 ,75,2,2) ;
setcolor(NEGRO);/* boca**/
bar(287,80,293,81);
}
void DrawRedflag(int i,int j)/* Mostrar bandera roja**
{
setcolor( 7);
setfillstyle(SOLID_FILL,RED);
bar(198+j*20,95+i*20,198+j*25,95+i*25);
setcolor(NEGRO);
line(198+j*20,95+i*20,198+j*20,95+i*210);
}
void DrawEmpty(int i,int j,int mode,int color)/*Dos tipos de subpantallas de espacio*
{
setcolor(color);
setfillstyle( SOLID_FILL,color);
if(mode==0)/* no se hace clic en cuadrados grandes */
bar(20j*20- 8,10i*20-8,20 j*28,10i*28);
else
if(mode===1)/* Mostrar celdas en blanco después haciendo clic*
barra(20j*20-7,10i*20-7,20j*27,10i*27);
}
void GameBegain( void )/* Pantalla GameBegin**
{
int i,j;
cleardevice();
si(juegoPLAY! =1)
{
MouseSetXY(290,70); /* La posición inicial del mouse como coordenada inicial*/
MouseX=290;
MouseY=70;
}
gamePLAY=1;/* El mouse no se reinicializará la próxima vez que presione el botón de reinicio*/
mineNUM=0;
setfillstyle( SOLID _FILL ,7);
bar(190,60,390,290);
for(i=0;i<10;i++)/* dibujar cuadrícula**
for(j=0;j<10;j++)
DrawEmpty(i,j,0,8);
setcolor(7);
DrawSmile();/* Dibujar cara**
randomize();__page_break__
for(i=0;i<10;i++)/* Se asignan aleatoriamente 100 cuadrículas. ¿hay minas?
for(j=0;j<10;j++)
{
Mina[i][j].num=random(8 );/* Si el resultado del número aleatorio es 1, significa que hay una mina en la grilla*/
if(Mine[i][j].num==1)
mineNUM++;/* Aumentar el número de minas existentes en 1*.
/
else
Mío[i][j].num=2;
Mío[i][j].flag=0;/* significa Sin señales de alerta*/
}
sprintf(randmineNUM,"%d",mineNUM); /*Muestra cuántas minas hay en total** esta vez
setcolor(1);
settextstyle(0,0,2);
outtextxy(210,70,randmineNUM);
mineNUM=100 -mineNUM ;
MouseOn();
if(Mine[i+1][j].num==1)
nNUM++;
if(Mío[i+1][j-1].num==1)
nNUM++;
if(Mío[i+1][j- 1] .num==1)
nNUM++;
if(Mine[i][j-1].num==1)
nNUM++;
if(Mine[i-1][j-1].num==1)
nNUM++;
}__page_break__
return(nNUM);/* Devuelve estadísticas de cuántas minas hay en un *** alrededor de la cuadrícula*/
}
int ShowWhite(int i,int j)/ * Mostrar un área en blanco sin campos minados**
{
if(Mine[i][j].flag==1||Mine[i][j].num = =0)/* Si hay una bandera roja o la grilla ha sido procesada, no se realizará ningún juicio sobre la grilla***
return;
mineNUM--;/ * Red de visualización El número de la cuadrícula o el espacio indica que se ha procesado otra cuadrícula. Cuando se han procesado todas las cuadrículas, significa victoria*/
if (Mine[i][j].roundnum=. =0&& Mío[i] [j].num!=1)/* Mostrar espacios*/
{
DrawEmpty(i,j,1,7);
Mío[ i][j].num=0;
}
else
if(Mío[i][j].roundnum !=0)/* Muestra el número de minas*/
{
DrawEmpty(i,j,0,8);
sprintf(randmineNUM, "%d",Mine[i ][j].roundnum);
setcolor(RED);
outtextxy(195+j*20,95+i *20,randmineNUM );
Mine[i][j].num=0;/*La cuadrícula que ha generado el número de rayos usa 0 para indicar que esta cuadrícula se ha utilizado*/
return;
}
//* 8 Mostrar todas las cuadrículas vacías de forma recursiva*/
if(i! =0&&Mío[i-1][j].num!=1)
ShowWhite(i-1,j);
if(i!=0&&j!=9&&Mío[i -1][j+1].num! =1)
ShowWhite( i-1,j+1);
if(j!=9&&Mine[i][j +1].num!=1)
ShowWhite(i,j+1);
if(j!=9&&i!=9&&Mine[i+1][j+1].num!=1)
ShowWhite(i+1,j+1);
if(i!=9&&Mine[i+1][j].num!=1)
ShowWhite(i+1,j);
if(i!=9&&j!=0&&Mine[i+1][j-1].num!=1)
ShowWhite(i+1,j);
if( i!=9&&j!=0&&Mine[i+1][j-1].num!num!=1)
ShowWhite(i+1,j-1);
if(j!=0&&Mine[i][j-1].num!=1)
ShowWhite(i,j-1);
ShowWhite(i,j-1) );
if(i!=0&&j!=0&&Mine[i-1][j-1].num!=1)
ShowWhite(i-1,j-1); p>
}
void GamePlay(void)/*GameProcessing**
{
int i,j,Num
<; p> for(i=0;i<10;i++)for(j=0;j<10;j++)
Mío[i][j].roundnum= MineStatistics(i,j);/* Cuente cuántas minas hay alrededor de cada cuadrícula*/
while(!kbhit())
{
if ( LeftPress())/* MouseLeftKeyboardPress*/
{
MouseGetXY();
if(MouseX>280&&MouseX<300&&MouseY>65&&MouseY<85) / * Reiniciar**
{
MouseOff();
gameAGAIN=1;
romper;
}
if(MouseX>190&&MouseX<390&&MouseY>90&&MouseY<290)/* La posición actual del mouse está dentro del rango de la cuadrícula*/
{
j = (MouseX-190)/20;/*coordenada x*/
i=(MouseY-90)/20;/*coordenada y*/
if(Mine[i ] [j].flag==1)/*Si la cuadrícula tiene una bandera roja, el clic izquierdo no es válido*/
continuar;
if(Mine[i][j ] .num!=0)/* Si la grilla no ha sido procesada*/
{
if(Mine[i][j].num==1)/* Presionar el mouse La siguiente cuadrícula es mía*/
{
MouseOff()
GameOver();/* El juego falló***
break;
}
else/* La cuadrícula presionada por el mouse no es mía***
{
MouseOff();
<p> Num=MineStatistics(i,j) ;
if(Num==0)/* No hay minas alrededor, usa un algoritmo recursivo para mostrar una cuadrícula en blanco*/
ShowWhite(i ,j);
else/* Presiona la cuadrícula con minas alrededor*/
{
sprintf(randmineNUM,"%d" ,Num) ;/* Muestra el número de minas alrededor de la cuadrícula actual**
setcolor(RED);
outtextxy(195+j*20,95+i*20, randmineNUM);
mineNUM--;
}
MouseOn()
Mío[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<1)/* ganó**
{
GameWin();
romper;
}
p> }
}
}
}
if(RightPress())/* Teclado derecho del mouse presionado**
{
MouseGetXY ();
if(MouseX>190&& MouseX>.lt;390&&MouseY>90&&MouseY<290)/* La posición actual del mouse está dentro del rango de la cuadrícula*/
{
j= (MouseX-190)/20;/*coordenada x*/
i=(MouseY-90)/20;/*coordenada y**
MouseOff (); p>
if(Mine[i][j].flag==0&&Mine[i][j].num!=0)/* No había ninguna bandera roja antes, pero ahora la bandera roja se muestra*
{
DrawRedflag(i,j) )
Mío[i][j].flag=1;
}
else p>
if(Mine[i][j].flag==1)/* Aparece una bandera roja, luego haga clic derecho y la bandera roja desaparece*
{
DrawEmpty( i,j,0,8
Mío[i][j].flag=0;
}
}
MouseOn();
dormir(1);
}
}
}
}
}
}