<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="gl">
	<id>http://web.iesrodeira.com/mediawiki/index.php?action=history&amp;feed=atom&amp;title=Fundamentos%3ASoluci%C3%B3ns%3AReversi%3Areversilib.c</id>
	<title>Fundamentos:Solucións:Reversi:reversilib.c - Historial de revisións</title>
	<link rel="self" type="application/atom+xml" href="http://web.iesrodeira.com/mediawiki/index.php?action=history&amp;feed=atom&amp;title=Fundamentos%3ASoluci%C3%B3ns%3AReversi%3Areversilib.c"/>
	<link rel="alternate" type="text/html" href="http://web.iesrodeira.com/mediawiki/index.php?title=Fundamentos:Soluci%C3%B3ns:Reversi:reversilib.c&amp;action=history"/>
	<updated>2026-09-13T14:21:31Z</updated>
	<subtitle>Historial de revisións desta páxina no wiki</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>http://web.iesrodeira.com/mediawiki/index.php?title=Fundamentos:Soluci%C3%B3ns:Reversi:reversilib.c&amp;diff=1951&amp;oldid=prev</id>
		<title>Xavi: Nova páxina: &quot;=== reversilib.h === Podes [http://web.iesrodeira.com/Descargas/Exercicios/Reversi/reversilib.h Descargar] o ficheiro  &lt;source lang=&#039;C&#039;&gt; #ifndef __REVERSILIBH__ #define __REVERSIL...&quot;</title>
		<link rel="alternate" type="text/html" href="http://web.iesrodeira.com/mediawiki/index.php?title=Fundamentos:Soluci%C3%B3ns:Reversi:reversilib.c&amp;diff=1951&amp;oldid=prev"/>
		<updated>2014-06-26T11:25:00Z</updated>

		<summary type="html">&lt;p&gt;Nova páxina: &amp;quot;=== reversilib.h === Podes [http://web.iesrodeira.com/Descargas/Exercicios/Reversi/reversilib.h Descargar] o ficheiro  &amp;lt;source lang=&amp;#039;C&amp;#039;&amp;gt; #ifndef __REVERSILIBH__ #define __REVERSIL...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Páxina nova&lt;/b&gt;&lt;/p&gt;&lt;div&gt;=== reversilib.h ===&lt;br /&gt;
Podes [http://web.iesrodeira.com/Descargas/Exercicios/Reversi/reversilib.h Descargar] o ficheiro&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;#039;C&amp;#039;&amp;gt;&lt;br /&gt;
#ifndef __REVERSILIBH__&lt;br /&gt;
#define __REVERSILIBH__&lt;br /&gt;
&lt;br /&gt;
int existeXogada(void);&lt;br /&gt;
int contaFichas(int *x1,int *x2);&lt;br /&gt;
int podeXogar(int x);&lt;br /&gt;
int comprobaXogada(int i,int j,int x,int dir);&lt;br /&gt;
int posicionXogada(int i,int j,int x);&lt;br /&gt;
void darVolta(int fila,int columna);&lt;br /&gt;
&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== reversilib.c ===&lt;br /&gt;
Podes [http://web.iesrodeira.com/Descargas/Exercicios/Reversi/reversilib.c Descargar] o ficheiro&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
#include &amp;quot;reversi.h&amp;quot;&lt;br /&gt;
#include &amp;quot;reversilib.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
extern char __tableiro[8][8];&lt;br /&gt;
&lt;br /&gt;
/* existeXogada&lt;br /&gt;
   DEVOLVE: Distinto de 0 si existe xogada, 0 si non existe xogada&lt;br /&gt;
*/&lt;br /&gt;
int existeXogada(void)&lt;br /&gt;
{&lt;br /&gt;
  int x=0;&lt;br /&gt;
&lt;br /&gt;
  x=((podeXogar(XOG1)||podeXogar(XOG2)));&lt;br /&gt;
  return x;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* podeXogar&lt;br /&gt;
   RECIBE: O xogador a comprobar (x)&lt;br /&gt;
   DEVOLVE: 0 si o xogador non pode xogar, 1 si o xogador pode xogar&lt;br /&gt;
   DESCRIPCION: Comproba si un xogador ten algunha xogada posible.&lt;br /&gt;
*/&lt;br /&gt;
int podeXogar(int x)&lt;br /&gt;
{&lt;br /&gt;
  int pode=0;&lt;br /&gt;
  int i,j;&lt;br /&gt;
&lt;br /&gt;
  i=0;&lt;br /&gt;
  while((i&amp;lt;8)&amp;amp;&amp;amp;(pode==0))&lt;br /&gt;
  {&lt;br /&gt;
    j=0;&lt;br /&gt;
    while((j&amp;lt;8)&amp;amp;&amp;amp;(pode==0))&lt;br /&gt;
    {&lt;br /&gt;
      pode=posicionXogada(i,j,x);&lt;br /&gt;
      j++;&lt;br /&gt;
    }&lt;br /&gt;
    i++;&lt;br /&gt;
  }&lt;br /&gt;
  return pode;  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Funcion comprobaXogada&lt;br /&gt;
   RECIBE: coordenadas da xogada (i,j)&lt;br /&gt;
           xogador a comprobar (xog)&lt;br /&gt;
           dirección a comprobar (dir)&lt;br /&gt;
&lt;br /&gt;
   DEVOLVE: 1 si a ficha do xogador &amp;#039;xog&amp;#039; pode&lt;br /&gt;
            xogar na posición (i,j)&lt;br /&gt;
*/&lt;br /&gt;
int comprobaXogada(int i,int j,int xog,int dir)&lt;br /&gt;
{&lt;br /&gt;
  int pode=0;&lt;br /&gt;
  int x,y;&lt;br /&gt;
  int contrario=XOG1;&lt;br /&gt;
  &lt;br /&gt;
  if (xog==XOG1) contrario=XOG2;&lt;br /&gt;
  switch(dir)&lt;br /&gt;
  {&lt;br /&gt;
    case DER: y=i; x=j+1;&lt;br /&gt;
              if ((x&amp;lt;8)&amp;amp;&amp;amp;(__tableiro[y][x]==contrario))&lt;br /&gt;
              {&lt;br /&gt;
                while((x&amp;lt;8)&amp;amp;&amp;amp;(__tableiro[y][x]==contrario)) x++;&lt;br /&gt;
                if (x&amp;lt;8) pode=1;&lt;br /&gt;
              }&lt;br /&gt;
              break;&lt;br /&gt;
    case ESQ: y=i; x=j-1;&lt;br /&gt;
              if ((x&amp;gt;=0)&amp;amp;&amp;amp;(__tableiro[y][x]==contrario))&lt;br /&gt;
              {&lt;br /&gt;
                while((x&amp;gt;=0)&amp;amp;&amp;amp;(__tableiro[y][x]==contrario)) x--;&lt;br /&gt;
                if (x&amp;gt;=0) pode=1;&lt;br /&gt;
              }&lt;br /&gt;
              break;&lt;br /&gt;
    case ARR: y=i-1; x=j;&lt;br /&gt;
              if ((y&amp;gt;=0)&amp;amp;&amp;amp;(__tableiro[y][x]==contrario))&lt;br /&gt;
              {&lt;br /&gt;
                while((y&amp;gt;=0)&amp;amp;&amp;amp;(__tableiro[y][x]==contrario)) y--;&lt;br /&gt;
                if (y&amp;gt;=0) pode=1;&lt;br /&gt;
              }&lt;br /&gt;
              break;&lt;br /&gt;
    case ABA: y=i+1; x=j;&lt;br /&gt;
              if ((y&amp;lt;8)&amp;amp;&amp;amp;(__tableiro[y][x]==contrario))&lt;br /&gt;
              {&lt;br /&gt;
                while((y&amp;lt;8)&amp;amp;&amp;amp;(__tableiro[y][x]==contrario)) y++;&lt;br /&gt;
                if (y&amp;lt;8) pode=1;&lt;br /&gt;
              }&lt;br /&gt;
              break;&lt;br /&gt;
    case ARRDER: y=i-1; x=j+1;&lt;br /&gt;
                 if ((y&amp;gt;=0)&amp;amp;&amp;amp;(x&amp;lt;8)&amp;amp;&amp;amp;(__tableiro[y][x]==contrario))&lt;br /&gt;
                 {&lt;br /&gt;
                   while((y&amp;gt;=0)&amp;amp;&amp;amp;(x&amp;lt;8)&amp;amp;&amp;amp;(__tableiro[y][x]==contrario))&lt;br /&gt;
                   {&lt;br /&gt;
                     y--;&lt;br /&gt;
                     x++;&lt;br /&gt;
                   }&lt;br /&gt;
                   if ((y&amp;gt;=0)&amp;amp;&amp;amp;(x&amp;lt;8)) pode=1;&lt;br /&gt;
                 }&lt;br /&gt;
                 break;&lt;br /&gt;
    case ARRESQ: y=i-1; x=j-1;&lt;br /&gt;
                 if ((y&amp;gt;=0)&amp;amp;&amp;amp;(x&amp;gt;=0)&amp;amp;&amp;amp;(__tableiro[y][x]==contrario))&lt;br /&gt;
                 {&lt;br /&gt;
                   while((y&amp;gt;=0)&amp;amp;&amp;amp;(x&amp;gt;=0)&amp;amp;&amp;amp;(__tableiro[y][x]==contrario))&lt;br /&gt;
                   {&lt;br /&gt;
                     y--;&lt;br /&gt;
                     x--;&lt;br /&gt;
                   }&lt;br /&gt;
                   if ((y&amp;gt;=0)&amp;amp;&amp;amp;(x&amp;gt;=0)) pode=1;&lt;br /&gt;
                 }&lt;br /&gt;
                 break;&lt;br /&gt;
    case ABADER: y=i+1; x=j+1;&lt;br /&gt;
                 if ((y&amp;lt;8)&amp;amp;&amp;amp;(x&amp;lt;8)&amp;amp;&amp;amp;(__tableiro[y][x]==contrario))&lt;br /&gt;
                 {&lt;br /&gt;
                   while((y&amp;lt;8)&amp;amp;&amp;amp;(x&amp;lt;8)&amp;amp;&amp;amp;(__tableiro[y][x]==contrario))&lt;br /&gt;
                   {&lt;br /&gt;
                     y++;&lt;br /&gt;
                     x++;&lt;br /&gt;
                   }&lt;br /&gt;
                   if ((y&amp;lt;8)&amp;amp;&amp;amp;(x&amp;lt;8)) pode=1;&lt;br /&gt;
                 }&lt;br /&gt;
                 break;&lt;br /&gt;
    case ABAESQ: y=i+1; x=j-1;&lt;br /&gt;
                 if ((y&amp;lt;8)&amp;amp;&amp;amp;(x&amp;gt;=0)&amp;amp;&amp;amp;(__tableiro[y][x]==contrario))&lt;br /&gt;
                 {&lt;br /&gt;
                   while((y&amp;lt;8)&amp;amp;&amp;amp;(x&amp;gt;=0)&amp;amp;&amp;amp;(__tableiro[y][x]==contrario))&lt;br /&gt;
                   {&lt;br /&gt;
                     y++;&lt;br /&gt;
                     x--;&lt;br /&gt;
                   }&lt;br /&gt;
                   if ((y&amp;lt;8)&amp;amp;&amp;amp;(x&amp;gt;=0)) pode=1;&lt;br /&gt;
                 }&lt;br /&gt;
                 break;&lt;br /&gt;
  }&lt;br /&gt;
  if (__tableiro[y][x]!=xog) pode=0;&lt;br /&gt;
  return pode;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* posicionXogada&lt;br /&gt;
   RECIBE: fila (i), columna(j), xogador (x)&lt;br /&gt;
   DEVOLVE: 0 si o xogador non pode xogar na fila e columna indicadas&lt;br /&gt;
            1 si o xogador pode xogar na fila e columna indicadas&lt;br /&gt;
   DESCRIPCION: Comproba si un xogador pode poñer unha ficha nunha posición&lt;br /&gt;
*/&lt;br /&gt;
int posicionXogada(int i,int j,int x)&lt;br /&gt;
{&lt;br /&gt;
  int pode=0;&lt;br /&gt;
  int a,b;&lt;br /&gt;
  int outro;&lt;br /&gt;
  int dir;&lt;br /&gt;
&lt;br /&gt;
  if (__tableiro[i][j]==VACIO)&lt;br /&gt;
  {&lt;br /&gt;
       pode=comprobaXogada(i,j,x,DER)||comprobaXogada(i,j,x,ESQ)||&lt;br /&gt;
            comprobaXogada(i,j,x,ARR)||comprobaXogada(i,j,x,ABA)||&lt;br /&gt;
            comprobaXogada(i,j,x,ARRESQ)||comprobaXogada(i,j,x,ARRDER)||&lt;br /&gt;
            comprobaXogada(i,j,x,ABAESQ)||comprobaXogada(i,j,x,ABADER);&lt;br /&gt;
  }&lt;br /&gt;
  return pode;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* darVolta&lt;br /&gt;
   RECIBE: fila e columna onde se colocou a ficha&lt;br /&gt;
   DESCRIPCION: Da a volta as fichas que o precisen&lt;br /&gt;
*/&lt;br /&gt;
void darVolta(int fila,int columna)&lt;br /&gt;
{&lt;br /&gt;
  if (comprobaXogada(fila,columna,__tableiro[fila][columna],DER)) &lt;br /&gt;
  {&lt;br /&gt;
    revira(fila,columna,DER);&lt;br /&gt;
  }&lt;br /&gt;
  if (comprobaXogada(fila,columna,__tableiro[fila][columna],ESQ)) &lt;br /&gt;
  {&lt;br /&gt;
    revira(fila,columna,ESQ);&lt;br /&gt;
  }&lt;br /&gt;
  if (comprobaXogada(fila,columna,__tableiro[fila][columna],ARR)) &lt;br /&gt;
  {&lt;br /&gt;
    revira(fila,columna,ARR);&lt;br /&gt;
  }&lt;br /&gt;
  if (comprobaXogada(fila,columna,__tableiro[fila][columna],ABA)) &lt;br /&gt;
  {&lt;br /&gt;
     revira(fila,columna,ABA);&lt;br /&gt;
  }&lt;br /&gt;
  if (comprobaXogada(fila,columna,__tableiro[fila][columna],ARRDER)) &lt;br /&gt;
  {&lt;br /&gt;
     revira(fila,columna,ARRDER);&lt;br /&gt;
  }&lt;br /&gt;
  if (comprobaXogada(fila,columna,__tableiro[fila][columna],ARRESQ)) &lt;br /&gt;
  {&lt;br /&gt;
     revira(fila,columna,ARRESQ);&lt;br /&gt;
  }&lt;br /&gt;
  if (comprobaXogada(fila,columna,__tableiro[fila][columna],ABADER)) &lt;br /&gt;
  {&lt;br /&gt;
     revira(fila,columna,ABADER);&lt;br /&gt;
  }&lt;br /&gt;
  if (comprobaXogada(fila,columna,__tableiro[fila][columna],ABAESQ)) &lt;br /&gt;
  {&lt;br /&gt;
     revira(fila,columna,ABAESQ);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* contaFichas&lt;br /&gt;
    RECIBE: Dirección para deixar o número de fichas do Xogador 1 (x1) &lt;br /&gt;
            e do xogador 2 (x2)&lt;br /&gt;
    DEVOLVE: 0 empate, 1 gañou o xog1, 2 gañou o xog2&lt;br /&gt;
*/&lt;br /&gt;
int contaFichas(int *x1,int *x2)&lt;br /&gt;
{&lt;br /&gt;
  int res=0;&lt;br /&gt;
  int i,j;&lt;br /&gt;
&lt;br /&gt;
  *x1=0;&lt;br /&gt;
  *x2=0;&lt;br /&gt;
  i=0;&lt;br /&gt;
  while(i&amp;lt;8)&lt;br /&gt;
  {&lt;br /&gt;
    j=0;&lt;br /&gt;
    while(j&amp;lt;8)&lt;br /&gt;
    {&lt;br /&gt;
      if (__tableiro[i][j]==XOG1) *x1=(*x1)+1;&lt;br /&gt;
      else if (__tableiro[i][j]==XOG2) *x2=(*x2)+1;&lt;br /&gt;
      j++;&lt;br /&gt;
    }&lt;br /&gt;
    i++;&lt;br /&gt;
  }&lt;br /&gt;
  if (*x1&amp;gt;*x2) res=1;&lt;br /&gt;
  else if (*x2&amp;gt;*x1) res=2;&lt;br /&gt;
  return res;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Xavi</name></author>
	</entry>
</feed>