Red de conocimiento informático - Computadora portátil - Código fuente de backgammon operado por mouse diseñado en lenguaje C

Código fuente de backgammon operado por mouse diseñado en lenguaje C

#include lt;stdlib.hgt;

#include lt;stdio.hgt;

#include lt;conio.hgt;

#include lt; string.hgt;

#define MAXIMUS 15 //Definir el tamaño del tablero de ajedrez

int p[MAXIMUS][MAXIMUS] //Almacenamiento de información del juego

p>

char buff[MAXIMUS*2 1][MAXIMUS*4 3]; //Búfer de salida

int Cx, Cy //Posición actual del cursor

int Now; //El jugador que se está moviendo actualmente, 1 representa el negro, 2 representa el blanco

int wl, wp //El número de columnas y filas actualmente escritas en el búfer

char* showText; //Información de texto mostrada en el centro del tablero

int count; //Número de rondas

char* Copy(char* strDest, const char* strSrc )//Modificar La función de copia de cadena pasada ignorará el \0 al final

{

char* strDestCopy = strDest;

while (*strSrc! ='\0 ')

{

*strDest =*strSrc;

}

return strDestCopy;

}

void Initialize()//Inicializar una función de juego

{

int i, j //Variable de bucle

showText= ""; //Restablece la información de visualización

count=0; //Restablece el número de rondas a cero

for(i=0; ilt; MAXIMUS; i ) //Restablecer los datos de la Oficina del par

{

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

{

p[i][j ]=0;

}

}

Cx=Cy=MAXIMUS/2 //Restablecer el cursor al centro

Ahora =1; //Restablece el cuadrado negro actual

}

char* getStyle(int i, int j)//Obtiene el carácter en el lugar especificado coordinar la posición de intersección en el tablero de ajedrez, haciendo que los símbolos formen un tablero de ajedrez

{

if(p[i][j]==1)//1 es una piedra negra

return "●";

else if(p[i][j]==2)//2 es blanco

return "○";

else if(i= =0amp;amp;j==0)//El siguiente es el estilo del tablero de ajedrez del borde

return "┏";

else if (i==MAXIMUS-1amp;amp;j= =0)

return "┓";

si no(i==MAXIMUS-1amp; amp;j==MAXIMUS -1)

devuelve " ┛";

de lo contrario si (i==0amp;amp;j==MAXIMUS-1)

devuelve "┗" ;

si no(i ==0)

devuelve "┠";

si no(i==MAXIMU)

S-1)

devuelve "┨";

si no (j==0)

devuelve "┯";

else if(j==MAXIMUS-1)

return "┷";

return "┼";//el espacio vacío en el medio

}

char* getCurse(int i, int j){// Obtenga el estilo de la cuadrícula superior izquierda de la posición de intersección de coordenadas especificada y simule la visualización del cursor mediante caracteres de tabulación

if(i==Cx) {

if(j==Cy)

return "┏";

si no (j==Cy) 1)

devuelve "┗";

}

si no(i==Cx 1)

{

si(j==Cy )

devuelve "┓";

de lo contrario si (j==Cy 1)

devuelve "┛";

}

return " ";//Está vacío si no está cerca del cursor

}

void write(char * c)//Escribe una cadena en el búfer

{

Copy(buff[wl] wp, c);

wp =strlen(c) ;

}

p>

void ln()//Elevación de ubicación de escritura en el búfer

{

wl =1;

wp=0;

p>

}

void Display()//Envía el contenido del búfer a la pantalla

{

int i, l=strlen(showText) ;// Variable de bucle, la longitud de la información del texto intermedio

int Offset=MAXIMUS*2 2-l/2; //Calcule la posición de la abscisa donde se centra y se muestra la información del texto central

if(Offset2==1)//Si la posición es un número impar, muévase a un número par para evitar confusiones

{

Desplazamiento--;

}

}

p>

Copiar(buff[MAXIMUS] Desplazamiento, mostrarTexto ); // Copia la información del texto del medio en el búfer

