Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Codigo Otelo Proyecto

Estas en el tema de Codigo Otelo Proyecto en el foro de C/C++ en Foros del Web. Amigos! de nuevo yo >.< podrian ayudarme a poner un "score" para cuando se juegue contra la computadora y otro jugador? no encuentro la manera!! ...
  #1 (permalink)  
Antiguo 02/12/2012, 20:09
 
Fecha de Ingreso: diciembre-2012
Mensajes: 7
Antigüedad: 11 años, 5 meses
Puntos: 0
Codigo Otelo Proyecto

Amigos! de nuevo yo >.< podrian ayudarme a poner un "score" para cuando se juegue contra la computadora y otro jugador? no encuentro la manera!! porfa!! :) les dejo el codigo en 2 partes.

#include<stdio.h>
#include<stdlib.h>
#include<time.h> //para inicializar srand(), rand()
#include <string.h>
#include <conio.h>

//'fonction macro' m(): conversion mayuscula a minusscula //
#define menos(c) ((c>='A')&&(c<='Z')? c+='a'-'A':c)


// clase principal : juego
struct juego
{
//datos
int * tablero; // tablero dinamico de enteros 8,8

//Funciones
// asignación de las 64 casillas del tablero
juego() // creador
{ tablero=(int*)malloc(64*sizeof(int));}
void start();
void muestra();
void jugador1(bool); // fase de juego (blanco ou negro)
bool posible(bool); // comprueba el juego sea posible, 1= blancoo, 0=negro
bool jugada(bool,int,int); // jugada de jugador
int jugada_PC(bool); // determina jugada de computadora
int ganador(); // quien tiene mas *
void instrucciones(); //instruccionesciones de juego
};
/////////////////////////////////////////////////////////////////////////

void instrucciones()
{ printf("\n En el otelo,se emplea un tablero de 8 filas por 8 columnas y 64 fichas identicas, redondas");
printf("\n blancas por una cara y negras por la otra (u otros colores).\n Las casillas se denotan numerando las columnas");
printf("\n comenzando por la esquina superior izquierda del tablero\ncon letras de la A a la H, e igual con las filas,\npero con numeros del uno al ocho");
printf("\n A un jugador se le asigna un color y se dice\n que lleva las fichas de ese color,\nlo mismo para el adversario con el otro color.");
printf("\n En el otelo, de inicio, se colocan cuatro fichas tal\n dos fichas blancas en D4 y E5 y dos negras en E4 y D5.");
printf("\n se comparten las sesenta y cuatro fichas\nsolo existiran diferencias si uno de los jugadores pasa");
printf("\n el movimiento consiste en colocar una ficha de forma que flanquee\n una o varias fichas del color contrario y voltear esas fichas\npara que pasen a mostrar el propio color.");
printf("\n Se voltean todas las fichas que se han flanqueado en ese turno al colocar\n la ficha del color contrarioEsas fichas, para que esten flanqueadas,\ndeben formar una linea continua recta (diagonal u ortogonal)");
printf("\n fichas del mismo color entre dos fichas del color contrario\n(una de ellas la recién colocada y la otra ya presente).");
printf("\n la a partida finaliza cuando ningún jugador puede mover\n o el tablero este lleno y gana quien en ese momento tenga sobre el tablero mas fichas mostrando su color.");
}


