PDA

Ver la versión completa : Juego de Ta-Te-Ti



Arielo
30/08/2007, 17:12
Bueno, mientras Mr. Macuy prepara su material, les subo algo que hice recién...

Es un juego (muy básico) de Ta-Te-Ti, o Tic-Tac-Toe o Tres en Línea, como se lo conoce en otros lados...

El código está en Visual Basic (no creo que haya problemas en cuanto a la versión que se use, es bastante genérico en ese sentido...)

En un proyecto nuevo, agregar los siguientes controles al formulario:

1 Label, al que llamaremos "lblTurno" -> Indicará a quién le toca jugar
1 Label, al que llamaremos "lblGanados" -> Cuántos partidos ha ganado el jugador humano
1 Label, al que llamaremos "lblEmpatados" -> Cuántos partidos se han empatado
1 Label, al que llamaremos "lblPerdidos" -> Cuántos partidos ha ganado la PC
9 Labels (que conformarán un Array). Como nombre, a estos Labels le pondremos "lblCasilla". Cada uno de éstos, conformará una casilla del tablero. Estos Labels, deberán estar ubicados en tres hileras de tres casillas cada uno, así forman un tablero de TaTeTi...

... No hacen falta más controles. Ahora viene el código...

Arielo
30/08/2007, 17:14
El código del juego es el siguiente:



Private Sub Form_Load()
'
' TA-TE-TI Simple
' por Arielo
' para Monografias.com
'
' Código de libre distribución y/o modificación
'

'
' Esta subrutina, es lo primero que se ejecuta al empezar a jugar
'
Call JuegoNuevo
End Sub

Sub JuegoNuevo()
'
' Esta subrutina se usa para inicializar el tablero.
'
Randomize Timer

' Inicializa el tablero
For i = 0 To 8
lblCasilla(i).Tag = 0
lblCasilla(i).Caption = ""
Next

' Indica Quién jugará primero: la pc o el jugador
Tur = Rnd
If Tur > 0.5 Then
lblTurno.Tag = 1
lblTurno.Caption = "O - P.C."
Call JuegaPC
Else
lblTurno.Tag = 0
lblTurno.Caption = "X - JUGADOR"
End If

End Sub
Private Sub lblCasilla_Click(Index As Integer)
'
' Esta subrutina, corresponde a la jugada del jugador humano.
' Se activa cuando éste hace clic en una casilla del tablero.
'

' Controla que sea realmente el turno del jugador
If lblTurno.Tag = 1 Then
a = MsgBox("No es tu turno...", , "Error")
Exit Sub
End If

' Controla que la casilla elegida, esté vacía
If lblCasilla(Index).Tag <> 0 Then
a = MsgBox("La casilla ya está siendo usada", , "Error")
Exit Sub
End If

' Si está todo bien, coloca una "X" roja en la casilla
lblCasilla(Index).ForeColor = RGB(255, 60, 60) ' Indica que el color de las letras, es rojizo
lblCasilla(Index).Caption = "X" ' Coloca la Equis en el tablero
lblCasilla(Index).Tag = 10 ' Indica que la casilla está ocupada por una ficha del jugador

' Controla si el jugador hizo tateti
For i = 1 To 8
Call SumaLinea(i, ValorLinea, Cas1, Cas2, Cas3)
If ValorLinea = 30 Then
' Si el jugador hizo tateti, lo anuncia...
a = MsgBox("Fin del juego... Ganaste!!!!", , "Final")
' ... suma 1 punto a los partidos ganados por el jugador...
lblGanados = Val(lblGanados.Caption) + 1
' ... reinicia el tablero ...
Call JuegoNuevo
' ... y sale, para comenzar con el nuevo juego...
Exit Sub
End If
Next

' Cambia el turno. Ahora le toca jugar a la PC
lblTurno = "O - P.C."
lblTurno.Tag = 1
Call JuegaPC

' Controla si no se ha llegado a un empate
Call ControlaEmpates

End Sub

Sub JuegaPC()
'
' Esta subrutina, toma la decisión acerca de qué casilla jugará la PC en su turno.
'

' Primero, se fija si puede hacer TaTeTi
For i = 1 To 8
Call SumaLinea(i, ValorLinea, Cas1, Cas2, Cas3)
If ValorLinea = 200 Then ' Indica que la PC puede hacer tateti, porque tiene dos fichas en línea
' Analiza cuál de las tres casillas de la línea, es la que está libre, y decide jugar esa.
If lblCasilla(Cas1).Tag = 0 Then CasillaJugada = Cas1
If lblCasilla(Cas2).Tag = 0 Then CasillaJugada = Cas2
If lblCasilla(Cas3).Tag = 0 Then CasillaJugada = Cas3
End If
Next

