¿Es difícil programar 300 líneas en lenguaje C?
¡No es fácil cometer errores! Puede seleccionar algunos lugares según sea necesario, cambiarlos deliberadamente a errores y encontrar fallas y lagunas. Por ejemplo, int se escribe como imt, la línea stdlib.h se elimina, i=0 no se establece al comienzo del bucle múltiple, la lógica de bifurcación se establece sin procesamiento y el tipo de parámetro de función se establece incorrectamente.
#Definición N 200
# include & ltgraphics.h & gt
# include & ltstdlib.h & gt
# include & ltdos.h & gt
#definir izquierda 0x4b00
#definir derecha 0x4d00
#definir abajo 0x5000
#definir hasta 0x4800
#define ESC 0x011b
int i, clave
int puntuación = 0 /*puntuación*/
int gamespeed = 50000/*Ajusta la velocidad del juego tú mismo*/
Comida estructurada
{
int x /*Abcisa de comida*/
int y;/*La coordenada vertical de la comida*/
int yes/*Determinar si aparecerá la variable de comida*/
}Comida;/*La estructura de la comida */ p>
Estructura Serpiente
{
int x[N];
int y[N];
int node ;/*El número de nudos de la serpiente*/
int direction; /*La dirección de movimiento de la serpiente*/
int life/*La vida de la serpiente, 0 está vivo, 1 está muerto */
}Serpiente;
void Init(void);/*Controlador de gráficos*/
void Close (void);/*Fin del gráfico */
void DrawK(void); /*Pantalla de inicio*/
void game over(void);
void gameplay (void); /*El proceso específico de jugar el juego*/
void PrScore(void); /*Función principal*/
Administrador no válido (no válido)
{
init() /*Controlador de gráficos*/
DrawK(); /*Pantalla de inicio*/
Juego();/*Proceso detallado del juego*/
cerrar();/*Fin del gráfico*/
}
/*Controlador de gráficos*/
inicialización nula (void)
{
int gd= DETECT, GM;
iniciar gráfico(&gd,&gm," c:\\TC");
borrar dispositivo();
}
/* Pantalla de inicio, las coordenadas de la esquina superior izquierda son (50, 40), las coordenadas de la esquina inferior derecha son (610, 460 */
void DrawK (inválido)
{
/*setbkcolor(verde claro);*/
establecer color(11);
setlinestyle(SOLID_LINE, 0, THICK _ WIDTH); /*Establecer estilo de línea*/ p>
for(I = 50;i<=600;I+=10)/*Dibujar una valla*/
{ p>
Rectángulo(I, 40, i +10, 49); /*mayor que*/
Rectángulo (I, 451, i+10, 460);
}
for(I = 40;i<=450;i+=10)
{
Rectángulo(50,I, 59,I+10);/*Izquierda */
Rectángulo (601, I, 610, I+10); /*derecha*/
}
<); p>}/*El proceso específico de jugar el juego*/
Juego no válido (nulo)
{
aleatorizar( ); /* Lo que
Generador de posibilidades */
comida . yes = 1; /*1 significa que es necesario que aparezca nueva comida, 0 significa que la comida ya existe*/
vida de serpiente = 0;/ *Viva. */
serpiente . dirección = 1; /*Dirección derecha*/
serpiente . x[0]= 100; */
snake . p>
PrScore();/*Puntuación de salida*/
Y (1)/*Puedes jugar el juego repetidamente y presionar ESC para finalizar. */
{
Y (!Khit ())/*La serpiente se mueve sola sin presionar una tecla*/
{
If(food.yes==1)/*Requerido Nuevo alimento*/
{
comida x = rand()% 4060; p>food . y = rand()% 3560 ;
Y (food.x%10!=0)/*Después de que la comida aparezca aleatoriamente, la comida debe estar en toda la cuadrícula antes que la serpiente. puedo comerlo*/
comida . /p>
Y (comida.y%10!=0)
comida y++; . yes = 0; /*Hay comida en la pantalla*/
}
If(food.yes==0)/*Si hay comida en la pantalla, se mostrará*/
{
setcolor(green);
Rectángulo (food.x, food.y, food.x+10, food. y-10);
}
for(I = serpiente. nodo-1; I>0;I-)/*Cada eslabón de la serpiente avanza, que es el algoritmo clave de la serpiente*/
{
serpiente x[I]= serpiente .
serpiente y[I]=. serpiente . y[I-1];
}
/*1, 2, 3, 4 significa derecha, izquierda, arriba y abajo. */
Cambiar (dirección de la serpiente)
{
caso 1: serpiente x[0]+= 10; >Caso 2: serpiente . x[0]-= 10;
p>Caso 3: serpiente y[0]-= 10; serpiente . y[0]+= 10; break;
}
for(I = 3; I<snake.node;I++)/*Juzga si te golpeaste desde la cuarta sección. de la serpiente, porque la cabeza de la serpiente tiene dos secciones, y la tercera sección es imposible Turn around*/
{
if(snake . x[I]= = serpiente . x [0]&&snake.y[i]==snake.y [0])
{
juego terminado() /*fallo de visualización*/
serpiente . vida = 1;
romper;
}
}
if(serpiente . x[0]< ;55 | | serpiente .x[0]>595| | serpiente y[0]<55||
serpiente . wall*/
{
juego terminado();/*Este juego ha terminado*/
snake life =.
1;/*La serpiente muere*/
}
If(snake.life==1)/*Después de los dos juicios anteriores, si la serpiente muere, salta del interior bucle y empezar de nuevo */
Break;
if(snake . x[0]= = food . x & & ampSnake.y[0]==food.y)/ *eat Terminar comida */
{
set color(0); /*Eliminar comida de la imagen*/
Rectangle(food.x, food. y, comida. x+10, comida. y-10);
snake.
/*Primero coloque el nuevo segmento fuera de la vista y tome la posición del segmento anterior en el siguiente bucle. */
snake.node++;/*El cuerpo de la serpiente tiene un segmento largo*/
comida .yes = 1 /*Es necesario que aparezca nueva comida en la pantalla*/
Puntuación += 10;
PrScore(); /*Nueva puntuación de salida*/
}
establecer color(4); /*dibuja una serpiente*/
for(I = 0;i<snake.node ;i++)
Rectángulo (snake.x[i], serpiente.y[i], serpiente .x[i]+10,
serpiente . y[I]-10
Retraso (velocidad del juego);
establecer color(0); /*Elimina la última sección de la serpiente con negro*/
Rectángulo (snake.x [snake.node-1], serpiente.y[snake.node-1],
snake.x[snake.node-1]+10, serpiente.y[snake.node-1]- 10);
} /*end while(!kbhit)*/
If(snake.life==1)/*Si la serpiente muere, salta fuera del bucle*/
Break;
key = BIOS key(0);/ *Botón Recibir*/
If(key==ESC)/*Presione ESC para salir*/ p>
Interrumpir
Otro
if(key == UP & amp; & amp serpiente, dirección!=4)
/*Juicio sobre si moverse en la dirección opuesta */
dirección serpiente = 3. ;
Otro
if(key == DERECHA & & ampsnake, dirección!
serpiente . dirección = 2;
Otro
if(clave == ABAJO & & serpiente, dirección! = 3)
dirección de la serpiente = 4;
}/*end while(1)*/
}
/*Juego terminado*/
< p. >Juego no válido terminado (no válido){
borrar dispositivo();
PrScore();
setcolor(rojo);
settextstyle(0, 0, 4);
outtextxy(200, 200, "Juego terminado");
getch();
}
/*Resultados de salida*/
PrS no válido
core(no válido)
{
char str[10];
setfillstyle(SOLID_FILL, amarillo);
Bar(50, 15, 220, 35);
establecer color(6);
settextstyle(0, 0, 2);
sprintf(str, " puntuación: %d ", puntuación);
outtextxy(55, 20, str);
}
/*Fin del gráfico*/
Cierre no válido (no válido)
{
getch();
closegraph();
}