¡Es urgente utilizar el lenguaje C para diseñar programas de juegos pequeños! ! !

Código fuente del juego "Greedsnake" implementado en c

// greedsnake.cpp

#include bios.hgt

#include lt;conio.hgt;

#include lt;dos.hgt;

#include lt;graphics.hgt;

#include lt ;stdlib .hgt;

#include lt;time.hgt;

#include "conf.h"

nodo de estructura typedef

{

int x, y;

estructura nodo *next;

}Nodo;

estructura typedef

{

Nodo *cabeza, *cola;

int longitud;

}Serpiente;

estructura typedef

{

int izquierda, arriba, derecha, abajo

}Marco;

typedef enum //Cuatro direcciones

{

arriba, abajo, izquierda, derecha

}Dirección;

typedef enum

{

falso, verdadero

}bool; //*/

void InitGraphMode(); //Inicializa el controlador de gráficos

void CloseGraphMode();

void Foot(int, int);

void Head(int, int);

void CreateFrame() //Completa el dibujo de todo el marco del juego

void CreateSnake(); //Crea una serpiente con dos nodos, cada nodo de la serpiente es un nodo en la cola

bool PlayGame(); //La función principal del juego,

p>

int Hit(int, int); // Determina si cruza el límite o se golpea a sí mismo. Los dos parámetros son las coordenadas xey del nuevo contacto principal

bool. GameOver(); //Dibuja el cuadro de diálogo que aparece cuando finaliza el juego

void Enqueue(Node); //Función de poner en cola

Node Dequeue() //Función de poner en cola

void ClearKeyBuf(); //Borrar el búfer del teclado. Esta función puede eliminar el impacto de presionar constantemente teclas no válidas

Snake Snake;

Marco de marco;

void main()

{

InitGraphMode();

hacer

{

Crear marco( )

;

}mientras(PlayGame());

CloseGraphMode();

}

void InitGraphMode()

{

int gdriver=DETECT,gmode;

initgraph(amp;gdriver,amp;gmode,"../bgi/");

cleardevice();

}

void CloseGraphMode()

{

cleardevice();

closegraph();

}

void CreateFrame()

{

setbkcolor(CYAN);

//Las siguientes cuatro líneas de código se utilizan para calcular las coordenadas de la esquina superior izquierda y la esquina inferior derecha del marco principal

frame.left=(getmaxx() 1-BlockWidth*RowOfFrame)/2 ;

frame.top=(getmaxy() 1-BlockHeight*ColumnOfFrame)/2;

frame.right=frame.left BlockWidth*RowOfFrame;

frame.bottom=frame.top BlockHeight*ColumnOfFrame;

Cabeza(frame.left 100, frame.top-20);

setfillstyle(SOLID_FILL, LIGHTGRAY);

bar(frame. left, frame.top, frame.right, frame.bottom);

setlinestyle(SOLID_LINE, 1, 1);

setcolor(DARKGRAY);

línea(marco.izquierda, marco.arriba, marco.derecha, marco.arriba);

línea(marco.izquierda, marco.arriba, marco.izquierda, marco.abajo );

setlinestyle(SOLID_LINE, 1, 1);

setcolor(BLANCO);

line(frame.left, frame.bottom, frame.right , frame.bottom);

line(frame.right, frame.top, frame.right, frame.bottom);

setlinestyle(DOTTED_LINE, 1, 1);

setcolor( AZUL);

for(int fila=1; rowlt; RowOfFrame; fila)

line(frame.left fila*BlockWidth, frame.top, frame.left fila*BlockWidth, frame.bottom);

for(int column=1; columnlt; ColumnOfFrame; column)

line(frame.left, frame.top column* Altura del bloque

, frame.right, frame.top column*BlockHeight);

Foot(frame.left, frame.bottom 20);

}

void CreateSnake( )

