Guest User

Untitled

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