if(l2==1)// Si la longitud del texto del medio es un número impar de medio ancho, luego completa los espacios para evitarlo. confusión

{

*(buff[MAXIMUS] Offset l)=0x20;

}

sistema ("cls"); //Borra la pantalla y prepárate para escribir

for(i=0; ilt; MAXIMUS*2 1; i){//Escribe cada línea en un bucle

printf(" s", buff[i]);

if(ilt;MAXIMUS*2)//Necesitas ajustar cada línea después de escribirla

printf("\n" );

}

}

void Print()//Calcule todo el tablero de ajedrez y guárdelo en el búfer, luego llame a la función Mostrar para mostrarlo

{

int i, j; //Variable de bucle

wl=0;

wp=0;

for(j=0;jlt;=MAXIMUS;j)//Escribe los caracteres en la esquina superior izquierda del punto de intersección. Debido a que es necesario imprimir la esquina inferior derecha del tablero de ajedrez, es fácil realizar un bucle una vez horizontalmente. verticalmente

{

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

{

write(getCurse(i,j)); //Escribe el carácter superior izquierdo

if(j==0||j==MAXIMUS)// Si es el borde del tablero de ajedrez, no hay líneas verticales conectadas, rellene la posición con espacios

{

if(i!=MAXIMUS)

write(" " );

}

else//Si está en el medio del tablero de ajedrez, usa líneas verticales para conectar la parte superior e inferior

{

if(i== 0||i==MAXIMUS-1)//Las líneas verticales en los bordes izquierdo y derecho son más gruesas

write("┃") ;

else if(i!=MAXIMUS)// La línea vertical en el medio

write("│");

}

}

if(j==MAXIMUS)// Si es el último ciclo, solo es necesario procesar los caracteres laterales y el punto de intersección será una fila menos

{

break;

}

ln();//Empiece a imprimir el contenido de la intersección al principio de la línea

write(" ");//Rellena la posición con espacios vacíos

for(i=0; ilt; MAXIMUS; i )//Encierra en un círculo el número normal de veces según la abscisa

{

write(getStyle(i, j)); //Escribe el carácter de intersección

if (i!=MAXIMUS-1)//Si no está activado el extremo derecho, agregue una línea horizontal para conectar la izquierda y la derecha

{

if(j==0||j==MAXIMUS- 1)

{

write("━"); //Las líneas horizontales en los bordes superior e inferior son más gruesas

}

else

{

write("—"); //La línea horizontal en el medio

}

}

}

ln(); //Salir después de escribir una línea

}

Display() //Muestra el contenido del búfer en la pantalla

} p>

}

int Put(){//Mover a la posición actual del cursor. Si no está vacío, devuelve 0 para indicar error

if(. p[Cx][Cy]==0)

{

p[Cx][Cy]=Ahora //Cambiar los datos de posición

return; 1; //El retorno 1 indica éxito

}

else

{

retorno 0;

}

}

int Check()//Comprobación ganadora o perdedora, es decir, para determinar si la posición de movimiento actual ha provocado una racha ganadora de cinco juegos