{

Nodo *nodo1=nuevo Nodo;

Nodo *nodo2=nuevo Nodo;

nodo1-gt; frame.left BlockWidth;

nodo1-gt; y=frame.top

nodo1-gt; siguiente=NULL

snake.tail=nodo1;

nodo2-gt; x=frame.left;

nodo2-gt; y=frame.top;

nodo2-gt; ;

snake.head=nodo2;

snake.length=2;

setfillstyle(SOLID_FILL, AZUL);

bar( serpiente.cabeza-gt; x 1, serpiente.cabeza-gt; y 1, serpiente.cabeza-gt; x BlockWidth-1, serpiente.cabeza-gt; serpiente.cola-gt; x 1, serpiente.cola-gt; y 1, serpiente.cola-gt; x BlockWidth-1, serpiente.cola-gt; /p>

bool PlayGame()

{

int velocidad=300, clave;

Dirección CurrentDirection=derecha;

Nodo randomNode;

Nodo newNode, outNode;

bool neednode=true;

bool superposición=false;

int randx, randy;

CrearSerpiente();

mientras(verdadero)

{

si(neednode==verdadero)

{

randomize();

hacer

{

randx=frame.left rand()RowOfFrame*BlockWidth;

randy=frame.top rand()ColumnOfFrame*BlockHeight;

for(Node *p=snake.head; p!=NULL; p=p-gt; next)/ /se golpea a sí mismo

if(randx==p-gt;xamp;amp;randy==p-gt;y)

{overlap=true;break;}

}

mientras(overlap==true);

randomNode.x=randx;

randomNode.y=randy;

randomNode.next=NULL;

setfil

lstyle(SOLID_FILL, RED);

bar(randomNode.x 1, randomNode.y 1, randomNode.x BlockWidth-1, randomNode.y BlockHeight-1);

neednode= falso;

}

if((clave=bioskey(1))!=0)

{

cambiar(clave)

{

caso ESC: devuelve falso;

caso ARRIBA:

if(CurrentDirection!=abajo)

CurrentDirection=arriba;

ClearKeyBuf();

romper;

caso ABAJO:

if(CurrentDirection!=arriba)

CurrentDirection=abajo;

ClearKeyBuf();

romper;

caso IZQUIERDO:

if( CurrentDirection!=derecha)

CurrentDirection=izquierda;

ClearKeyBuf();

romper;

caso DERECHA:

if(CurrentDirection!=izquierda)

CurrentDirection=derecha;

ClearKeyBuf();

romper;

caso PAGEUP :speed=speed-100;

if(speedlt;100)

speed=100;

ClearKeyBuf();

romper ;

caso PAGEDOWN: velocidad=velocidad 100;

if(speedgt;500)

velocidad=500;

ClearKeyBuf() ;

romper;

predeterminado: romper;

}

}

int headx=snake.tail -gt;x;

int heady=snake.tail-gt;y;

cambiar(DirecciónActual)

{

caso arriba: heady-=BlockHeight; romper;

caso abajo: embriagador =BlockHeight;

caso izquierdo: headx-=BlockWidth; derecha: headx =BlockWidth; break;

}

if(Hit(headx, heady)) //si la serpiente golpea la pared o se estrella contra sí misma

regresa GameOver();

else

{ //comer

if(headx==randomNode.xamp;amp; él

ady==randomNode.y)

{

Enqueue(randomNode);

setfillstyle(SOLID_FILL, BLUE);

bar( randomNode.x 1, randomNode.y 1, randomNode.x-1 BlockWidth, randomNode.y-1 BlockHeight);

neednode=true;

}

else //no comer

{

newNode.x=headx;

newNode.y=heady;

newNode.next =NULL;

Encolar(newNode);

outNode=Dequeue();

setfillstyle(SOLID_FILL, LIGHTGRAY);

barra (outNode.x 1, outNode.y 1, outNode.x BlockWidth-1, outNode.y BlockHeight-1

setfillstyle(SOLID_FILL,

bar(newNode); .x 1, newNode.y 1, newNode.x-1 BlockWidth, newNode.y-1 BlockHeight);

}

}

retraso(velocidad );

}

}

void ClearKeyBuf()

{

hacer

bioskey(0);

mientras(bioskey(1));

}

pie vacío(int x, int y)

{

setcolor(AZUL);

outtextxy(x, y, "escritor: [T]RealXL CORREO ELECTRÓNICO: realgeneral@hotmail.com"); p>

}

Cabeza vacía(int x, int y)

{

setcolor(RED);

outtextxy (x, y, "SERPIENTE CODICIOSA");

}

void Enqueue(Nodo enNodo)

{

Nodo *p =nuevo Nodo;

p-gt;x=inNode.x;

p-gt;y=inNode.y;

p-gt ;siguiente =enNodo.siguiente;

snake.tail-gt;siguiente=p;

snake.tail=p;

snake.length;

}

Nodo Dequeue()

{

Nodo *p=snake.head;

Nodo outNode= *p ;

snake.head=p-gt;siguiente;

snake.length--;

eliminar p;

devolver nodosalida ;

}

int

Hit(int x, int y)

{

if(xlt;frame.left||xgt;=frame.right||ylt;frame.top||ygt;= frame.bottom)//golpea la pared

return 1;

Nodo *p=snake.head-gt;

for(int i= serpiente.length-1;igt;3;i--,p=p-gt;next)//se golpea a sí mismo

if(x==p-gt;xamp;amp;y==p -gt;y)

devuelve 1;

devuelve 0;

}

bool GameOver()

{

int x=getmaxx()/2-50;

int y=getmaxy()/2-20;

setfillstyle(SOLID_FILL,DARKGRAY

bar(x 3, y 3, x 103, y 43

setfillstyle(SOLID_FILL,

barra(x, y); , x 100, y 40);

setlinestyle(0, 3, 1

setcolor(RED);

rectangle(x, y, x); 100, y 40);

outtextxy(x 20, y 10, "GAGE OVER!");

char c; /Presiona q o Q para salir del programa, presiona r o R ​​para reiniciar el juego

{

c=getch();

if(c= = 'q'||c=='Q')

devuelve falso;

si no(c=='r'||c=='R')

devuelve verdadero;

}

}

Programa fuente de backgammon C:

#include

#include

#include

#definir color de fondo CYAN

#definir color predeterminado NEGRO

#definir color de línea MAGENTA

#define player1_color ROJO

#define player2_color BLANCO

#define error_color ROJO

#define ganador_color ROJO

const int izquierda = 40;

const int top=390;

const int d=30

const int line_num=9; int turno=0;

const int r=d/3;

const int j=10;

int x, y, k=1, paso = (núm_línea 1)*(núm_línea 1);

unión REGS regs1, regs2;

c

muchacha jugador1;

clase jugador2;

clase qipan{

público:

qipan();

~qipan(){};

void init_qipan();

amigo void fall(jugador1 y num1, jugador2 y num2, qipan y num

);

entrada nula de amigo(jugador1 amp; num1, jugador2 amp; num2, qipan amp; num);

privado:

int point[line_num 1][line_num 1];

};

clase jugador1{

público:

jugador1();

~jugador1() {};

caída del vacío del amigo(jugador1 y num1, jugador2 y num2, qipan y; num)

entrada del vacío del amigo(jugador1 y num1, jugador2 y num2);

amigo int juez_winner(jugador1 y num1, jugador2 y num2);

privado:

int punto1[line_num 1][line_num 1] ;

};

clase jugador2{

público:

jugador2();

~jugador2( ){};

caída del vacío del amigo(jugador1 y num1, jugador2 y num2, qipan y; num);

entrada del vacío del amigo(jugador1 y; num1, jugador2 y num2, qipan & num);

amigo int juez_winner(jugador1 & num1, jugador2 & num2);

privado:

int punto2[line_num 1][ line_num 1];

};

void input(jugador1 y num1, jugador2 y num2);

void fall(jugador1 y num1, jugador2); amp; num2, qipan amp; num);

int juez_winner(qipan amp; num, jugador1 amp; num1, jugador2 amp; num2

void inputerror();

void display_winner(int);

void main()

{

int driver=DETECT, modo;

initgraph(amp;controlador,amp;modo,"e:\tc30\bgi");

qipan num;<

/p>

jugador1 num1;

jugador2 num2;

mientras(paso--)

{

entrada(num1 , num2, num);

fall(num1, num2, num);

if(judge_winner(num1, num2))

{

display_winner(k);

}

}

// getchar();

}

qipan::qipan(void)

{ int j, i;

char ch[2]="0"

setbkcolor(color de fondo) ;

setcolor(color de línea);

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

{

línea( izquierda, top-i*d, left line_num*d, top-i*d);

}

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

{

línea(left i*d, top, left i*d, top-line_num*d);

}

para (i=0; ilt; = line_num; i )

{ if(*ch=='9' 1) *ch='a';

settextstyle(DEFAULT_FONT, HORIZ_DIR , 1);

outtextxy(left i*d-2, top r 3, ch);

(*ch)=(*ch) 1;

}

*ch='0';

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

{if(*ch= ='9' 1) *ch='a';

settextstyle(DEFAULT_FONT, HORIZ_DIR, 1);

outtextxy(left-r-10, top-d*i- 3, canal);

(*ch)=(*ch) 1;

}

setcolor(color predeterminado);

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

{

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

punto[ i][j]=0;

}

}

caída del vacío(jugador1 y num1, jugador2 y num2, qipan y num)

{

int bandera=k2;

if(bandera)

{ setcolor(player2_color);

num2.point2[x][y]=1;

num.point[x][y]=2;

círculo(izquierda d*x, top-d*y , r);

setfillstyle(1, player2_color);

floodfill(left d*x, top-d*y, player2_color);

}

otro

p>

{ num1.point1[x][y]=1;

num.point[x][y]=1

setcolor(player1_color);

circle(left d*x, top-d*y, r);

setfillstyle(1, player1_color);

floodfill(left d*x, top-d*y, player1_color);

}

setcolor(defaultcolor);

}

void input(player1 amp; num1, jugador2 amp; num2, qipan amp; p>{

regs1.h.ah=0;

xx=int86(22,?s1,?s1)-'0';

si (xx==('q'-'0')||xx==('Q'-'0'))

{ paso=0;

regresar;

}

regs1.h.ah=0;

yy=int86(22,?s1,?s1)-'0';

if(yy==('q'-'0')||yy==('Q'-'0'))

{

paso=0 ;

return ;

}

if(xxlt;0||xxgt;line_num)

{ inputerror(); p>

continuar;

}

if(yylt;0||yygt;line_num)

{inputerror();

continuar;

}

if(num.punto[xx][yy]==0)

{

romper ;

}

else

{

inputerror();

continuar;

}

}

x=(int)xx;

y=(int)yy

setcolor( backcolor) ;

settextstyle(DEFAULT_FONT, HORIZ_DIR, 1);

outtextxy(left d*line_num/3, top d*2, "Error de entrada"

);

setcolor(color predeterminado);

}

jugador1::jugador1()

{

int i, j;

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

{

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

punto1[i][j]=0;

}

}

jugador2::jugador2()

{ int i,j;

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

{

for(j=0;jlt;= núm_línea; j )<

/p>

punto2[i][j]=0;

}

}

error de entrada nulo(nulo)

{ setcolor(error_color);

settextstyle(DEFAULT_FONT, HORIZ_DIR, 1);

outtextxy(left d*line_num/3, top d*2, "Error de entrada");

setcolor(color predeterminado);

}

int juez_winner(jugador1 y num1, jugador2 y num2)

{

int recuento=0, m=0, n=0, a=0, b=0, xx0, yy0

int bandera=k2

xx0; =x; yy0=y;

if(!flag)

{ //izquierda lt;-------gt derecha

mientras; (xx0gt;=1amp;amp;mlt;4) {xx0--;m;}

mientras(nlt;9amp;amp;xx0lt;=line_num)

{

p>

if(num1.point1[xx0][y]==1)

{

cuenta;

si (count==5 ) devuelve 1;

}

else

{

count=0;

}

n;

xx0;

}

//arriba lt;------gt; /p>

count=0; xx0=x; m=0; n=0;

mientras(yy0gt;=1amp;amp;mlt;4){yy0--;m;}

mientras(nlt;9amp;amp;yy0lt;=line_num)

{

if(num1.point1[x][yy0]==1)

{

cuenta;

si(cuenta==5)

devuelve 1;

}

else

{

count=0;

}

n;

yy0;

}

//izquierda arriba ----- derecha abajo

xx0=x;

yy0=y;

m=0;

n=0;

count=0

mientras(xx0gt;=1amp;amp;mlt; ;4){ xx0 --; a; m;} m=0;

mientras(yy0lt;=line_numamp;amp;mlt;4){ yy0; p>if(alt ;=b)

{

xx0=x-a; yy0=y a;

}

else

{

xx0=x-b; yy0=y b;

}

mientras(xx0lt;=line_numamp;amp;yy0gt;=

0amp;amp;nlt;9)

{

if(num1.point1[xx0][yy0]==1)

{

cuenta;

si(cuenta==5)

devuelve 1;

}

else

{

cuenta=0;

}

xx0;

yy0--; ;

}

//derecha arriba lt;-----gt; izquierda abajo

count=0;

a =0;

b=0;

n=0;

m=0;

xx0=x;

yy0=y;

mientras(xx0mientras(yy0if(alt;=b)

{

xx0=xa;

yy0=y a;

}

else

{

xx0=x b;

yy0= y b;

}

mientras(xx0gt;=0amp;amp;yy0gt;=0amp;amp;nlt;9)

{

if(num1.point1[xx0][yy0]==1)

{

cuenta;

if(cuenta==5)

devuelve 1;

}

else

count=0;

xx0--;

yy0--;

n;

}

//sin vino

devuelve 0;

}

else

{

//izquierda lt; -------gt; derecha

mientras( xx0gt;=1amp;amp;mlt;4) {xx0--;m;}

mientras(nlt;9amp;amp;xx0lt;=line_num)

{

if(num1.punto1[xx0][y]==1)

{

cuenta;

if(cuenta==5) devolver 1;

}

else

{

count=0;

}

n;

xx0;

}

//arriba lt;------gt; cuenta=0; xx0=x; m=0; n=0;

mientras(yy0gt;=1amp;amp;mlt;4){yy0--;m;}

mientras(nlt;9amp;amp;yy0lt;=line_num)

{

if(num2.point2[x][yy0]==1)

{

cuenta;

si(cuenta==5)

devuelve 1;

}

más

{

count=0;

}

n;

yy0;

}

//izquierda arriba ----- derecha abajo

xx0=x;

yy0=y;

m=0;

n=0;

count=0;

mientras(xx0gt;=1amp;amp;mlt;4){xx0--; a;

mientras(yy0lt;=line_numamp;amp;mlt;4){ yy0; b; m;}

if(alt;=b)

{

xx0=x-a; yy0=y a;

}

else

{

xx0=x-b; yy0=y b;

}

mientras(xx0lt;=line_numamp;amp;yy0gt;=0amp;amp;nlt;9)

{

if(num2.point2[xx0][yy0]==1)

{

cuenta;

if(cuenta==5)

devuelve 1;

}

else

{

count=0;

}

xx0;

yy0--;

n;

}

//derecha arriba lt;-----gt; izquierda abajo

count=0;

a=0; p>n=0;

m=0;

xx0=x;

yy0=y

mientras(xx0mientras( yy0if(alt;=b)

{

xx0=x a;

yy0=y a;

}

else

{

xx0=x b;

yy0=y b;

}

mientras( xx0gt;=0amp;amp;yy0gt;=0amp;amp;nlt;9)

{

if(num2.point2[xx0][yy0]==1) p>

{

cuenta;

si(cuenta==5)

devuelve 1;

}

else

count=0;

xx0--;

yy0--;

n;

}

//sin vino

return 0;

}

}

void display_winner(int k)

{

int flag=k2;

if(!flag)

{ setcolor(winner_color

settextstyle(DEFAULT_FONT, HORIZ_DIR, 2);

outtextxy(left d*2, top 40, "El rojo es el ganador"); (color predeterminado);

paso=0

getchar();

}

else

>

{ setcolor(winner_color);

settextstyle(DEFAULT_FONT, HORIZ_DIR, 2);

outtextxy(left 2*d, top 40, "El blanco es el ganador");

setcolor(color predeterminado);

paso=0;

}

}