Red de conocimiento informático - Computadora portátil - ¿Es difícil programar 300 líneas en lenguaje C?

¿Es difícil programar 300 líneas en lenguaje C?

Código en lenguaje C del juego Snake, un clásico de la programación estructurada.

¡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 */

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*/

for(I = 50;i<=600;I+=10)/*Dibujar una valla*/

{

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*/

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();

}