{

int w =1, x=1, y=1, z=1, i; // Acumula el número de piezas de ajedrez idénticas consecutivas en las cuatro direcciones horizontal, vertical, positiva y diagonal. y revertir.

for(i=1; ilt; 5; i )if(Cy ilt;MAXIMUSamp;amp;p[Cx][Cy i]==Now)w;else break;// Marque hacia abajo

for(i=1;ilt;5; i )if(Cy-igt;0amp;amp;p[Cx][Cy-i]==Now)w ;else break;/ /check up

if(wgt;=5)return Now ;//Si llega a 5, el jugador actual es considerado el ganador

for(i=1; ilt; 5; i) if (Cx ilt; MAXIMUSamp; amp; p[Cx i][ Cy]==Ahora)x; //Marque a la derecha

for(i=

1;ilt;5;i)if(Cx-igt;0amp;amp;p[Cx-i][Cy]==Ahora)x; else break; //Marque a la izquierda

if( xgt ;=5)return Now;//Si llega a 5, el jugador actual será considerado el ganador

for(i=1;ilt;5;i)if(Cx ilt;MAXIMUSamp;amp ;Cy ilt;MAXIMUSamp;amp;p[Cx i][Cy i]==Now)y ;else break; //Marca hacia la derecha y hacia abajo

for(i=1;ilt;5 ;i )if(Cx-igt;0amp;amp;Cy-igt;0amp;amp;p[Cx-i][Cy-i]==Now)y ; de lo contrario, rompa; /p>

if(ygt;=5)return Now;//Si llega a 5, el jugador actual será considerado el ganador

for(i=1;ilt;5;i )if(Cx ilt; MAXIMUSamp;amp;Cy-igt;0amp;amp;p[Cx i][Cy-i]==Now)z else //Marque a la derecha

for(i=1;ilt ;5;i)if(Cx-igt;0amp;amp;Cy ilt;MAXIMUSamp;amp;p[Cx-i][Cy i]==Ahora)z ;de lo contrario romper // Verifique hacia la izquierda y hacia abajo

if(zgt;=5)return Now; //Si llega a 5, el jugador actual será considerado el ganador

return 0; /Si no se detectan cinco cuentas consecutivas, devuelve 0 Indica que ningún jugador ha logrado la victoria

}

int RunGame()//Juega todo el juego y devuelve información del ganador (aunque es útil)

{

int input; //Variable de entrada

int victor; //Información del ganador

Initialize(); //Inicializa el juego

mientras (1){//Inicia un bucle infinito hasta que se produzca la victoria

Print() //Imprime el tablero

input; =getch(); //Espera a que el teclado presione el siguiente carácter

if(input==27)//Si es ESC, sal del programa

{

exit(0);

}

else if(input==0x20)//Si es un espacio, empieza a mover

{

if(Put())// Si el movimiento es exitoso, determina el resultado

{

victor=Check();

Now=3-Now; //Rotar el jugador actual

count ;

if(victor==1)//Si las negras alcanzan la victoria, muestra el mensaje de texto y espera una tecla. presione para devolver información de victoria

{

showText="¡Las negras ganan! ";

Imprimir();

if(getch()==0xE0)

{

getch(); p>

}

regresar ahora;

}

else if(victor==2)//Si las blancas logran la victoria, muestra el mensaje de texto Y espere a que se presione una tecla para devolver la información de la victoria

{

showText="¡Las blancas ganaron! ";

D

isplay();

if(getch()==0xE0)

{

getch();

}

regresar ahora;

}else if(count==MAXIMUS*MAXIMUS)//Si el número de rondas alcanza la cantidad total del tablero, es decir, el tablero está lleno, es un empate

{

showText="Empate!";

Display();

if(getch()==0xE0 )

{

getch();

}

devuelve 0;

}

}

else if(input==0xE0)//Si se presiona la tecla de dirección, se completarán dos entradas. La primera vez es 0xE0, lo que indica que se presiona la tecla de control

{

input=getch(); //Obtener la segunda información de entrada

switch(input)//Determinar la dirección de las teclas de flecha y mueve la posición del cursor

{

case 0x4B://

Cx--;

break;

caso 0x48:

Cy--;

descanso;

caso 0x4D:

Cx;

romper;

caso 0x50:

Cy;

romper;

}

if(Cxlt;0)Cx=MAXIMUS-1;/ /Si la posición del cursor está fuera de los límites, muévase al lado opuesto

if(Cylt;0)Cy=MAXIMUS-1;

if(Cxgt;MAXIMUS-1)Cx=0;

p>

if(Cygt;MAXIMUS-1)Cy=0;

}

}

}

int main ()//Función principal

{

system("título Simple Gobang - Hecho por Etsnarl"); //Establece el título

system("mode con cols=63 líneas=32"); //Establece el tamaño de la ventana

system("color E0"); //Establece el color

while(1){//Bucle para ejecutar el juego

RunGame();

}

}