void historia ()
{
printf("\n Sus origenes se situan en Argentina, en el siglo XVIII\nen donde los londinenses Lewis Waterman y John W. Mollett comercializaron en 1880, cada uno, juegos con reglas parecidas");
printf(" 1971 el japones Goro Hasegawa cambio dos reglas del juego y lo registro\nbajo el nombre de Othello\n inspirado por la obra de Shakespeare del mismo nombre");
printf("Desde 1977 se juega un Campeonato Mundial de Othello en el que pueden\nparticipar tres jugadores por pais");
printf("si el numero de jugadores lo permite se emplea el sistema suizo.\nPara establecer el equipo ganador (desde 1987)\nse contabiliza el número de puntos de los tres jugadores del pais.");
printf("\nEl otelo crea interes entre los programadores debido a la sencillez\n de sus reglas\nsolo un tipo de movimiento, un unico tipo de fichas, etc.\nEl primer torneo entre programas fue en 1979");
printf("\nen 1981 se celebro un torneo con jugadores humanos y programas\n que fue ganado por Hiroshi Inouie,\n el entonces campeon mundial");
printf("naunque perdio una partida contra\n el programa The Moor, siendo esta la primera vez que un programa ganaba\n a un campeon mundial en un juego de este tipo");
printf("Los programas han ido ganando\n en potencial, terminando por ser imbatibles\npor ejemplo, el programa Logistello en 1997 derroto\nclaramente al campeon mundial Murakami por 6 victorias a 0 \n\n");
}
//llenando el tablero al principio
void juego::start()// tablero de pantalla inicial
{
for(int i=0;i<64;i++) // espacios en blanco
*(tablero+i)=0;

*(tablero+27)=1; /// llena las 4 cajas del centro
*(tablero+28)=2;
*(tablero+35)=2;
*(tablero+36)=1;
this->muestra();
}
////////////////////////////////////////////////////////////////////////////
void juego::muestra() // vista de tablero
{ //Caracteres *de dibujo*
char ver=(char) 179, hor=(char)196;
char hg=(char) 218, h=(char)194, cr=(char)197, hd=(char)191;
char g=(char)195, d=(char)180;
char bg=(char) 192, b=(char) 193, bd=(char) 217;
char hhgg=(char)201,hh=(char)205, hhdd=(char)187;
char vv=(char)186;
char bbgg=(char)200,bbdd=(char)188;
char bl=(char)2, nr=(char)1;

printf("\n\t "); // muestra los numéros des columnas
for(int i=0;i<8;i++)
printf("%d ",i+1);
printf("\n");
//parte superior de tablero
printf("\t%c",hhgg);
for(int j=0;j<27;j++)
printf("%c",hh);
printf("%c\n\t",hhdd);
printf("%c %c%c",vv,hg,hor);
for(int k=0;k<7;k++)
printf("%c%c%c",hor,h,hor);
printf("%c%c %c\n",hor,hd,vv);//fin de la parte superior de tablero
// relleno de tablero
for(int l=0;l<8;l++)
{
printf(" %c\t%c %c",'a'+l,vv,ver);// muestra el comienzo de cada fila
//llenado de fila
for(int c=0;c<8;c++)
{
switch (*(tablero+8*l+c))
{
case 0:
{printf(" %c",ver);break;}
case 1:
{printf("%c%c%c",bl,bl,ver);break;}
case 2:
{printf("%c%c%c",nr,nr,ver);break;}
default: break;
}
}
printf(" %c\n",vv); // va a la fila
if (l!=7) //muestra fila transversal
{
printf("\t%c %c%c",vv,g,hor);
for(int j=0;j<7;j++)
printf("%c%c%c",hor,cr,hor);
printf("%c%c %c\n",hor,d,vv);
}
}
//parte baja del tablero
printf("\t%c %c%c",vv,bg,hor);
for(int t=0;t<7;t++)
printf("%c%c%c",hor,b,hor);
printf("%c%c %c\n",hor,bd,vv);
printf("\t%c",bbgg);
for(int s=0;s<27;s++)
printf("%c",hh);
printf("%c\n\t",bbdd);
//fin de la parte baja del tablero
}

int juego::ganador() // devuelve peon blanco- peon negro ////////////////////
{
int diferente=0;
for(int i=0;i<64;i++)
switch (*(tablero+i))
{
case 1: {diferente++; break;}
case 2: {diferente--; break;}
default: {break;}
}
return diferente;
}/////////////////////////////////////////////////////////////////////////////



