Red de conocimiento del abogados - Respuesta jurídica de la empresa - ¿Cómo utilizar el código fuente de Snake en lenguaje C?

¿Cómo utilizar el código fuente de Snake en lenguaje C?

El código fuente de Snake en lenguaje C debe ser compilado en un archivo EXE por el compilador C/C correspondiente antes de poder ejecutarse.

Dado que el sistema operativo que utilizamos habitualmente es el sistema Windows, y el compilador C/C más utilizado en este sistema es el compilador VC, la versión comúnmente utilizada en colegios y universidades sigue siendo VC 6.0. A continuación se muestra Take VC 6.0 para ilustrar el proceso de compilación:

1. Abra el código Snake a través del submenú "Abrir" en el menú "Archivo" en VC 6.0

2. 6.0 Compile el código Snake a través del submenú "Compilar xxxx.xx" en el menú "Construir"

3. Ejecute el submenú "Ejecutar xxxx.exe" en el menú "Construir" en el programa VC 6.0 Snake.

Adjunto: código fuente de C/C Snake que se puede ejecutar en el entorno VC 6 (sin derechos de autor, escrito por usted mismo, bienvenido a modificarlo y copiarlo a voluntad) /*

C/ C Snake Game, zjlj, 2015.3.16

*/

#define?DEBUG?0?//¿Cuando el programa está en la etapa de depuración?DEBUG is?1

#includelt;iostreamgt;

#includelt;windows.hgt;

#includelt;time.hgt;

#includelt;conio .hgt ;

usando?namespace?std;

void?readini(FILE?**fphead,?int?*score,?char?*argv[])?// Crear o abra un archivo ini correspondiente al archivo en ejecución y lea el registro más alto

{ char?filename[200], *pfilename; 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'; ; } else { nombre de archivo[i]='.'; nombre de archivo[i 1]='i'; nombre de archivo[i 2]='n';

nombre de archivo[i 4]='\0' } for(;nombre de archivo[i]!='\\'amp;amp;igt;=0;i--)pnombre de archivo=amp ;nombre de archivo [i];

if?(?(*fphead=fopen(pfilename,?"rb "))==NULL) {

if?(?(*fphead =fopen (pfilename,?"wb "))==NULL) {

printf("No se puede crear o abrir \"s\" archivo\n", pfilename);

system( "pausa");

salir(0); }

} else { fread(score, sizeof(int), 1, *fphead }

}

void?writeini(FILE?**fphead,?int?*puntuación,?char?*arg

v[])?//Abra un archivo ini correspondiente al archivo en ejecución y escriba el registro más alto

{ char?filename[200], *pfilename; int?flag=-1, i;

{ char?nombre de archivo[200], *pnombre de archivo; int?flag=-1, i;

p>

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]='.'; [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]!='\\'amp;amp;igt;=0;i- -)pfilename=amp;nombre de archivo[i];

if?( ?(*fphead=fopen(pfilename,?"wb "))==NULL) { printf("¡No se puede escribir\"s \"Archivo, disco protegido contra escritura!\n", pfilename

system("pausa");

salir(0); } else { rewind(*fphead); fwrite(puntuación, tamaño de(int), 1, *fphead); }

}

void?gotoxy(int?x, int?y)/ /Posicionamiento del cursor, la función de posicionamiento del cursor SetConsoleCursorPosition es la posición de la esquina superior izquierda es 0, luego 0 se extiende izquierda y abajo

{

COORD?pos;

pos X=2*y;

pos.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? grado, ?int?gamespeed, ?int?length, int?score)?//?Salida del tablero de serpiente

