Buscando código fuente en c++ para juegos 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
#include
#include
#include
#include
#include
enum dir{arriba,abajo,izquierda,derecha}; //tipo de enumeración enum dir;
//fence;
void InitFence ( );
void OutputF();
char game[20][20];
//Marco de imagen;
void InitFence(){
int i,j;
for(i=0; i<20; i++)
for(j=0; j < 20; j++){
if(i==0||i==19||j==0||j==19)
juego[i][ j ]= '*';
else juego[i][j]= ' ';
}
}
/ / Marco de visualización;
void OutputF(){
int i,j;
for(i=0; i<20; i++){ p >
for(j=0; j<20; j++)
printf("%c ",juego[i][j]);
printf(" \ n");
}
}
//Nodo serpiente;
estructura SnakeNode{
int x,y;
struct SnakeNode *antes,*siguiente;
}*head=NULL, *tail =NULL;
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->x =x; q->y =y;
q->siguiente =head;
q- > prior =NULL;
if(head) head->prior =q;
head =q;
if(!tail) tail =head <; /p>
game[x][y]= '*'; // El objeto f se puede definir al definir la clase Fence y la clase Fence se define antes de la clase SnakeNode;
} p>
int get_x(struct SnakeNode *p){
return p->x;
}
int get_y(struct S
nakeNode *p){
return p->y;
}
//Eliminar el nodo de cola;
void delete_tail( ){
struct SnakeNode *p =tail;
game[get_x(tail)][get_y(tail)]= ' ';//Representa las coordenadas del nodo de cola ' *' se establece en un espacio;
if(tail==head)
tail= head= NULL;
else{
tail= tail->anterior;
tail->siguiente= NULL;
}
gratis(p);
}
//move move;
struct move{
enum dir point; //enumeración punto variable: dirección de control;
int food_x;
int food_y;
};
void moving(struct move *m);
void change_point(char,struct move *m); //Cambiar dirección;
void get_food(struct move *m);
void get_food(struct move *m){
srand ((unsigned int) time(NULL)); //Hacer semillas (tiempo de ejecución del programa)
m->food_x= rand()%18+1;
m-; >food_y= rand()%18+1;
juego[m->food_x][m->food_y]= '*';
}
void moving(struct move *m){
int a,b;
a= get_x(head); //Obtiene la coordenada de abscisas del nodo principal
b= get_y(head); //coordenada vertical del nodo principal
switch(m->point){
case up: --a; /p>
caso abajo: ++a; romper;
caso izquierda: --b; romper;
caso derecha: ++b; >
}
if(a==19||b==19||a==0||b==0){ //Determina si golpea la pared; >
printf( "¡¡¡juego terminado!!!\n");
salir(0);
}
if(a==m ->food_x && b= =m->food_y){ //comer comida;
add_head(a,b);
get_food(m);
}
else{
add_head(a,b); //Inserta el nodo principal;
delete_tail(); //Elimina el nodo final;
}
}
void change_point(char keydown,struct move *m){
switch(keydown){
// caso 'w': m->punto= arriba;
// caso 's': m->punto= abajo;
/ / caso 'a': m->punto= izquierda; romper;
// caso 'd': m->punto= derecha;
caso 72: m- >punto= arriba; romper;
caso 80: m->punto= abajo;
caso 75: m->punto= izquierda;
caso 77: m->punto= derecha;
}
}
//main();
int main(){
struct move m;
printf("¡¡¡Usando 'w,s,a,d' para controlar la dirección!!!\n\n\n") ;
InitFence();
add_head(4,3);
add_head(4,4);
add_head(4 ,5);
get_food(&m);
OutputF();
while (1){
char keydown= getch (); //getch() devuelve los caracteres leídos en el teclado; incluye el archivo de encabezado
change_point(keydown,&m);
while(!kbhit ( )){ //Juzgar si se ha presionado una tecla;
system("cls"); // Función borrar pantalla;
moving(&m);
SalidaF();
Dormir(200);
}
}
devuelve 0;
}