El trabajo de C++ que hice se puede ejecutar en vc6.0. El código fuente se copia a vc2010 y se compila. El programa se cerrará en unos segundos tan pronto como se ejecute.
Juego de gula C/C++, zjlj,2015.3.16
*/
#define? Cuando el programa está en la etapa de depuración, DEBUG es 1
#include
#include
#include
#include
usando?namespace?std;
void?readini(FILE?**fphead,?int?*score,?char?*argv[])? p>
{ char?nombre de archivo[200],*pnombre de archivo; int?flag=-1,i
strcpy(nombre de archivo,argv[0]);
for (i=0,i=0);
strcpy(nombre de archivo,argv[0]);
for(i=0;nombre de archivo[i]!='\0';i++ ) { if?('.' == nombre de archivo[i])bandera=1; } if(1==bandera) { nombre de archivo[i-1]='i';
nombre de archivo[i- 2] ='n'; nombre de archivo[i-3]='i'; } else { nombre de archivo[i]='.) nombre de archivo[i+1]='i'; ;
nombre de archivo[i+3]='i';
nombre de archivo[i+4]='\0' } for(;nombre de archivo[i]!= '\ \' &&i>=0;i--)pfilename=&filename[i];
if?(? (*fphead=fopen(pfilename,?" rb+"))==NULL) { p>
if?(? (*fphead=fopen(pfilename,?" wb+"))==NULL) {
if?" wb+"))==NULL) {
printf("No se puede crear o abrir\"%s\"archivo\n",pfilename);
system("pausa");
exit(0 ); }
} else { fread(score,sizeof(int),1,*fphead }
}
void?writeini(ARCHIVO? ** fphead,?int?*score,?char?*argv[])?//Abra el archivo ini correspondiente al archivo en ejecución y escriba el registro más alto
{ char?filename[200], *pnombredearchivo ; int?flag=-1,i;
strcpy(nombre de archivo,argv[0]);
for(i =0;nombre de archivo[i]! = '\0';i++) { if('.' == nombre de archivo[i])bandera=1 } if(1==bandera) { nombre de archivo[i-1]='i';
nombre de archivo[i-2]='n'; nombre de archivo[i-3]='i'; else { nombre de archivo[i]='.) filena
yo[i+1]='i'; nombre de archivo[i+2]='n';
nombre de archivo[i+3]='i';
nombre de archivo[i +4]='\0'; } for(;nombre de archivo[i]!= '\\'&&i>=0;i--)pnombre de archivo=&nombre de archivo[i];
if (? (*fphead=fopen(pfilename,?" wb+"))==NULL) { printf("¡No se puede escribir en el archivo\"%s\", disco protegido contra escritura!\pfilename);
system("pausa");
salir(0); else { rewind(*fphead); fwrite(score,sizeof(int),1,*fphead);
}
void?x,int?y)//Posicionamiento del cursor, la posición de la esquina superior izquierda de la función de posicionamiento del cursor SetConsoleCursorPosition es 0,0 y luego se extiende hacia abajo y hacia el izquierda
{
COORD?pos;
pos.X=2*y;
pos.Y=x; p>
OORD?pos;
OORD?pos;
OORD?pos.X=2*y;
OORD?pos.Y= x;
OORD?pos.X=2*y;
OORD?Y=x;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
}
void?color(int?a)//función de color
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a) ;
}
void?Refresh( int?q[][22],?int?grade,?int?gamespeed,?int?length,int?score)?/ /?Salida del tablero de ajedrez de la gula
{ int?i,j for(i=0;i<22;i++) { for(j=0;j<22;j++) {
if( q[i][j]==0)//muestra el tablero en blanco
{
gotoxy(i,j);
color(11) ;
cout<<"■";
}
if(q[i][j]==1||q[ i][j ]==2)//salidas tablero pared
{?
gotoxy(i,j);
color(11);
cout<<"□";
}
if(q[i][j]==3)//genera la cabeza de serpiente
{?
gotoxy(i,j);
color(14);
cout<<"★";
}
if(q[i][j]==4)//Salida del cuerpo de la serpiente
{?
gotoxy(i,j );
p>color(12);
cout<<"◆";
}i
f(q[i][j]==5)//Fruta de salida
{?
gotoxy(i,j);
color(12 );
cout<<"●";
} } if(i==0)?cout?\t*************** *** **********"; if(i==1)?cout?<"\t clasificar para:"? <
}
int?main(int?argc ,?char?*argv[]){
int?tcsQipan[22][22];?//?El tablero de ajedrez de Xiabuxiabu es una matriz bidimensional (por ejemplo, 22*22, incluidas las paredes)
int?i ,j,score,directiontemp;FILE?*fpini;//*fpini?archivo de información readini(&fpini,? &score,?argv);//leer el registro más alto del archivo ini if?(score<0)//less than La puntuación más alta de cero se establece en cero y el archivo inicial será puntuación negativa=0 while(1) { for(i=1;i<=20;i++)<; /p>
for(j=1;j <=20; j++)
tcsQipan[i][j]=0;//Marque 0 en la escala de coordenadas correspondiente de la forma de serpiente tablero de ajedrez, indicando la parte en blanco en el medio para (i=0;i<= 21;i++)
tcsQipan[0][i]?=?tcsQipan[21][i] =?1? ;?//Las escalas de coordenadas correspondientes en las paredes superior e inferior del tablero de ajedrez con forma de serpiente
Bandera 1 for(i=1;i<=20;i++)
tcsQipan[i][0]? =?tcsQipan[i][21] =?2;?//En forma de serpiente 2 int?tcsZuobiao[2][500];?//Matriz de coordenadas de serpiente for(i=0;?i<4;?i++) {
tcsZuobiao[0][i] =? 1;//x coordenadas del cuerpo y la cabeza de la serpiente
tcsZuobiao[1][i]? =?i?+?1;//y coordenadas del cuerpo y la cabeza de la serpiente } int?head? =?3,tail?=?0;//matriz de compensaciones que etiquetan la cabeza y la cola de la serpiente for(i=1;i<=3;i++)
tcsQipan[1][i]=4; //cuerpo de serpiente tcsQipan[ 1][4]=3;//cabeza de serpiente int?x1,?y1;//?Fruta aleatoria srand(time(0)); //establecer semilla aleatoria do {
x1=rand()%21;
y1=rand()%21; } while(tcsQipan[x1][y1 ]! = 0);//si no reaparece la fruta en el espacio en blanco tcsQipan[x1][y1]=5;//la marca de fruta 5 en la escala de coordenadas correspondiente del tablero Snake color(12); cout<<"/n \n\t\t/el juego de la serpiente está a punto de comenzar; start?!" <
inicio=reloj();
mientras(reloj()-inicio<=1000) ;
sistema ("cls");
if( i>0)
cout?\n\n\t\t va a la cuenta regresiva:" ?"<
else
Refresh(tcsQipan,grade,gamespeed,length,score);?//visualización inicial del tablero } int?timeover=1,otherkey =1;//inicializa el tiempo de espera y los parámetros de juicio clave char?direction?=?77;?//?Establece la situación inicial para moverse hacia la derechaint?x=tcsZuobiao[0][head] ,y=tcsZuobiao[1][ head];//Guardar las coordenadas de la cabeza de la serpiente en las variables x,y while(1)//ejecutar un juego {
start?=?clock();
while( (tiempo transcurrido=((temp.inicio=reloj()))-inicio<
=gamespeed))&&&!kbhit());//termina el bucle si hay una tecla presionada o si el tiempo excede el intervalo de avance automático
if(direction==72 ||direction== 80||direction==75?|direction==77)
directiontemp=direction;//mantén presionada la última tecla de dirección
//starttemp=gamespeed+start-starttemp; //mantener el tiempo de permanencia
if(timeover)
{
#if?(DEBUG==1)
dirección?= ?getch();//código de depuración #else
if((dirección?= getch())==-32) dirección?=?getch();
#endif
} #if?(DEBUG==1)//código de depuración
start=clock();
while(clock()-start <= 2000);
gotoxy(24,4);
cout?\Tecla de dirección Código ASCII"<<(int)dirección<<"<<"< If(! (dirección==72||dirección==80||dirección==75?||dirección==77)) { otherkey=0;// ?key no es una tecla de flecha, otherkey está configurada en 0 } else { otherkey=1;//? key es una tecla de flecha, otherkey está establecida en 1 } if(direction==72?&&?directiontemp==80)//ignorar la tecla de dirección inversa { direction= 32; otra clave=0 ;
//mientras(reloj()-inicio<=temperatura);
}
else?if(direction==80?&&?directiontemp==72 )
{
direction=32;//establece la clave para que no sea -tecla de dirección otherkey= 0;//? la tecla es una tecla no direccional, otherkey está configurada en 0
//?start?=?clock();
// while(clock()-start< =starttemp);//compensar el tiempo de espera
}
else?if(direction ==75?&&?directiontemp==77)
{
dirección=32; otra clave=0; //inicio?=?reloj();
/ while(reloj()-inicio< ;=st
arttemp);
}
else?if(dirección==77?&&?direccióntemp==75)
{
dirección =32; otra clave=0; //inicio?=?reloj();
//mientras(reloj()-inicio<=temperatura);
}
cambiar(dirección)//determinar tecla de dirección
{ case?x= tcsZuobiao[0][head]-1; y= tcsZuobiao[1][head];break;?//? Arriba caso?80:?x=?tcsZuobiao[0][head]+1;?y=?tcsZuobiao[1][head];break;?//?Abajo caso?75:?x=?tcsZuobiao[0] [cabeza];?y=?tcsZuobiao[1][cabeza]-1;romper;?//?caso izquierdo?77:?x=?tcsZuobiao[0][cabeza];?y=?tcsZuobiao[1][ head]+1;break;?//? derecho predeterminado:?break;
}
if(x==0?||?x==21?||y ==0?||?y==21)?//?La cabeza de serpiente golpea la pared y el juego termina
{? gotoxy(22,12); cout?<"
if(x==0?||?x==21?||y==0?||?y==21?\¡Se acabó el juego!"? <= (longitud+(grado-1)*8)*10)//determinar si el récord está roto { gotoxy(10,7); color(12); cout?<"
{ ? ¿Falló en superar el nivel? ¡Adelante! "? <
cout?<
}
if(tcsQipan[x][y]! =0&&! (x==x1&&y==y1)&&tcsQipan[x][y]!=3)?//La cabeza de la serpiente toca el cuerpo de la serpiente, el juego ha terminado
{ gotoxy(22,12); cout?<\¡Se acabó el juego! "? <=(length+(grade-1)*8)*10)//determina si el récord se ha batido { gotoxy(10,7); color(12); cout?<< "¿No lograste abrirte paso?" ¡A por ello! "? <
pini);//cerrar archivo ini } else { gotoxy(10,7); color(12); cout?<
}
/*
Iniciar el algoritmo central cuando el juego se esté ejecutando
*/
if(x==x1?&&?y==y1)?//?Come fruta y suma 1 a la longitud
{ longitud ?++; if (longitud>=8)// Si la longitud es mayor o igual a 8, recalcular la longitud y agregar 1 a la calificación { length?-=?8;//recalcular la longitud de la calificación?++; //calificación más 1 if( gamespeed>50)// controla la velocidad más rápida a 50
gamespeed?=?550?-?grade?*?50;?//?Cambiar el intervalo de tiempo para el avance automático } tcsQipan[x][y]=?3;// Las coordenadas correspondientes del codicioso tablero de ajedrez ahora se cambian del símbolo de la cabeza de serpiente al símbolo de la cabeza de serpiente 3 tcsQipan[tcsZuobiao[0][head]][tcsZuobiao[1] [head]]? =?4;// Las coordenadas correspondientes del tablero de ajedrez codicioso se cambian del símbolo de la cabeza de serpiente Cambiar al símbolo del cuerpo de serpiente 4 head?=?(head+1)%400;//Evitar que la matriz cambie fuera de límites tcsZuobiao[0][head]? =?x;// Coordenada X de la cabeza de serpiente tcsZuobiao[1][head]?= ?y;// Coordenada y de la cabeza de serpiente do// Fruta aleatoria { x1 =rand()%21; y1=rand()%21; } while(tcsQipan[x1][y1]!= 0);//si no, reaparece la fruta en el tcsQipan[x1][y1] ]=5;// la marca 5 de la fruta en los marcadores de coordenadas correspondientes del tablero de Gula gotoxy(22,12); cout?< " target="_blank" target="_blank".
\¡Juego en progreso! "<
}
else?//?Sin fruta
{? if(otherkey) { tcsQipan?[tcsZuobiao[0][tail]][tcsZuobiao[1][tail]]=0; tail=(tail+1)%400;//evitar que la matriz salga de los límites tcsQipan?[ [?tcsZuobiao[0][head]][tcsZuobiao[1][head]]=4; head=(head+1)%400;//Evita que la matriz cruce el límite tcsZuobiao[0][head]=x ; // Cabeza de serpiente La coordenada x tcsZuobiao[1][head ]=y;// La coordenada y de la cabeza de serpiente tcsQipan[tcsZuobiao[0][head]][tcsZuobiao[1][head]]=3; (22,12); cout? <"\¡Juego en progreso! "? <}
/*
Fin del algoritmo central cuando el juego se está ejecutando
*/
}
while (1)
{ while(!kbhit()); if(( direction?=getch())==13)// Presiona Enter para iniciar el siguiente descanso del juego if(direction; ?= =27)// Pulsa la tecla ESC para salir del juegoexit(0);
}
system("cls");//Borra la pantalla y comienza de nuevo} return?
}
system("cls");//aprendiendo la pantalla para comenzar de nuevo } return?