{ int?i,j; for(i=0;ilt;22;i) { for(j=0;jlt;22;j) {

if(q[i][j] ==0)//Salir el tablero de ajedrez en blanco

{

gotoxy(i,j);

color(11);

coutlt;lt;"■";

}

if(q[i][j]==1||q[i][j]==2)// Salida de paredes de tablero de ajedrez

{?

gotoxy (i,j);

color(11);

coutlt;lt;" □";<

/p>

}

if(q[i][j]==3)//Salida cabeza de serpiente

{?

gotoxy( i , j);

color(14);

coutlt; "★"; [ i][j]==4)//Salida del cuerpo de la serpiente

{?

gotoxy(i, j);

color(12);

coutlt;lt;"◆";

} if(q[i][j]==5)//Salida de la fruta

{?

gotoxy(i,j);

color(12);

coutlt;lt;"●";

} } if( i==0)?cout?lt;lt;?"\t************************" si(i==1) )?cout ?lt;lt;?"\tEl nivel es: "?lt;lt;?grade;//Mostrar calificación si(i==3)?cout?lt;lt;?"\tAvanzar el tiempo automáticamente"; if( i==4)?cout?lt;lt;?"\tEl intervalo es: "?lt;lt;?gamespeed?lt;lt;?"ms";//Mostrar tiempo if(i==6) ?cout ?lt;lt;?"\tPuntuación histórica más alta: "?lt;lt;?score?lt;lt;?"point" if(i==7)?cout?lt;lt;?"\t Su puntuación actual es: "?lt;lt;?(longitud (grado-1)*8)*10?lt;lt;?"punto"; if(i==8)?cout?lt;lt;?" \t************************"; if(i==9)?cout?lt;lt;?"\tDescripción del juego: "; if ( i==10)?cout?lt;lt;?"\t(1)Utilice las teclas de dirección del teclado pequeño para controlar"; if(i==11)?cout?lt;lt;?"\tDirección del movimiento de la cabeza de serpiente ; "; if(i==12)?cout?lt;lt;?"\t(2) Cada vez que la serpiente come una fruta, el cuerpo de la serpiente"; if(i==13)?cout?lt;lt ;?"\t Agregar una sección; "; if(i==14)?cout?lt;lt;?"\t(3) Serpiente se muerde o golpea una pared"; ?lt;lt ;?"\tEl juego ha terminado.

"; si(i==18)?cout?lt;lt;?"\t**********************"; si(i==19) )?cout?lt;lt;?"\tTarea de lenguaje C/C:"; if(i==20)?cout?lt;lt;?"\tzjlj, 2015.03.16?"; p>}

int?main(int?argc,?char?*argv[]){

int?tcsQipan[22][22];?//?Codicioso El el tablero de serpiente es una matriz bidimensional (como 22*22, incluidas las paredes)

int?i,j,score,directiontemp; FILE?*fpini;//*fpini?information file readini(amp ;fpini ,?amp;score,?argv);//Leer el registro más alto del archivo ini if?(scorelt;0)//El puntaje más alto es menor que cero y se establece en cero, el archivo inicial será negativo puntuación=0; mientras(1) { para(i=1;ilt;=20;i)

para(j=1;jlt;=20;j)

tcsQipan [i][j]=0 ; //Las coordenadas correspondientes del tablero Snake están marcadas con la marca 0 en la parte en blanco del medio para (i=0; ilt; =21; i )

tcsQipan [0][i]?=?tcsQipan[21 ][i]?=?1;?//Las coordenadas correspondientes del tablero Snake están marcadas en las paredes superior e inferior 1 para(i=1;ilt;=20 ;i)

tcsQipan[i][ 0]?=?tcsQipan[i][21]?=?2;?//Las coordenadas correspondientes del tablero Snake están marcadas con los signos de la izquierda y paredes derechas 2 int?tcsZuobiao[2][500];?//La matriz de coordenadas de la serpiente for(i=0;?ilt;4;?i) {

tcsZuobiao[0][ i]?=?1; //coordenadas x del cuerpo de la serpiente y la cabeza de la serpiente

tcsZuobiao[1][i]?=?i ?1? int?head?=?3, tail?=?0; //Compensaciones de matriz que marcan la cabeza y la cola de serpiente for(i=1;ilt;=3;i)

tcsQipan[1][i ]=4; //Cuerpo de serpiente tcsQipan[1][4]=3; //Cabeza de serpiente int?x1 ,?y1;//?Producir aleatoriamente fruta srand(time(0));//Establecer semilla aleatoria do {

x1=rand()20 1;

y1=rand ()20 1; } while(tcsQipan[x1][y1]!=0); no se reproduce en el espacio en blanco tcsQipan[x1][y1]=5; //Las coordenadas correspondientes del tablero Snake están marcadas El signo de la fruta 5 color(12); \t\t\t\t¿El juego de la serpiente está a punto de comenzar?!"lt;lt;endl;//¿Listo para empezar long?start, starttemp ; int?grade?=?1,?length?=?4;? //Establece el grado inicial y la longitud inicial de la serpiente int?gamespeed?=?500;?//Establece el intervalo de tiempo de avance inicial for(i=3;igt ;=0;i--) {

inicio=reloj();

mientras(reloj()-startlt;=1000);

sistema( "cls")

;

if(igt;0)

cout?lt;lt;?"\n\n\t\t\t\tIngrese la cuenta regresiva: "?lt;lt; i?lt;lt;?endl;?//Visualización de cuenta atrás

else

Refresh(tcsQipan, grado, velocidad de juego, duración, puntuación);?//Visualización inicial del tablero de ajedrez} int ?timeover=1, otherkey=1; //Tiempo de espera de inicialización y parámetro de juicio clave char?direction?=?77;?//?Establezca la situación inicial para moverse hacia la derecha int?x=tcsZuobiao[0][head] , y= tcsZuobiao[1][head]; //Guarda las coordenadas de la cabeza de serpiente en la variable x, y while(1)//Ejecuta un juego {

start?=?clock();

while((timeover=((starttemp=clock())-startlt;=gamespeed))amp;amp;!kbhit() // Termina si se presiona una tecla o el tiempo excede el intervalo de tiempo de avance automático.

if(direction==72||direction==80||direction==75?||direction==77)

directiontemp=direction //Conservar la última vez; Teclas 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 ( );

mientras(reloj()-startlt;=2000);

gotoxy(24,4);

cout?lt;lt;? " \tClave código ASCII "lt;lt;(int)direcciónlt;lt;""lt;lt;endl; #endif

if(!(dirección==72||dirección==80|| dirección==75?||dirección==77))

{ otherkey=0; //La clave no es la tecla de dirección, otherkey está establecida en 0

}

else

{ otherkey=1; //?La clave es la tecla de dirección, otherkey se establece en 1

} if(direction==72?amp ;amp;?directiontemp== 80) //Ignorar las teclas de dirección inversa

{

direction=32; otherkey=0; //start?=?clock();

// while(clock()-startlt;=starttemp);

}

else?if(direction==80?amp;amp;?directiontemp= =72)

{

dirección

tion=32; //Establece la clave como una clave no direccional otherkey=0; //La clave es una clave no direccional, otherkey está configurada en 0

//?start?=? clock();

// while(clock()-startlt;=starttemp);//tiempo de espera de compensación

}

else?if(dirección ==75?amp;amp ;?directiontemp==77)

{

direction=32; otherkey=0; //start?=?clock();

// while (clock()-startlt;=starttemp);

}

else?if(direction==77?amp;amp;?directiontemp== 75)

{

dirección=32; otherkey=0; //inicio?=?reloj();

//mientras(reloj()- startlt;=starttemp);

}

switch(direction)//Juzgar teclas de dirección

{ case?72:?x=?tcsZuobiao[0] [cabeza]-1;? y=?tcsZuobiao[1][cabeza];romper;?//?Up case?80:?x=?tcsZuobiao[0][cabeza] 1;?y=?tcsZuobiao[1] [cabeza];romper;? //Caso abajo?75:?x=?tcsZuobiao[0][cabeza];?y=?tcsZuobiao[1][cabeza]-1;romper;?//?Caso izquierdo? 77:?x= ?tcsZuobiao[0][cabeza];?y=?tcsZuobiao[1][cabeza] 1; romper;?//?right default:?break;

}

if(x==0?||?x==21?||y==0?||?y==21)?//?La cabeza de la serpiente golpea la pared y el juego termina

{ ? gotoxy(22, 12); cout?lt;lt;?"\t¡El juego ha terminado!"?lt;lt;?endl; if(scoregt;=(length (grado-1)* 8)*10)/ /Juzga si el récord se ha batido {gotoxy(10,7); color(12); cout?lt;lt;?"¿No se pudo superar el nivel? ¡Vamos!"?lt;lt; ?endl; fclose(fpini); //Cerrar archivo ini} else {gotoxy(10,7); color(12); cout?lt;lt;?"Felicitaciones por batir el récord"?lt;?endl; puntuación=(longitud (grado-1)*8)* 10; writeini(amp;fpini,?amp;score,?argv); //El registro más alto escrito en el archivo ini} gotoxy(23, 12);

cout?lt;lt;?" Presiona Presiona Enter para reiniciar, presiona ESC para salir del juego "?lt;lt;?endl;//Se muestra el mensaje break;//Salir del juego

}

if(tcsQipan [x][y]!=0amp;amp;!(x==x1amp;amp;

y==y1)amp;amp;tcsQipan[x][y]!=3)?//La cabeza de la serpiente toca el cuerpo de la serpiente, finalizando el juego

{gotoxy(22,12); ?lt ;lt;?"\t¡El juego ha terminado!"?lt;lt;?endl; if(scoregt;=(length (grade-1)*8)*10)//Determina si el récord se ha batido { gotoxy (10, 7 ); color(12); cout?lt;lt; "¿No pudo pasar el nivel? ¡Vamos!"?lt;?endl; fclose(fpini); { gotoxy(10, 7); color(12); cout?lt;lt;?"Felicitaciones por batir el récord"?lt;lt;?endl; puntuación=(length (grado-1)*8)*10; writeini(amp;fpini,?amp; score,?argv); //El registro más alto escrito en el archivo ini} gotoxy(23, 12); cout?lt;lt;?"Presione Enter para reiniciar, presione ESC para salir el juego"?lt;lt;?endl ; //Se muestra un aviso de pausa; //Salir del juego

}

/*

El algoritmo central de el juego comienza

*/

if(x==x1?amp;amp;?y==y1)?//?Come la fruta y suma 1 a la longitud

{ length?; if (lengthgt;=8)//Recalcular la longitud si la longitud es mayor o igual a 8, y agregar 1 al nivel {length?-=?8;//Recalcular the length grade?;//Agrega 1 al nivel if(gamespeedgt;50)//Controla el máximo La velocidad rápida es 50

gamespeed?=?550?-?grade?*?50;? //Cambiar el intervalo de tiempo de avance automático} tcsQipan[x][y]=?3; //Gludgy Las coordenadas correspondientes del tablero de ajedrez de la serpiente ahora se cambian a la marca de la cabeza de la serpiente 3 tcsQipan[tcsZuobiao[0][head]] [tcsZuobiao[1][head]]?=?4; // Las coordenadas correspondientes del tablero de ajedrez de la serpiente codiciosa se cambian a la marca de la cabeza de la serpiente. Marca del cuerpo 4 head?=?(head 1)400; desde cruzar el límite tcsZuobiao[0][head]?=?x; // La coordenada x de la cabeza de serpiente tcsZuobiao[1][head]?=?y // La coordenada y de la cabeza de serpiente do // Aleatoriamente produce fruta { x1=rand()20 1; y1=rand()20 1; } while(tcsQipan[x1][y1]!=0); // Si no se reinicia en el espacio en blanco, la fruta se produce tcsQipan. [x1][y1]=5; //Las coordenadas correspondientes del tablero Snake están marcadas con el símbolo de la fruta 5 gotoxy(22, 12); cout?lt;lt;?"\t¡El juego está en progreso!"?lt; ;lt;?endl; Refresh(tcsQipan, grado, velocidad del juego, duración, puntuación);

}

else?//?No comas la fruta

{ ? if(otherkey) { tcsQipan?[tcsZuobiao[0][tail]][tcsZuobiao[1][tail]]=0; tail=(tail 1)400; //Evita que la matriz cruce el límite tcsQipan ?[tcsZuobiao[0][ cabeza]][tcsZuo

biao[1][head]]=4; head=(head 1)400; //Evita que la matriz cruce el límite tcsZuobiao[0][head]=x; //La coordenada x de la cabeza de serpiente tcsZuobiao[1] ][head]=y; // La coordenada y de la cabeza de serpiente tcsQipan[tcsZuobiao[0][head]][tcsZuobiao[1][head]]=3; ;?"\tJuego en progreso!" ?lt;lt;?endl; Actualizar(tcsQipan, grado, velocidad del juego, duración, puntuación } else { gotoxy(22, 12); ¡el juego está en pausa!"?lt;lt ;?endl; }

}

/*

Fin del algoritmo central cuando el juego se está ejecutando

*/

}

while(1)

{ while(!kbhit()); if((dirección?=getch( ))==13)//Presiona la tecla Enter Inicia el siguiente descanso if(direction?==27)//Presiona ESC para salir del juego exit(0);

}

system("cls");//Borrar reinicio de pantalla} return?0;

}