Vous êtes sur la page 1sur 8

DATA SEGMENT

;---- initialising necessary messages ----


INSTRUCTIONS DB 'HOLLYWOOD'
DB 'HOW TO PLAY: '
DB 0AH, 0DH, 0AH, 0DH, 'ITS A TWO PLAYER GAME. '
DB 0AH, 0DH,0AH,0DH, 'FIRST PLAYER 1 ENTERS MOVIE NAME ABOUT WHICH
PLAYER 2 SHOULD BE UNKNOWN. '
DB 0AH, 0DH, '(OF COURSE ONLY UNTILL PLAYER 2 PEEKS!!!) '
DB 0AH, 0DH, 0AH,0DH, 'NOW AS PLAYER 1 HAS ENTERED THE MOVIE, PLAYER 2
TRIES TO GUESS THE MOVIE NAME BY GUESSING IT CHARACTER BY CHARACTER. '
DB 0AH, 0DH,0AH,0DH, 'IF CHARACTER IS THERE IN THE MOVIE NAME ITS
DISPLAYED, ELSE CHANCE IS DEDUCTED FROM WORD BOLLYWOOD. '
DB 0AH, 0DH, 0AH,0DH,'THUS, PLAYER 2 CAN STAND ONLY UNTILL HOLLYWOOD I
S STANDING!!! IT SOUNDS COOL, RIGHT? LETS PLAY THEN...$'

PLAYER1 DB 'PLAYER1 $'


PLAYER2 DB 'PLAYER2 $'

INPUTMSG DB 'ENTER MOVIE NAME- $'


REMAININGTRIESMSG DB 0AH, 0DH, 'YOUR REMAINING TRIES : $'
WINMSG DB 'WINS THE GAME!!!$'
GUESSMSG DB 'GUESS YOUR CHARACTER: $'
STATUSMSG DB 'YOUR MOVIE STATUS : $'
WRONGGUESSESMSG DB 0AH, 0DH, 'YOUR WRONG GUESSES ARE: $'
CONTINUEMSG DB 'DO YOU LIKE TO CONINUE? (Y/N): $'
INVALIDCHOICEMS DB 'YOU ENTERED INVALID CHOICE!!!$'
CONGRATULATIONS DB ' CONGRATULATIONS... $'
CORRECTMOVIEMSG DB 'THE CORRECT MOVIE WAS: $'
BOLLY DB ' HOLLYWOOD$'
;-------------------------------------------

;---- initialising necessary variables -----

BOLLYTRIES DW 0
MOVIENAME db 100,?, 100 dup(' ')
MOVIENAMELEN DB ?
HIDINGCHAR DB 06H
SEPARATOR DB 20H
TEMP db 100,?, 100 dup(' ')
WRONGGUESSES DB 09 DUP(0)
TERMINATOR DB 24H
NEWLINE DB 0AH,0DH, '$'
NEWLINECOUNT DW 2
HIDECHARFLAG DB 0
PLAYER2FLAG DB 0
PLAYER1FLAG DB 0
COMPARECOUNTER DB ?
VALIDGUESSCOUNTER DB 0
GUESSCOUNTER DB 36
CHARCOUNTER DB 0
INVALIDGUESSCOUNTER DB 0
r ;-------------------------------------------
DATA ENDS

CODE SEGMENT
ASSUME CS:CODE, DS:DATA, ES:DATA
START:
MOV AX,DATA ;initialising data segment
MOV DS,AX ;and extra segment
MOV ES,AX ;registers

;***** instructions and palyer 1 enter the movie name********


CALL NEWLINEPROC
MOV AL, 3
MOV AH, 0
INT 10H
MOV DX, OFFSET INSTRUCTIONS
MOV AH, 09H
INT 21H
CALL NEWLINEPROC
CALL NEWLINEPROC
MOV DX,OFFSET PLAYER1
MOV AH,09H
INT 21H
MOV DX,OFFSET INPUTMSG
MOV AH,09H
INT 21H
MOV DX,OFFSET MOVIENAME
MOV AH,0AH
INT 21H
;************************************************************

;*********calculate length of movie name*********************


XOR BX, BX
LEA SI, MOVIENAME
INC SI
MOV BL, [SI]
MOV MOVIENAMELEN, BL
;************************************************************

;*******************clear screen*****************************
MOV AL, 3
MOV AH, 0
INT 10H
;************************************************************

;************ make temp as array of symbols******************


MOV CL, MOVIENAMELEN
MOV CH, CL
LEA SI, MOVIENAME+2
MOV BX, 0
NEXTCHAR:
MOV AL, [SI]
CMP AL, 20H
JNE HIDECHAR
DEC CH
MOV DL, SEPARATOR
MOV TEMP[BX], DL
CMP HIDECHARFLAG, 0
JE SKIPHIDECHAR
HIDECHAR:
MOV DL, HIDINGCHAR
MOV TEMP[BX], DL
SKIPHIDECHAR:
INC SI
DEC CL
INC BX
CMP CL, 00H
JNE NEXTCHAR
MOV TEMP[BX], '$'
MOV CHARCOUNTER, CH
;************************************************************
;*******display mvoie name in symbols(temp) for player 2*****
CALL NEWLINEPROC
MOV DX, OFFSET TEMP
MOV AH, 09H
INT 21H
;************************************************************