If CasillaJugada > 0 Then
GoTo UbicaFicha ' Ya decidió que jugará esta casilla, para ganar el partido
End If

' Se fija si el jugador está a punto de hacer TaTeTi
For i = 1 To 8
Call SumaLinea(i, ValorLinea, Cas1, Cas2, Cas3)
If ValorLinea = 20 Then ' Indica que el jugador está a punto de hacer tateti
If lblCasilla(Cas1).Tag = 0 Then CasillaJugada = Cas1
If lblCasilla(Cas2).Tag = 0 Then CasillaJugada = Cas2
If lblCasilla(Cas3).Tag = 0 Then CasillaJugada = Cas3
End If
Next

If CasillaJugada > 0 Then
GoTo UbicaFicha
Else
' Debido a que no puede hacer tateti, y no hay peligro de que el jugador lo haga, juega una casilla al azar
Do
CasillaJugada = Int(Rnd * 9) ' Elije una casilla al azar
Loop Until lblCasilla(CasillaJugada).Tag = 0 ' Elegirá casillas al azar, hasta que encuentre una sin ocupar
End If

' Acá, la PC coloca la ficha en la casilla que eligió...
UbicaFicha:
lblCasilla(CasillaJugada).ForeColor = RGB(60, 60, 255) ' Indica que el color de las letras, es azulado
lblCasilla(CasillaJugada).Caption = "O" ' Coloca el círculo en el tablero
lblCasilla(CasillaJugada).Tag = 100 ' Indica que la casilla está ocupada por una ficha del PC

' Controla que con su jugada no se haya llegado a un empate...
Call ControlaEmpates

' Controla si la computadora hizo tateti
For i = 1 To 8
Call SumaLinea(i, ValorLinea, Cas1, Cas2, Cas3)
If ValorLinea = 300 Then
' Si la PC hizo tateti, muestra el cartel anunciándolo...
a = MsgBox("Fin del juego... Perdiste!!!!", , "Final")
'... suma 1 a los partidos perdidos por el jugador...
lblPerdidos = Val(lblPerdidos.Caption) + 1
'... reinicia el tablero...
Call JuegoNuevo
'... y sale, para comenzar el nuevo juego...
Exit Sub
End If
Next

' Le devuelve el turno al jugador, y sale de la subrutina
lblTurno = "X - JUGADOR"
lblTurno.Tag = 0

End Sub

Sub ControlaEmpates()
'
' En esta subrutina, se controla si se colocaron todas las fichas posibles
' Si es así, ha habido un empate...
'
Empate = 1
For i = 0 To 8
If lblCasilla(i).Tag = 0 Then Empate = 0
Next
If Empate = 1 Then
a = MsgBox("Fin del juego... Empate!!!", , "Final")
lblEmpates = Val(lblEmpates.Caption) + 1
Call JuegoNuevo
Exit Sub
End If
End Sub

Sub SumaLinea(Numero, ValorLinea, Cas1, Cas2, Cas3)
'
' En esta rutina, se controla qué hay ubicado en las casillas que conforman cada una de las líneas
' en las que es posible hacer TaTeTi
'
Select Case Numero
Case Is = 1: Cas1 = 0: Cas2 = 1: Cas3 = 2 ' Primera línea horizontal
Case Is = 2: Cas1 = 3: Cas2 = 4: Cas3 = 5 ' Segunda línea horizontal
Case Is = 3: Cas1 = 6: Cas2 = 7: Cas3 = 8 ' Tercera línea horizontal
Case Is = 4: Cas1 = 0: Cas2 = 3: Cas3 = 6 ' Primera columna vertical
Case Is = 5: Cas1 = 1: Cas2 = 4: Cas3 = 7 ' Segunda columna vertical
Case Is = 6: Cas1 = 2: Cas2 = 5: Cas3 = 8 ' Tercera columna vertical
Case Is = 7: Cas1 = 0: Cas2 = 4: Cas3 = 8 ' Diagonal ARR_IZQ hasta ABA_DER
Case Is = 8: Cas1 = 2: Cas2 = 4: Cas3 = 6 ' Diagonal ARR_DER hasta ABA_IZQ
End Select

ValorLinea = Val(lblCasilla(Cas1).Tag) + Val(lblCasilla(Cas2).Tag) + Val(lblCasilla(Cas3).Tag)

End Sub




... cualquier cosilla, no duden en consultarme...

Arielo
30/08/2007, 17:32
... a ver si les sirve este zip. tiene el juego completo, con formulario incluido y todo...

Acabo de incluir en el zip, el archivo ejecutable (tateti.exe).
No creo que tengan problemas en ejecutarlo, ya que no hace uso de ninguna librería extraña...

Juninho10
07/07/2009, 11:38
Viejo necesito uno de estos programas en c++ para hoy urgente!!!!

