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 p>
return "●";
else if(p[i][j]==2)//2 es blanco
return "○"; p>
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 p >
{
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
{ p>
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)
{ p>
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
{ p>
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> 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; p>
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;
} p>
}
}
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();
}
}