Vistas de página en total

domingo, 14 de julio de 2013

MASTERMIND


    Hoy vamos a realizar un programa de cierta complejidad. Vamos a crear el juego MasterMind.

   No complicaremos mucho las pantalla, pues todavía no he subido las funciones avanzadas de ventanas y menús. Por lo tanto, lo realizaremos al estilo de un Basic.
   Aquí os dejo la ventana que resultará del programa.



   

  Como veis  colocamos el título, debajo la pregunta, y debajo el contador de intentos.
       Pedimos el número y en la parte inferior indicamos el mensaje de si acertamos, el número es alto o el número es bajo.
    Hacer este programa directamente en ensamblador sin apoyo de las rutinas expuestas anteriormente todavía es posible, aunque el código ya resulta tan grande que perdemos la visión global del programa en las pormenorizaciones.
    En cambio si hemos estructurado bien el código podremos concentrarnos en resolver el algoritmo del programa sin preocuparnos del código de presentación.
    Como se trata de un ejemplo, el número generado lo enmascaramos con 0ffH para que no sea demasiado grande.
     El fichero resultante es un .EXE de 6370 Bytes.
     El código es en realidad  100 bytes de pila, 236 de datos,  321 bytes de código principal y 740 bytes de librerías.


   
MATERMIND.ASM
; Copyright (C) 2013  José Ángel Moneo Fernández

;    This program is free software: you can redistribute it and/or modify
;    it under the terms of the GNU General Public License as published by
;    the Free Software Foundation, either version 3 of the License, or
;   (at your option) any later version.

;    This program is distributed in the hope that it will be useful,
;    but WITHOUT ANY WARRANTY; without even the implied warranty of
;    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;    GNU General Public License for more details.

;    You should have received a copy of the GNU General Public License
;    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
title MASTERMIND
include main.mac
include stdio.mac
include string.mac
include time.mac
_modelo exe

_stack 100

_data
a_buscar dw 0
numero dw 0,0
contador dw 0,0

titulo db "MASTERMIND",0
pregunta db "Cual es el numero que estoy pensando?",0
acierto db "!Enhorabuena! Acertaste",0
alto db "Lo siento. Numero alto. Intentalo de nuevo",0
bajo db "Lo siento. Numero bajo. Intentalo de nuevo",0
m_intentos db "Llevas       intentos",0
NW_intento db "Quieres intentarlo de nuevo? S/N",0
limpia db "           ",0

_code
mastermind proc far
        main   ; inicia
nw:
        random    ;gernera un número aleatorio
        and ax,0ffh         ;tomamos valores de 0 a 256
        mov a_buscar, ax
        clrscr
        mov contador,0
        ;Preparamos la pantalla
        gotoxy 10,6
        puts titulo
        gotoxy 10,7
        puts pregunta
_otro:
        gotoxy 10,8
        puts m_intentos
        gotoxy 17,8
        printf contador
        gotoxy 10,10
        puts limpia
        gotoxy 10,10
        scanf numero    ;pedimos el numero
        mov ax, a_buscar
        cmp numero,ax ;lo comprobamos
        jb _bajo
        ja _alto
        gotoxy 10,20         ;ha acertado
        puts acierto
        gotoxy 10,21
        puts nw_intento
        getch al             ;espera pulsación antes de salir
        upr                   ;convierte al en mayusculas
        cmp al,'S'
        jne  salir
        jmp nw
salir: exit 0
_bajo:
        inc contador
        gotoxy 10,20       ;ha fallado. muesta mensaje
        puts bajo
        jmp _otro
_alto:
        inc contador
        gotoxy 10,20       ;ha fallado. muesta mensaje
        puts alto
        jmp _otro
mastermind endp
_end

No hay comentarios:

Publicar un comentario

Si tienes algún comentario, duda o sugerencia, o si quieres aportar algún código creado a partir de las librerías expuestas aquí, por favor, indícamelo.