;************* player2 enters guesses ************************


MOV BX, 0
GUESSLOOP:
MOV CL, VALIDGUESSCOUNTER
CMP CL, CHARCOUNTER
JE PLAYER2WINS_01
MOV AH, MOVIENAMELEN
MOV COMPARECOUNTER, AH
MOV INVALIDGUESSCOUNTER, 0
CALL NEWLINEPROC
MOV DX, OFFSET PLAYER2
MOV AH, 09H
INT 21H
MOV DX, OFFSET GUESSMSG
MOV AH, 09H
INT 21H
MOV AH, 01H
INT 21H
LEA SI, MOVIENAME+2
LEA DI, TEMP
COMPARELOOP:
CMP CL, CH
JE PLAYER2WINS_01
MOV DH, [SI]
CMP DH, 20H
JNE COMPARECHAR
INC SI
INC DI
DEC COMPARECOUNTER
COMPARECHAR:
CMP AL, [SI]
JE VALIDGUESS
INC SI
INC DI
INC INVALIDGUESSCOUNTER
DEC COMPARECOUNTER
CMP COMPARECOUNTER, 0
JNE COMPARELOOP
JMP SKIPVALIDGUESS
PLAYER2WINS_01:
JMP PLAYER2WINS
GUESSLOOP_01:
JMP GUESSLOOP

VALIDGUESS:
MOV [DI], AL
INC SI
INC DI
INC VALIDGUESSCOUNTER
DEC COMPARECOUNTER
CMP COMPARECOUNTER, 0
JNE COMPARELOOP
SKIPVALIDGUESS:
CMP INVALIDGUESSCOUNTER, CH
JE BOLLYTRIESMSG
JMP SKIPBOLLYTRIESMSG
BOLLYTRIESMSG:
INC BOLLYTRIES
MOV WRONGGUESSES[BX], AL
INC BX
CMP BOLLYTRIES, 9
JE PLAYER1WINS
SKIPBOLLYTRIESMSG:
CALL GAMESTATUSPROC

DEC GUESSCOUNTER
CMP GUESSCOUNTER, 0
JNE GUESSLOOP_01
;************************************************************

;*********** message: player2 wins **************************


CMP PLAYER2FLAG, 1
JE ENDGAME_01
PLAYER2WINS:
CALL NEWLINEPROC
CALL NEWLINEPROC
MOV PLAYER2FLAG, 1
MOV DX,OFFSET PLAYER2
MOV AH, 09H
INT 21H
MOV DX, OFFSET WINMSG
INT 21H
MOV DX, OFFSET CONGRATULATIONS
INT 21H
JMP ENDGAME
;************************************************************

;*********** message: player1 wins **************************


CMP PLAYER1FLAG, 1
JE ENDGAME_01
PLAYER1WINS:
CALL GAMESTATUSPROC
CALL NEWLINEPROC
CALL NEWLINEPROC
MOV DX, OFFSET CORRECTMOVIEMSG
MOV AH, 09H
INT 21H
LEA SI, MOVIENAME+2
MOV CL, MOVIENAMELEN
NEXTMOVIELETTER:
MOV DL, [SI]
MOV AH, 02H
INT 21H
INC SI
DEC CL
CMP CL, 0
JNE NEXTMOVIELETTER
CALL NEWLINEPROC
MOV PLAYER1FLAG, 1
MOV DX,OFFSET PLAYER1
MOV AH, 09H
INT 21H
MOV DX, OFFSET WINMSG
INT 21H
MOV DX, OFFSET CONGRATULATIONS
INT 21H
;************************************************************

;*************procedure for newline**************************


ENDGAME_01:
JMP ENDGAME
NEWLINEPROC PROC NEAR
PUSHF
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV CX, NEWLINECOUNT
NEXTLINE1:
MOV DX, OFFSET NEWLINE
MOV AH, 09H
INT 21H
LOOP NEXTLINE1
POP DX
POP CX
POP BX
POP AX
POPF
RET
NEWLINEPROC ENDP
;************************************************************

;********** procedure to display game status *****************


JMP ENDGAME

GAMESTATUSPROC PROC NEAR


PUSHF
PUSH AX
PUSH BX
PUSH CX
PUSH DX
CALL NEWLINEPROC
MOV DX, OFFSET STATUSMSG
MOV AH, 09H
INT 21H
MOV DX, OFFSET TEMP
MOV AH, 09H
INT 21H
MOV DX, OFFSET WRONGGUESSESMSG
MOV AH, 09H
INT 21H
MOV DX, OFFSET WRONGGUESSES
MOV AH, 09H
INT 21H

MOV DX, OFFSET REMAININGTRIESMSG


MOV AH, 09H
INT 21H
MOV BX, BOLLYTRIES
MOV AH, 23H
MOV BOLLY[BX], AH
MOV DX, OFFSET BOLLY
MOV AH, 09H
INT 21H
POP DX
POP CX
POP BX
POP AX
POPF
RET
GAMESTATUSPROC ENDP

;************************************************************

;***************program termination***************************
ENDGAME:
CALL NEWLINEPROC
MOV AH, 4CH
INT 21H
;************************************************************

INT 03H
CODE ENDS
END START

Vous aimerez peut-être aussi