Red de conocimiento informático - Conocimiento sistemático - Buscando el código fuente c de minijuegos clásicos (backgammon, Snake, Tetris, etc.). Es mejor tener un proceso de diseño de software. Quiero aprender ideas.

Buscando el código fuente c de minijuegos clásicos (backgammon, Snake, Tetris, etc.). Es mejor tener un proceso de diseño de software. Quiero aprender ideas.

Este tiene el proceso de control de serpientes más simple.

Generalmente, los juegos de este tipo se dividen en algoritmos de control, algoritmos de visualización y algoritmos de decisión.

Para referencia:

#include lt;stdio.hgt;

#include lt;windows.hgt;

#include lt ;stdlib.hgt;

#include lt;string.hgt;

#include lt;conio.hgt;

#include lt;time.hgt; //Usa la hora actual como semilla;

enum dir{up, down, left, right}; //Tipo de enumeración enum dir;

//Fence;

void InitFence();

void OutputF();

char game[20][20];

//Marco de imagen;

p>

void InitFence(){

int i, j

for(i=0; ilt; 20; i )

for( j=0; jlt; 20; j ){

si(i==0||i==19||j==0||j==19)

juego[i][j]= '*';

else juego[i][j]= ' ';

}

}

//Mostrar marco;

void OutputF(){

int i, j;

for(i=0; ilt ; 20; i ){

for(j=0; jlt; 20; j )

printf("c ", juego[i][j]);

printf("\n");

}

}

//Nodo serpiente;

estructura SnakeNode{

int x, y;

struct SnakeNode *antes, *siguiente

} *cabeza=NULL, *cola =NULL; p> void add_head(int x, int y);

int get_x(struct SnakeNode *p);

int get_y(struct SnakeNode *p); > void delete_tail();

//Insertar nodo principal;

void add_head(int x, int y){

struct SnakeNode *q= (struct SnakeNode *)malloc(sizeof(struct SnakeNode));

q-gt; x =x; y =y

q-gt;

q-gt; prioridad =NULL;

if(cabeza) cabeza-gt; anterior =q

cabeza =q; p > if(!tail) tail =head;

game[x][y]= '*'; // El objeto f se puede definir al definir la clase Fence y la clase Fence; antes de la clase SnakeNode

}

int get_x;

(struct SnakeNode *p){

return p-gt;x;

}

int get_y(struct SnakeNode *p){

return p-gt;y;

}

//Eliminar el nodo de cola;

void delete_tail(){

struct SnakeNode *p =tail;

game[get_x(tail)][get_y(tail)]= ' '; // Establece el '*' representado por las coordenadas del nodo de cola en un espacio;

p>

if(tail==head)

tail= head= NULL;

else{

tail= tail-gt ; anterior;

tail-gt; siguiente= NULL;

}

gratis

}

/ /move move;

struct move{

enum dir point; //Punto de variable de enumeración: dirección de control;

int food_x;

int food_y;

};

movimiento vacío (movimiento de estructura *m); ; // Cambiar dirección;

void get_food(struct move *m);

void get_food(struct move *m){

srand((unsigned int) ) time( NULL)); //Crear semillas (tiempo de ejecución del programa);

m-gt; food_x= rand() 1

m-gt; ()18 1;

juego[m-gt;food_x][m-gt;food_y]= '*';

}

vacío en movimiento( struct move * m){

int a, b;

a= get_x(head); //Obtiene la abscisa del nodo principal

b= get_y(head) ; // La coordenada vertical del nodo principal

switch(m-gt; point){

case up: --a;

caso abajo: a; romper;

caso izquierda: --b; romper

caso; b; p>

if (a==19||b==19||a==0||b==0){ //Determina si golpea la pared

printf(" ¡¡¡Se acabó el juego!!!\n") ;

exit(0);

}

if(a==m-gt; food_x amp; amp ; b==m-gt; food_y ){ //Comer comida;

add_head(a, b

get_food(m);

más{ <

/p>

add_head(a, b); //Insertar el nodo principal;

delete_tail(); //Eliminar el nodo final

}

}

void change_point(char keydown, struct move *m){

switch(keydown){

// case 'w': m -gt; punto= arriba;

// caso 's': m-gt; punto= abajo; ; punto= izquierda;

// caso 'd': m-gt; punto= derecha;

caso 72: m-gt; ;

caso 80: m-gt; punto= abajo;

caso 75: m-gt; punto = izquierda; : m-gt; punto= derecha;

}

}

//main()

int main( ){

struct move m;

printf("¡¡¡Usando 'w, s, a, d' para controlar la dirección!!!\n\n\n"); p>

InitFence();

add_head(4, 3);

add_head(4, 4); 5) ;

get_food(amp;m);

OutputF();

while (1){

char keydown= getch( ); //getch() devuelve los caracteres leídos en el teclado; incluye el archivo de encabezado lt; conio.hgt

change_point(keydown, amp; m); while(! kbhit()){ //Juzga si se ha presionado una tecla;

system("cls"); // Función borrar pantalla;

moving(amp;m );

SalidaF();

Dormir(200);

}

}

devolver 0 ;

}