A l'iniciar el programa hi ha quatre LED encesos al centre del taulell. Dos són de color blau, corresponents a un jugador, i els altres dos són de color groc, corresponents a l'altre jugador. Cada jugador, per torns, pot posar una fitxa del seu color però sempre de manera que pugui capturar una o més fitxes del contrari entre dues fitxes pròpies. Les fitxes capturades canvien de color i passen a ser del jugador que les ha capturat. El joc acaba quan el taulell queda ple o bé quan cap dels jugadors pot tirar ja que no és possible fer cap més captura. Els polsadors 1 i 2 serveixen per moure el cursor i el 3 per acceptar la situació de la fitxa on està el cursor. El polsador 4 desfà la darrera tirada i el polsador 5 per iniciar el joc.

El programa és el següent:
#pragma config FOSC = INTRCIO, WDTE = OFF, PWRTE = OFF, MCLRE = OFF, CP = OFF #pragma config CPD = OFF, BOREN = OFF, IESO = OFF, FCMEN = OFF #include "pic16f690.h" // Carrega el fitxer d'adreces i paràmetres del PIC 16F690 #include <xc.h> // Carrega el fitxer de funcions necessari per al compilador XC8 #define _XTAL_FREQ 4000000 // La freqüència del rellotge és 4 MHz #define cic_int 5 // Nombre de cicles per a la intermitència
char Port; // Gestió del port a la funció Envia_max
char Compta; // Comptador de bits a la funció Envia_max
char Sortida[6]; // Valors a enviar al MAX7221 (48 bits)
char Sorti[6]; // Valors a enviar al MAX7221 des de la interrupció
char Actiu; // Variable que diu quin color està actiu
char Polsad; // Polsador que s'ha premut
char figura[8][8];
char x = 0; // Coordenada X del cursor (0 a 7) // X = 0 és la columna de la dreta
char y = 0; // Coordenada Y del cursor (0 a 7)
char mirar = 1; // Espera que es deixi anar el polsador
char compt_int = 0; // Comptador de cicles per a la intermitència
char cur_on = 1; // Controla l'estat del cursor
char color = 3; // Comencem amb groc
//nuestras variables
char turno=1; //número de fichas
char activacanvis=0; //interruptor que activa els canvis de color a la matriu
char posiciox=0; //guarda la coordenada x de l'ultiima posició on s'ha posat fitxa per desfer el torn
char posicioy=0; //guarda la coordenada y de l'ultiima posició on s'ha posat fitxa per desfer el torn
char colur=0; //guarda el color del canvis per desfer-ho després
char canvis=0; //enumera el número de canvis en una posició
char jugador1=0; //variable complementaria per comptar fitxes del color groc i per evaluar torns
char jugador2=0; //variable complementaria per comptar fitxes del color blau i per evaluar torns
char djugador1=1; //decenes per mostrar en la pantalla LCD jugador groc
char djugador2=0; //decenes per mostrar en la pantalla LCD jugador blau
char ujugador1=0; //unitats per mostrar en la pantalla LCD jugador groc
char ujugador2=0; //unitats per mostrar en la pantalla LCD jugador blau
char vector[8]; //vector que conte el numero de canvis en cada direcció, per utilitzar en funció desfer
char player[7]={'J','u','g','a','d','o','r'};
char colorG[4]={'G','r','o','c'};
char colorB[4]={'B','l','a','u'};
char o[7]={'O','T','H','E','L','L','O'};
char space[4]={' ',' ',' ',' '};
char activat=1; //activar el boto de desfer, que hi hagi canvis viables
// Definició de les funcions que farem servir
void evaluartorn(void); //mirar si es pot llençar en el següent torn
void resultat(void); // mostrar en la pantalla els resultat de la partida
void enviatext(char t[7],char c[4]); // envia text a la pantalla LCD
void desfertorn(void); // desfa l'últim torn
void condicionsini(void); //condicions inicials
void canvi(char xc,char yc,char c); // funcio que evalua i fa els canvis en la matriu
void Envia3max(char Valor[]); // Envia un joc de valors als tres MAX7221
// desactivant interrupcions
void Envia_max(void); // Envia un joc de valors als tres MAX7221
void Ini3max(void); // Inicialitza els tres MAX7221
void Apaga(void); // Apaga tots els LED
char Polsador(void); // Funció de lectura dels polsadors
void EnviaL(char Caracter); // Envia un caràcter
void Esborra(void); // Esborra la pantalla i posa el cursor a l'inici
void Cursor(char Filera, char Columna); // Posiciona el cursor
// (filera 1 a 2 i columna 1 a 32, segons pantalla)
void main (void) {
OPTION_REG = 0b10000101; // Configuració de Timer0
TRISC = 0b00100000; // Tot el port C és de sortida
TRISB = 0; // Tot el port B és de sortida
TRISA = 0xFF; // Tot el port A és d'entrada
ANSEL = 0b00000101; // Configura AN0 i AN2 com entrada analògica
ANSELH = 0; // Desactiva les altres entrades analògiques
PORTC = 0; // Inicialitza a 0 el port C
PORTB = 0; // Inicialitza a 0 el port B
ADCON1 = 0b00010000; // Posa el conversor a 1/8 de la freqüència
ADCON0 = 0b00001001; // Activa el conversor A/D connectat a AN2
// amb el resultat justificat per l'esquerra
Ini3max(); // Inicialitza els tres MAX7221
Actiu = 1; // Activa el color vermell
TMR0 = 139; // Presselecció de 100, que són 156 iteracions
// Correspon a una interrupció cada 7,5 ms
INTCON = 0b10100000; // Activem GIE i T0IE
Apaga();// Apaga tots els LED
TXSTAbits.BRGH = 1; // Configuració de velocitat
BAUDCTLbits.BRG16 = 0; // Paràmetre de velocitat de 8 bits
SPBRG = 25; // Velocitat de 9600 baud
TXSTAbits.SYNC = 0; // Comunicació asíncrona
TXSTAbits.TX9 = 0; // Comunicació de 8 bits
while (1) { // Mirem els polsadors
// Un cop s'ha fet l'acció del polsador, no es tornarà
// a fer fins que es detecti que s'han deixat anar
Polsad = Polsador(); // Llegim els polsadors
if (mirar == 1){
if(turno<61){//s'ha ombler el taulell amb 60 torns
if (Polsad == 1) { // Si s'ha premut el polsador 1
x = (x + 1) % 8; // Incrementa x però la manté entre 0 i 7
mirar = 0;
}
if (Polsad == 2) { // Si s'ha premut el polsador 2
y = (y + 1) % 8; // Incrementa y però la manté entre 0 i 7
mirar = 0;
}
if (Polsad == 3) { // Si s'ha premut el polsador 3// encen el led del jugador, fa canvis si es possible i mira si es pot llençar en el proper torn
if (figura[y][x]==0){
colur=color;
posiciox=x;
posicioy=y;
activacanvis=1;
canvi(posiciox,posicioy,colur);
activat=0;
if (canvis!=0){
turno=turno+1;
evaluartorn();
Esborra();
if (color==3){ // Esborra la pantalla i posa el cursor a l'inici
enviatext(player,colorG);
}else{ // Esborra la pantalla i posa el cursor a l'inici
enviatext(player,colorB);
}
}
}
mirar = 0;
}
if (Polsad == 4) { // desfa el torn anterior
if((turno>1)&&(activat==0)){//activació solo una vez para no restar turnos
desfertorn();
activat=1;
}
mirar=0;
}
if (Polsad == 5) { //reset de partida
condicionsini();
mirar = 0;
}
}else{ //calcular numero de fitchas de cada color y ponerlo en la pantalla
resultat();
if (Polsad == 5) { // reset
condicionsini();
}
}
} else {
if (Polsad == 0) { // Si no s'ha premut cap polsador (o dos a la vegada)
mirar = 1;
}
}
if (djugador1==0){ // Anem a mostrar la figura actual a la matriu de LED
for (char j = 0; j < 8; j++){ // Fileres
char mascara;
char col;
Sortida[0] = 0; // Vermells
Sortida[2] = 0; // Verds
Sortida[4] = 0; // Blaus
for (char k = 0; k < 8; k++){ // Caselles de la filera
if ((y == j) && (x == k)){ // Si estem a la casella del cursor
// El cursor es mostra en el color actual però si coincideix
// amb el color de la casella el mostrem blanc
if (cur_on == 1){ // Si toca el cursor encès
col = color; // Color actual
if ((3 == figura[y][x])||(6 == figura[y][x])){ // Si coincideixen
col = 1; // posem vermell
}
} else {
col = figura[y][x]; // Color de la posició actual
}
} else { // Si no hi estem, és una casella normal
col = figura[j][k]; // Color de la posició actual
}
// Posem els bits a la columna corresponent
mascara = col & 0b0000001; // Serà 1 si hi ha vermell
Sortida[0] = Sortida[0] | (mascara << k);
mascara = (col & 0b0000010) >> 1; // Serà 1 si hi ha verd
Sortida[2] = Sortida[2] | (mascara << k);
mascara = (col & 0b0000100) >> 2; // Serà 1 si hi ha blau
Sortida[4] = Sortida[4] | (mascara << k);
}
Sortida[1] = j+1; // Filera
Sortida[3] = j+1;
Sortida[5] = j+1;
Envia3max(Sortida); // Ho envia al MAX7221
}
compt_int++;
if (compt_int == cic_int){ // Si toca intermitència
compt_int = 0;
cur_on = (cur_on + 1) % 2; // Canvia el cursor
}
}
}
}
void __interrupt() temporit(void){
if (INTCONbits.T0IF) { // Comprovem que hi ha interrupció per Timer 0
TMR0 = 100; // Preselecció de Timer0
INTCONbits.T0IF = 0; // Desactiva el bit que indica interrupció pel Timer0
if (Actiu != 0) { // Si la matriu no està apagada
Actiu--; // Passem a activar un altre color
if (Actiu == 0) { // Si hem arribat a zero
Actiu = 3; // Torna a posar el 3
}
}
// D'entrada els desactivem els tres
Sorti[0] = 0x00; // Vermell
Sorti[2] = 0x00; // Verd
Sorti[4] = 0x00; // Blau
if (Actiu == 1) { // Si és vermell
Sorti[0] = 0x01; // Vermell activat
}
if (Actiu == 2) { // Si és verd
Sorti[2] = 0x01; // Verd activat
}
if (Actiu == 3) { // Si és blau
Sorti[4] = 0x01; // Blau activat
}
Sorti[1] = 0x0C; // Shutdown mode
Sorti[3] = 0x0C; // Shutdown mode
Sorti[5] = 0x0C; // Shutdown mode
Envia_max(); // Ho envia al MAX7221
}
}
void Envia3max(char Valor[]) { // Envia un joc de valors als tres MAX7221
INTCONbits.T0IE = 0; // Desactiva les interrupcions momentàniament
char Port = 0; // Variable on guardem l'estat del port B
char Temp; // Variable temporal
for (signed char j = 5; j >= 0; j--){ // Hem d'enviar 6 bytes
for (char k = 1; k < 9; k++){ // De 8 bits
Temp = Valor[j] & 0b10000000; // Agafa el bit de més a l'esquerra
// Temp només podrà valer 0 o 128
if (Temp == 0) { // Si val 0
Port = Port & 0b11101111; // Desactiva Data (bit 4)
} else { // Si val 128
Port = Port | 0b00010000; // Activa Data (bit 4)
}
Valor[j] = Valor[j] << 1; // Rodem els bits per situar el següent
PORTB = Port; // Ho posa al port B
Port = Port | 0b00100000; // Activa Clock (bit 5) i força lectura
PORTB = Port; // Ho posa al port B
Port = Port & 0b11011111; // Desactiva Clock (bit 5)
PORTB = Port; // Ho posa al port B
}
}
Port = Port | 0b01000000; // Activa Latch (bit 6) per copiar a les sortides
PORTB = Port; // Ho posa al port B
INTCONbits.T0IE = 1; // Reactiva les interrupcions a l'acabar
}
void Envia_max(void) { // Envia un joc de valors als tres MAX7221
asm("banksel _Port");
asm("bcf (_Port&7fh),5"); // S'assegura que Clock està desactivat
asm("bcf (_Port&7fh),6"); // S'assegura que Latch està desactivat
asm("movf (_Port&7fh),w"); // Agafa el valor de Port
asm("movwf PORTB"); // I el posa al port B
asm("banksel _Compta");
asm("movlw 48"); // Número de bits a enviar
asm("movwf (_Compta&7fh)"); // Variable per comptar els bits
asm("Bucle:");
asm("banksel _Port");
asm("bcf (_Port&7fh),4"); // Desactiva Data. Si toca activar-ho, ja ho farem
asm("banksel _Sorti");
asm("rlf (_Sorti&7fh),f"); // Fa sortir el bit de més a l'esquerra cap a C
asm("rlf ((_Sorti+1)&7fh),f"); // i roda els altres a l'esquerra
asm("rlf ((_Sorti+2)&7fh),f");
asm("rlf ((_Sorti+3)&7fh),f");
asm("rlf ((_Sorti+4)&7fh),f");
asm("rlf ((_Sorti+5)&7fh),f");
asm("banksel _Port");
asm("btfsc STATUS,0"); // Mira si el bit de l'esquerra era un 1
asm("bsf (_Port&7fh),4"); // Si era 1, activa Data
asm("movf (_Port&7fh),w"); // Agafa el valor de Port. El valor que ha canviat és Data
asm("movwf PORTB"); // I el posa al port B
asm("bsf (_Port&7fh),5"); // Activa Clock, forçant a llegir el bit
asm("movf (_Port&7fh),w"); // Agafa el valor de Port. El valor que ha canviat és Clock
asm("movwf PORTB"); // I el posa al port B
asm("bcf (_Port&7fh),5"); // Desactiva Clock
asm("movf (_Port&7fh),w"); // Agafa el valor de Port. El valor que ha canviat és Clock
asm("movwf PORTB"); // I el posa al port B
asm("banksel _Compta");
asm("decfsz (_Compta&7fh),f"); // Decrementa Compta
asm("goto Bucle"); // Si Compta no és zero, repeteix el bucle
asm("banksel (_Port&7fh)");
asm("bsf (_Port&7fh),6"); // Torna a activar Latch
// Els valors es copiaran a la sortida del registre
asm("movf (_Port&7fh),w"); // Agafa el valor de Port. El valor que ha canviat és Latch
asm("movwf PORTB"); // I el posa al port B
}
void Ini3max(void) { // Inicialitza els tres MAX7221
char Bytes[6]; // Els sis bytes que cal enviar
Bytes[0] = 0x00; // Desactivat
Bytes[1] = 0x0C; // Shutdown mode
Bytes[2] = 0x00;
Bytes[3] = 0x0C;
Bytes[4] = 0x00;
Bytes[5] = 0x0C;
Envia3max(Bytes); // Els envia
Bytes[0] = 0x00; // No decode
Bytes[1] = 0x09; // Decode mode
Bytes[2] = 0x00;
Bytes[3] = 0x09;
Bytes[4] = 0x00;
Bytes[5] = 0x09;
Envia3max(Bytes); // Els envia
Bytes[0] = 0x07; // Vuit fileres
Bytes[1] = 0x0B; // Scan limit
Bytes[2] = 0x07;
Bytes[3] = 0x0B;
Bytes[4] = 0x07;
Bytes[5] = 0x0B;
Envia3max(Bytes); // Els envia
}
void Apaga(void) { // Apaga tots els LED
char Bytes[6]; // Els sis bytes que cal enviar
for (char j = 1; j <= 8; j++){ // Hem d'enviar 8 fileres
Bytes[1] = j; // Filera
Bytes[3] = j;
Bytes[5] = j;
Bytes[0] = 0x00; // Vermells
Bytes[2] = 0x00; // Verds
Bytes[4] = 0x00; // Blaus
Envia3max(Bytes); // Els envia
}
}
char Polsador(void) {
char Pols = 0;
ADCON0bits.GO = 1; // Posa en marxa el conversor
while (ADCON0bits.GO == 1) // Mentre no acabi
; // ens esperem
if (ADRESH < 220 && ADRESH > 200) {
Pols = 1; // Comprova polsador 1
}
if (ADRESH < 194 && ADRESH > 174) {
Pols = 2; // Comprova polsador 2
}
if (ADRESH < 163 && ADRESH > 143) {
Pols = 3; // Comprova polsador 3
}
if (ADRESH < 90 && ADRESH > 70) {
Pols = 4; // Comprova polsador 4
}
if (ADRESH < 55 && ADRESH > 35) {
Pols = 5; // Comprova polsador 5
}
return Pols;
}
void canvi(char xc,char yc,char c){
char zeroenfila=0; //variable interruptor que evalua si n'hi ha algun espai buit
// entre la casella seleccionada i la seguent del seu color
char canvienfila=0; //mira si ha hagut algun canvi en la fila, ja que només ha d'haver 1
char esquina=0; // mira si abans de trobar un led del seu color pasa per fora del marc de la matriu
figura[yc][xc] = c;
canvis=0;
if (activacanvis==1){//per crear el vector quan es generen canvis, per poder desfer-los
for (char k = 0; k < 8; k++){
vector[k] = 0; // Comencem amb tots els LED apagats
}
}
for(char a=0; a<=xc; a++){ //horizontal derecha
if (figura[yc][xc-a]==0){
zeroenfila=1;
} else if((c==figura[yc][xc-a])&&(canvienfila==0)&&(zeroenfila==0)&&(a!=0)){
canvienfila=1;
if(a>1){
canvis=canvis+1;
}
if (activacanvis==1){
for(char b=0;b<=a ; b++) {
figura[yc][xc-b]=c;
}
vector[0]=a;
}
}
}
zeroenfila=0;
canvienfila=0;
for(char a=0; a<(8-xc); a++){ //horizontal izquierda
if (figura[yc][xc+a]==0){
zeroenfila=1;
} else if((c==figura[yc][xc+a])&&(canvienfila==0)&&(zeroenfila==0)&&(a!=0)){
canvienfila=1;
if(a>1){
canvis=canvis+1;
}
if (activacanvis==1){
for(char b=0;b<=a ; b++) {
figura[yc][xc+b]=c;
}
vector[1]=a;
}
}
}
zeroenfila=0;
canvienfila=0;
for(char a=0; a<=yc; a++){ //vertical +
if (figura[yc-a][xc]==0){
zeroenfila=1;
} else if((c==figura[yc-a][xc])&&(canvienfila==0)&&(zeroenfila==0)&&(a!=0)){
canvienfila=1;
if(a>1){
canvis=canvis+1;
}
if (activacanvis==1){
for(char b=0;b<=a ; b++){
figura[yc-b][xc]=c;
}
vector[2]=a;
}
}
}
zeroenfila=0;
canvienfila=0;
for(char a=0; a<(8-yc); a++){ //vertical -
if (figura[yc+a][xc]==0){
zeroenfila=1;
} else if((c==figura[yc+a][xc])&&(canvienfila==0)&&(zeroenfila==0)&&(a!=0)){
canvienfila=1;
if(a>1){
canvis=canvis+1;
}
if (activacanvis==1){
for(char b=0;b<=a ; b++) {
figura[yc+b][xc]=c;
}
vector[3]=a;
}
}
}
zeroenfila=0;
canvienfila=0;
for(char a=0;a<8;a++){ //diag sup. derecha
if (figura[yc-a][xc-a]==0){
zeroenfila=1;
} else if((c==figura[yc-a][xc-a])&&(canvienfila==0)&&(zeroenfila==0)&&(esquina==0)){
if(a>0){
canvienfila=1;
if(a>1){
canvis=canvis+1;
}
}
if (activacanvis==1){
for(char b=0;b<=a ; b++) {
figura[yc-b][xc-b]=c;
}
vector[4]=a;
}
}
if((yc-a==0)||(xc-a==0)){
esquina=1;
}
}
zeroenfila=0;
canvienfila=0;
esquina=0;
for(char a=0;a<8;a++){ //diag sup. izq
if (figura[yc-a][xc+a]==0){
zeroenfila=1;
} else if((c==figura[yc-a][xc+a])&&(canvienfila==0)&&(zeroenfila==0)&&(esquina==0)){
if(a>0){
canvienfila=1;
if(a>1){
canvis=canvis+1;
}
}
if (activacanvis==1){
for(char b=0;b<=a ; b++) {
figura[yc-b][xc+b]=c;
}
vector[5]=a;
}
}
if((yc-a==0)||(xc+a==7)){
esquina=1;
}
}
zeroenfila=0;
canvienfila=0;
esquina=0;
for(char a=0;a<8;a++){ //diag inf. derecha
if (figura[yc+a][xc-a]==0){
zeroenfila=1;
} else if((c==figura[yc+a][xc-a])&&(canvienfila==0)&&(zeroenfila==0)&&(esquina==0)){
if(a>0){
canvienfila=1;
if(a>1){
canvis=canvis+1;
}
}
if (activacanvis==1){
for(char b=0;b<=a ; b++) {
figura[yc+b][xc-b]=c;
}
vector[6]=a;
}
}
if((yc+a==7)||(xc-a==0)){
esquina=1;
}
}
zeroenfila=0;
canvienfila=0;
esquina=0;
for(char a=0;a<8;a++){ //diag inf. izq
if (figura[yc+a][xc+a]==0){
zeroenfila=1;
} else if((c==figura[yc+a][xc+a])&&(canvienfila==0)&&(zeroenfila==0)&&(esquina==0)){
if(a>0){
canvienfila=1;
if(a>1){
canvis=canvis+1;
}
}
if (activacanvis==1){
for(char b=0;b<=a ; b++) {
figura[yc+b][xc+b]=c;
}
vector[7]=a;
}
}
if((yc+a==7)||(xc+a==7)){
esquina=1;
}
}
if ((activacanvis==0)||(canvis==0)){
figura[yc][xc]=0;
}
}
void EnviaL(char Caracter) {
INTCONbits.GIE = 0; // Desactiva les interrupcions momentàniament
RCSTAbits.SPEN = 1; // Activa comunicació sèrie
TXSTAbits.TXEN = 1; // Activa comunicació
TXREG = Caracter; // Agafa el caràcter i l'envia
__delay_ms(1); // Donem temps
while (PIR1bits.TXIF == 0) // Esperem que s'acabi d'enviar
; // No fem res
RCSTAbits.SPEN = 0; // Desactiva comunicació sèrie
TXSTAbits.TXEN = 0; // Desactiva comunicació
INTCONbits.GIE = 1; // Activa les interrupcions
}
void Esborra(void) {
EnviaL(254); // Caràcter de control
EnviaL(1); // Esborra la pantalla i posa el cursor a l'inici
}
void Cursor(char Filera, char Columna) {
char Posicio = 0; // Variable per a calcular la posició
if (Filera == 2) {
Posicio = 64; // La primera columna de la segona fila és 64;
}
if (Columna > 0 && Columna < 33) { // Comprovem que sigui un valor raonable
Posicio = Posicio + Columna; // Sumem les adreces
Posicio = Posicio - 1; // Restem 1 perquè numera des de 0
}
Posicio = Posicio + 128; // Posa el bit de posicionat a 1
EnviaL(254); // Control de la posició del cursor
EnviaL(Posicio); // Canvia el cursor de lloc
}
void enviatext(char t[7],char c[4]){
for (signed char k = 0; k < 7; k++){
EnviaL(t[k]);
}
EnviaL(' ');
for (signed char k = 0; k < 4; k++){
EnviaL(c[k]);
}
}
void desfertorn(void){
//vector=[hd,hi,v+,v-,dsd,dsi,did,dii]
char cAUX =0;
char diff =0;
if (colur==3){
cAUX=6;
}else{
cAUX=3;
}
if(vector[0]!=0){
diff=vector[0]-1;
for(char b=0;b<=diff ; b++) {
figura[posicioy][posiciox-b]=cAUX;
}
}
if(vector[1]!=0){
diff=vector[1]-1;
for(char b=0;b<=diff ; b++) {
figura[posicioy][posiciox+b]=cAUX;
}
}
if(vector[2]!=0){
diff=vector[2]-1;
for(char b=0;b<=diff ; b++) {
figura[posicioy-b][posiciox]=cAUX;
}
}
if(vector[3]!=0){
diff=vector[3]-1;
for(char b=0;b<=diff ; b++) {
figura[posicioy+b][posiciox]=cAUX;
}
}
if(vector[4]!=0){
diff=vector[4]-1;
for(char b=0;b<=diff ; b++) {
figura[posicioy-b][posiciox-b]=cAUX;
}
}
if(vector[5]!=0){
diff=vector[5]-1;
for(char b=0;b<=diff ; b++) {
figura[posicioy-b][posiciox+b]=cAUX;
}
}
if(vector[6]!=0){
diff=vector[6]-1;
for(char b=0;b<=diff ; b++) {
figura[posicioy+b][posiciox-b]=cAUX;
}
}
if(vector[7]!=0){
diff=vector[7]-1;
for(char b=0;b<=diff ; b++) {
figura[posicioy+b][posiciox+b]=cAUX;
}
}
figura[posicioy][posiciox]=0;
color=colur;
turno=turno-1;
Esborra();
if (color==3){
enviatext(player,colorG);
}else{
enviatext(player,colorB);
}
}
void condicionsini(void){
djugador1=1;
Esborra();
enviatext(o,space);
__delay_ms(3000);
for (signed char j = 0; j < 8; j++){
for (signed char k = 0; k < 8; k++){
figura[j][k] = 0; // Apaguem tot
}
}
figura[3][3]=3;
figura[3][4]=6;
figura[4][3]=6;
figura[4][4]=3;
turno=1;
color=3;
activat=1;
Esborra();
enviatext(player,colorG);
djugador1=0;
}
void evaluartorn(void){
jugador1=0;
jugador2=0;
for (char i =0; i <8; i++){
for (char t =0; t <8; t++){
if (figura[t][i]==0){
activacanvis=0;
canvi(i,t,3);
if (canvis!=0){
jugador1=jugador1+1;
}
canvi(i,t,6);
if (canvis!=0){
jugador2=jugador2+1;
}
}
}
}
if (color==3){
if (jugador2!=0){
color=6;
}else{
if (jugador1!=0){
color=3;
}else{
turno=61;
}
}
}else{
if (jugador1!=0){
color=3;
}else{
if (jugador2!=0){
color=6;
}else{
turno=61;
}
}
}
}
void resultat(void){
jugador1=0;
jugador2=0;
for (char i =0; i <8; i++){
for (char t =0; t <8; t++){
if (figura[i][t]==3){
jugador1=jugador1+1;
} else if(figura[i][t]==6){
jugador2=jugador2+1;
}
}
}
djugador1=jugador1/10;
ujugador1=jugador1%10;
djugador2=jugador2/10;
ujugador2=jugador2%10;
djugador1=djugador1+'0';
ujugador1=ujugador1+'0';
djugador2=djugador2+'0';
ujugador2=ujugador2+'0';
Esborra();
enviatext(player,colorG);
EnviaL(' ');
EnviaL(djugador1);
EnviaL(ujugador1);
Cursor(2,1);
enviatext(player,colorB);
EnviaL(' ');
EnviaL(djugador2);
EnviaL(ujugador2);
}

Aquesta obra d'Oriol Boix està llicenciada sota una llicència no importada Reconeixement-NoComercial-SenseObraDerivada 3.0.