GIOCO assembler indovina numero come faccio x RANDOM???

di il
1 risposte

GIOCO assembler indovina numero come faccio x RANDOM???

RAGAZZI COME FACCIO A FAR SI CHE IL carattere DA INDOVINARE NON LO DEVO IMPOSTARE IO MA VENGA DATO CASUALMENTE???? rispondete ci deve essere un modo possibile che non lo sa nessuno ???!!!!
title gioco
; programma con utilizzo di vari cicli, salti e if

.model small
.stack 100h
.data
benv db ":-)...Benvenuto nel programma Indovina...",13,10,"$"
benv0 db "-------------------------------------------",13,10,"$"
benv1 db " Prova a indovinare!",13,10,"$"
benv2 db" Scegli il tuo livello di difficolt…!!",13,10,"$"
benv3 db" Premi 1. per Facile",13,10,"$"
benv4 db" Premi 2. per Medio",13,10,"$"
benv5 db" Premi 3. per Difficile",13,10,"$"
benv6 db" ESC per uscire dall'applicazione",13,10,"$"
scegli db" Cosa scegli:","$"
vite db " OK HAI TENTATIVI A DISPOSIZIONE:","$"
mess1 db "Prova.. Inserisci un carattere da tastiera!:",13,10,"$"
mess2 db ":-)...Hai Vinto...sei riuscito ad indovinare il carattere!!!:","$"
mess3 db ":-( tentativo fallito...!",13,10,"$"
mess4 db " GAME OVER try again!",13,10,"$"
mess5 db " Vuoi iniziare una nuova partita? s/n:","$"
mess6 db "Scelta nn valida!...",13,10,"$"
mess7 db "Il carattere da indovinare Š minore!...",13,10,"$"
mess8 db "Il carattere da indovinare Š maggiore!...",13,10,"$"
capo db " ",13,10,"$"
var1 db(54) ;RAGAZZI COME FACCIO A FAR SI CHE IL carattere DA INDOVINARE NON LO DEVO IMPOSTARE IO MA VENGA DATO CASUALMENTE
var2 db(?)
tent db(?)
i db(0)
k db(0)
s db(115)
scelta db(?)
.code
mov ax,@data
mov ds,ax
mov dx, offset benv
mov ah,09h
int 21h
mov dx, offset benv0
mov ah,09h
int 21h
jmp x
inizio1:
mov dx,offset capo
mov ah,09h
int 21h
x:
mov dx, offset benv1
mov ah,09h
int 21h
mov dx, offset benv2
mov ah,09h
int 21h
mov dx, offset benv3
mov ah,09h
int 21h
mov dx, offset benv4
mov ah,09h
int 21h
mov dx, offset benv5
mov ah,09h
int 21h
mov dx, offset benv6
mov ah,09h
int 21h

vaiascelta:
mov dx, offset scegli
mov ah,09h
int 21h

mov ah,01h
int 21h

mov scelta,al
cmp scelta,49
je facile
cmp scelta,50
je medio
cmp scelta,51
je difficile
cmp scelta,27
je exit

mov dx,offset capo
mov ah,09h
int 21h
mov dx,offset mess6
mov ah,09h
int 21h
mov dx,offset capo
mov ah,09h
int 21h
jmp vaiascelta
exit:jmp chiudi
facile: mov tent,5
jmp a
medio: mov tent,3
jmp b
difficile:mov tent,1
jmp c
a:
b:
c:
mov dx,offset vite
mov ah,09h
int 21h

mov al,tent
add al,48

mov dl,al
mov ah,02h
int 21h

ricontrolla:
mov dx,offset capo
mov ah,09h
int 21h
mov cl,tent
cmp i,cl
jae perdi
jmp qui
perdi:jmp perdi1
qui:
;visualizzazione messaggio inserimento primo carattere
mov dx, offset mess1
mov ah,09h
int 21h
;acqusizione primo carattere da tastiera
mov ah,01h
int 21h
mov var2,al; carica il carattere in memoria
;visualizzazione a capo
mov dx,offset capo
mov ah,09h
int 21h
mov bl,var1

cmp var2,bl ;ciclo
je vinci
;visualizzazione messaggio output caratteri nn uguali
mov dx,offset mess3
mov ah,09h
int 21h
cmp var2,bl
ja stampamax

mov dx,offset mess8
mov ah,09h
int 21h
jmp www
stampamax:jmp stampamax1
stampamax1:
mov dx,offset mess7
mov ah,09h
int 21h
www:
add i,1
jmp ricontrolla
vinci:
mov k,0
testaciclo:
cmp k,10
jae fineciclo
jmp xxx
fineciclo: jmp domanda
xxx:
mov dx,offset capo
mov ah,09h
int 21h

mov dx,offset mess2
mov ah,09h
int 21h
;visualizza carattere
mov dl,var1
mov ah,02h
int 21h
mov dl,7h
mov ah,02h
int 21h
add k,1
jmp testaciclo

domanda:
mov dx,offset capo
mov ah,09h
int 21h

mov dx,offset mess5
mov ah,09h
int 21h
mov ah,01h
int 21h


cmp al,s
je inizio
cmp al,110
jne altrimenti
jmp escape
altrimenti: jmp altrimenti1
altrimenti1:

mov dx,offset capo
mov ah,09h
int 21h