1.Generador de palabras de números telefónicos. Los marcadores telefónicos estándar contienen los dígitos 0 al 9. Los números 2 hasta el 9 cada uno de ellos tiene tres letras asociadas, tal como se indican en la tabla siguiente:

Digito Letras
1 ABC
2 DEF
3 GHI
4 JKL
5 MNÑ
6 OPQ
7 RST
8 UVW
9 XYZ


Muchas personas encuentran difícil memorizar los números telefónicos, por lo que utilizan la correspondencia existente entre dígitos y letras para desarrollar palabras de siete (7) letras, que correspondan a sus números telefónicos. Por ejemplo, una persona cuyo número telefónico es 5816787 pudieran utilizar la correspondencia indicada en la tabla precedente, para desarrollar la palabra de siete letras MUCORUS.

Los negocios frecuentemente intentan obtener números telefónicos que sean fáciles de recordar para sus clientes. Si un negocio puede anunciar una sola palabra para que le marquen sus clientes. Si un negocio puede anunciar una sola palabra para que le marquen sus clientes, entonces sin duda su negocio recibirá unas cuantas llamadas más.

Cada palabra de siete letras corresponde a exactamente un número telefónico de siete digitas.

Cada número telefónico de 7 dígitos corresponde a muchas palabras distintas de 7 letras, Desafortunadamente, la mayor parte de ellas representan combinaciones irreconocibles de letras.

Escriba un programa en C++ que, dado un numero de 7 digitos escriba aun archivo todas las palabras posibles. Evite números telefónicos que contengan el numero 0.

2.Escriba un programa en c++, un archivo estudiantes, que pida Nombre, Año de nacimiento, Carrera y Curso y donde pueda:
a- Listar a los alumnos por carrera.
b- Listar alumnos por año de nacimiento.
c- Imprima cuantos alumnos hay en lista.

Si me puedes ayudar con los 2 estaria demasiado agradecido, pero con uno me conformo.

Gracias a todos y Dios te bendiga.

Arielo
07/07/2009, 15:58
Lamento no poder ayudarte, Juninho...
De C++ no es mucho lo que conozco... :confused:


.

Macuy
07/07/2009, 21:21
Por cuestion tiempo mas o menos quedaria asi... solo te queda arreglarlo para que te pida el resto de datos que necesitas dentro de la estructura alumno.... igual como el tamano del arreglo, titulos, etc, etc...

Xaludos





#include <iostream.h>
#include <conio.h>
#include <ctype.h>
#define MAX 100

void menu();

struct alumno
{
char carrera;
float otro_dato;
}alumno[MAX];

void main(void)
{
int i,num;
float hombres_aprobados,hombres_reprobados,mujeres_aprob adas,mujeres_reprobadas;
float suma=0,suma2=0,suma3=0,suma4=0,suma_hombres,suma_m ujeres,media_hombres,media_mujeres,media_global;
char ele;
comienzo:
menu();
cout<<"Escribe el numero de alumnos(maximo "<<MAX<<"): ";
cin>>num;
inicio:
for(i=0;i<num;i++)
{
menu();
cout<<"ALUMNO No. "<<i+1<<"\n\n";
cout<<"carrera del alumno: ";
cin>>alumno[i].carrera;
// ele=toupper(getch());
if(alumno[i].carrera=='X' || alumno[i].carrera=='Y' || alumno[i].carrera=='x' || alumno[i].carrera=='y')
{
inicio2:
menu();
cout<<"ALUMNO No. "<<i+1<<"\n\n";
}
else
{
goto inicio;
}
cout<<"otro_datoicacion del alumno: ";
cin>>alumno[i].otro_dato;
if(alumno[i].otro_dato>=0 && alumno[i].otro_dato<=10)
{
menu();
}
else
{
goto inicio2;
}
}
cout<<"\n\n";
cout<<"\t\tPresione una tecla para mostrar las estadisticas\n\n";
getch();
hombres_aprobados=0;
hombres_reprobados=0;
mujeres_aprobadas=0;
mujeres_reprobadas=0;
for (i=0;i<num;i++)
{
if(alumno[i].carrera=='X' || alumno[i].carrera=='x' && alumno[i].otro_dato>=6 )
{
hombres_aprobados++;
suma+=alumno[i].otro_dato;
}
else
{
if(alumno[i].carrera=='X' || alumno[i].carrera=='x' && alumno[i].otro_dato<=5)
{
hombres_reprobados++;
suma2+=alumno[i].otro_dato;
}
else
{
if(alumno[i].carrera=='Y' || alumno[i].carrera=='y' && alumno[i].otro_dato>=6)
{
mujeres_aprobadas++;
suma3+=alumno[i].otro_dato;
}
else
{
mujeres_reprobadas++;
suma4+=alumno[i].otro_dato;
}
}
}

suma_hombres=(suma+suma2);
suma_mujeres=(suma3+suma4);
}
int total_hombres=hombres_aprobados+hombres_reprobados ;
int total_mujeres=mujeres_aprobadas+mujeres_reprobadas ;
if(total_hombres==0)
{
media_hombres=0;
}
else
{
media_hombres=suma_hombres/(total_hombres);
}
cout<<"\tHombres aprobados: "<<hombres_aprobados<<"\n\n";
cout<<"\tHombres reprobados: "<<hombres_reprobados<<"\n\n";
cout<<"\tMedia de hombres: "<<media_hombres<<"\n\n";
if(total_mujeres==0)
{
media_mujeres=0;
}
else
{
media_mujeres=suma_mujeres/(total_mujeres);
}
media_global=(media_hombres+media_mujeres)/2;
cout<<"\tMujeres aprobadas: "<<mujeres_aprobadas<<"\n\n";
cout<<"\tMujeres reprobadas: "<<mujeres_reprobadas<<"\n\n";
cout<<"\tMedia de Mujeres : "<<media_mujeres<<"\n\n";
cout<<"\tLa media global es: "<<media_global<<"\n\n\n\n";
cout<<"\t\t\tPRESINA CUALQUIER TECLA PARA CONTINUAR...";
getch();
inicio4:
clrscr();
menu();
cout<<"Deceas:\n";
cout<<" [i] Ingresar nuevos datos.\n";
cout<<" [S] Salir de programa.\n";
cout<<" Elige: ";
do
{
ele=toupper(getch());
}
while(!isalpha(ele));
switch(ele)
{
case 'I':
goto comienzo;
case 'S':
goto fin;
default:
goto inicio4;
}
fin:
clrscr();
gotoxy(30,10);
cout<<"GRACIAS POR USAR EL PROGRAMA";
gotoxy(35,12);
cout<<"ñ_ñ";

}

