Guest User

Untitled

a guest
May 21st, 2018
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ;PROGRAM: Roesselsprung
  2. ;AUTHOR: s0531133
  3. ;DATE: 11.01.2012
  4. ;FILE: ROESSEL4.ASM
  5. ;COMMENT: Dieses Programm ist ein kleines "Schachspiel".
  6. ;Auf den Spielfeld befinden sich 4 Spielfiguren - 2 Zahlen und 2 Buchstaben.
  7. ;Alle koennen springen wie ein Pferd im Schach.
  8. ;Ziel ist es, mit moeglichst wenig Zuegen die Zahlen und Buchstaben zu vertauschen.
  9.  
  10. .model small
  11. .stack 100h ;fuer PROC CALLS
  12. JUMPS
  13. .data
  14. rows STRUC
  15.     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,"$"
  16.     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,"$"
  17.     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,"$"
  18.     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,"$"
  19.     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,"$"
  20.     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,"$"
  21.     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,"$"
  22. rows ENDS
  23. field rows <>
  24.  
  25. strings STRUC
  26.     error DB "Falsche Eingabe!",13,10,"$"
  27.     horseerror DB "Zug nicht zulaessig!",13,10,"$"
  28.     figureerror DB "Feld von Figur x besetzt!",13,10,"$"
  29.     fieldtitle DB 13,10,"Spielfeld:",32,32,32,32,32,32,"Positionen:",13,10,13,10,"$"
  30.     menutext DB 13,10,13,10,"(1) Spielen",13,10,"(2) Highscore",13,10,"(3) Ende",13,10,"$"
  31.     figuremove DB 13,10,"Figur auswaehlen (1,2,a oder b) oder Menue aufrufen (m)",13,10,"$"
  32.     horsedestination DB "Moegliche Ziele: x und y",13,10,"$"
  33.     movecount DB 13,10,"Anzahl Zuege: xx",13,10,"$"
  34.     win DB "Gewonnen in xx Zuegen!",13,10,13,10,"$"
  35.     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.$"
  36.     highscoretitle DB "Highscore-Tabelle (Initialen, Zuege):",13,10,13,10,"$"
  37.     highscoreinput DB "Bitte geben Sie ihre Initialen ein:",13,10,"$"
  38. strings ENDS
  39. speech strings <>
  40.  
  41. variables STRUC
  42.     moves DW 0
  43.     input DB 0
  44.     curfield DB 0
  45.     movewish DB 0
  46.     horsemove DB 0
  47.     finalmove DB 0
  48.     fig1 DB 0
  49.     fig2 DB 0
  50.     figa DB 0
  51.     figb DB 0
  52.     position DB 0
  53.     figure DB 0
  54.     highscorecounter DB 1
  55.     highscoreptr DW 4
  56. variables ENDS
  57. var variables <>
  58.    
  59. .code
  60. Start:
  61. mov ax,@data ;DS initialisieren
  62. mov ds,ax
  63.  
  64. menu PROC NEAR
  65.     menuStart:
  66.     mov ah,09h
  67.     mov dx,OFFSET speech.menutext
  68.     int 21h
  69.     mov ah,08h
  70.     int 21h
  71.     mov var.input,al
  72.    
  73.     menuStage1:
  74.     cmp var.input,49 ;ASCII 1
  75.     jnz menuStage2
  76.     call resetGame
  77.     call resetField
  78.     call move
  79.     jmp menuStart
  80.    
  81.     Menustage2:
  82.     cmp var.input,50 ;ASCII 2
  83.     jnz MenuStage3
  84.     call showhighscore
  85.     jmp MenuStart
  86.    
  87.     menuStage3:
  88.     cmp var.input,51 ;ASCII 3
  89.     jnz menuError
  90.     mov ah,4Ch
  91.     int 21h
  92.    
  93.     menuError:
  94.     mov ah,09h
  95.     mov dx,OFFSET speech.error
  96.     int 21h
  97.     jmp menuStart
  98. ENDP
  99.  
  100. paintField PROC NEAR
  101.     call clearField
  102.     mov ah,49 ;ASCII 1
  103.     mov al,var.fig1
  104.     call placeFigures
  105.     mov ah,50 ;ASCII 2
  106.     mov al,var.fig2
  107.     call placeFigures
  108.     mov ah,97 ;ASCII a
  109.     mov al,var.figa
  110.     call placeFigures
  111.     mov ah,98 ;ASCII b
  112.     mov al,var.figb
  113.     call placeFigures
  114.     call calcMoves
  115.    
  116.     mov ah,09h
  117.     mov dx,OFFSET speech.fieldtitle
  118.     int 21h
  119.     mov dx,OFFSET field.row1
  120.     int 21h
  121.     mov dx,OFFSET field.row2
  122.     int 21h
  123.     mov dx,OFFSET field.row3
  124.     int 21h
  125.     mov dx,OFFSET field.row4
  126.     int 21h
  127.     mov dx,OFFSET field.row5
  128.     int 21h
  129.     mov dx,OFFSET field.row6
  130.     int 21h
  131.     mov dx,OFFSET field.row7
  132.     int 21h
  133.     mov dx,OFFSET speech.movecount
  134.     int 21h
  135.     ret
  136.    
  137.     placeFigures PROC NEAR
  138.         placeStage1:
  139.         cmp al,1
  140.         jnz placeStage2
  141.         mov field.row2[2],ah
  142.         ret
  143.        
  144.         placeStage2:
  145.         cmp al,2
  146.         jnz placeStage3
  147.         mov field.row2[6],ah
  148.         ret
  149.        
  150.         placeStage3:
  151.         cmp al,3
  152.         jnz placeStage4
  153.         mov field.row2[10],ah
  154.         ret
  155.        
  156.         placeStage4:
  157.         cmp al,4
  158.         jnz placeStage6
  159.         mov field.row4[2],ah
  160.         ret
  161.        
  162.         placeStage6:
  163.         cmp al,6
  164.         jnz placeStage7
  165.         mov field.row4[10],ah
  166.         ret
  167.        
  168.         placeStage7:
  169.         cmp al,7
  170.         jnz placeStage8
  171.         mov field.row6[2],ah
  172.         ret
  173.        
  174.         placeStage8:
  175.         cmp al,8
  176.         jnz placeStage9
  177.         mov field.row6[6],ah
  178.         ret
  179.        
  180.         placeStage9:
  181.         mov field.row6[10],ah
  182.         ret
  183.     placeFigures ENDP
  184.    
  185.     clearField PROC NEAR
  186.         mov field.row2[2],32
  187.         mov field.row2[6],32
  188.         mov field.row2[10],32
  189.         mov field.row4[2],32
  190.         mov field.row4[6],32
  191.         mov field.row4[10],32
  192.         mov field.row6[2],32
  193.         mov field.row6[6],32
  194.         mov field.row6[10],32
  195.         ret
  196.     clearField ENDP
  197.    
  198.     calcMoves PROC NEAR
  199.         mov ax,var.moves
  200.         mov bl,10
  201.         div bl
  202.         add ax,3030h
  203.         mov speech.movecount[17],ah
  204.         mov speech.movecount[16],al
  205.         ret
  206.     calcMoves ENDP
  207. paintField ENDP
  208.  
  209. resetField PROC NEAR
  210.     mov field.row2[2],49
  211.     mov field.row2[6],32
  212.     mov field.row2[10],97
  213.     mov field.row4[2],32
  214.     mov field.row4[6],32
  215.     mov field.row4[10],32
  216.     mov field.row6[2],50
  217.     mov field.row6[6],32
  218.     mov field.row6[10],98
  219.     ret
  220. resetField ENDP
  221.  
  222. resetGame PROC NEAR
  223.     mov var.fig1,1
  224.     mov var.fig2,7
  225.     mov var.figa,3
  226.     mov var.figb,9
  227.     mov var.moves,0
  228.     ret
  229. resetGame ENDP
  230.  
  231. move PROC NEAR
  232.     moveStart:
  233.     call paintField ;gebe das Spielfeld aus
  234.     mov ah,09h
  235.     mov dx,OFFSET speech.figuremove
  236.     int 21h
  237.     mov ah,08h
  238.     int 21h
  239.     mov var.input,al
  240.  
  241.     moveStage1:
  242.     cmp var.input,49 ;ASCII 1
  243.     jnz moveStage2
  244.     mov al,var.fig1
  245.     mov var.curfield,al
  246.     call horsecheck
  247.     call figurecheck
  248.     mov al,var.finalmove
  249.     mov var.fig1,al
  250.     call wincheck
  251.     jmp moveStart
  252.  
  253.     moveStage2:
  254.     cmp var.input,50 ;ASCII 2
  255.     jnz moveStagea
  256.     mov al,var.fig2
  257.     mov var.curfield,al
  258.     call horsecheck
  259.     call figurecheck
  260.     mov al,var.finalmove
  261.     mov var.fig2,al
  262.     call wincheck
  263.     jmp moveStart
  264.  
  265.     moveStagea:
  266.     cmp var.input,97 ;ASCII a
  267.     jnz moveStageb
  268.     mov al,var.figa
  269.     mov var.curfield,al
  270.     call horsecheck
  271.     call figurecheck
  272.     mov al,var.finalmove
  273.     mov var.figa,al
  274.     call wincheck
  275.     jmp moveStart
  276.    
  277.     moveStageb:
  278.     cmp var.input,98 ;ASCII b
  279.     jnz moveStagem
  280.     mov al,var.figb
  281.     mov var.curfield,al
  282.     call horsecheck
  283.     call figurecheck
  284.     mov al,var.finalmove
  285.     mov var.figb,al
  286.     call wincheck
  287.     jmp moveStart
  288.  
  289.     moveStagem:
  290.     cmp var.input,109 ;ASCII m
  291.     jnz moveStageError
  292.     ret
  293.  
  294.     moveStageError:
  295.     mov ah,09h
  296.     mov dx,OFFSET speech.error
  297.     int 21h
  298.     jmp moveStart
  299. move ENDP
  300.  
  301. horsecheck PROC NEAR
  302.     horsecheckoutput MACRO var1,var2 ;Parameter: Ziele in ASCII
  303.         mov speech.horsedestination[17],var1
  304.         mov speech.horsedestination[23],var2
  305.         mov ah,09h
  306.         mov dx,OFFSET speech.horsedestination
  307.         int 21h
  308.     ENDM
  309.  
  310.     horsecheckinput MACRO
  311.         mov ah,08h
  312.         int 21h ;einzelnes Zeichen eingeben
  313.         mov var.movewish,al
  314.     ENDM
  315.    
  316.     horsecheckerror MACRO
  317.         mov ah,09h
  318.         mov dx,OFFSET speech.horseerror
  319.         int 21h
  320.     ENDM
  321.  
  322.     horseStage1:
  323.     cmp var.curfield,1
  324.     jnz horseStage2
  325.     horsecheckoutput 54,56 ;6 oder 8
  326.     horsecheckinput
  327.     cmp var.movewish,54 ;ASCII 6
  328.     jnz horseStage11
  329.     mov var.horsemove,6
  330.     ret
  331.     horseStage11:
  332.     cmp var.movewish,56 ;ASCII 8
  333.     jnz horseStage12
  334.     mov var.horsemove,8
  335.     ret
  336.     horseStage12:
  337.     horsecheckerror
  338.     pop ax
  339.     jmp moveStart ;zurueck zum Anfang von move
  340.  
  341.     horseStage2:
  342.     cmp var.curfield,2
  343.     jnz horseStage3
  344.     horsecheckoutput 55,57 ;7 oder 9
  345.     horsecheckinput
  346.     cmp var.movewish,55 ;ASCII 7
  347.     jnz horseStage21
  348.     mov var.horsemove,7
  349.     ret
  350.     horseStage21:
  351.     cmp var.movewish,57 ;ASCII 9
  352.     jnz horseStage22
  353.     mov var.horsemove,9
  354.     ret
  355.     horseStage22:
  356.     horsecheckerror
  357.     pop ax
  358.     jmp moveStart ;zurueck zum Anfang von move
  359.  
  360.     horseStage3:
  361.     cmp var.curfield,3
  362.     jnz horseStage4
  363.     horsecheckoutput 52,56 ;4 oder 8
  364.     horsecheckinput
  365.     cmp var.movewish,52  ;ASCII 4
  366.     jnz horseStage31
  367.     mov var.horsemove,4
  368.     ret
  369.     horseStage31:
  370.     cmp var.movewish,56 ;ASCII 8
  371.     jnz horseStage32
  372.     mov var.horsemove,8
  373.     ret
  374.     horseStage32:
  375.     horsecheckerror
  376.     pop ax
  377.     jmp moveStart ;zurueck zum Anfang von move
  378.  
  379.     horseStage4:
  380.     cmp var.curfield,4
  381.     jnz horseStage6
  382.     horsecheckoutput 51,57 ;3 oder 9
  383.     horsecheckinput
  384.     cmp var.movewish,51 ;ASCII 3
  385.     jnz horseStage41
  386.     mov var.horsemove,3
  387.     ret
  388.     horseStage41:
  389.     cmp var.movewish,57 ;ASCII 9
  390.     jnz horseStage42
  391.     mov var.horsemove,9
  392.     ret
  393.     horseStage42:
  394.     horsecheckerror
  395.     pop ax
  396.     jmp moveStart ;zurueck zum Anfang von move
  397.  
  398.     horseStage6:
  399.     cmp var.curfield,6
  400.     jnz horseStage7
  401.     horsecheckoutput 49,55 ;1 oder 7
  402.     horsecheckinput
  403.     cmp var.movewish,49 ;ASCII 1
  404.     jnz horseStage61
  405.     mov var.horsemove,1
  406.     ret
  407.     horseStage61:
  408.     cmp var.movewish,55 ;ASCII 7
  409.     jnz horseStage62
  410.     mov var.horsemove,7
  411.     ret
  412.     horseStage62:
  413.     horsecheckerror
  414.     pop ax
  415.     jmp moveStart ;zurueck zum Anfang von move
  416.  
  417.     horseStage7:
  418.     cmp var.curfield,7
  419.     jnz horseStage8
  420.     horsecheckoutput 50,54 ;2 oder 6
  421.     horsecheckinput
  422.     cmp var.movewish,50 ;ASCII 2
  423.     jnz horseStage71
  424.     mov var.horsemove,2
  425.     ret
  426.     horseStage71:
  427.     cmp var.movewish,54 ;ASCII 6
  428.     jnz horseStage72
  429.     mov var.horsemove,6
  430.     ret
  431.     horseStage72:
  432.     horsecheckerror
  433.     pop ax
  434.     jmp moveStart ;zurueck zum Anfang von move
  435.  
  436.     horseStage8:
  437.     cmp var.curfield,8
  438.     jnz horseStage9
  439.     horsecheckoutput 49,51 ;1 oder 3
  440.     horsecheckinput
  441.     cmp var.movewish,49 ;ASCII 1
  442.     jnz horseStage81
  443.     mov var.horsemove,1
  444.     ret
  445.     horseStage81:
  446.     cmp var.movewish,51 ;ASCII 3
  447.     jnz horseStage82
  448.     mov var.horsemove,3
  449.     ret
  450.     horseStage82:
  451.     horsecheckerror
  452.     pop ax
  453.     jmp moveStart ;zurueck zum Anfang von move
  454.  
  455.     horseStage9:
  456.     horsecheckoutput 50,52 ;2 oder 4
  457.     horsecheckinput
  458.     cmp var.movewish,50 ;ASCII 2
  459.     jnz horseStage91
  460.     mov var.horsemove,2
  461.     ret
  462.     horseStage91:
  463.     cmp var.movewish,52 ;ASCII 4
  464.     jnz horseStage92
  465.     mov var.horsemove,4
  466.     ret
  467.     horseStage92:
  468.     horsecheckerror
  469.     pop ax
  470.     jmp moveStart ;zurueck zum Anfang von move
  471. horsecheck ENDP
  472.  
  473. figurecheck PROC NEAR
  474.     figurecheckoutput MACRO var1 ;Parameter: Spielfigur
  475.         mov speech.figureerror[15],var1
  476.         mov ah,09h
  477.         mov dx,OFFSET speech.figureerror
  478.         int 21h
  479.     ENDM
  480.    
  481.     figureStage1:
  482.     mov al,var.fig1
  483.     cmp var.horsemove,al
  484.     jnz figureStage2
  485.     figurecheckoutput 49
  486.     pop ax
  487.     jmp moveStart ;zurueck zum Anfang von move
  488.    
  489.     figureStage2:
  490.     mov al,var.fig2
  491.     cmp var.horsemove,al
  492.     jnz figureStagea
  493.     figurecheckoutput 50
  494.     pop ax
  495.     jmp moveStart ;zurueck zum Anfang von move
  496.    
  497.     figureStagea:
  498.     mov al,var.figa
  499.     cmp var.horsemove,al
  500.     jnz figureStageb
  501.     figurecheckoutput 97
  502.     pop ax
  503.     jmp moveStart ;zurueck zum Anfang von move
  504.    
  505.     figureStageb:
  506.     mov al,var.figb
  507.     cmp var.horsemove,al
  508.     jnz figureFinalstage
  509.     figurecheckoutput 98
  510.     pop ax
  511.     jmp moveStart ;zurueck zum Anfang von move
  512.    
  513.     figureFinalstage:
  514.     mov al,var.horsemove
  515.     mov var.finalmove,al
  516.     inc var.moves
  517.     ret
  518. figurecheck ENDP
  519.  
  520. wincheck PROC NEAR
  521.     winStage1:
  522.     cmp var.fig1,03
  523.     jnz winStage2
  524.     cmp var.fig2,09
  525.     ret
  526.     cmp var.figa,01
  527.     jnz winStage11
  528.     cmp var.figb,07
  529.     ret
  530.     call winoutput
  531.     call sethighscore
  532.     pop ax
  533.     jmp menuStart ;zurueck zum Anfang von menu
  534.    
  535.     winStage11:
  536.     cmp var.figa,07
  537.     jnz winFinalstage
  538.     cmp var.figb,01
  539.     jnz winFinalstage
  540.     call winoutput
  541.     call sethighscore
  542.     pop ax
  543.     jmp menuStart ;zurueck zum Anfang von menu
  544.    
  545.     winStage2:
  546.     cmp var.fig1,09
  547.     jnz winFinalstage
  548.     cmp var.fig2,03
  549.     jnz winFinalstage
  550.     cmp var.figa,01
  551.     jnz winStage22
  552.     cmp var.figb,07
  553.     jnz winFinalstage
  554.     call winoutput
  555.     call sethighscore
  556.     pop ax
  557.     jmp menuStart ;zurueck zum Anfang von menu
  558.    
  559.     winstage22:
  560.     cmp var.figa,07
  561.     jnz winFinalstage
  562.     cmp var.figb,01
  563.     jnz winFinalstage
  564.     call winoutput
  565.     call sethighscore
  566.     pop ax
  567.     jmp menuStart ;zurueck zum Anfang von menu
  568.  
  569.     winFinalstage:
  570.     ret
  571.     winoutput PROC NEAR
  572.         mov ax,var.moves
  573.         mov bl,10
  574.         div bl
  575.         add ax,3030h
  576.         mov speech.win[13],ah
  577.         mov speech.win[12],al
  578.         mov ah,09h
  579.         mov DX,OFFSET speech.win
  580.         int 21h
  581.         ret
  582.     winoutput ENDP
  583. wincheck ENDP
  584.  
  585. sethighscore PROC NEAR
  586.     mov ah,09h
  587.     mov dx,OFFSET speech.highscoreinput
  588.     int 21h
  589.  
  590.     mov ah,08h
  591.     int 21h
  592.     mov ch,al ;1. initial in ch
  593.     int 21h
  594.     mov cl,al ;2. initial in cl
  595.  
  596.     cmp var.highscorecounter,6
  597.     jnz HighscoreStage1
  598.     mov var.highscoreptr,4
  599.     mov var.highscorecounter,1
  600.     HighscoreStage1:
  601.     mov bx,var.highscoreptr ;bx=highscoreptr
  602.     mov [speech.highscorechart+bx],ch ;1. inital setzen
  603.     inc bx ;bx+1
  604.     mov [speech.highscorechart+bx],cl ;2. inital setzen
  605.  
  606.     add bx,2 ;bx+2
  607.     mov ax,var.moves ;dual in dezimal für ASCII
  608.     mov dl,10
  609.     div dl
  610.     add ax,3030h
  611.     mov [speech.highscorechart+bx],al ;einer setzen
  612.     inc bx ;bx+1
  613.     mov [speech.highscorechart+bx],ah ;zehner setzen
  614.  
  615.     add bx,8 ;bx+8
  616.     mov var.highscoreptr,bx ;highscoreptr=bx
  617.     inc var.highscorecounter
  618.     ret
  619. ENDP
  620.  
  621. showhighscore PROC NEAR
  622.     mov ah,09h
  623.     mov dx,OFFSET speech.highscoretitle
  624.     int 21h
  625.     mov dx,OFFSET speech.highscorechart
  626.     int 21h
  627.     mov ah,08h
  628.     int 21h
  629.     ret
  630. ENDP
  631.  
  632. END Start
Add Comment
Please, Sign In to add comment