Cambiar el código fuente del software operativo
C/C++ Juego de serpientes, zjlj, 2015.3.16
*/
#¿Definición? ¿depurar? 0?//¿Cuándo el programa está en la fase de depuración? ¿La depuración es? 1
# incluir & ltiostream & gt
# incluir & ltwindows.h & gt
# incluir & lttime.h & gt
# include & ltconio.h & gt
¿Usar? ¿Espacio de nombres? std
¿No es válido? readini(¿archivo? **fphead, ? int? *puntuación, ? char? *argv[])? //Cree o abra el archivo ini correspondiente al archivo en ejecución y lea el registro más alto.
{
¿Ciel? Nombre de archivo[200], *pnombredearchivo
int? bandera=-1, I;
strcpy(nombre de archivo, argv[0]);
for(I = 0; nombre de archivo[i]!='\0'; i++)
{
¿Y si? ('.'= = 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' ;
}
Otro
{
Nombre de archivo[i]= ' ;
nombre de archivo [I+. 1]= ' I ';
Nombre de archivo [I+2]= ' n ';
Nombre de archivo [I+3]= ' I ';
p >Nombre de archivo[I+4]= ' \ 0 ';
}
for(;Nombre de archivo[i]!= ' \ \ ' & amp& amp i> =0;I-)pfilename = &Filename[I];
¿Si? (?(*fphead=fopen(pfilename, " r b+ ") = = NULL)
{
Si?(?(*fphead=fopen(pfilename, " WB+") = = NULL)
{
Printf("No se puede crear ni abrir \"%s\ "archivo\n ", pfilename);
System(" Pausa");
Salir(0);
}
}
Otros
{ p>
fread(puntuación, tamaño de(int), 1, * fphead);
}
}
¿Writeini(archivo?* *fphead,? int? *score,? *argv[])//Abra el archivo ini correspondiente al archivo en ejecución y escriba el registro más alto.
{
¿Ciel? Nombre de archivo[200], *pnombredearchivo
int? bandera=-1, I;
strcpy(nombre de archivo, argv[0]);
for(I = 0; nombre de archivo[i]!='\0'; i++)
{
¿Y si? ('.'= = 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' ;
}
Otro
{
Nombre de archivo[i]= ' ;
nombre de archivo [I+. 1]= ' I ';
Nombre de archivo [I+2]= ' n ';
Nombre de archivo [I+3]= ' I ';
p >Nombre de archivo[I+4]= ' \ 0 ';
}
for(;Nombre de archivo[i]!= ' \ \ ' & amp& amp i> =0;I-)pfilename = &Filename[I];
¿Si? (?(*fphead=fopen(pfilename," WB+")== NULL)
{
Printf("No se puede escribir en el archivo \"%s\", el disco se escribió Proteger!\n ",pfilename);
Sistema("pausa");
Salir(0);
}
Otros
{
Rebobinar(* fphead);
fwrite(score, sizeof(int), 1, * fphead
);fclose(* FP head);
}
}
¿No válido? gotoxy(int?x, int?Y)//Posicionamiento del cursor, cursor La función de posicionamiento SetConsoleCursorPosition es la posición de la esquina superior izquierda es 0 y luego se extiende a la esquina inferior izquierda
{
Coordenadas pos
Posición. /p>
Posición. y = x;
SetConsoleCursorPosition(GetStdHandle(STD _ OUTPUT _ HANDLE),
}
¿No es válido? Color (int? A)//Función de color
{
SetConsoleTextAttribute(GetStdHandle(STD _ OUTPUT _ HANDLE),
}
Void?Refresh(int?q[][22],?int?level,?int?gamespeed?int?length,int?score)? //Salida del tablero de serpientes
{
int?I,j;
for(I = 0;i<22;i++)
{
for(j = 0; j <22;j++)
{
If(q[i][j]==0)//El tablero de ajedrez de salida está en blanco.
{
gotoxy(i,j);
Color(11);
cout & lt& lt"■";
}
if(q[I][j]= = 1 | | q[I][j]= = 2)//Salida tablero de ajedrez de pared
{
gotoxy(i,j);
Color(11);
cout & lt& lt"□";
}
If(q[i][j]==3)//Salida pez negro
{
gotoxy(i, j); p >
Color(14);
cout & lt& lt"★";
}
If(q[i][j]= = 4) // Genera el cuerpo de la serpiente.
{
gotoxy(i,j);
Color(12);
cout & lt& lt"◆";
}
If(q[i][j]==5)//Salida de la fruta.
{
gotoxy(i,j);
Color(12);
cout & lt& lt"●";
}
}
si(i==0)? ¿corto? <<? "\t * * * * * * * * * * * * * * * * * * * * * *";
if(i==1)? ¿corto? <<? "\tNivel:"? <<? Nivel; //Mostrar nivel
if(i==3)? ¿corto? <<? "\tAvanzar el tiempo automáticamente";
if(i==4)? ¿corto? <<? " \tEl intervalo es: "? <<? velocidad del juego? <<? "Sra."; //Mostrar hora
if(i==6)? ¿corto? <<? "\t¿Cuál es la puntuación más alta de la historia"? <<? ¿Puntaje? <<? "Punto";
si(i==7)? ¿corto? <<? \t¿Cuál es tu puntuación actual? <<? (longitud+(nivel-1)*8)*10? <<? "Punto";
si(i==8)? ¿corto? <<? " \ t * * * * * * * * * * * * * * * * * * * * * * * *;
if(i==9)?cout?& lt& lt?" \tDescripción del juego: ";
if(i==10)?cout?& lt& lt?"\t(1) Controlado por teclado";
if(i= = 11)? & lt& lt? "\tLa dirección del movimiento de la cabeza de la serpiente;";
if(i==12)? "\t(2) Una fruta, cuerpo de serpiente";
if(i==13)?cout?& lt& lt?" tAgregar una sección;";
if(i==14) ? & lt& lt? 3) La serpiente te muerde o golpea la pared";
if(i==15)? & lt& lt?
";
if(i==18)?cout?& lt& lt?" * * * * * * * * * * * * * * * * * * * * * * * * ;
si(i==19)? ¿corto? <<? "\tTarea de lenguaje C/C++:";
If (i==20)? ¿corto? <<? \tzjlj, 2015.03.16? ;
}
}
int? main(int?argc,?char?*argv[]){
int? tcsQipan[22][22];? // El tablero de serpientes es una matriz bidimensional (como 22 * 22, incluidas las paredes).
int? I, j, puntuación, direccióntemp
ARCHIVO * fpini//*fpini? Archivo de información
readini(&fpini,?&score,?argv); //Lee el registro más alto del archivo ini.
¿Y si? (score<0) //Si el puntaje más alto es menor que cero, configúrelo en cero y el archivo inicial será negativo.
puntuación = 0;
mientras(1)
{
para(I = 1;i<=20;i++ )
for(j = 1;j & lt=20;j++)
tcsQipan[I][j]= 0; //Las coordenadas correspondientes al tablero de ajedrez de la serpiente usan la parte en blanco en el medio está marcado el símbolo 0.
for(I = 0;i<=21;i++)
tcsQipan[0][i]? =?tcsQipan[21][i]? =?1;//Las coordenadas correspondientes del tablero de ajedrez de serpientes están marcadas con signos de 1 en las paredes superior e inferior.
for(I = 1;i<=20;i++)
tcsQipan[i][0]? =?tcsQipan[i][21]? =?2;//Las coordenadas correspondientes del tablero de ajedrez de serpientes están marcadas con los signos 2 en las paredes izquierda y derecha.
int? tcszoo Biao[2][500];? //matriz de coordenadas de serpiente
for(I = 0;?i<4;?i++)
{
tcszoobao[0][I]? =?1;//Coordenadas X del cuerpo y la cabeza de la serpiente
tcszoobao[1][I]? =?Yo? +?1;//Coordenadas Y del cuerpo y cabeza de la serpiente
}
int? ¿cabeza? =?3. =?0;// Indica la cabeza de serpiente y el desplazamiento de matriz de la cabeza de serpiente.
for(I = 1;i<=3;i++)
tcsQipan[1][I]= 4 //Cuerpo de serpiente
tcsQipan [1; ][4]= 3;? //Cabeza de serpiente
int? x1,? y 1;? //Fruta aleatoria
srand(time(0)); //Establecer semilla aleatoria
Hacer
{
x 1 = rand()% 21;
y 1 = rand()% 21;
}
mientras(tcsQipan[x 1][ y 1]! =0); // Si no reproduce fruta en el espacio en blanco,
tcsQipan[x 1][y 1]= 5; están marcados con el símbolo de la fruta 5.
Color(12);
cout & lt& lt" \ n \ n \ t \ t \ t \¡¿El juego de la serpiente está por comenzar?!"& lt& ltendl/ / ¿Listo para empezar
Dragón? inicio, iniciotemp
int? ¿calificación? =?1,?Longitud? =?4;//Establece el nivel inicial y la longitud inicial de la serpiente.
int? velocidad del juego? =?500;//Establecer el intervalo de reenvío inicial
for(I = 3;I>=0;I-)
{
start = clock( );
mientras(reloj()-inicio<=1000);
sistema("cls");
if(i & gt0) p>
cout? <<? \n\n\t\t\t\¿Ingresar cuenta regresiva? <<? ¿I? <<? endl//Pantalla de cuenta atrás
Otros
Actualizar (tcsQipan, nivel, velocidad del juego, duración, puntuación //Pantalla inicial del tablero de ajedrez
}
);int? timeover=1, other key = 1; //Tiempo de espera de inicialización y parámetros de juicio clave.
¿Ciel? ¿dirección? =?77; //En la configuración inicial, muévase hacia la derecha.
int? x = tcszuobao[0][head], y = tcszuobao[1][head] //Guarda las coordenadas del pez negro en las variables x, y.
Mientras(1)//Ejecuta un juego.
{
¿Empezar? =?clock();
while((time over =((start temp = clock())-start & lt;= gamespeed))&&!kb hit());/ /El El bucle termina si se presiona una tecla o si el tiempo excede el intervalo de avance automático.
if(dirección==72 | |dirección==80 | |dirección==75? | |dirección==77)
direccióntemp = dirección //conservar la última dirección; llave.
//temperatura de inicio = velocidad del juego+temperatura de inicio-inicio; //tiempo de retención
if (tiempo de espera)
{
# ¿si? (Depuración==1)
¿Dirección? =?getch();//Código de depuración
# De lo contrario
If ((dirección? = getch())==-32)
¿Dirección? =?getch();
#endif
}
#If? (DEBUG==1)//Código de depuración
start =clock();
while(clock()-start & lt;=2000);
gotoxy(24, 4);
cout? <<? "\tEscriba el código ASCII"
#endif
if (!(dirección==72 | |dirección==80 | |dirección==75?| |dirección==77 ) )
{?
other key = 0; //Esta tecla no es una tecla de flecha, la otra tecla está configurada en 0.
}
Otro
{
otra clave = 1; // La clave es la tecla de dirección y la otra clave está configurada en 1.
}
if (direction==72?& amp& amp?Directiontemp==80) // Ignora la clave inversa.
{
Dirección = 32°;
otra clave = 0;
//¿Iniciar? =?clock();
// while(clock()-start & lt;= start temp);
}
¿Y si? if (direction==80?&&?directiontemp==72)
{
direction = 32° // Establece la clave en una clave sin dirección.
Otra clave = 0; //Esta clave es una clave no direccional y la otra clave está configurada en 0.
//?¿Empezar? =?clock();
// while(clock()-start & lt;= start temp);//compensar tiempo de espera
}
¿De lo contrario? if (dirección==75?&&?directiontemp==77)
{
dirección = 32°;
otra clave = 0;
p>
//¿Iniciar? =?clock();
// while(clock()-start & lt;= start temp);
}
¿Y si? if (dirección==77?&&?directiontemp==75)
{
dirección = 32°;
otra clave = 0;
p>
//¿Iniciar? =?clock();
// while(clock()-start & lt;= start temp);
}
Cambiar (dirección)/ /Teclas de flecha OK
{
¿Caso? 72:?x=? tcszuobao[0][cabeza]-1;? y=? tcszuobao[1][cabeza]; romper //Up
¿Caso? 80:?x=? tcszuobao[0][cabeza]+1;? y=? tcszuobao[1][cabeza]; romper; //Abajo
¿Caso? 75:?x=? tcszoobao[0][cabeza];? y=? tcszuobao[1][head]-1; break; // a la izquierda
¿Caso? 77:?x=? tcszoobao[0][cabeza];? y=? tcszuobao[1][head]+1; break; //Ir a la derecha
Predeterminado:? Romper;
}
if(x==0?||?x==21?||y==0?||?y==21)//? La serpiente golpeó su cabeza contra la pared, terminando el juego.
{
gotoxy(22,12);
cout? <<? "¡\tEl juego ha terminado!"? <<? endl
if(score & gt;=(length+(grade-1)* 8)* 10)//Determine si se batió el récord.
{
gotoxy(10,7);
Color(12);
cout? <<? "¿No puedes comunicarte? ¡Vamos!" <<? endl
fclose(fpini); //Cerrar el archivo ini
}
Otros
{
gotoxy (10,7);
Color (12);
cout? <<? ¿"Felicitaciones por batir el récord"? <<? endl
Puntuación=(length+(grade-1)*8)*10;
escribir ini(& fpini,? & puntuación,? archivo ini El registro más alto escrito); en
}
gotoxy(23,12);
cout? <<? ¿"Presiona Enter para reiniciar y ESC para salir del juego"? <<? endl//Mostrar mensaje
Break; //Salir del juego
}
if(tcsQipan[x][y]!= 0 & amp& amp!( x = = x 1 && ampy = = y 1)&&tcsQipan[x][y]! =3)?//?La cabeza de la serpiente toca el cuerpo de la serpiente, finalizando el juego.
{
gotoxy(22,12);
cout? <<? "¡\tEl juego ha terminado!"? <<? endl
if(score & gt;=(length+(grade-1)* 8)* 10)//Determine si se batió el récord.
{
gotoxy(10,7);
Color(12);
cout? <<? "¿No puedes comunicarte? ¡Vamos!" <<? endl
fclose(fpini); //Cerrar el archivo ini
}
Otros
{
gotoxy (10,7);
Color (12);
cout? <<? ¿"Felicitaciones por batir el récord"? <<? endl
Puntuación=(length+(grade-1)*8)*10;
escribir ini(& fpini,? & puntuación,? archivo ini El registro más alto escrito); en
}
gotoxy(23,12);
cout? <<? ¿"Presiona Enter para reiniciar y ESC para salir del juego"? <<? endl//Mostrar mensaje
Break; //Salir del juego
}
/*
El algoritmo central se inicia cuando el juego está corriendo.
*/
if(x==x1?& amp& amp?y==y1)? //Come fruta, suma 1 a la longitud
{?
Longitud? ++;
if(length>=8)//Si la longitud es mayor o igual a 8, vuelva a calcular la longitud y agregue 1 al nivel.
{
¿Longitud? -=?8;//Recalcular la longitud
¿Calificación? ++;//Calificación más 1
if(gamespeed >50)//La velocidad de control más rápida es 50.
¿velocidad de juego? =?550?-?Calificación? *?50;? //Cambiar el intervalo de tiempo de avance automático
}
tcsQipan[x][y]=? 3; //Las coordenadas correspondientes del tablero de la Serpiente ahora se cambian al símbolo de cabeza de serpiente 3.
tcsQipan[tcszuobao[0][cabeza]][tcszuobao[1][cabeza]]? =?4;//Las coordenadas correspondientes del tablero de serpientes se cambian del símbolo de cabeza de serpiente original al símbolo de cuerpo de serpiente 4.
¿Cabeza? =?(head+1)% 400; //Evitar que la matriz cruce el límite
tcszoobao[0][head]? =?x; //Coordenada X de la cabeza de serpiente
tcszoobao[1][head]? =?y; //coordenada Y de la cabeza de serpiente
Hacer //fruta aleatoria
{
x 1 = rand()% 21;
p>y 1 = rand()% 21;
}
mientras(tcsQipan[x 1][y 1]!=0) ;//si no reproduces fruta en el espacio en blanco,
tcsQipan[x 1][y 1]= 5; //Las coordenadas correspondientes al tablero de serpientes están marcadas con el símbolo de fruta 5.
gotoxy(22,12);
cout? <<? "\t¡El juego está en progreso!"? <<? endl
Actualizar(tcsQipan, nivel, velocidad del juego, duración, puntuación);
}
De lo contrario//No comas fruta
{
if(otras claves)
{
tcsQipan? [tcszuobao[0][tail]][tcszuobao[1][tail]]= 0;
tail =(tail+1)% 400; //Evita que la matriz cruce el límite
tcsQipan? [tcszuobao[0][head]][tcszuobao[1][head]]= 4;
head =(head+1)% 400 //Evita que la matriz cruce el límite
tcszuobao[0][head]= x; // Coordenada X de la cabeza de serpiente
tcszuobao[1][head]= y //Coordenada Y de la cabeza de serpiente
tcsQipan[tcszuobao[ 0][cabeza]][tcszuobao[1][cabeza]]= 3;
gotoxy(22,12);
cout? <<? "\t¡El juego está en progreso!"? <<? endl
Actualizar(tcsQipan, nivel, velocidad del juego, duración, puntuación);
}
Otros
{
gotoxy(22,12);
cout? <<? "¡\tJuego en pausa!"? <<? endl
}
}
/*
Fin del algoritmo central cuando el juego se está ejecutando.
*/
}
mientras(1)
{
Y (!kb hit() );
If ((dirección?= getch()== 13)//Entra para comenzar la siguiente ronda.
Pausa;
Si (dirección ? ==27) // Pulsa ESC para salir del juego
Exit(0);
}
System("cls"); la pantalla, empezar de nuevo
}
Volver a 0;
}