void menu()
{
clrscr();
cout<<"\t\t\t[:::CONTROL DE ESTUDIATES:::]\n";
cout<<"\t\t\t-----------------------------\n\n";
}

Macuy
07/07/2009, 22:09
Bueno, mientras Mr. Macuy prepara su material, les subo algo que hice recién...

Es un juego (muy básico) de Ta-Te-Ti, o Tic-Tac-Toe o Tres en Línea, como se lo conoce en otros lados...

El código está en Visual Basic (no creo que haya problemas en cuanto a la versión que se use, es bastante genérico en ese sentido...)



Bonito el jueguito... jejeje... creo que tendras que esperar un par de dias mas... que descanse, hasta ayer termine examenes de la U y me han pegado una sacudida, que aun estoy mareado... jajaja a eso sumale el trabajo, novia, familia, etc, etc.... a por cierto, me volvieron a operar... jajaja he estado algo ocupado... jajaja

Xaludos Bro... y estamos en contacto... por el momento deje un poco de lado Ruby on Rails por cuestion de tiempo y estoy retomando a full PHP... que ahora que lo veo... tiene muy bonitas mejoras... jajajaja

Arielo
08/07/2009, 07:39
Bonito el jueguito... jejeje... creo que tendras que esperar un par de dias mas... que descanse, hasta ayer termine examenes de la U y me han pegado una sacudida, que aun estoy mareado... jajaja a eso sumale el trabajo, novia, familia, etc, etc.... a por cierto, me volvieron a operar... jajaja he estado algo ocupado... jajaja

Xaludos Bro... y estamos en contacto... por el momento deje un poco de lado Ruby on Rails por cuestion de tiempo y estoy retomando a full PHP... que ahora que lo veo... tiene muy bonitas mejoras... jajajaja
Uuuhhhhh, pero este tema es viejito ya... Tiene un par de años encima, debe ser de los inicios del foro de programación ...

¿Otra vez operado? Con razón te habías perdido. Espero que haya salido todo bien...

Te entiendo con lo del RoR... yo no he podido empezar, jaja...

Saludos, Jorge!!!!

Macuy
08/07/2009, 13:17
Uuuhhhhh, pero este tema es viejito ya... Tiene un par de años encima, debe ser de los inicios del foro de programación ...

¿Otra vez operado? Con razón te habías perdido. Espero que haya salido todo bien...

Te entiendo con lo del RoR... yo no he podido empezar, jaja...

Saludos, Jorge!!!!

Si, lo se... pero igual, sigo sin tener mucho material, y el que tengo, aun tiene sus bugs, pues son algo grandecitos... jajaja

Si, ya todo salio bien... Gracias...

Aun tengo esperanza de poder iniciar formalmente con RoR

Xaludos