Red de conocimiento informático - Conocimiento sistemático - Buscando código Snake C con ciertos requisitos funcionales

Buscando código Snake C con ciertos requisitos funcionales

hgt;

#define IZQUIERDA 0x4b00

#define DERECHA 0x4d00

#define ABAJO 0x5000

#define ARRIBA 0x4800

#define ESC 0x011b

int i,key;

int puntuación = 0;/* puntuación**/

int gamespeed = 100000;/ * La velocidad del juego se puede ajustar sola**

struct Food

{

?int x /* La abscisa de la comida**

? int y; /* La coordenada vertical de la comida*/

?int yes /* Variable que determina si la comida aparece

}comida; estructura de los alimentos**

struct Snake

{

? int x[N]

?

? int node;/* El número de nodos de la serpiente**

? int direction;/* La dirección de movimiento de la serpiente*/

?int vida;/* vida de serpiente, 0 viva, 1 muerta*/

}serpiente;

void Init(void);/* controlador gráfico*/

void Close(void);/* fin gráfico */

void DrawK(void);/* pantalla de inicio*/ }

for(i = 40; i lt; = 450 ; i = 10)

{

?rectangle(50, i, 59, i 10); /*lado izquierdo*/

?rectangle(601); , i, 610, i 10);/ *lado derecho*/

}<

}

/*Jugando el juego**

void GamePlay(void)

{

randomize(); /*generador de números aleatorios**

food.yes = 1 /*1; significa que es necesario que aparezcan nuevos alimentos, 0 significa que los alimentos ya existen***

Snake.yes = 1;/*1 significa que es necesario que aparezcan nuevos alimentos, 0 significa que los alimentos ya existen***

snake.yes = 1;/*1 Indica que es necesario que aparezca nuevo alimento, 0 significa que el alimento ya existe***

Snake.

node = 2; /* Número de nodos*/

PrScore(); /* Puntuación de salida*/

while(1)/* Puedes repetir el juego y presionar ESC para finalizar el juego* /

{

? while(!kbhit())/* Sin el botón kbhit())/*, la serpiente moverá su cuerpo por sí sola*/

?{

? if(food.yes == 1)/* Es necesario que aparezcan nuevos alimentos**

?{

comida.x = rand() 400 60

comida.y = rand() 350 60

mientras(comida.x 10 ! = 0; )/* comida Debe ser aleatoria para que la comida quepa dentro de todo el marco para que la serpiente pueda comer *

comida.x;

while(comida.y 10 ! = 0 )

food.y;

food.yes = 0; /* Ahora hay comida en la pantalla*/

?}

?

? if(food.yes == 0)/* Muestra si hay comida en la pantalla*/

?{

setcolor( VERDE);

rectángulo(comida.x, comida.y, comida.x 10, comida.y - 10);

?}

?

? for (i = serpiente.nodo - 1; i gt; 0; i--)/* Cada enlace de la serpiente avanza. Este es el algoritmo clave de "Snake"*

?{

serpiente.x[i] = serpiente.x[i-1]

serpiente.y[i] = serpiente.y[i-1];

?}

?

?/*1, 2, 3, 4 representan las cuatro direcciones: derecha, izquierda, arriba y abajo, para determinar. el movimiento de la cabeza de serpiente*/

? switch(snake.direction)

?{

caso 1: serpiente.x[0] = 10; romper;

caso 2: serpiente.x[0] -= 10; romper

caso 3: serpiente.y[0] -= 10;

caso 4: serpiente. y[0] = 10 descanso;

?}

?

? Snake.node; i )/* Comience desde el cuarto nodo de la serpiente para determinar si se golpeó a sí misma, porque la cabeza de la serpiente está en dos nodos y el tercer nodo no se puede girar*

?{

if(snake.x[i] == serpiente.x[0] amp; amp; serpiente.y[i] == serpiente.y[0])

{

GameOver(); /* Error de visualización**

serpiente.life = 1

descanso

}

?}

?

? if(snake.x[0]lt; 55||snake.x[0]gt; 595||snake.y[ 0]lt; 5

5|

? Snake.y[0]gt; 455)/* ¿La serpiente chocó contra la pared*/

?{

GameOver(); / * Juego terminado*/

serpiente.life=1; /* La serpiente muere*/

?}

?

? if (snake.life == 1)/* Después de los dos juicios anteriores, si la serpiente muere, salta del bucle interno y comienza de nuevo*

break

p>

? ?{

setcolor(0); /* Eliminar comida en la pantalla*/

rectángulo(food.x, food.y, food.x 10, food.y - 10 );

Snake.x[snake.node] =- 20; Snake.y[snake.node] =- 20

/* Coloque la nueva pieza fuera de la vista primero; , el siguiente bucle usa la posición de la parte anterior*/

Snake.x[0] == food.x amp; >

?node; /* El cuerpo de la serpiente ha crecido una sección*/

food.yes = 1; /* Es necesario que aparezca nueva comida en la pantalla*/

puntuación = 10;

PrScore();/* Generar nueva puntuación*/

?}

?

setcolor(4) ) ;/* Dibujar una serpiente*/

?

? for(i = 0; i lt; Snake.node; i )

rectángulo(serpiente) .x[i], serpiente.y[i], serpiente.x[i] 10,

serpiente.y[i] - 10);

* delay(gamespeed);

* setcolor(0); /* Eliminar la última serpiente negra*/ ?

? .x[snake.node-1], serpiente.y[snake.node-1],

? serpiente.x[snake.node-1] 10, serpiente.y[snake.node - 1 ] - 10);

?}?/*end while(!kbhit)*/

?

?if(snake.life == 1)/ * Si la serpiente muere, sal del bucle*/

? break;

?

?key = bioskey(0); **

?

?if(key == ESC)/* Presione la tecla ESC para salir*/

? p> ? else

? if(key == UPamp;amp; Snake.direction!=4)

/* Determinar si se debe mover en la dirección opuesta*/

serpiente.dirección =3;

?d

irection=3;

? else

? /p>

? else

? if(clave == IZQUIERDA amp; serpiente.dirección ! = 1)

serpiente.dirección=2;

p>

? else

?if (tecla == ABAJO amp; serpiente.dirección ! = 3)

serpiente.dirección = 4;

?dirección = 4;

}/*end while(1)*/

}

/*juego terminado**

void GameOver( vacío)

{

cleardevice();

PrScore()

setcolor(ROJO);

p>

settextstyle(0, 0, 4);

outtextxy(200, 200, "JUEGO TERMINADO");

getch(); p >}

/* Puntuación de salida*/

void PrScore(void)

{ ?

char str[10];

setfillstyle(SOLID_FILL, AMARILLO);

bar(50, 15, 220, 35);

setcolor(6); > settextstyle(0, 0, 2); <

sprintf(str, "puntuación: d", puntuación

outtextxy(55, 20, str); >

}

/* Fin del gráfico**

void Close(void)

{ ?

getch();

cerrar gráfico();

}