mov dx,offset mess6
mov ah,09h
int 21h
jmp domanda
escape: jmp chiudi
inizio:
mov i,0
jmp inizio1
perdi1:
mov dx,offset mess4
mov ah,09h
int 21h
mov dx,offset mess5
mov ah,09h
int 21h
mov dx,offset capo
mov ah,09h
int 21h

mov ah,01h
int 21h
cmp al,s
je vai
cmp al,110
je escii

mov dx,offset capo
mov ah,09h
int 21h

mov dx,offset mess6
mov ah,09h
int 21h
jmp domanda
escii:
jmp chiudi
vai:
mov i,0
jmp inizio1
chiudi:
mov ah,04ch
int 21h
end

1 Risposte

  • Re: GIOCO assembler indovina numero come faccio x RANDOM???

    Siccome sono corretto questa routine e tratta dal sito www.giobbe2000.i

    chiama questa routine
    mov ax,numero massimo da generare
    call random

    PUBLIC Random
    _prog SEGMENT BYTE PUBLIC 'CODE'
    ASSUME CS:_prog
    ;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
    PrimoIN DB 00H ; Flag di prima esecuzione (= 0 si; <> 0 no)
    Rnd_Lo DW ? ; valore corrente a 32 bit del numero random
    Rnd_Hi DW ?
    Costante DW 8405H ; Valore del Moltiplicatore
    ;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
    Random proc NEAR
    OR AX,AX ;¿Se il valore del range passato come parametro
    JNZ Rand_1 ;³Š nullo si impone la fine immediata della
    RET ;Ùprocedura (valore non corretto!!)

    Rand_1: PUSH BX ;¿
    PUSH CX ;³Salva i registri utilizzati dalla procedura
    PUSH DX ;³
    PUSH DI ;³
    PUSH DS ;Ù
    PUSH AX ;¿Salva il valore del range, passato in ingresso
    ;Ùcome parametro (verr… utilizzato alla fine..)
    LEA DI,PrimoIN ;¿Verifica se si tratta della prima chiamata
    CMP Byte Ptr CS:[DI],00H;³della procedura che genera il ritardo..
    JNE Rand_2 ;Ù.. e se NON Š cos calcola il nuovo valore

    ;¿ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
    ;³³In pratica questo pezzo di programma ³
    ;³³implementa la procedura RANDOMIZE di TPascal³
    ;³ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
    MOV AH,2CH ;³Se si tratta della prima chiamata la procedura
    INT 21H ;³provvede ad assumere un valore casuale dalla
    MOV CS:[Rnd_Lo],CX;³memoria CMOS che contiene il tempo corrente..
    MOV CS:[Rnd_Hi],DX;³Per ci• utilizza la Funzione DOS 2CH che lascia
    ;³in CH = Ore (0ö23)
    ;³in CL = Minuti (0ö59)
    ;³in DH = Secondi (0ö59)
    ;Ùin DL = Centesimi di secondi (0ö99)

    MOV Byte Ptr CS:[DI],01H;¿Modifica la flag di primo ingresso per evitare
    ;Ùdi ricaricare le variabili random iniziali

    ; ***** Indicazioni relative al primo giro *****
    Rand_2: MOV AX,CS:[Rnd_Lo]; AH=Ore (0ö23), AL=Minuti (0ö59)
    MOV BX,CS:[Rnd_Hi]; BH=Secondi (0ö59), BL=Centesimi (0ö99)
    MOV CX,AX ; CH=Ore (0ö23), CL=Minuti (0ö59)

    MUL CS:[Costante] ; AX*Costante=AX*8405H= DX,AX (numero a 32 bit)

    SHL CX,1 ;¿
    SHL CX,1 ;³
    SHL CX,1 ;³
    ADD CH,CL ;³
    ADD DX,CX ;³
    ADD DX,BX ;³
    SHL BX,1 ;³Algoritmo di scambio
    SHL BX,1 ;³
    ADD DX,BX ;³
    ADD DH,BL ;³
    MOV CL,5 ;³
    SHL BX,CL ;³
    ADD AX,1 ;³
    ADC DX,0 ;Ù

    MOV CS:[Rnd_Lo],AX;¿Salva il risultato a 32 bit della manipolazione
    MOV CS:[Rnd_Hi],DX;Ùnelle variabili a ci• destinate

    POP BX ;¿Recupera in BX il valore del range, passato in
    ;Ùingresso, in AX
    XOR AX,AX ;¿Prepara il dividendo a 32 bit forzando a zero
    XCHG AX,DX ;³i 16 bit pi— significativi e copiando nei 16
    ;Ùbit bassi il valore corrente di DX
    DIV BX ;¿AX = quoziente (DX,AX / BX)
    ;ÙDX = resto
    XCHG AX,DX ;¿il numero random corrente Š il valore del resto
    ;Ùed Š lasciato, in uscita, in AX
    POP DS ;¿
    POP DI ;³Recupera i registri utilizzati dalla procedura
    POP DX ;³
    POP CX ;³
    POP BX ;Ù
    RET
    Random ENDP
    _prog ENDS
    END
    se ti serve altro aiuto vai su www.giobbe2000.i
    e il miglio sito di assembler che abbiano mai fatto.
    spero di esserti stato d'aiuto
    saluti smalldragon
Devi accedere o registrarti per scrivere nel forum
1 risposte