Red de conocimiento informático - Conocimiento del nombre de dominio - ¿Cómo escribir un pequeño juego en lenguaje C?

¿Cómo escribir un pequeño juego en lenguaje C?

Código C "Serpiente":

#include

#include

#include

#include

#include

#define W 78 //Juego El ancho del cuadro, eje x

#define H 26? //La altura del cuadro del juego, eje y

int dir=3 //Variable de dirección, la inicial; valor 3 significa " "Izquierda"

int Flag=0; ?//Bandera de comer alimentos (1 sí, 0 no)

int score=0;? //Puntuación del jugador

struct food{ int x;? //La coordenada x de la comida

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

? fod; ?//La estructura fod tiene 2 miembros

struct Snake{ int len;? //Longitud

int speed;? //Velocidad

int x[100];

int y[100];

}snk;? //La estructura snk tiene 4 miembros

void gtxy( int x, int y) ?//Controlar la función de movimiento del cursor

{ COORD coord; coord. p>void gtxy( int x,int y); //A continuación se declaran varias funciones escritas por usted mismo

void csh( );? //Interfaz de inicialización

void keymove( ); //Operación clave para mover la serpiente

void putFod( ); /Poner comida en

int? Over( ?//El juego ha terminado (1 es 0 No)

void setColor(unsigned short p, unsigned short q); /Establecer el color de visualización

int main( )?? //Función principal

{ csh( );

while(1)

{ Dormir(snk.speed);

? keymove( );

? putFod( );

si(Over( ))

{system(“cls”);

? gtxy(W/2+ 1,H/2); printf("¡Se acabó el juego! T__T");

? gtxy(W/2+1,H/2+2); printf("Puntuación total del jugador: %d puntos",puntuación);

? getch( );

? romper;

} }

? devolver 0;

}

void csh( )? //Interfaz de inicialización

{ int i;

LE_CURSOR_INFO cursor_info={1,0};? //Las dos líneas siguientes son configuraciones para ocultar el cursor SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info for(i=0;i<=W;i=i+2)? // La abscisa debe ser un número par, porque el carácter a imprimir ocupa 2 posiciones { setColor(2, 0);? //Establece el color de impresión en verde con fondo negro

gtxy(i, 0); ?printf("■"); ?//Imprimir el borde superior

gtxy(i,H); printf("■"); =1;i< H;i++) { gtxy(0,i); printf("■"); ?//Imprimir el borde izquierdo

gtxy(W,i); ?//Imprimir borde derecho} while(1)

{ srand((unsigned)time(NULL)); //Inicializar el generador de números aleatorios srand( )

fod.x=rand( )%(W-4)+2;? //La función aleatoria rand() genera un número de 0 a 1 menor que "(W-4)" más 2

fod .y=rand ()%(H-2)+1;? //La función aleatoria rand() genera un número de 0 a 1 menor que "(H-2)" más 1

if ( fod. x%2==0) break;? //fod.x es la abscisa del alimento, si es múltiplo de 2 (un número par) } setColor(12, 0);? color a rojo claro con fondo negro gtxy (fod.x,fod.y); printf("●");//Imprime la comida de prueba inicial en las coordenadas de la comida snk.len=3;//Longitud del cuerpo de la serpiente snk; .speed=350;? // Actualiza la longitud de la serpiente Tiempo, es decir, la velocidad de movimiento snk.x[0]=W/2+1;? // La abscisa de la cabeza de la serpiente debe ser un número par (porque W /2=39) snk.y[0]=H/2; //La cabeza de serpiente Coordenada vertical setColor(9, 0);? //Establece el color de impresión en azul claro con fondo negro gtxy(snk.x[0] ], snk.y[0]); ?printf("■"); ?// Imprimir cabeza de serpiente for(i=1;i

? [i]=snk.x[i-1]+2; ?snk.y[i] =snk.y[i-1];

gtxy(snk.x[i],snk. y[i]); ?printf("■"); ?//Imprimir cuerpo de serpiente

} setColor(7, 0);? //Restaurar el texto blanco predeterminado y el fondo negro;

}

void keymove( )? //La operación clave mueve la serpiente

{ int key; if( kbhit( ) ) //La siguiente operación solo será se realiza si hay entrada de tecla

{ key=getch( );

? if (key==224)? //Un valor de 224 significa que se ha presionado la tecla de dirección. A continuación, necesitamos obtener el valor de la clave nuevamente

{ key=getch( );

? if(key ==72&&dir!=2)dir=1; //. 72 significa que se presiona la tecla de dirección hacia arriba

? if(key==80&&dir!=1)dir=2; //80 significa que se presiona la tecla de dirección hacia arriba Siguiente

? si(clave==75&a

mp;&dir!=4)dir=3;? //75 significa a la izquierda

? if(key==77&&dir!=3)dir=4; //77 significa a la derecha

}

if (key==32)

{ while(1) if((key=getch( ))==32) break }? // 32 es la barra espaciadora, que se usa aquí para pausar

} if (Flag==0)? //Si no has comido, realiza las siguientes operaciones para limpiar la cola de la serpiente

{ gtxy(snk .x[snk.len-1],snk.y[snk.len-1]); ?printf("? "); int i; 1; i > 0; i- -) ?//Cada sección de la cola de la serpiente almacena el valor de coordenadas de la sección anterior (excepto la cabeza de la serpiente) { snk.x[i]=snk.x[i -1]; ?snk.y[i]=snk.y[i -1]; } switch (dir)? //Determinar en qué dirección debe moverse la cabeza de la serpiente y obtener el último valor de coordenadas {caso 1: snk.y [0]--; break; ?//dir=1 debe moverse hacia arriba

caso 2: snk.y[0]++; //dir=2 debe moverse hacia abajo

caso 3: snk.x[0]-=2; break;? //dir=3 debe moverse hacia la izquierda

caso 4: snk.x[0]+= 2; break;? //dir=4 debe moverse hacia la derecha} setColor(9, 0 ); gtxy(snk.x[0], snk.y[0]); /Imprimir cabeza de serpiente if (snk.x[0] == fod.x && snk.y[0 ] == fod.y)? //Si se ingiere comida, realice las siguientes operaciones

{ printf("\007"); snk.len++; puntuación += 100; snk.speed -= 5; Bandera = } //007 es la bandera else = 0; se come if(snk.speed<150) snk.speed= snk.speed+5;? //Código de trampa para evitar que la velocidad aumente infinitamente

}

void putFod( )? //Poner comida en

{ if (Flag == 1)? //If Realiza las siguientes operaciones después de comer comida para generar otra comida

{ while (1)

{ int i,n= 1; srand((unsigned)time(NULL)); //Inicializa el generador de números aleatorios srand()

?fod.x = rand( ) % (W - 4) + 2;? //Generar un valor de coordenada x dentro del marco del juego

?fod.y = rand( ) % (H - 2) + 1;? /Generar un valor de coordenada y dentro del marco del juego

?for (i = 0 ; i < snk.len; i++) ?//La comida generada aleatoriamente no puede estar en el cuerpo de la serpiente

{ if (fod.x == snk.x[i] &&fod.y == snk. y[i]) { n= 0; break;} } if (n && fod.x % 2 == 0) break; ?//n no es 0 y la abscisa es un número par, entonces la comida

El valor de la coordenada se obtuvo con éxito

}

setColor(12, 0);

gtxy(fod.x, fod.y); ●" ); ? //Imprimir comida con el cursor en las coordenadas obtenidas

} return;

}

int Over( )? //Determinar si el juego ha terminado Function

{ int ?i; setColor(7, 0); gtxy(2,H+1); printf("Tecla de pausa: espacio."); alguna otra información gtxy( 2,H+2); printf("Puntuación del juego: %d",puntuación if (snk.x[0] == 0 || snk.x[0] == W) return 1 ;? //Cabeza de serpiente Toca los límites izquierdo y derecho if (snk.y[0] == 0 || snk.y[0] == H) return 1; //La cabeza de serpiente toca los límites superior e inferior for (i = 1; i < snk.len; i++) { if (snk.x[0] == snk.x[i] && snk.y[0] == snk.y[i]) devuelve 1; }? //La cabeza de la serpiente se toca a sí misma return 0; //Devuelve 0 cuando no toca el límite ni a sí misma

}

void setColor(unsigned short ForeColor = 7, unsigned short BackGroundColor = 0)

{? HANDLE? handle = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleTextAttribute( handle, ForeColor + BackGroundColor * 0x10);

} //Función utilizada para configurar color