//jugador pone un token /////////////////////////////////////////////////////
bool juego::jugada(bool blanco,int i, int j)
{
int pion=8*i+j; //i=fila; j=columna
bool ok=false; //por default : fracasa

// si la caja no esta vacia
if (*(tablero+pion)!=0)
return false; //salir con fracaso

// teniendo en cuenta a jugador1
int yo, el; //mi color & su color
if (blanco)
{
yo=1; //yo juego blanco
el=2; //el juega negro
}
else
{
yo=2; //el juega negro
el=1; //el juega blanco
}

//A la derecha////////////////
int c=j+1;
while((*(tablero+8*i+c)==el) && (c<7))
c++;
if ((*(tablero+8*i+c)==yo) && (c>j+1))
{
ok=true;
for (int k=j;k<c;k++)
*(tablero+8*i+k)=yo;
}
//////////////////////////

//A izquierda////////////////
c=j-1;
while ((*(tablero+8*i+c)==el) && (c>0))
c--;
if ((*(tablero+8*i+c)==yo) && (c<j-1))
{
ok=true;
for (int k2=j;k2>c;k2--)
*(tablero+8*i+k2)=yo;
}
//////////////////////////

//abajo//////////////////
int l=i+1;
while ((*(tablero+8*l+j)==el) && (l<7))
l++;
if ((*(tablero+8*l+j)==yo) && (l>i+1))
{
ok=true;
for (int k=i;k<l;k++)
*(tablero+8*k+j)=yo;
}
//////////////////////////

//arriba/////////////////
l=i-1;
while ((*(tablero+8*l+j)==el) && (l>0))
l--;
if ((*(tablero+8*l+j)==yo) && (l<i-1))
{
ok=true;
for (int k=i;k>l;k--)
*(tablero+8*k+j)=yo;
}
//////////////////////////

//parte superior izquierda////////
int ld1=i-1;
int cd1=j-1;
while ((*(tablero+8*ld1+cd1)==el) && (ld1>0) && (cd1>0))
{
cd1--;
ld1--;
}
if ((*(tablero+8*ld1+cd1)==yo) && (cd1<j-1))
{
ok=true;
for(int k=8*i+j;k>8*ld1+cd1;k-=9)
*(tablero+k)=yo;
}

//parte superior derecha///////
int ld2=i-1;
int cd2=j+1;
while ((*(tablero+8*ld2+cd2)==el) && (ld2>0) && (cd2<7))
{
cd2++;
ld2--;
}
if ((*(tablero+8*ld2+cd2)==yo) && (cd2>j+1))
{
ok=true;
for(int k=8*i+j;k>8*ld2+cd2;k-=7)
*(tablero+k)=yo;
}

//parta inferior izquierda//////////
int ld3=i+1;
int cd3=j-1;
while ((*(tablero+8*ld3+cd3)==el) && (ld3<7) && (cd3>0))
{
cd3--;
ld3++;
}
if ((*(tablero+8*ld3+cd3)==yo) && (ld3>i+1))
{
ok=true;
for(int k=8*i+j;k<8*ld3+cd3;k+=7)
*(tablero+k)=yo;
}

// parte superior derecha //////////
int ld4=i+1;
int cd4=j+1;
while ((*(tablero+8*ld4+cd4)==el) && (ld4<7) && (cd4<7))
{
cd4++;
ld4++;
}
if ((*(tablero+8*ld4+cd4)==yo) && (ld4>i+1))
{
ok=true;
for(int k=8*i+j;k<8*ld4+cd4;k+=9)
*(tablero+k)=yo;
}


return ok;

Última edición por bigguns; 02/12/2012 a las 20:10 Razón: olvide agregar la ayuda :)
  #2 (permalink)  
Antiguo 02/12/2012, 20:11
 
Fecha de Ingreso: diciembre-2012
Mensajes: 7
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: Codigo Otelo Proyecto

}



