Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;PROGRAM: Roesselsprung
- ;AUTHOR: s0531133
- ;DATE: 11.01.2012
- ;FILE: ROESSEL4.ASM
- ;COMMENT: Dieses Programm ist ein kleines "Schachspiel".
- ;Auf den Spielfeld befinden sich 4 Spielfiguren - 2 Zahlen und 2 Buchstaben.
- ;Alle koennen springen wie ein Pferd im Schach.
- ;Ziel ist es, mit moeglichst wenig Zuegen die Zahlen und Buchstaben zu vertauschen.
- .model small
- .stack 100h ;fuer PROC CALLS
- JUMPS
- .data
- rows STRUC
- row1 DB 201,205,205,205,203,205,205,205,203,205,205,205,187,32,32,32,201,205,205,205,203,205,205,205,203,205,205,205,187,13,10,"$"
- row2 DB 186,32,32,32,186,32,32,32,186,32,32,32,186,32,32,32,186,32,49,32,186,32,50,32,186,32,51,32,186,13,10,"$"
- row3 DB 204,205,205,205,206,205,205,205,206,205,205,205,185,32,32,32,204,205,205,205,206,205,205,205,206,205,205,205,185,13,10,"$"
- row4 DB 186,32,32,32,186,32,32,32,186,32,32,32,186,32,32,32,186,32,52,32,186,32,53,32,186,32,54,32,186,13,10,"$"
- row5 DB 204,205,205,205,206,205,205,205,206,205,205,205,185,32,32,32,204,205,205,205,206,205,205,205,206,205,205,205,185,13,10,"$"
- row6 DB 186,32,32,32,186,32,32,32,186,32,32,32,186,32,32,32,186,32,55,32,186,32,56,32,186,32,57,32,186,13,10,"$"
- row7 DB 200,205,205,205,202,205,205,205,202,205,205,205,188,32,32,32,200,205,205,205,202,205,205,205,202,205,205,205,188,13,10,"$"
- rows ENDS
- field rows <>
- strings STRUC
- error DB "Falsche Eingabe!",13,10,"$"
- horseerror DB "Zug nicht zulaessig!",13,10,"$"
- figureerror DB "Feld von Figur x besetzt!",13,10,"$"
- fieldtitle DB 13,10,"Spielfeld:",32,32,32,32,32,32,"Positionen:",13,10,13,10,"$"
- menutext DB 13,10,13,10,"(1) Spielen",13,10,"(2) Highscore",13,10,"(3) Ende",13,10,"$"
- figuremove DB 13,10,"Figur auswaehlen (1,2,a oder b) oder Menue aufrufen (m)",13,10,"$"
- horsedestination DB "Moegliche Ziele: x und y",13,10,"$"
- movecount DB 13,10,"Anzahl Zuege: xx",13,10,"$"
- win DB "Gewonnen in xx Zuegen!",13,10,13,10,"$"
- highscorechart DB "1. (--,--)",13,10,"2. (--,--)",13,10,"3. (--,--)",13,10,"4. (--,--)",13,10,"5. (--,--)",13,10,13,10,"Bitte druecken Sie eine beliebige Taste um zum Menue zurueckzukehren.$"
- highscoretitle DB "Highscore-Tabelle (Initialen, Zuege):",13,10,13,10,"$"
- highscoreinput DB "Bitte geben Sie ihre Initialen ein:",13,10,"$"
- strings ENDS
- speech strings <>
- variables STRUC
- moves DW 0
- input DB 0
- curfield DB 0
- movewish DB 0
- horsemove DB 0
- finalmove DB 0
- fig1 DB 0
- fig2 DB 0
- figa DB 0
- figb DB 0
- position DB 0
- figure DB 0
- highscorecounter DB 1
- highscoreptr DW 4
- variables ENDS
- var variables <>
- .code
- Start:
- mov ax,@data ;DS initialisieren
- mov ds,ax
- menu PROC NEAR
- menuStart:
- mov ah,09h
- mov dx,OFFSET speech.menutext
- int 21h
- mov ah,08h
- int 21h
- mov var.input,al
- menuStage1:
- cmp var.input,49 ;ASCII 1
- jnz menuStage2
- call resetGame
- call resetField
- call move
- jmp menuStart
- Menustage2:
- cmp var.input,50 ;ASCII 2
- jnz MenuStage3
- call showhighscore
- jmp MenuStart
- menuStage3:
- cmp var.input,51 ;ASCII 3
- jnz menuError
- mov ah,4Ch
- int 21h
- menuError:
- mov ah,09h
- mov dx,OFFSET speech.error
- int 21h
- jmp menuStart
- ENDP
- paintField PROC NEAR
- call clearField
- mov ah,49 ;ASCII 1
- mov al,var.fig1
- call placeFigures
- mov ah,50 ;ASCII 2
- mov al,var.fig2
- call placeFigures
- mov ah,97 ;ASCII a
- mov al,var.figa
- call placeFigures
- mov ah,98 ;ASCII b
- mov al,var.figb
- call placeFigures
- call calcMoves
- mov ah,09h
- mov dx,OFFSET speech.fieldtitle
- int 21h
- mov dx,OFFSET field.row1
- int 21h
- mov dx,OFFSET field.row2
- int 21h
- mov dx,OFFSET field.row3
- int 21h
- mov dx,OFFSET field.row4
- int 21h
- mov dx,OFFSET field.row5
- int 21h
- mov dx,OFFSET field.row6
- int 21h
- mov dx,OFFSET field.row7
- int 21h
- mov dx,OFFSET speech.movecount
- int 21h
- ret
- placeFigures PROC NEAR
- placeStage1:
- cmp al,1
- jnz placeStage2
- mov field.row2[2],ah
- ret
- placeStage2:
- cmp al,2
- jnz placeStage3
- mov field.row2[6],ah
- ret
- placeStage3:
- cmp al,3
- jnz placeStage4
- mov field.row2[10],ah
- ret
- placeStage4:
- cmp al,4
- jnz placeStage6
- mov field.row4[2],ah
- ret
- placeStage6:
- cmp al,6
- jnz placeStage7
- mov field.row4[10],ah
- ret
- placeStage7:
- cmp al,7
- jnz placeStage8
- mov field.row6[2],ah
- ret
- placeStage8:
- cmp al,8
- jnz placeStage9
- mov field.row6[6],ah
- ret
- placeStage9:
- mov field.row6[10],ah
- ret
- placeFigures ENDP
- clearField PROC NEAR
- mov field.row2[2],32
- mov field.row2[6],32
- mov field.row2[10],32
- mov field.row4[2],32
- mov field.row4[6],32
- mov field.row4[10],32
- mov field.row6[2],32
- mov field.row6[6],32
- mov field.row6[10],32
- ret
- clearField ENDP
- calcMoves PROC NEAR
- mov ax,var.moves
- mov bl,10
- div bl
- add ax,3030h
- mov speech.movecount[17],ah
- mov speech.movecount[16],al
- ret
- calcMoves ENDP
- paintField ENDP
- resetField PROC NEAR
- mov field.row2[2],49
- mov field.row2[6],32
- mov field.row2[10],97
- mov field.row4[2],32
- mov field.row4[6],32
- mov field.row4[10],32
- mov field.row6[2],50
- mov field.row6[6],32
- mov field.row6[10],98
- ret
- resetField ENDP
- resetGame PROC NEAR
- mov var.fig1,1
- mov var.fig2,7
- mov var.figa,3
- mov var.figb,9
- mov var.moves,0
- ret
- resetGame ENDP
- move PROC NEAR
- moveStart:
- call paintField ;gebe das Spielfeld aus
- mov ah,09h
- mov dx,OFFSET speech.figuremove
- int 21h
- mov ah,08h
- int 21h
- mov var.input,al
- moveStage1:
- cmp var.input,49 ;ASCII 1
- jnz moveStage2
- mov al,var.fig1
- mov var.curfield,al
- call horsecheck
- call figurecheck
- mov al,var.finalmove
- mov var.fig1,al
- call wincheck
- jmp moveStart
- moveStage2:
- cmp var.input,50 ;ASCII 2
- jnz moveStagea
- mov al,var.fig2
- mov var.curfield,al
- call horsecheck
- call figurecheck
- mov al,var.finalmove
- mov var.fig2,al
- call wincheck
- jmp moveStart
- moveStagea:
- cmp var.input,97 ;ASCII a
- jnz moveStageb
- mov al,var.figa
- mov var.curfield,al
- call horsecheck
- call figurecheck
- mov al,var.finalmove
- mov var.figa,al
- call wincheck
- jmp moveStart
- moveStageb:
- cmp var.input,98 ;ASCII b
- jnz moveStagem
- mov al,var.figb
- mov var.curfield,al
- call horsecheck
- call figurecheck
- mov al,var.finalmove
- mov var.figb,al
- call wincheck
- jmp moveStart
- moveStagem:
- cmp var.input,109 ;ASCII m
- jnz moveStageError
- ret
- moveStageError:
- mov ah,09h
- mov dx,OFFSET speech.error
- int 21h
- jmp moveStart
- move ENDP
- horsecheck PROC NEAR
- horsecheckoutput MACRO var1,var2 ;Parameter: Ziele in ASCII
- mov speech.horsedestination[17],var1
- mov speech.horsedestination[23],var2
- mov ah,09h
- mov dx,OFFSET speech.horsedestination
- int 21h
- ENDM
- horsecheckinput MACRO
- mov ah,08h
- int 21h ;einzelnes Zeichen eingeben
- mov var.movewish,al
- ENDM
- horsecheckerror MACRO
- mov ah,09h
- mov dx,OFFSET speech.horseerror
- int 21h
- ENDM
- horseStage1:
- cmp var.curfield,1
- jnz horseStage2
- horsecheckoutput 54,56 ;6 oder 8
- horsecheckinput
- cmp var.movewish,54 ;ASCII 6
- jnz horseStage11
- mov var.horsemove,6
- ret
- horseStage11:
- cmp var.movewish,56 ;ASCII 8
- jnz horseStage12
- mov var.horsemove,8
- ret
- horseStage12:
- horsecheckerror
- pop ax
- jmp moveStart ;zurueck zum Anfang von move
- horseStage2:
- cmp var.curfield,2
- jnz horseStage3
- horsecheckoutput 55,57 ;7 oder 9
- horsecheckinput
- cmp var.movewish,55 ;ASCII 7
- jnz horseStage21
- mov var.horsemove,7
- ret
- horseStage21:
- cmp var.movewish,57 ;ASCII 9
- jnz horseStage22
- mov var.horsemove,9
- ret
- horseStage22:
- horsecheckerror
- pop ax
- jmp moveStart ;zurueck zum Anfang von move
- horseStage3:
- cmp var.curfield,3
- jnz horseStage4
- horsecheckoutput 52,56 ;4 oder 8
- horsecheckinput
- cmp var.movewish,52 ;ASCII 4
- jnz horseStage31
- mov var.horsemove,4
- ret
- horseStage31:
- cmp var.movewish,56 ;ASCII 8
- jnz horseStage32
- mov var.horsemove,8
- ret
- horseStage32:
- horsecheckerror
- pop ax
- jmp moveStart ;zurueck zum Anfang von move
- horseStage4:
- cmp var.curfield,4
- jnz horseStage6
- horsecheckoutput 51,57 ;3 oder 9
- horsecheckinput
- cmp var.movewish,51 ;ASCII 3
- jnz horseStage41
- mov var.horsemove,3
- ret
- horseStage41:
- cmp var.movewish,57 ;ASCII 9
- jnz horseStage42
- mov var.horsemove,9
- ret
- horseStage42:
- horsecheckerror
- pop ax
- jmp moveStart ;zurueck zum Anfang von move
- horseStage6:
- cmp var.curfield,6
- jnz horseStage7
- horsecheckoutput 49,55 ;1 oder 7
- horsecheckinput
- cmp var.movewish,49 ;ASCII 1
- jnz horseStage61
- mov var.horsemove,1
- ret
- horseStage61:
- cmp var.movewish,55 ;ASCII 7
- jnz horseStage62
- mov var.horsemove,7
- ret
- horseStage62:
- horsecheckerror
- pop ax
- jmp moveStart ;zurueck zum Anfang von move
- horseStage7:
- cmp var.curfield,7
- jnz horseStage8
- horsecheckoutput 50,54 ;2 oder 6
- horsecheckinput
- cmp var.movewish,50 ;ASCII 2
- jnz horseStage71
- mov var.horsemove,2
- ret
- horseStage71:
- cmp var.movewish,54 ;ASCII 6
- jnz horseStage72
- mov var.horsemove,6
- ret
- horseStage72:
- horsecheckerror
- pop ax
- jmp moveStart ;zurueck zum Anfang von move
- horseStage8:
- cmp var.curfield,8
- jnz horseStage9
- horsecheckoutput 49,51 ;1 oder 3
- horsecheckinput
- cmp var.movewish,49 ;ASCII 1
- jnz horseStage81
- mov var.horsemove,1
- ret
- horseStage81:
- cmp var.movewish,51 ;ASCII 3
- jnz horseStage82
- mov var.horsemove,3
- ret
- horseStage82:
- horsecheckerror
- pop ax
- jmp moveStart ;zurueck zum Anfang von move
- horseStage9:
- horsecheckoutput 50,52 ;2 oder 4
- horsecheckinput
- cmp var.movewish,50 ;ASCII 2
- jnz horseStage91
- mov var.horsemove,2
- ret
- horseStage91:
- cmp var.movewish,52 ;ASCII 4
- jnz horseStage92
- mov var.horsemove,4
- ret
- horseStage92:
- horsecheckerror
- pop ax
- jmp moveStart ;zurueck zum Anfang von move
- horsecheck ENDP
- figurecheck PROC NEAR
- figurecheckoutput MACRO var1 ;Parameter: Spielfigur
- mov speech.figureerror[15],var1
- mov ah,09h
- mov dx,OFFSET speech.figureerror
- int 21h
- ENDM
- figureStage1:
- mov al,var.fig1
- cmp var.horsemove,al
- jnz figureStage2
- figurecheckoutput 49
- pop ax
- jmp moveStart ;zurueck zum Anfang von move
- figureStage2:
- mov al,var.fig2
- cmp var.horsemove,al
- jnz figureStagea
- figurecheckoutput 50
- pop ax
- jmp moveStart ;zurueck zum Anfang von move
- figureStagea:
- mov al,var.figa
- cmp var.horsemove,al
- jnz figureStageb
- figurecheckoutput 97
- pop ax
- jmp moveStart ;zurueck zum Anfang von move
- figureStageb:
- mov al,var.figb
- cmp var.horsemove,al
- jnz figureFinalstage
- figurecheckoutput 98
- pop ax
- jmp moveStart ;zurueck zum Anfang von move
- figureFinalstage:
- mov al,var.horsemove
- mov var.finalmove,al
- inc var.moves
- ret
- figurecheck ENDP
- wincheck PROC NEAR
- winStage1:
- cmp var.fig1,03
- jnz winStage2
- cmp var.fig2,09
- ret
- cmp var.figa,01
- jnz winStage11
- cmp var.figb,07
- ret
- call winoutput
- call sethighscore
- pop ax
- jmp menuStart ;zurueck zum Anfang von menu
- winStage11:
- cmp var.figa,07
- jnz winFinalstage
- cmp var.figb,01
- jnz winFinalstage
- call winoutput
- call sethighscore
- pop ax
- jmp menuStart ;zurueck zum Anfang von menu
- winStage2:
- cmp var.fig1,09
- jnz winFinalstage
- cmp var.fig2,03
- jnz winFinalstage
- cmp var.figa,01
- jnz winStage22
- cmp var.figb,07
- jnz winFinalstage
- call winoutput
- call sethighscore
- pop ax
- jmp menuStart ;zurueck zum Anfang von menu
- winstage22:
- cmp var.figa,07
- jnz winFinalstage
- cmp var.figb,01
- jnz winFinalstage
- call winoutput
- call sethighscore
- pop ax
- jmp menuStart ;zurueck zum Anfang von menu
- winFinalstage:
- ret
- winoutput PROC NEAR
- mov ax,var.moves
- mov bl,10
- div bl
- add ax,3030h
- mov speech.win[13],ah
- mov speech.win[12],al
- mov ah,09h
- mov DX,OFFSET speech.win
- int 21h
- ret
- winoutput ENDP
- wincheck ENDP
- sethighscore PROC NEAR
- mov ah,09h
- mov dx,OFFSET speech.highscoreinput
- int 21h
- mov ah,08h
- int 21h
- mov ch,al ;1. initial in ch
- int 21h
- mov cl,al ;2. initial in cl
- cmp var.highscorecounter,6
- jnz HighscoreStage1
- mov var.highscoreptr,4
- mov var.highscorecounter,1
- HighscoreStage1:
- mov bx,var.highscoreptr ;bx=highscoreptr
- mov [speech.highscorechart+bx],ch ;1. inital setzen
- inc bx ;bx+1
- mov [speech.highscorechart+bx],cl ;2. inital setzen
- add bx,2 ;bx+2
- mov ax,var.moves ;dual in dezimal für ASCII
- mov dl,10
- div dl
- add ax,3030h
- mov [speech.highscorechart+bx],al ;einer setzen
- inc bx ;bx+1
- mov [speech.highscorechart+bx],ah ;zehner setzen
- add bx,8 ;bx+8
- mov var.highscoreptr,bx ;highscoreptr=bx
- inc var.highscorecounter
- ret
- ENDP
- showhighscore PROC NEAR
- mov ah,09h
- mov dx,OFFSET speech.highscoretitle
- int 21h
- mov dx,OFFSET speech.highscorechart
- int 21h
- mov ah,08h
- int 21h
- ret
- ENDP
- END Start
Add Comment
Please, Sign In to add comment