This repository has been archived by the owner on Oct 23, 2018. It is now read-only.
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #4159 from naekkeoya/master
Merged by aniket965
- Loading branch information
Showing
2 changed files
with
344 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,166 @@ | ||
org 100h | ||
|
||
include 'emu8086.inc' | ||
|
||
call PTHIS ;Llamamos la funcion PTHIS | ||
db 13,10, 'Introduce un numero en hexadecimal:',0 ;La funcion imprime la cadena | ||
call PTHIS ;Llamamos la funcion PTHIS | ||
db 13,10, 'Hexadecimal:',0 ;La funcion imprime la cadena | ||
MOV DX,5 ;Asignamos el no. max de caracteres aceptados | ||
MOV [SI],0h ;Inicializamos los primeros registros con 0 | ||
MOV [SI+1],0h ;Inicializamos los primeros registros con 0 | ||
MOV [SI+2],0h ;Inicializamos los primeros registros con 0 | ||
MOV [SI+3],0h ;Inicializamos los primeros registros con 0 | ||
CALL GET_STRING ;Se llama a la funcion GETSTRING | ||
CMP [SI+1],0h ;Comparamos si+1 con 0 para saber la cant de caracteres | ||
JZ char1 ;Si es 0 entonces hay un caracter | ||
CMP [SI+2],0h ;Comparamos si+2 con 0 para saber la cant de caracteres | ||
JZ char2 ;Si es 0 entonces hay dos caracteres | ||
CMP [SI+3],0h ;Comparamos si+3 con 0 para saber la cant de caracteres | ||
JZ char3 ;Si es 0 entonces hay tres caracteres | ||
CALL convert ;Llamamos a la siguiente funcion | ||
convert: | ||
MOV AX,0 ;Inicializamos AX=0 | ||
MOV BL,[SI] ;Ponemos en BL lo que hay en la dir de memoria de SI | ||
CMP BL,'A' ;Comparamos BL con 'A' | ||
JAE letterAF ;Si es una letra salta a letterAF | ||
SUB BL,48 ;Si no, convierte el ascii a numero en hex | ||
MOV [result+si], BL ;Ponemos en [result+SI] lo que obtuvimos en BL | ||
JMP continue ;Saltamos a continue | ||
|
||
letterAF: ;Convertimos letra a numero | ||
SUB BL,55 ;Convertimos el ascii de la letra a numero hex | ||
MOV [result+SI],BL ;Ponemos en [result+SI] lo que obtuvimos en BL | ||
continue: ;Continuamos con la conversion | ||
OR AL,BL ;Limpiamos AL | ||
INC cont ;Incrementamos cont (nuestro contador) | ||
INC SI ;Incrementamos tambien SI | ||
CMP [SI],0 ;Comparamos SI con 0 | ||
JNZ convert ;Si es 0 quiere decir que ya no hay mas por convertir | ||
|
||
|
||
hex: ;Empezamos a convertir a decimal | ||
LEA SI,[cont] ;Ponemos en SI la direccion de memoria del contador | ||
CMP [SI],4 ;Comparamos lo que hay en SI con 4 | ||
JZ po4 ;SI=4 quiere decir que se introdujeron 4 caracteres | ||
CMP [SI],3 ;Comparamos lo que hay en SI con 3 | ||
JZ po3 ;SI=3 quiere decir que se introdujeron 3 caracteres | ||
CMP [SI],2 ;Comparamos lo que hay en SI con 2 | ||
JZ po2 ;SI=2 quiere decir que se introdujeron 2 caracteres | ||
CMP [SI],1 ;Comparamos lo que hay en SI con 1 | ||
JMP suma ;SI=1 quiere decir que ya terminamos y pasamos a suma | ||
|
||
;Para la conversion tenemos que: | ||
;16^3 = 4096 º 16^2=256 º 16^1=16 º 16^0=1 | ||
|
||
po4: ;Estamos en el 4to caracter (de der a izq) | ||
MOV CH, 10h ;Ponemos en CH 10h | ||
MOV CL,00h ;Ponemos en CL 00 , asi CX = 4096 | ||
LEA SI,[result] ;Ponemos en SI la dir de result | ||
MOV AL, result ;Ponemos en AL lo que hay en result | ||
MUL CX ;Multiplicamos: AX=AX*CX | ||
MOV [rpo4],AH ;Movemos a rpo4 lo que hay en AH | ||
MOV [rpo4+1],AL ;Movemos a rpo4+1 lo que hay en AL para no perder los 16 bits | ||
DEC cont ;Decrementamos contador | ||
JMP hex ;Saltamos a hex para ver si hay mas por convertir | ||
|
||
po3: ;Estamos en el 3er caracter (de der a izq) | ||
MOV CH,01h ;Ponemos en CH 01h | ||
MOV CL,00h ;Ponemos en CL 00 y asi CX = 256 | ||
LEA SI,[result+1] ;Ponemos en SI lo que hay en result+1 | ||
MOV AL, result+1 ;En al ponemos lo que hay en result+1 | ||
MUL CX ;Mutiplicamos AX=AX*CX | ||
MOV [rpo3],AH ;Ponemos en rpo3 lo que hay en AH | ||
MOV [rpo3+1],AL ;Ponemos en rpo3+1 lo que hay en AL para no perder bits | ||
DEC cont ;Decrementamos el contador | ||
JMP hex ;Saltamos a hex para ver si hay mas por convertir | ||
|
||
po2: ;Estamos en el 2do caracter (de der a izq) | ||
MOV CH,00h ;CH = 0 | ||
MOV CL,10h ;Ponemos en ch 10h y asi en cx = 16 | ||
LEA SI,[result+2] ;Ponemos en si lo que hay en result+2 | ||
MOV AL, result+2 ;Ponemos en al lo que hay en result+2 | ||
MUL CL ;Multiplicamos AX=AX*CX | ||
MOV [rpo2],AH ;Ponemos en rpo2 lo que hay en ah | ||
MOV [rpo2+1],AL ;Ponemos en rpo2+a lo que hay en al para no perder bits | ||
DEC cont ;Decrementamos el contador | ||
JMP hex ;Saltamos a hex para ver si hay mas por convertir | ||
|
||
suma: ;Funcion para imprimir | ||
LEA SI,[rpo4] ;Ponemos en SI la direccion de rpo4 | ||
MOV BH,[SI] ;Ponemos en BH lo que hay en SI | ||
MOV BL,[SI+1] ;Ponemos en BL lo que hay en SI+1 | ||
LEA SI,[rpo3] ;Ponemos en SI la direccion de rpo3 | ||
MOV AH,[SI] ;Ponemos en AH lo que hay en SI | ||
MOV AL,[SI+1] ;Ponemos en AL lo que hay en SI | ||
ADD AX,BX ;Sumamos AX = AX + BX | ||
LEA SI,[rpo2] ;Ponemos en SI la direccion de rpo2 | ||
MOV BH,[SI] ;Ponemos en BH lo que hay en si | ||
MOV BL,[SI+1] ;Ponemos en BL lo que hay en si+1 | ||
ADD AX,BX ;Sumamos AX = AX + BX | ||
MOV BH,00h ;Ponemos en BH 00h | ||
MOV BL,[result+3] ;Ponemos en BL lo que hay en result+3 | ||
ADD AX,BX ;Sumamos AX = AX + BX | ||
CALL print | ||
|
||
char1: ;Se introdujo un caracter, y lo moveremos al final | ||
MOV SI, 0 ;Ponemos en SI 0 | ||
MOV BL, [SI] ;Ponemos en BL el caracter que esta en SI | ||
MOV [SI],30h ;Limpiamos SI | ||
MOV [SI+1],30h ;Limpiamos SI+1 | ||
MOV [SI+2],30h ;Limpiamos SI+2 | ||
MOV [SI+3],BL ;Ponemos en SI+3 el caracter que esta en SI | ||
CALL convert ;Llamamos la siguiente funcion | ||
|
||
char2: ;Se introdujeron 2 caracteres, los moveremos al final | ||
MOV SI, 0 ;Ponemos en SI=0 | ||
MOV BL, [SI] ;Ponemos en BL el caracter que esta en SI | ||
MOV [SI+2],BL ;Ponemos en SI+2 lo que hay en BL | ||
MOV BL, [SI+1] ;Ponemos en BL el caracter que esta en SI | ||
MOV [SI+3],BL ;Ponemos en SI+3 lo que hay en BL | ||
MOV [SI],30h ;Limpiamos SI | ||
MOV [SI+1],30h ;Limpiamos SI+1 | ||
CALL convert ;Llamamos la siguiente funcion | ||
char3: ;Se introdujeron 3 caracteres, los movemos una posicion | ||
MOV SI, 0 ;Ponemos en SI=0 | ||
MOV BL, [SI] ;Ponemos en BL el caracter que esta en SI | ||
MOV [SI], 30h ;Limpiamos SI | ||
MOV AL, [SI+1] ;Ponemos en AL el caracter que esta en SI+1 | ||
MOV [SI+1], BL ;Ponemos en SI+1 lo que guardamos en BL | ||
MOV BL, [SI+2] ;Ponemos en BL el caracter que esta en SI+2 | ||
MOV [SI+2], AL ;Ponemos en SI+2 lo que guardamos en AL | ||
MOV [SI+3], BL ;Ponemos en SI+3 lo que guardamos en BL | ||
CALL convert ;Llamamos la siguiente funcion | ||
|
||
print: | ||
CALL PTHIS ;Llamamos la funcion PTHIS | ||
db 13,10, 'Numero convertido exitosamente!',0 ;La funcion imprime la cadena | ||
CALL PTHIS ;Llamamos la funcion PTHIS | ||
db 13,10, 'Decimal:',0;La funcion imprime la cadena | ||
CALL PRINT_NUM_UNS ;Llamamos la funcion PRINT_NUM_UNS | ||
;Imprime lo que tenemos en AX | ||
INT 20H ;Cerramos el programa con la INT 20 | ||
DEFINE_PTHIS | ||
DEFINE_GET_STRING | ||
DEFINE_PRINT_STRING | ||
DEFINE_PRINT_NUM_UNS | ||
cont db 0 | ||
|
||
result db 0,0,0,0 | ||
|
||
rpo4 db 0,0 | ||
rpo3 db 0,0 | ||
rpo2 db 0,0 | ||
END | ||
|
||
|
||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,178 @@ | ||
#include <iostream> | ||
#include <ctime> | ||
#include <ctype.h> | ||
#include <cstdio> | ||
#include <cstdlib> | ||
using namespace std; | ||
|
||
void iniciarcasillas(char gato[3][3]); | ||
void imprimirgato(char gato[3][3]); | ||
int validacasilla(int fila, int columna); | ||
int validaganador(char jugador); | ||
int validaempate(int contador, int ganador); | ||
|
||
void iniciarcasillas(char gato[3][3]) | ||
{ | ||
gato[0][0]= '-'; | ||
gato[1][0]= '-'; | ||
gato[2][0]= '-'; | ||
gato[0][1]= '-'; | ||
gato[1][1]= '-'; | ||
gato[2][1]= '-'; | ||
gato[0][2]= '-'; | ||
gato[1][2]= '-'; | ||
gato[2][2]= '-'; | ||
} | ||
|
||
void imprimirgato(char gato[3][3]) | ||
{ | ||
char lv=179, lh=196; | ||
int i=0, j=0; | ||
gato[3][3]=gato[j][i]; | ||
cout<<"\n\n"<<lh<<lh<<lh<<lh<<lh<<lh<<lh<<lh<<endl; | ||
for (j=0; j<3; j++) | ||
{ | ||
cout<<lv; | ||
for (i=0; i<3; i++) | ||
{ | ||
cout<<gato[j][i]<< " " ; | ||
} | ||
cout<<""<<lv<<endl; | ||
} | ||
cout<<lh<<lh<<lh<<lh<<lh<<lh<<lh<<lh<<"\n\n"<<endl; | ||
|
||
} | ||
|
||
int validacasilla (int fila, int columna, char gato[3][3]) | ||
{ | ||
int valido; | ||
system("cls"); | ||
if (gato[fila][columna]=='O' || gato[fila][columna]=='X') | ||
{ | ||
valido=0; | ||
cout <<"Casilla ocupada, intentalo de nuevo. :c" <<endl; | ||
} | ||
else | ||
{ | ||
valido=1; | ||
} | ||
if ((fila>3 || fila<0) || (columna>3 || columna<0)) | ||
{ | ||
cout<<"Casilla fuera de rango >:c "<<endl; | ||
valido=0; | ||
} | ||
return valido; | ||
} | ||
int validaganador (char jugador, char gato[3][3]) | ||
{ | ||
|
||
int ganador=0; | ||
if ( | ||
//Casos horizontales | ||
(gato[0][0]==jugador && gato[0][1]==jugador && gato[0][2]==jugador) || | ||
(gato[1][0]==jugador && gato[1][1]==jugador && gato[1][2]==jugador) || | ||
(gato[2][0]==jugador && gato[2][1]==jugador && gato[2][2]==jugador) || | ||
//casos verticales | ||
(gato[0][0]==jugador && gato[1][0]==jugador && gato[2][0]==jugador) || | ||
(gato[0][1]==jugador && gato[1][1]==jugador && gato[2][1]==jugador) || | ||
(gato[0][2]==jugador && gato[1][2]==jugador && gato[2][2]==jugador) || | ||
//casos diagonales | ||
(gato[0][0]==jugador && gato[1][1]==jugador && gato[2][2]==jugador) || | ||
(gato[0][2]==jugador && gato[1][1]==jugador && gato[2][0]==jugador)) | ||
{ | ||
ganador=1; | ||
system("cls"); | ||
cout <<"El ganador es... " <<jugador<<endl; | ||
} | ||
return ganador; | ||
} | ||
int validaempate (int contador, int ganador) | ||
{ | ||
if (contador==9 && ganador==0) | ||
{ | ||
cout<<"Juego empatado... o-o"<<endl; | ||
return 1; | ||
} | ||
return 0; | ||
} | ||
|
||
int main () | ||
{ | ||
char jugador1, jugador2; | ||
int ganador=0, empate=0; | ||
char caracteres[2]= {'O', 'X'}; | ||
char gato[3][3]; | ||
int inicia; | ||
int contador=0; | ||
//Esta funcion es para elige quien inicia, si X o O ^^ | ||
iniciarcasillas(gato); | ||
|
||
srand(time(NULL)); | ||
inicia=rand()%2; | ||
if (inicia==0) | ||
{ | ||
jugador1=caracteres[0]; | ||
jugador2=caracteres[1]; | ||
} | ||
else if (inicia==1) | ||
{ | ||
jugador1=caracteres[1]; | ||
jugador2=caracteres[0]; | ||
} | ||
cout <<"G A T O: Como ingresar jugadas *u*"<<endl; | ||
cout <<"Para ingresar una jugada, selecciona una fila y una columna"<<endl; | ||
cout <<"Ejemplo: fila 0, columna 2. ^^)/"<<endl; | ||
cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<endl; | ||
cout <<"Empieza el jugador: " <<jugador1<< " :)"<<endl; | ||
cout <<"... ¡¡¡¡¡¡ H O R A D E J U G A R !!!!! (-w-)9 "<<endl; | ||
cout<<" " <<endl; | ||
while (ganador==0 && empate==0) | ||
{ | ||
int fila, columna; | ||
int valido=0; | ||
while (valido==0) | ||
{ | ||
imprimirgato(gato); | ||
cout <<"Turno del jugador: " <<jugador1<<endl; | ||
cout <<"Dame la fila; usa 0, 1, o 2 ^^"<<endl; | ||
cin>>fila; | ||
cout <<"Dame columna; usa 0, 1, o 2 ^^"<<endl; | ||
cin>>columna; | ||
valido=validacasilla(fila, columna, gato); | ||
|
||
} | ||
gato[fila][columna]=jugador1; | ||
ganador=validaganador(jugador1, gato); | ||
valido=0; | ||
contador++; | ||
empate=validaempate(contador, ganador); | ||
while (valido==0) | ||
{ | ||
if (ganador==0 && empate==0) | ||
{ | ||
imprimirgato(gato); | ||
cout <<"Turno del jugador: " <<jugador2<<endl; | ||
cout <<"Dame la fila; usa 0, 1, o 2 ^^"<<endl; | ||
cin>>fila; | ||
cout <<"Dame columna; usa 0, 1, o 2 ^^"<<endl; | ||
cin>>columna; | ||
valido=validacasilla (fila, columna, gato); | ||
|
||
} | ||
else | ||
{ | ||
valido=1; | ||
} | ||
} | ||
if (ganador==0 && empate==0) | ||
{ | ||
gato[fila][columna]=jugador2; | ||
ganador=validaganador(jugador2, gato); | ||
contador++; | ||
empate=validaempate(contador, ganador); | ||
} | ||
} | ||
imprimirgato(gato); | ||
cin.get(); | ||
return 0; | ||
} |