// fase de juego //
void juego::jugador1(bool blanco)
{
int i=0,j=0;
bool acepto=false;
char blancos=(char)2, negros=(char)1;

while (!acepto)
{
char fila='\0',columna='\0';
while (!((fila>='a')&&(fila<='h')&&(columna>='1')&&(colu mna<='8')))
{
printf("\nlos %s (%c) jugadores : ",(blanco?"blancos":"negros"),(blanco?blancos:negr os));
scanf("%c%c",&fila,&columna);
fflush(stdin);
fila=menos(fila);
}
// Convertir la fila y columna par (i, j) de enteros entre 0 y 7
i=fila-'a';
j=columna-'1';
//llama la funcion de juego::jugada()
acepto=this->jugada(blanco,i,j);
if (!acepto)
printf("Le jugada no es posible");
}
// visualizar la tabla despus de la Jugada del Jugador 1 1:
this->muestra();
}//////////////////////////////////////////////////////////////////////////////////////////
//////// verificación de las condiciones de juego para los jugadores ////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////
bool juego::posible(bool blanco)
{
//bool ok;
// tomando en cuenta el jugador
int yo, el; // mi color y su color
if (blanco)
{
yo=1; //yo juego blanco
el=2; //el juega negro
}
else
{
yo=2; //yo juego negro
el=1; //el juega blanco
}

// arreglo principal
for(int i=0;i<8;i++)
for(int j=0;j<8;j++)
{
if (*(tablero+8*i+j)==0)
{
//A la derecha////////////////
int c=j+1;
while((*(tablero+8*i+c)==el) && (c<7))
c++;
if ((*(tablero+8*i+c)==yo) && (c>j+1))
return true;
//////////////////////////

//A izquierda////////////////
c=j-1;
while ((*(tablero+8*i+c)==el) && (c>0))
c--;
if ((*(tablero+8*i+c)==yo) && (c<j-1))
return true;
//////////////////////////

// abajo//////////////////
int l=i+1;
while ((*(tablero+8*l+j)==el) && (l<7))
l++;
if ((*(tablero+8*l+j)==yo) && (l>i+1))
return true;
//////////////////////////

// arriba /////////////////
l=i-1;
while ((*(tablero+8*l+j)==el) && (l>0))
l--;
if ((*(tablero+8*l+j)==yo) && (l<i-1))
return true;
//////////////////////////

//parte superior izquierda////////
int ld1=i-1;
int cd1=j-1;
while ((*(tablero+8*ld1+cd1)==el) && (ld1>0) && (cd1>0))
{
cd1--;
ld1--;
}
if ((*(tablero+8*ld1+cd1)==yo) && (cd1<j-1))
return true;
//////////////////////////

//parte superior derecha///////
int ld2=i-1;
int cd2=j+1;
while ((*(tablero+8*ld2+cd2)==el) && (ld2>0) && (cd2<7))
{
cd2++;
ld2--;
}
if ((*(tablero+8*ld2+cd2)==yo) && (cd2>j+1))
return true;
//////////////////////////

//parte inferior izquierda//////////
int ld3=i+1;
int cd3=j-1;
while ((*(tablero+8*ld3+cd3)==el) && (ld3<7) && (cd3>0))
{
cd3--;
ld3++;
}
if ((*(tablero+8*ld3+cd3)==yo) && (ld3>i+1))
return true;
///////////////////////////

//parte superior derecha//////////
int ld4=i+1;
int cd4=j+1;
while ((*(tablero+8*ld4+cd4)==el) && (ld4<7) && (cd4<7))
{
cd4++;
ld4++;
}
if ((*(tablero+8*ld4+cd4)==yo) && (ld4>i+1))
return true;
////////////////////////////
}
}
return false;
}

//////// Calcula la jugada de la computadora ////////////////////////////////////////////
int juego::jugada_PC(bool blanco)
{
int obtenido, maxobtenido=0;
int best=-1;

//tomando en cuenta el jugador
int yo, el; //mi colo y su color
if (blanco)
{
yo=1; //yo juego blanco
el=2; //el juega negro
}
else
{
yo=2; //yo juego negro
el=1; //el juega blanco
}

// arreglo principal
for(int i=0;i<8;i++)
for(int j=0;j<8;j++)
{
obtenido=0; //obteniendo su jugada : ininicializa a 0
if (*(tablero+8*i+j)==0)
{
//A la derecha////////////////
int c=j+1;
while((*(tablero+8*i+c)==el) && (c<7))
c++;
if ((*(tablero+8*i+c)==yo) && (c>j+1))
obtenido += c-j-1;
//////////////////////////

//A la izquierda////////////////
c=j-1;
while ((*(tablero+8*i+c)==el) && (c>0))
c--;
if ((*(tablero+8*i+c)==yo) && (c<j-1))
obtenido += (j-1)-c;
//////////////////////////

// abajo //////////////////
int l=i+1;
while ((*(tablero+8*l+j)==el) && (l<7))
l++;
if ((*(tablero+8*l+j)==yo) && (l>i+1))
obtenido+= l-i-1;
//////////////////////////

// arriba/////////////////
l=i-1;
while ((*(tablero+8*l+j)==el) && (l>0))
l--;
if ((*(tablero+8*l+j)==yo) && (l<i-1))
obtenido+= i-1-c;
//////////////////////////

//parte superior izquierda////////
int ld1=i-1;
int cd1=j-1;
while ((*(tablero+8*ld1+cd1)==el) && (ld1>0) && (cd1>0))
{
cd1--;
ld1--;
}
if ((*(tablero+8*ld1+cd1)==yo) && (cd1<j-1))
obtenido+= j-1-cd1;
//////////////////////////

//parte superior derecha///////
int ld2=i-1;
int cd2=j+1;
while ((*(tablero+8*ld2+cd2)==el) && (ld2>0) && (cd2<7))
{
cd2++;
ld2--;
}
if ((*(tablero+8*ld2+cd2)==yo) && (cd2>j+1))
obtenido+= cd2-j-1;
//////////////////////////

//parte inferior izquierda//////////
int ld3=i+1;
int cd3=j-1;
while ((*(tablero+8*ld3+cd3)==el) && (ld3<7) && (cd3>0))
{
cd3--;
ld3++;
}
if ((*(tablero+8*ld3+cd3)==yo) && (ld3>i+1))
obtenido+= ld3-i-1;
///////////////////////////

//parte superior derecha//////////
int ld4=i+1;
int cd4=j+1;
while ((*(tablero+8*ld4+cd4)==el) && (ld4<7) && (cd4<7))
{
cd4++;
ld4++;
}
if ((*(tablero+8*ld4+cd4)==yo) && (ld4>i+1))
obtenido+=ld4-i-1;
////////////////////////////

//es esta la mejor jugada ahora?
if (obtenido > maxobtenido)
{
maxobtenido=obtenido;
best=8*i+j;
}
}
}
return best;
}




