Fundamentos:Solucións:Reversi:reversi.c
Saltar á navegación
Saltar á procura
Podes Descargar o ficheiro
#include <stdio.h>
#include <stdlib.h>
#include "reversi.h"
#include "reversilib.h"
// taboleiro
char __tableiro[8][8];
void iniciaTaboleiro(void);
void visualizaTaboleiro(void);
void revira(int fila,int columna, int dir);
void xoga(int x);
/* Principal
*/
int main(void)
{
int xog;
int fu,fd;
iniciaTaboleiro();
visualizaTaboleiro();
xog=XOG1;
while (existeXogada())
{
xoga(xog);
if (xog==XOG1) xog=XOG2;
else xog=XOG1;
visualizaTaboleiro();
}
contaFichas(&fu,&fd);
printf("Xog 1 %d Xog 2 %d\n",fu,fd);
return 0;
}
/*iniciaTaboleiro
DESCRIPCION: Posición inicial do xogo
*/
void iniciaTaboleiro(void)
{
int i,j;
i=0;
while(i<8)
{
j=0;
while(j<8)
{
__tableiro[i][j]=VACIO;
j++;
}
i++;
}
__tableiro[3][3]=XOG1;
__tableiro[3][4]=XOG2;
__tableiro[4][3]=XOG2;
__tableiro[4][4]=XOG1;
}
/* revira
RECIBE: i,j - coordenadas de inicio
dir - dirección.
DESCRIPCIÓN: Da a volta as fichas hacia a dirección indicada
*/
void revira(int i,int j, int dir)
{
int outro=XOG1;
int x,y;
if (__tableiro[i][j]==XOG1) outro=XOG2;
switch(dir)
{
case DER: y=i; x=j+1;
while(__tableiro[y][x]!=__tableiro[i][j])
{
__tableiro[y][x]=__tableiro[i][j];
x++;
}
break;
case ESQ: y=i; x=j-1;
while(__tableiro[y][x]!=__tableiro[i][j])
{
__tableiro[y][x]=__tableiro[i][j];
x--;
}
break;
case ARR: y=i-1; x=j;
while(__tableiro[y][x]!=__tableiro[i][j])
{
__tableiro[y][x]=__tableiro[i][j];
y--;
}
break;
case ABA: y=i+1; x=j;
while(__tableiro[y][x]!=__tableiro[i][j])
{
__tableiro[y][x]=__tableiro[i][j];
y++;
}
break;
case ARRDER: y=i-1; x=j+1;
while(__tableiro[y][x]!=__tableiro[i][j])
{
__tableiro[y][x]=__tableiro[i][j];
x++;
y--;
}
break;
case ARRESQ: y=i-1; x=j-1;
while(__tableiro[y][x]!=__tableiro[i][j])
{
__tableiro[y][x]=__tableiro[i][j];
x--;
y--;
}
break;
case ABADER: y=i+1; x=j+1;
while(__tableiro[y][x]!=__tableiro[i][j])
{
__tableiro[y][x]=__tableiro[i][j];
x++;
y++;
}
break;
case ABAESQ: y=i+1; x=j-1;
while(__tableiro[y][x]!=__tableiro[i][j])
{
__tableiro[y][x]=__tableiro[i][j];
x--;
y++;
}
break;
}
}
/* visualizaTaboleiro
DESCRIPCION: Pinta o taboleiro na pantalla
*/
void visualizaTaboleiro(void)
{
int i,j;
char *ficha="·X0";
system("clear");
i=0;
while(i<8)
{
j=0;
while(j<8)
{
printf("%c ",ficha[ __tableiro[i][j] ]);
j++;
}
printf("\n");
i++;
}
}
/* xoga
RECIBE: O xogador (x) que lle toca xogar
DESCRIPCION: Pide a xogada, verificando que é correcta e
efectúa a xogada completa (dando a volta ás fichas
que o precisen)
Si podeXogar(x)
Facer
Pedir fila e columna
Mentras non poda poñer a ficha en fila,columna
Poñer a ficha
Dar a volta ás fichas que o necesiten
FinSi
*/
void xoga(int x)
{
int fila,columna;
if (podeXogar(x))
{
do {
printf("fila?:"); scanf("%d",&fila);
printf("columna?:"); scanf("%d",&columna);
}
while(!posicionXogada(fila,columna,x));
__tableiro[fila][columna]=x;
darVolta(fila,columna);
}
}