/////////////////////////////////////////////////////////////////////////////////
// Programa principal
/////////////////////////////////////////////////////////////////////////////////
void main()
{
juego juego1;
int opc=0;
char blanco=(char)2, negro=(char)1;

//arreglo principal
do{
do
{
printf("\n\ Troyan Wars \n\ ");
printf("\n1 - Jugar contra la computadora \n\t");
printf("\n2 - jugar contra otro jugador \n\t");
printf("\n3 - historia de juego \n\t");
printf("\n4 - instruccionesciones de juego \n\t" );
printf("\n0 - Salir \n\t");
scanf("%d",&opc); fflush(stdin);
}
while ((opc!=0)&&(opc!=1)&&(opc!=2)&&(opc!=3)&&(opc!=4)) ;

switch (opc)
{
case 1: // juegar contra la computadora
{
do // color
{
printf("\n estas jugando contra la computadora \n");
printf("\n que color quieres jugar\n \n\t");
printf("1 - blancos \n \n\t2 - negros \n ");
scanf("%d",&opc);
fflush(stdin);
system ("cls");
}
while ((opc<0)||(opc>2));
if (opc==0)
break;
bool color;
switch (opc)
{
case 1: system("cls");
{ color=true; break;}
case 2: system("cls");
{ color=false; break;}
}
// procedimiento de juego
juego1.start();
int computadora;
if (color)
{
do
{
juego1.jugador1(color);
computadora=juego1.jugada_PC(!color);
if (computadora==-1)
break;
else
{
printf("\nlos %s (%c) jugadores %c%d\n",((!color)?"blancos":"negros"),((!color)?bl anco:negro),'a'+(computadora/8),computadora%8+1);
juego1.jugada(!color,computadora/8,computadora%8);
juego1.muestra();
}
if (!juego1.posible(color))
break;
}while(true);
}
else
{
do
{
computadora=juego1.jugada_PC(!color);
if (computadora==-1)
break;
else
{
printf("\nlos %s (%c) jugadores %c%d\n",(color?"negros":"blancos"),((color)?negro: blanco),'a'+(computadora/8),computadora%8+1);
juego1.jugada(!color,computadora/8,computadora%8);
juego1.muestra();
}
if (!juego1.posible(color))
break;
else
juego1.jugador1(color);

}while(true);
}
int diferente=juego1.ganador();
if (diferente==0)
printf("\n como va el juego \n");
else if ( color == (diferente>0) )
printf("\n Usted ha ganado!\n");
else
printf("\n usted ha perdido! Suerte para la proxima! \n");
break;
}
case 2: system("cls");// jugar a dos ///////////////////////////////////////////
{
juego1.start();
bool color=true; // los blancos empiezan
do //arreglo principal
{
juego1.jugador1(color); //jugador 1 empieza
color = !color; //cambiamos de jugador
}
while (juego1.posible(color));

int diferente=juego1.ganador();
if (diferente>0)
printf("\n los blancos ganan!\n");
else if (diferente<0)
printf("\nlos negros pierden!\n");
else if (diferente==0)
printf("\n esperando\n");
break;
}
/////////////////////////////////////////////////////////////
case 3: system("cls");
{ historia();
break;
}
case 4: system("cls");
{ instrucciones();
break;
}
default: // salir
{
printf("\n Proyecto Othelo programacion! \n\n");
break;
}
}
}while(opc!=0);
}

Etiquetas: funcion, int, programa, proyecto, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:42.