Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;--------------------------------------------------------------------------------------------------------
- ; BATTLESHIP
- ;
- ; Shirshak Sharma, Jeff Tocco, Josh Berger
- ; Professor. Durga Suresh
- ;--------------------------------------------------------------------------------------------------------
- ; LIST OF PROCEDURES:
- ;
- ; displayPlayer1Board
- ; displayPlayer2VisibleBoard
- ; displayPlayer2HiddenBoard
- ; grid
- ; gridEnemy
- ;--------------------------------------------------------------------------------------------------------
- .386
- .MODEL Flat,StdCall
- OPTION CaseMap:None
- INCLUDE Irvine32_NOWIN.inc
- INCLUDE windows.inc
- INCLUDE user32.inc
- INCLUDE kernel32.inc
- INCLUDELIB User32.lib
- INCLUDELIB Kernel32.lib
- .data
- ;--------------------------------------------------------------------------------------------------------
- ; BATTLESHIP BOARD
- ; - Stored in 14 byte arrays
- ; - The editable grids are stored in index 3, 5, 7, 9, 11, 13, 15, 17, 19, 21 in boards 04 to 13
- ;--------------------------------------------------------------------------------------------------------
- board01 BYTE 201,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,187, 0
- board02 BYTE 186, 32, 32, 32, 49, 32, 50, 32, 51, 32, 52, 32, 53, 32, 54, 32, 55, 32, 56, 32, 57, 32, 49, 48,186, 0
- board03 BYTE 186, 32, 32,201,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,186, 0
- board04 BYTE 186, 65, 32,186,176,124,176,124,176,124,176,124,176,124,176,124,176,124,176,124,176,124,176,124,186, 0
- board05 BYTE 186, 66, 32,186,176,124,176,124,176,124,176,124,176,124,176,124,176,124,176,124,176,124,176,124,186, 0
- board06 BYTE 186, 67, 32,186,176,124,176,124,176,124,176,124,176,124,176,124,176,124,176,124,176,124,176,124,186, 0
- board07 BYTE 186, 68, 32,186,176,124,176,124,176,124,176,124,176,124,176,124,176,124,176,124,176,124,176,124,186, 0
- board08 BYTE 186, 69, 32,186,176,124,176,124,176,124,176,124,176,124,176,124,176,124,176,124,176,124,176,124,186, 0
- board09 BYTE 186, 70, 32,186,176,124,176,124,176,124,176,124,176,124,176,124,176,124,176,124,176,124,176,124,186, 0
- board10 BYTE 186, 71, 32,186,176,124,176,124,176,124,176,124,176,124,176,124,176,124,176,124,176,124,176,124,186, 0
- board11 BYTE 186, 72, 32,186,176,124,176,124,176,124,176,124,176,124,176,124,176,124,176,124,176,124,176,124,186, 0
- board12 BYTE 186, 73, 32,186,176,124,176,124,176,124,176,124,176,124,176,124,176,124,176,124,176,124,176,124,186, 0
- board13 BYTE 186, 74, 32,186,176,124,176,124,176,124,176,124,176,124,176,124,176,124,176,124,176,124,176,124,186, 0
- board14 BYTE 200,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,188, 0
- ;--------------------------------------------------------------------------------------------------------
- ; PLAYER BOARD
- ; - 176 is the ASCII to represent water (no ship to start with)
- ;--------------------------------------------------------------------------------------------------------
- player1board BYTE 100 DUP (176) ; Stores the ships of Player 1 + Hits from Player 2
- player2hiddenboard BYTE 100 DUP (176) ; Stores the ships of Player 2
- player2visibleboard BYTE 100 DUP (176) ; Stores the hits from Player 1
- ;--------------------------------------------------------------------------------------------------------
- ; OPENING LETTERS TO DISPLAY THE WORD 'BATTLESHIP'
- ;--------------------------------------------------------------------------------------------------------
- XvalueB db 12,12,12,12,13,14,15,16,17,17,17,16,15,14,13,17,17,17,17,17,16,15,14,13,12,12,12,12,12,12,12
- YvalueB db 10,9,8,7,7,7,7,7,7,8,9,10,10,10,10,11,12,12,12,13,13,13,13,13,13,13,13,13,13,12,11,10,9,8
- XvalueA db 21,21,21,21,21,21,21,22,23,24,25,26,26,26,26,26,26,26,26,26,25,24,23,22
- YvalueA db 7,8,9,10,11,12,13,7,7,7,7,7,7,7,8,9,10,11,12,13,10,10,10,10
- XvalueTfirst db 29,30,31,32,33,34,35,32,32,32,32,32,32
- YvalueTfirst db 7,7,7,7,7,7,7,8,9,10,11,12,13,
- XvalueTsecond db 37,38,39,40,41,42,43,40,40,40,40,40,40
- YvalueTsecond db 7,7,7,7,7,7,7,8,9,10,11,12,13
- XvalueL db 46,46,46,46,46,46,46,47,48,49,50
- YvalueL db 7,8,9,10,11,12,13,13,13,13,13,
- XvalueE db 53,53,53,53,53,53,53,54,55,56,57,54,55,56,57,53,54,55,56,57
- YvalueE db 7,8,9,10,11,12,13,13,13,13,13,10,10,10,10,10,7,7,7,7,7
- XvalueS db 64,64,63,62,61,60,60,60,60,61,62,63,64,64,64,64,63,62,61,60,60
- YvalueS db 8,7,7,7,7,7,8,9,10,10,10,10,10,11,12,13,13,13,13,13,12
- XvalueH db 67,67,67,67,67,67,67,73,73,73,73,73,73,73,68,69,70,71,72
- YvalueH db 7,8,9,10,11,12,13,7,8,9,10,11,12,13,10,10,10,10,10
- XvalueI db 76,77,78,79,80,78,78,78,78,78,78,76,77,79,80
- YvalueI db 7,7,7,7,7,8,9,10,11,12,13,13,13,13,13
- XvalueP db 83,83,83,83,83,83,83,84,85,86,87,88,88,88,88,87,86,85,84
- YvalueP db 7,8,9,10,11,12,13,7,7,7,7,7,8,9,10,10,10,10,10,10
- xValueEx1 db 91,91,91,91,91,91
- yValueEx1 db 7,8,9,10,11,13
- xValueEx2 db 94,94,94,94,94,94
- yValueEx2 db 7,8,9,10,11,13
- xValueEx3 db 97,97,97,97,97,97
- yValueEx3 db 7,8,9,10,11,13
- xValueEx4 db 100,100,100,100,100,100
- yValueEx4 db 7,8,9,10,11,13
- xValueEx5 db 103,103,103,103,103,103
- yValueEx5 db 7,8,9,10,11,13
- ;--------------------------------------------------------------------------------------------------------
- ; SHIPS
- ; - 5 ships of length 2, 3, 3, 4 and 5 respectively
- ; - 219 is the ASCII code for a colored rectangle to represent ships
- ;--------------------------------------------------------------------------------------------------------
- lose1 db "__ ______ _ _ _ ____ _____ ______ ", 0
- lose2 db "\ \ / / __ \| | | | | | / __ \ / ____| ____|", 0
- lose3 db " \ \_/ / | | | | | | | | | | | | (___ | |__ ", 0
- lose4 db " \ /| | | | | | | | | | | | |\___ \| __| ", 0
- lose5 db " | | | |__| | |__| | | |___| |__| |____) | |____ ", 0
- lose6 db " |_| \____/ \____/ |______\____/|_____/|______|", 0
- win1 db " __ ______ _ _ __ _______ _ _ ", 0
- win2 db " \ \ / / __ \| | | | \ \ / /_ _| \ | |", 0
- win3 db " \ \_/ / | | | | | | \ \ /\ / / | | | \| |", 0
- win4 db " \ /| | | | | | | \ \/ \/ / | | | . ` |", 0
- win5 db " | | | |__| | |__| | \ /\ / _| |_| |\ |", 0
- win6 db " |_| \____/ \____/ \/ \/ |_____|_| \_|", 0
- exit db "Click to Exit", 0
- buttonT BYTE 201, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 187, 0
- buttonM BYTE 186, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 186, 0
- buttonB BYTE 200, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 188, 0
- button db "Let's Begin!", 0
- start db "START", 0
- ;--------------------------------------------------------------------------------------------------------
- ; SHIPS
- ; - 5 ships of length 2, 3, 3, 4 and 5 respectively
- ; - 219 is the ASCII code for a colored rectangle to represent ships
- ;--------------------------------------------------------------------------------------------------------
- player1ship1 BYTE 2 DUP (219)
- player1ship2 BYTE 3 DUP (219)
- player1ship3 BYTE 3 DUP (219)
- player1ship4 BYTE 4 DUP (219)
- player1ship5 BYTE 5 DUP (219)
- player2ship1 BYTE 2 DUP (219)
- player2ship2 BYTE 3 DUP (219)
- player2ship3 BYTE 3 DUP (219)
- player2ship4 BYTE 4 DUP (219)
- player2ship5 BYTE 5 DUP (219)
- ;--------------------------------------------------------------------------------------------------------
- ; TITLE SCREEN ELEMENTS
- ; - The name of the game + the programmers
- ;--------------------------------------------------------------------------------------------------------
- titleName db "BATTLESHIP", 0
- createdBy db "Created By Shirshak Sharma, Jeff Tocco, and Josh Berger", 0
- playername dd 0 ; The player's name. obviously.
- promptforname db "What is your name, captain? ", 0
- ;--------------------------------------------------------------------------------------------------------
- ; RULE SCREEN ELEMENTS
- ; - The classic rules for Battleship
- ;--------------------------------------------------------------------------------------------------------
- hellomessage db "Hello and Welcome to Battle Ship!", 0
- setup db "Start by hitting the 'BEGIN' button, then placing your ships on the board displayed on the 10x10 play screen.", 0
- setupB db "The CPU will then to the same.", 0
- objective db "Objective: The objective of the game is to sink all of your opponents ships before they sink yours. Below are the rules:", 0
- rule1 db "1: After you have placed your ships, you can start by selecting a space on the grid with the cursor where you guess one of the CPU's ships is. ", 0
- rule2 db "2: If you guessed correctly, you got a 'hit' and begun to sink their ship. You may guess again after every hit.", 0
- rule3 db "3: If you guess incorrectly, you missed, which makes it the CPU's turn to guess where your ships are.", 0
- rule4 db "4: There are 5 ships in total for each player, so the winner is the first to sink all 5 of thier opponent's ships.", 0
- ;--------------------------------------------------------------------------------------------------------
- ; SHIP PLACEMENT ELEMENTS
- ;--------------------------------------------------------------------------------------------------------
- placingQuote db "PLACE YOUR SHIPS CAPTAIN", 0
- yourGrid db "Your Grid", 0
- startingPoint db "Pick your ship's orientation.", 0
- line db "|", 0
- underScore db "_", 0
- betterUS BYTE 205, 0
- betterLine BYTE 186, 0
- inter BYTE 203, 0
- ; CARRIER 5 spaces
- carrier db "Carrier:", 0
- ; BATTLESHIP 4 spaces
- battleship db "Battleship:", 0
- ; CRUISER 3 spaces
- cruiser db "Cruiser:", 0
- ; SUBMARINE 3 spaces
- submarine db "Submarine:", 0
- ; DESTROYER 2 spaces
- destroyer db "Destroyer:", 0
- destroyerXposition dd ?
- destroyerYposition dd ?
- ;--------------------------------------------------------------------------------------------------------
- ; PLAY SCREEN ELEMENTS
- ;--------------------------------------------------------------------------------------------------------
- enemyGrid db "Enemy Grid", 0
- attack db "ATTACK THE ENEMY", 0
- yourTurn db "It's your turn.", 0
- enemyHits db "Enemy Hits: ", 0
- yourHits db "Your Hits: ", 0
- shipVert BYTE 219, 0
- shipHori BYTE 254, 0
- ;--------------------------------------------------------------------------------------------------------
- ; MOUSE CLICK FOR ORIENTATION
- ;--------------------------------------------------------------------------------------------------------
- rHnd HANDLE ?
- numEventsRead DWORD ?
- numEventsOccurred DWORD ?
- eventBuffer INPUT_RECORD 128 DUP(<>)
- ;coordString BYTE "Coordinate change: (", 0
- ;buttonString BYTE "Left Button Pressed!", 0Ah, 0
- whereYouPressed BYTE "You clicked on: ", 0
- decision dd ?
- verticalChoice db "You chose veritcal! Now place the ship on the grid by selecting the space where you'd like the top of it go.", 0
- horizontalChoice db "You chose horizontal! Now place the ship on the grid by selecting the space where you'd like the left most part of it to go.", 0
- ;--------------------------------------------------------------------------------------------------------
- ; MOUSE CLICK FOR PLACEMENT
- ;--------------------------------------------------------------------------------------------------------
- ;MouseClickTwo Data
- rHndPlacement HANDLE ?
- numEventsReadPlacement DWORD ?
- numEventsOccurredPlacement DWORD ?
- eventBufferPlacement INPUT_RECORD 128 DUP(<>)
- coordStringPlacement BYTE "Coordinate change: (", 0
- buttonStringPlacement BYTE "Left Button Pressed!", 0Ah, 0
- whereYouPressedPlacement BYTE "You clicked on: ", 0
- ;--------------------------------------------------------------------------------------------------------
- ; OTHER VARIABLES
- ;--------------------------------------------------------------------------------------------------------
- emptyarray BYTE 100 DUP(176) ; Resets the board by replacing all the interactive elements. 176 is the ASCII for the water texture
- hitvalue BYTE 88 ; This value is displayed when a ship is hit. 88 is the ASCII for X
- missvalue BYTE 39 ; This value is displayed when a ship is missed. 39 is the ASCII for '
- xpoint BYTE 0 ; Stores the x component of the grid
- ypoint BYTE 0 ; Stores the y component of the grid
- indexarray BYTE 0 ; Index of the co-ordinate in an array
- orientation db 0 ; 0 = Vertical. 1 = Horizontal
- lengthship db 0 ; Stores the length of the ship selected (valid values: 2, 3, 4, 5)
- scoreplayer1 db 0 ; Stores Player 1's score
- scoreplayer2 db 0 ; Stores Player 2's score
- botguesstype db 0 ; Stores some stuff for the bot to work
- ; Guess Type 0 = horizontal
- ; Guess Type 1 = vertical
- ; Guess Type 2 = random
- ; Guess Type 3 = there's only been one hit
- ; Same as above but stores the values in temp so checking legality doesn't mess up the values
- tempxpoint BYTE 0
- tempypoint BYTE 0
- tempindexarray BYTE 0
- temporientation BYTE 0
- templengthship BYTE 0
- promptoverlap BYTE "Invalid :(", 0
- whichShip3 BYTE 0 ; 0 = First Ship (Cruiser). 1 = Second Ship (Submarine)
- computershipcounter BYTE 0 ; Stores the number of ships the computer has placed. Values: 0, 1, 2, 3, 4, 5.
- turnorder BYTE 1 ; Stores whose order it is. 1 = Player 1. 2 = Player 2.
- .code
- ;--------------------------------------------------------------------------------------------------------
- ; MAIN PROCEDURE
- ; GOTO MAIN
- ;--------------------------------------------------------------------------------------------------------
- main proc
- call Randomize
- call titleScreen
- call ReadInt
- call Clrscr
- call ruleScreen
- call ReadInt
- call Clrscr
- call ship1Screen
- call CarrierOrientationClick
- call pickShipsPlayer2
- invoke ExitProcess, 0
- main ENDP
- ;--------------------------------------------------------------------------------------------------------
- ; PLACE SHIP 1
- ; Name: Carrier | Length: 2
- ;--------------------------------------------------------------------------------------------------------
- ; GOTO SHIP1SCREEN
- ship1Screen PROC
- ;call Clrscr
- call screen
- call grid
- ;yourGrid db "Your Grid", 0
- ;startingPoint db "Pick your starting point.", 0
- ;x in dl, y in dh
- mov dl, 70
- mov dh, 13
- call Gotoxy
- mov esi, offset shipVert
- mov edx, esi
- call WriteString
- mov dl, 70
- mov dh, 14
- call Gotoxy
- mov esi, offset shipVert
- mov edx, esi
- call WriteString
- mov dl, 70
- mov dh, 15
- call Gotoxy
- mov esi, offset shipVert
- mov edx, esi
- call WriteString
- mov dl, 70
- mov dh, 16
- call Gotoxy
- mov esi, offset shipVert
- mov edx, esi
- call WriteString
- mov dl, 70
- mov dh, 17
- call Gotoxy
- mov esi, offset shipVert
- mov edx, esi
- call WriteString
- mov dl, 75
- mov dh, 13
- call Gotoxy
- mov esi, offset shipHori
- mov edx, esi
- call WriteString
- mov dl, 76
- mov dh, 13
- call Gotoxy
- mov esi, offset shipHori
- mov edx, esi
- call WriteString
- mov dl, 77
- mov dh, 13
- call Gotoxy
- mov esi, offset shipHori
- mov edx, esi
- call WriteString
- mov dl, 78
- mov dh, 13
- call Gotoxy
- mov esi, offset shipHori
- mov edx, esi
- call WriteString
- mov dl, 79
- mov dh, 13
- call Gotoxy
- mov esi, offset shipHori
- mov edx, esi
- call WriteString
- mov dl, 80
- mov dh, 13
- call Gotoxy
- mov esi, offset shipHori
- mov edx, esi
- call WriteString
- mov dl, 81
- mov dh, 13
- call Gotoxy
- mov esi, offset shipHori
- mov edx, esi
- call WriteString
- mov dl, 82
- mov dh, 13
- call Gotoxy
- mov esi, offset shipHori
- mov edx, esi
- call WriteString
- mov dl, 83
- mov dh, 13
- call Gotoxy
- mov esi, offset shipHori
- mov edx, esi
- call WriteString
- mov dl, 84
- mov dh, 13
- call Gotoxy
- mov esi, offset shipHori
- mov edx, esi
- call WriteString
- mov dl, 48
- mov dh, 3
- call Gotoxy
- mov esi, offset placingQuote
- mov edx, esi
- call WriteString
- mov dl, 70
- mov dh, 11
- call Gotoxy
- mov esi, offset carrier
- mov edx, esi
- call WriteString
- mov dl, 70
- mov dh, 9
- call Gotoxy
- mov esi, offset startingPoint
- mov edx, esi
- call WriteString
- mov dl, 15
- mov dh, 24
- call Gotoxy
- mov esi, offset yourGrid
- mov edx, esi
- call WriteString
- call Crlf
- ret
- ship1Screen ENDP
- ;--------------------------------------------------------------------------------------------------------
- ; PLACE SHIP 2
- ; Name: Battleship | Length: 3
- ;--------------------------------------------------------------------------------------------------------
- ; GOTO SHIP2SCREEN
- ship2Screen PROC
- call Clrscr
- call screen
- call grid
- ;yourGrid db "Your Grid", 0
- ;startingPoint db "Pick your starting point.", 0
- ;x in dl, y in dh
- mov dl, 70
- mov dh, 13
- call Gotoxy
- mov esi, offset shipVert
- mov edx, esi
- call WriteString
- mov dl, 70
- mov dh, 14
- call Gotoxy
- mov esi, offset shipVert
- mov edx, esi
- call WriteString
- mov dl, 70
- mov dh, 15
- call Gotoxy
- mov esi, offset shipVert
- mov edx, esi
- call WriteString
- mov dl, 70
- mov dh, 16
- call Gotoxy
- mov esi, offset shipVert
- mov edx, esi
- call WriteString
- mov dl, 75
- mov dh, 13
- call Gotoxy
- mov esi, offset shipHori
- mov edx, esi
- call WriteString
- mov dl, 76
- mov dh, 13
- call Gotoxy
- mov esi, offset shipHori
- mov edx, esi
- call WriteString
- mov dl, 77
- mov dh, 13
- call Gotoxy
- mov esi, offset shipHori
- mov edx, esi
- call WriteString
- mov dl, 78
- mov dh, 13
- call Gotoxy
- mov esi, offset shipHori
- mov edx, esi
- call WriteString
- mov dl, 79
- mov dh, 13
- call Gotoxy
- mov esi, offset shipHori
- mov edx, esi
- call WriteString
- mov dl, 80
- mov dh, 13
- call Gotoxy
- mov esi, offset shipHori
- mov edx, esi
- call WriteString
- mov dl, 81
- mov dh, 13
- call Gotoxy
- mov esi, offset shipHori
- mov edx, esi
- call WriteString
- mov dl, 82
- mov dh, 13
- call Gotoxy
- mov esi, offset shipHori
- mov edx, esi
- call WriteString
- mov dl, 48
- mov dh, 3
- call Gotoxy
- mov esi, offset placingQuote
- mov edx, esi
- call WriteString
- mov dl, 70
- mov dh, 11
- call Gotoxy
- mov esi, offset battleship
- mov edx, esi
- call WriteString
- mov dl, 70
- mov dh, 9
- call Gotoxy
- mov esi, offset startingPoint
- mov edx, esi
- call WriteString
- mov dl, 15
- mov dh, 24
- call Gotoxy
- mov esi, offset yourGrid
- mov edx, esi
- call WriteString
- call Crlf
- call BattleOrientationClick
- ret
- ship2Screen ENDP
- ;--------------------------------------------------------------------------------------------------------
- ; PLACE SHIP 3
- ; Name: Cruiser | Length: 3
- ;--------------------------------------------------------------------------------------------------------
- ; GOTO SHIP3SCREEN
- ship3Screen PROC
- call Clrscr
- call screen
- call grid
- ;yourGrid db "Your Grid", 0
- ;startingPoint db "Pick your starting point.", 0
- ;x in dl, y in dh
- mov dl, 70
- mov dh, 13
- call Gotoxy
- mov esi, offset shipVert
- mov edx, esi
- call WriteString
- mov dl, 70
- mov dh, 14
- call Gotoxy
- mov esi, offset shipVert
- mov edx, esi
- call WriteString
- mov dl, 70
- mov dh, 15
- call Gotoxy
- mov esi, offset shipVert
- mov edx, esi
- call WriteString
- mov dl, 75
- mov dh, 13
- call Gotoxy
- mov esi, offset shipHori
- mov edx, esi
- call WriteString
- mov dl, 76
- mov dh, 13
- call Gotoxy
- mov esi, offset shipHori
- mov edx, esi
- call WriteString
- mov dl, 77
- mov dh, 13
- call Gotoxy
- mov esi, offset shipHori
- mov edx, esi
- call WriteString
- mov dl, 78
- mov dh, 13
- call Gotoxy
- mov esi, offset shipHori
- mov edx, esi
- call WriteString
- mov dl, 79
- mov dh, 13
- call Gotoxy
- mov esi, offset shipHori
- mov edx, esi
- call WriteString
- mov dl, 80
- mov dh, 13
- call Gotoxy
- mov esi, offset shipHori
- mov edx, esi
- call WriteString
- mov dl, 48
- mov dh, 3
- call Gotoxy
- mov esi, offset placingQuote
- mov edx, esi
- call WriteString
- mov dl, 70
- mov dh, 11
- call Gotoxy
- mov esi, offset cruiser
- mov edx, esi
- call WriteString
- mov dl, 70
- mov dh, 9
- call Gotoxy
- mov esi, offset startingPoint
- mov edx, esi
- call WriteString
- mov dl, 15
- mov dh, 24
- call Gotoxy
- mov esi, offset yourGrid
- mov edx, esi
- call WriteString
- call Crlf
- call CruiserOrientationClick
- ret
- ship3Screen ENDP
- ;--------------------------------------------------------------------------------------------------------
- ; PLACE SHIP 4
- ; Name: Submarine | Length: 4
- ;--------------------------------------------------------------------------------------------------------
- ; GOTO SHIP4SCREEN
- ship4Screen PROC
- call screen
- call grid
- ;yourGrid db "Your Grid", 0
- ;startingPoint db "Pick your starting point.", 0
- ;x in dl, y in dh
- mov dl, 70
- mov dh, 13
- call Gotoxy
- mov esi, offset shipVert
- mov edx, esi
- call WriteString
- mov dl, 70
- mov dh, 14
- call Gotoxy
- mov esi, offset shipVert
- mov edx, esi
- call WriteString
- mov dl, 70
- mov dh, 15
- call Gotoxy
- mov esi, offset shipVert
- mov edx, esi
- call WriteString
- mov dl, 75
- mov dh, 13
- call Gotoxy
- mov esi, offset shipHori
- mov edx, esi
- call WriteString
- mov dl, 76
- mov dh, 13
- call Gotoxy
- mov esi, offset shipHori
- mov edx, esi
- call WriteString
- mov dl, 77
- mov dh, 13
- call Gotoxy
- mov esi, offset shipHori
- mov edx, esi
- call WriteString
- mov dl, 78
- mov dh, 13
- call Gotoxy
- mov esi, offset shipHori
- mov edx, esi
- call WriteString
- mov dl, 79
- mov dh, 13
- call Gotoxy
- mov esi, offset shipHori
- mov edx, esi
- call WriteString
- mov dl, 80
- mov dh, 13
- call Gotoxy
- mov esi, offset shipHori
- mov edx, esi
- call WriteString
- mov dl, 48
- mov dh, 3
- call Gotoxy
- mov esi, offset placingQuote
- mov edx, esi
- call WriteString
- mov dl, 70
- mov dh, 11
- call Gotoxy
- mov esi, offset submarine
- mov edx, esi
- call WriteString
- mov dl, 70
- mov dh, 9
- call Gotoxy
- mov esi, offset startingPoint
- mov edx, esi
- call WriteString
- mov dl, 15
- mov dh, 24
- call Gotoxy
- mov esi, offset yourGrid
- mov edx, esi
- call WriteString
- call Crlf
- call SubmarineOrientationClick
- ret
- ship4Screen ENDP
- ;--------------------------------------------------------------------------------------------------------
- ; PLACE SHIP 5
- ; Name: Destroyer | Length: 2
- ;--------------------------------------------------------------------------------------------------------
- ; GOTO SHIP5SCREEN
- ship5Screen PROC
- Call Clrscr
- call screen
- call grid
- ;yourGrid db "Your Grid", 0
- ;startingPoint db "Pick your starting point.", 0
- ;x in dl, y in dh
- mov dl, 70
- mov dh, 13
- call Gotoxy
- mov esi, offset shipVert
- mov edx, esi
- call WriteString
- mov dl, 70
- mov dh, 14
- call Gotoxy
- mov esi, offset shipVert
- mov edx, esi
- call WriteString
- mov dl, 75
- mov dh, 13
- call Gotoxy
- mov esi, offset shipHori
- mov edx, esi
- call WriteString
- mov dl, 76
- mov dh, 13
- call Gotoxy
- mov esi, offset shipHori
- mov edx, esi
- call WriteString
- mov dl, 77
- mov dh, 13
- call Gotoxy
- mov esi, offset shipHori
- mov edx, esi
- call WriteString
- mov dl, 78
- mov dh, 13
- call Gotoxy
- mov esi, offset shipHori
- mov edx, esi
- call WriteString
- mov dl, 48
- mov dh, 3
- call Gotoxy
- mov esi, offset placingQuote
- mov edx, esi
- call WriteString
- mov dl, 70
- mov dh, 11
- call Gotoxy
- mov esi, offset destroyer
- mov edx, esi
- call WriteString
- mov dl, 70
- mov dh, 9
- call Gotoxy
- mov esi, offset startingPoint
- mov edx, esi
- call WriteString
- mov dl, 15
- mov dh, 24
- call Gotoxy
- mov esi, offset yourGrid
- mov edx, esi
- call WriteString
- call Crlf
- call DestroyerOrientationClick
- ret
- ship5Screen ENDP
- ;------------------------------------------------------------------
- ; WIN/LOSE SCREENS
- ;------------------------------------------------------------------
- loseScreen PROC
- mov dl, 30
- mov dh, 10
- call Gotoxy
- mov esi, offset lose1
- mov edx, esi
- call WriteString
- mov dl, 30
- mov dh, 11
- call Gotoxy
- mov esi, offset lose2
- mov edx, esi
- call WriteString
- mov dl, 30
- mov dh, 12
- call Gotoxy
- mov esi, offset lose3
- mov edx, esi
- call WriteString
- mov dl, 30
- mov dh, 13
- call Gotoxy
- mov esi, offset lose4
- mov edx, esi
- call WriteString
- mov dl, 30
- mov dh, 14
- call Gotoxy
- mov esi, offset lose5
- mov edx, esi
- call WriteString
- mov dl, 30
- mov dh, 15
- call Gotoxy
- mov esi, offset lose6
- mov edx, esi
- call WriteString
- call exitButton
- ret
- loseScreen ENDP
- winScreen PROC
- mov dl, 33
- mov dh, 10
- call Gotoxy
- mov esi, offset win1
- mov edx, esi
- call WriteString
- mov dl, 33
- mov dh, 11
- call Gotoxy
- mov esi, offset win2
- mov edx, esi
- call WriteString
- mov dl, 33
- mov dh, 12
- call Gotoxy
- mov esi, offset win3
- mov edx, esi
- call WriteString
- mov dl, 33
- mov dh, 13
- call Gotoxy
- mov esi, offset win4
- mov edx, esi
- call WriteString
- mov dl, 33
- mov dh, 14
- call Gotoxy
- mov esi, offset win5
- mov edx, esi
- call WriteString
- mov dl, 33
- mov dh, 15
- call Gotoxy
- mov esi, offset win6
- mov edx, esi
- call WriteString
- call exitButton
- ret
- winScreen ENDP
- exitButton PROC
- mov dl, 50
- mov dh, 23
- call Gotoxy
- mov esi, offset buttonT
- mov edx, esi
- call WriteString
- mov dl, 50
- mov dh, 24
- call Gotoxy
- mov esi, offset buttonM
- mov edx, esi
- call WriteString
- mov dl, 50
- mov dh, 25
- call Gotoxy
- mov esi, offset buttonB
- mov edx, esi
- call WriteString
- mov dl, 52
- mov dh, 24
- call Gotoxy
- mov esi, offset exit
- mov edx, esi
- call WriteString
- call Crlf
- ret
- exitButton ENDP
- ;--------------------------------------------------------------------------------------------------------
- ; TITLE SCREEN
- ;--------------------------------------------------------------------------------------------------------
- ; GOTO TITLESCREEN
- titleScreen PROC
- ; pushad
- ; x and y are in dh and dl respectively
- call letterB
- call letterTfirst
- call letterA
- call letterTsecond
- call letterE
- call letterL
- call letterS
- call letterI
- call letterH
- call letterP
- call letterEx1
- call letterEx2
- call letterEx3
- call letterEx4
- call letterEx5
- call Crlf
- call Crlf
- call Crlf
- call Crlf
- mov dl, 50
- mov dh, 24
- call Gotoxy
- mov esi, offset buttonT
- mov edx, esi
- call WriteString
- call Crlf
- mov dl, 50
- mov dh, 25
- call Gotoxy
- mov esi, offset buttonM
- mov edx, esi
- call WriteString
- call Crlf
- mov dl, 50
- mov dh, 26
- call Gotoxy
- mov esi, offset buttonB
- mov edx, esi
- call WriteString
- call Crlf
- mov dl, 56
- mov dh, 25
- call Gotoxy
- mov esi, offset start
- mov edx, esi
- call WriteString
- call Crlf
- mov dl, 0
- mov dh, 29
- call Gotoxy
- mov esi, offset createdBy
- mov edx, esi
- call WriteString
- call askForName
- ret
- titleScreen ENDP
- ;--------------------------------------------------------------------------------------------------------
- ; RULE SCREEN
- ;--------------------------------------------------------------------------------------------------------
- ; GOTO RULESCREEN
- ruleScreen PROC
- ;pushad
- ;call Clrscr
- mov esi, offset hellomessage
- mov edx, esi
- call WriteString
- call Crlf
- call Crlf
- mov esi, offset setup
- mov edx, esi
- call WriteString
- call Crlf
- mov esi, offset setupB
- mov edx, esi
- call WriteString
- call Crlf
- mov esi, offset objective
- mov edx, esi
- call WriteString
- call Crlf
- ; x and y are in dh and dl respectively
- call Crlf
- mov esi, offset rule1
- mov edx, esi
- call WriteString
- call Crlf
- mov esi, offset rule2
- mov edx, esi
- call WriteString
- call Crlf
- mov esi, offset rule3
- mov edx, esi
- call WriteString
- call Crlf
- mov esi, offset rule4
- mov edx, esi
- call WriteString
- call Crlf
- mov dl, 80
- mov dh, 25
- call Gotoxy
- mov esi, offset button
- mov edx, esi
- call WriteString
- call Crlf
- mov dl, 78
- mov dh, 23
- mov ecx, 15
- L1:
- mov ah, dh
- mov al, dl
- call Gotoxy
- mov esi, offset underScore
- mov edx, esi
- call WriteString
- mov dh, ah
- mov dl, al
- inc dl
- Loop L1
- mov dl, 78
- mov dh, 26
- mov ecx, 15
- L2:
- mov ah, dh
- mov al, dl
- call Gotoxy
- mov esi, offset underScore
- mov edx, esi
- call WriteString
- mov dh, ah
- mov dl, al
- inc dl
- Loop L2
- mov dl, 77
- mov dh, 24
- mov ecx, 3
- L3:
- mov ah, dh
- mov al, dl
- call Gotoxy
- mov esi, offset line
- mov edx, esi
- call WriteString
- mov dh, ah
- mov dl, al
- inc dh
- Loop L3
- mov dl, 93
- mov dh, 24
- mov ecx, 3
- L4:
- mov ah, dh
- mov al, dl
- call Gotoxy
- mov esi, offset line
- mov edx, esi
- call WriteString
- mov dh, ah
- mov dl, al
- inc dh
- Loop L4
- ret
- ruleScreen ENDP
- ;--------------------------------------------------------------------------------------------------------
- ; DRAW THE BOARD WITH PLAYER 2'S HITS ON PLAYER 1
- ;--------------------------------------------------------------------------------------------------------
- ; GOTO DISPLAYPLAYER1BOARD
- displayPlayer1Board PROC
- mov edi, offset player1board
- mov eax, 0
- mov dl, 15
- mov dh, 10
- call Gotoxy
- ; ROW 1 OF THE BOARD CONTAINS PIPES
- mov esi, offset board01
- mov edx, esi
- call WriteString
- call Crlf
- mov dl, 15
- mov dh, 11
- call Gotoxy
- ; ROW 2 OF THE BOARD CONTAINS THE NUMBERS
- mov esi, offset board02
- mov edx, esi
- call WriteString
- call Crlf
- mov dl, 15
- mov dh, 12
- call Gotoxy
- ; ROW 3 OF THE BOARD CONTAINS PIPES
- mov esi, offset board03
- mov edx, esi
- call WriteString
- call Crlf
- mov dl, 15
- mov dh, 13
- call Gotoxy
- ; ROW 4 OF THE BOARD CONTAINS THE 1ST ROW OF THE GRID
- mov esi, offset board04
- add esi, 2
- mov ecx, 10
- Bored04:
- add esi, 2
- mov ah, [edi]
- mov [esi], ah
- inc edi
- loop Bored04
- mov esi, offset board04
- mov edx, esi
- call WriteString
- call Crlf
- mov dl, 15
- mov dh, 14
- call Gotoxy
- ; ROW 5 OF THE BOARD CONTAINS THE 2ND ROW OF THE GRID
- mov esi, offset board05
- add esi, 2
- mov ecx, 10
- Bored05:
- add esi, 2
- mov ah, [edi]
- mov [esi], ah
- inc edi
- loop Bored05
- mov esi, offset board05
- mov edx, esi
- call WriteString
- call Crlf
- mov dl, 15
- mov dh, 15
- call Gotoxy
- ; ROW 6 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
- mov esi, offset board06
- add esi, 2
- mov ecx, 10
- Bored06:
- add esi, 2
- mov ah, [edi]
- mov [esi], ah
- inc edi
- loop Bored06
- mov esi, offset board06
- mov edx, esi
- call WriteString
- call Crlf
- mov dl, 15
- mov dh, 16
- call Gotoxy
- ; ROW 7 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
- mov esi, offset board07
- add esi, 2
- mov ecx, 10
- Bored07:
- add esi, 2
- mov ah, [edi]
- mov [esi], ah
- inc edi
- loop Bored07
- mov esi, offset board07
- mov edx, esi
- call WriteString
- call Crlf
- mov dl, 15
- mov dh, 17
- call Gotoxy
- ; ROW 8 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
- mov esi, offset board08
- add esi, 2
- mov ecx, 10
- Bored08:
- add esi, 2
- mov ah, [edi]
- mov [esi], ah
- inc edi
- loop Bored08
- mov esi, offset board08
- mov edx, esi
- call WriteString
- call Crlf
- mov dl, 15
- mov dh, 18
- call Gotoxy
- ; ROW 9 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
- mov esi, offset board09
- add esi, 2
- mov ecx, 10
- Bored09:
- add esi, 2
- mov ah, [edi]
- mov [esi], ah
- inc edi
- loop Bored09
- mov esi, offset board09
- mov edx, esi
- call WriteString
- call Crlf
- mov dl, 15
- mov dh, 19
- call Gotoxy
- ; ROW 10 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
- mov esi, offset board10
- add esi, 2
- mov ecx, 10
- Bored10:
- add esi, 2
- mov ah, [edi]
- mov [esi], ah
- inc edi
- loop Bored10
- mov esi, offset board10
- mov edx, esi
- call WriteString
- call Crlf
- mov dl, 15
- mov dh, 20
- call Gotoxy
- ; ROW 11 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
- mov esi, offset board11
- add esi, 2
- mov ecx, 10
- Bored11:
- add esi, 2
- mov ah, [edi]
- mov [esi], ah
- inc edi
- loop Bored11
- mov esi, offset board11
- mov edx, esi
- call WriteString
- call Crlf
- mov dl, 15
- mov dh, 21
- call Gotoxy
- ; ROW 12 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
- mov esi, offset board12
- add esi, 2
- mov ecx, 10
- Bored12:
- add esi, 2
- mov ah, [edi]
- mov [esi], ah
- inc edi
- loop Bored12
- mov esi, offset board12
- mov edx, esi
- call WriteString
- call Crlf
- mov dl, 15
- mov dh, 22
- call Gotoxy
- ; ROW 13 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
- mov esi, offset board13
- add esi, 2
- mov ecx, 10
- Bored13:
- add esi, 2
- mov ah, [edi]
- mov [esi], ah
- inc edi
- loop Bored13
- mov esi, offset board13
- mov edx, esi
- call WriteString
- call Crlf
- mov dl, 15
- mov dh, 23
- call Gotoxy
- ; ROW 14 OF THE BOARD CONTAINS PIPES
- mov esi, offset board14
- mov edx, esi
- call WriteString
- call Crlf
- ret
- displayPlayer1Board ENDP
- ;--------------------------------------------------------------------------------------------------------
- ; DRAW THE BOARD WITH PLAYER 2'S HITS ON PLAYER 1
- ;--------------------------------------------------------------------------------------------------------
- ; GOTO DISPLAYPLAYER2VISIBLEBOARD
- displayPlayer2VisibleBoard PROC
- mov edi, offset player2visibleboard
- mov eax, 0
- mov dl, 75
- mov dh, 10
- call Gotoxy
- ; ROW 1 OF THE BOARD CONTAINS PIPES
- mov esi, offset board01
- mov edx, esi
- call WriteString
- call Crlf
- mov dl, 75
- mov dh, 11
- call Gotoxy
- ; ROW 2 OF THE BOARD CONTAINS THE NUMBERS
- mov esi, offset board02
- mov edx, esi
- call WriteString
- call Crlf
- mov dl, 75
- mov dh, 12
- call Gotoxy
- ; ROW 3 OF THE BOARD CONTAINS PIPES
- mov esi, offset board03
- mov edx, esi
- call WriteString
- call Crlf
- mov dl, 75
- mov dh, 13
- call Gotoxy
- ; ROW 4 OF THE BOARD CONTAINS THE 1ST ROW OF THE GRID
- mov esi, offset board04
- add esi, 2
- mov ecx, 10
- Bored04:
- add esi, 2
- mov ah, [edi]
- mov [esi], ah
- inc edi
- loop Bored04
- mov esi, offset board04
- mov edx, esi
- call WriteString
- call Crlf
- mov dl, 75
- mov dh, 14
- call Gotoxy
- ; ROW 5 OF THE BOARD CONTAINS THE 2ND ROW OF THE GRID
- mov esi, offset board05
- add esi, 2
- mov ecx, 10
- Bored05:
- add esi, 2
- mov ah, [edi]
- mov [esi], ah
- inc edi
- loop Bored05
- mov esi, offset board05
- mov edx, esi
- call WriteString
- call Crlf
- mov dl, 75
- mov dh, 15
- call Gotoxy
- ; ROW 6 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
- mov esi, offset board06
- add esi, 2
- mov ecx, 10
- Bored06:
- add esi, 2
- mov ah, [edi]
- mov [esi], ah
- inc edi
- loop Bored06
- mov esi, offset board06
- mov edx, esi
- call WriteString
- call Crlf
- mov dl, 75
- mov dh, 16
- call Gotoxy
- ; ROW 7 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
- mov esi, offset board07
- add esi, 2
- mov ecx, 10
- Bored07:
- add esi, 2
- mov ah, [edi]
- mov [esi], ah
- inc edi
- loop Bored07
- mov esi, offset board07
- mov edx, esi
- call WriteString
- call Crlf
- mov dl, 75
- mov dh, 17
- call Gotoxy
- ; ROW 8 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
- mov esi, offset board08
- add esi, 2
- mov ecx, 10
- Bored08:
- add esi, 2
- mov ah, [edi]
- mov [esi], ah
- inc edi
- loop Bored08
- mov esi, offset board08
- mov edx, esi
- call WriteString
- call Crlf
- mov dl, 75
- mov dh, 18
- call Gotoxy
- ; ROW 9 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
- mov esi, offset board09
- add esi, 2
- mov ecx, 10
- Bored09:
- add esi, 2
- mov ah, [edi]
- mov [esi], ah
- inc edi
- loop Bored09
- mov esi, offset board09
- mov edx, esi
- call WriteString
- call Crlf
- mov dl, 75
- mov dh, 19
- call Gotoxy
- ; ROW 10 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
- mov esi, offset board10
- add esi, 2
- mov ecx, 10
- Bored10:
- add esi, 2
- mov ah, [edi]
- mov [esi], ah
- inc edi
- loop Bored10
- mov esi, offset board10
- mov edx, esi
- call WriteString
- call Crlf
- mov dl, 75
- mov dh, 20
- call Gotoxy
- ; ROW 11 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
- mov esi, offset board11
- add esi, 2
- mov ecx, 10
- Bored11:
- add esi, 2
- mov ah, [edi]
- mov [esi], ah
- inc edi
- loop Bored11
- mov esi, offset board11
- mov edx, esi
- call WriteString
- call Crlf
- mov dl, 75
- mov dh, 21
- call Gotoxy
- ; ROW 12 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
- mov esi, offset board12
- add esi, 2
- mov ecx, 10
- Bored12:
- add esi, 2
- mov ah, [edi]
- mov [esi], ah
- inc edi
- loop Bored12
- mov esi, offset board12
- mov edx, esi
- call WriteString
- call Crlf
- mov dl, 75
- mov dh, 22
- call Gotoxy
- ; ROW 13 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
- mov esi, offset board13
- add esi, 2
- mov ecx, 10
- Bored13:
- add esi, 2
- mov ah, [edi]
- mov [esi], ah
- inc edi
- loop Bored13
- mov esi, offset board13
- mov edx, esi
- call WriteString
- call Crlf
- mov dl, 75
- mov dh, 23
- call Gotoxy
- ; ROW 14 OF THE BOARD CONTAINS PIPES
- mov esi, offset board14
- mov edx, esi
- call WriteString
- call Crlf
- ret
- displayPlayer2VisibleBoard ENDP
- ;--------------------------------------------------------------------------------------------------------
- ; DRAW THE BOARD WITH PLAYER 2'S SHIPS
- ;--------------------------------------------------------------------------------------------------------
- ; GOTO DISPLAYPLAYER2HIDDENBOARD
- displayPlayer2HiddenBoard PROC
- mov edi, offset player2hiddenboard
- mov eax, 0
- mov dl, 75
- mov dh, 10
- call Gotoxy
- ; ROW 1 OF THE BOARD CONTAINS PIPES
- mov esi, offset board01
- mov edx, esi
- call WriteString
- call Crlf
- mov dl, 75
- mov dh, 11
- call Gotoxy
- ; ROW 2 OF THE BOARD CONTAINS THE NUMBERS
- mov esi, offset board02
- mov edx, esi
- call WriteString
- call Crlf
- mov dl, 75
- mov dh, 12
- call Gotoxy
- ; ROW 3 OF THE BOARD CONTAINS PIPES
- mov esi, offset board03
- mov edx, esi
- call WriteString
- call Crlf
- mov dl, 75
- mov dh, 13
- call Gotoxy
- ; ROW 4 OF THE BOARD CONTAINS THE 1ST ROW OF THE GRID
- mov esi, offset board04
- add esi, 2
- mov ecx, 10
- Bored04:
- add esi, 2
- mov ah, [edi]
- mov [esi], ah
- inc edi
- loop Bored04
- mov esi, offset board04
- mov edx, esi
- call WriteString
- call Crlf
- mov dl, 75
- mov dh, 14
- call Gotoxy
- ; ROW 5 OF THE BOARD CONTAINS THE 2ND ROW OF THE GRID
- mov esi, offset board05
- add esi, 2
- mov ecx, 10
- Bored05:
- add esi, 2
- mov ah, [edi]
- mov [esi], ah
- inc edi
- loop Bored05
- mov esi, offset board05
- mov edx, esi
- call WriteString
- call Crlf
- mov dl, 75
- mov dh, 15
- call Gotoxy
- ; ROW 6 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
- mov esi, offset board06
- add esi, 2
- mov ecx, 10
- Bored06:
- add esi, 2
- mov ah, [edi]
- mov [esi], ah
- inc edi
- loop Bored06
- mov esi, offset board06
- mov edx, esi
- call WriteString
- call Crlf
- mov dl, 75
- mov dh, 16
- call Gotoxy
- ; ROW 7 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
- mov esi, offset board07
- add esi, 2
- mov ecx, 10
- Bored07:
- add esi, 2
- mov ah, [edi]
- mov [esi], ah
- inc edi
- loop Bored07
- mov esi, offset board07
- mov edx, esi
- call WriteString
- call Crlf
- mov dl, 75
- mov dh, 17
- call Gotoxy
- ; ROW 8 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
- mov esi, offset board08
- add esi, 2
- mov ecx, 10
- Bored08:
- add esi, 2
- mov ah, [edi]
- mov [esi], ah
- inc edi
- loop Bored08
- mov esi, offset board08
- mov edx, esi
- call WriteString
- call Crlf
- mov dl, 75
- mov dh, 18
- call Gotoxy
- ; ROW 9 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
- mov esi, offset board09
- add esi, 2
- mov ecx, 10
- Bored09:
- add esi, 2
- mov ah, [edi]
- mov [esi], ah
- inc edi
- loop Bored09
- mov esi, offset board09
- mov edx, esi
- call WriteString
- call Crlf
- mov dl, 75
- mov dh, 19
- call Gotoxy
- ; ROW 10 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
- mov esi, offset board10
- add esi, 2
- mov ecx, 10
- Bored10:
- add esi, 2
- mov ah, [edi]
- mov [esi], ah
- inc edi
- loop Bored10
- mov esi, offset board10
- mov edx, esi
- call WriteString
- call Crlf
- mov dl, 75
- mov dh, 20
- call Gotoxy
- ; ROW 11 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
- mov esi, offset board11
- add esi, 2
- mov ecx, 10
- Bored11:
- add esi, 2
- mov ah, [edi]
- mov [esi], ah
- inc edi
- loop Bored11
- mov esi, offset board11
- mov edx, esi
- call WriteString
- call Crlf
- mov dl, 75
- mov dh, 21
- call Gotoxy
- ; ROW 12 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
- mov esi, offset board12
- add esi, 2
- mov ecx, 10
- Bored12:
- add esi, 2
- mov ah, [edi]
- mov [esi], ah
- inc edi
- loop Bored12
- mov esi, offset board12
- mov edx, esi
- call WriteString
- call Crlf
- mov dl, 75
- mov dh, 22
- call Gotoxy
- ; ROW 13 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
- mov esi, offset board13
- add esi, 2
- mov ecx, 10
- Bored13:
- add esi, 2
- mov ah, [edi]
- mov [esi], ah
- inc edi
- loop Bored13
- mov esi, offset board13
- mov edx, esi
- call WriteString
- call Crlf
- mov dl, 75
- mov dh, 23
- call Gotoxy
- ; ROW 14 OF THE BOARD CONTAINS PIPES
- mov esi, offset board14
- mov edx, esi
- call WriteString
- call Crlf
- ret
- displayPlayer2HiddenBoard ENDP
- ;--------------------------------------------------------------------------------------------------------
- ; GRID
- ; - Displays Player 1's grid
- ;--------------------------------------------------------------------------------------------------------
- ; GOTO GRID
- grid PROC
- call displayPlayer1Board
- ret
- mov dl, 15
- mov dh, 10
- call Gotoxy
- mov esi, offset board01
- mov edx, esi
- call WriteString
- call Crlf
- mov dl, 15
- mov dh, 11
- call Gotoxy
- mov esi, offset board02
- mov edx, esi
- call WriteString
- call Crlf
- mov dl, 15
- mov dh, 12
- call Gotoxy
- mov esi, offset board03
- mov edx, esi
- call WriteString
- call Crlf
- mov dl, 15
- mov dh, 13
- call Gotoxy
- mov esi, offset board04
- mov edx, esi
- call WriteString
- call Crlf
- mov dl, 15
- mov dh, 14
- call Gotoxy
- mov esi, offset board05
- mov edx, esi
- call WriteString
- call Crlf
- mov dl, 15
- mov dh, 15
- call Gotoxy
- mov esi, offset board06
- mov edx, esi
- call WriteString
- call Crlf
- mov dl, 15
- mov dh, 16
- call Gotoxy
- mov esi, offset board07
- mov edx, esi
- call WriteString
- call Crlf
- mov dl, 15
- mov dh, 17
- call Gotoxy
- mov esi, offset board08
- mov edx, esi
- call WriteString
- call Crlf
- mov dl, 15
- mov dh, 18
- call Gotoxy
- mov esi, offset board09
- mov edx, esi
- call WriteString
- call Crlf
- mov dl, 15
- mov dh, 19
- call Gotoxy
- mov esi, offset board10
- mov edx, esi
- call WriteString
- call Crlf
- mov dl, 15
- mov dh, 20
- call Gotoxy
- mov esi, offset board11
- mov edx, esi
- call WriteString
- call Crlf
- mov dl, 15
- mov dh, 21
- call Gotoxy
- mov esi, offset board12
- mov edx, esi
- call WriteString
- call Crlf
- mov dl, 15
- mov dh, 22
- call Gotoxy
- mov esi, offset board13
- mov edx, esi
- call WriteString
- call Crlf
- mov dl, 15
- mov dh, 23
- call Gotoxy
- mov esi, offset board14
- mov edx, esi
- call WriteString
- call Crlf
- ret
- grid ENDP
- ;--------------------------------------------------------------------------------------------------------
- ; GRID ENEMY
- ; - Displays Player 2's grid
- ;--------------------------------------------------------------------------------------------------------
- ; GOTO GRIDENEMY
- gridEnemy PROC
- call displayPlayer2VisibleBoard
- mov dl, 75
- mov dh, 10
- call Gotoxy
- mov esi, offset board01
- mov edx, esi
- call WriteString
- call Crlf
- mov dl, 75
- mov dh, 11
- call Gotoxy
- mov esi, offset board02
- mov edx, esi
- call WriteString
- call Crlf
- mov dl, 75
- mov dh, 12
- call Gotoxy
- mov esi, offset board03
- mov edx, esi
- call WriteString
- call Crlf
- mov dl, 75
- mov dh, 13
- call Gotoxy
- mov esi, offset board04
- mov edx, esi
- call WriteString
- call Crlf
- mov dl, 75
- mov dh, 14
- call Gotoxy
- mov esi, offset board05
- mov edx, esi
- call WriteString
- call Crlf
- mov dl, 75
- mov dh, 15
- call Gotoxy
- mov esi, offset board06
- mov edx, esi
- call WriteString
- call Crlf
- mov dl, 75
- mov dh, 16
- call Gotoxy
- mov esi, offset board07
- mov edx, esi
- call WriteString
- call Crlf
- mov dl, 75
- mov dh, 17
- call Gotoxy
- mov esi, offset board08
- mov edx, esi
- call WriteString
- call Crlf
- mov dl, 75
- mov dh, 18
- call Gotoxy
- mov esi, offset board09
- mov edx, esi
- call WriteString
- call Crlf
- mov dl, 75
- mov dh, 19
- call Gotoxy
- mov esi, offset board10
- mov edx, esi
- call WriteString
- call Crlf
- mov dl, 75
- mov dh, 20
- call Gotoxy
- mov esi, offset board11
- mov edx, esi
- call WriteString
- call Crlf
- mov dl, 75
- mov dh, 21
- call Gotoxy
- mov esi, offset board12
- mov edx, esi
- call WriteString
- call Crlf
- mov dl, 75
- mov dh, 22
- call Gotoxy
- mov esi, offset board13
- mov edx, esi
- call WriteString
- call Crlf
- mov dl, 75
- mov dh, 23
- call Gotoxy
- mov esi, offset board14
- mov edx, esi
- call WriteString
- call Crlf
- ret
- gridEnemy ENDP
- ;--------------------------------------------------------------------------------------------------------
- ; PRINTS OUT A GIANT B
- ;--------------------------------------------------------------------------------------------------------
- ; GOTO LETTERB
- letterB PROC
- mov ecx, lengthof XvalueB
- mov esi, offset XvalueB
- mov edi, offset YvalueB
- mov eax, 219
- LevelPrint:
- push eax
- mov eax, 50
- call Delay
- pop eax
- mov dl, [esi]
- mov dh, [edi]
- call Gotoxy
- call WriteChar
- add esi, type XvalueB
- add edi, type YvalueB
- Loop LevelPrint
- ret
- letterB ENDP
- ;--------------------------------------------------------------------------------------------------------
- ; PRINTS OUT A GIANT A
- ;--------------------------------------------------------------------------------------------------------
- ; GOTO LETTERA
- letterA PROC
- mov ecx, lengthof XvalueA
- mov esi, offset XvalueA
- mov edi, offset YvalueA
- mov eax, 219
- LevelPrint:
- push eax
- mov eax, 50
- call Delay
- pop eax
- mov dl, [esi]
- mov dh, [edi]
- call Gotoxy
- call WriteChar
- add esi, type XvalueA
- add edi, type YvalueA
- Loop LevelPrint
- ret
- letterA ENDP
- ;--------------------------------------------------------------------------------------------------------
- ; PRINTS OUT A GIANT T
- ;--------------------------------------------------------------------------------------------------------
- ; GOTO LETTERTFIRST
- letterTfirst PROC
- mov ecx, lengthof XvalueTfirst
- mov esi, offset XvalueTfirst
- mov edi, offset YvalueTfirst
- mov eax, 219
- LevelPrint:
- push eax
- mov eax, 50
- call Delay
- pop eax
- mov dl, [esi]
- mov dh, [edi]
- call Gotoxy
- call WriteChar
- add esi, type XvalueTfirst
- add edi, type YvalueTfirst
- Loop LevelPrint
- ret
- letterTfirst ENDP
- ;--------------------------------------------------------------------------------------------------------
- ; PRINTS OUT A GIANT T
- ;--------------------------------------------------------------------------------------------------------
- ; GOTO LETTERTSECOND
- letterTsecond PROC
- mov ecx, lengthof XvalueTsecond
- mov esi, offset XvalueTsecond
- mov edi, offset YvalueTsecond
- mov eax, 219
- LevelPrint:
- push eax
- mov eax, 50
- call Delay
- pop eax
- mov dl, [esi]
- mov dh, [edi]
- call Gotoxy
- call WriteChar
- add esi, type XvalueTsecond
- add edi, type YvalueTsecond
- Loop LevelPrint
- ret
- letterTsecond ENDP
- ;--------------------------------------------------------------------------------------------------------
- ; PRINTS OUT A GIANT L (the L stands for Josh)
- ;--------------------------------------------------------------------------------------------------------
- ; GOTO LETTERL
- letterL PROC
- mov ecx, lengthof XvalueL
- mov esi, offset XvalueL
- mov edi, offset YvalueL
- mov eax, 219
- LevelPrint:
- push eax
- mov eax, 50
- call Delay
- pop eax
- mov dl, [esi]
- mov dh, [edi]
- call Gotoxy
- call WriteChar
- add esi, type XvalueL
- add edi, type YvalueL
- Loop LevelPrint
- ret
- letterL ENDP
- ;--------------------------------------------------------------------------------------------------------
- ; PRINTS OUT A GIANT E
- ;--------------------------------------------------------------------------------------------------------
- ; GOTO LETTERE
- letterE PROC
- mov ecx, lengthof XvalueE
- mov esi, offset XvalueE
- mov edi, offset YvalueE
- mov eax, 219
- LevelPrint:
- push eax
- mov eax, 50
- call Delay
- pop eax
- mov dl, [esi]
- mov dh, [edi]
- call Gotoxy
- call WriteChar
- add esi, type XvalueE
- add edi, type YvalueE
- Loop LevelPrint
- ret
- letterE ENDP
- ;--------------------------------------------------------------------------------------------------------
- ; PRINTS OUT A GIANT S
- ;--------------------------------------------------------------------------------------------------------
- ; GOTO LETTERS
- letterS PROC
- mov ecx, lengthof XvalueS
- mov esi, offset XvalueS
- mov edi, offset YvalueS
- mov eax, 219
- LevelPrint:
- push eax
- mov eax, 50
- call Delay
- pop eax
- mov dl, [esi]
- mov dh, [edi]
- call Gotoxy
- call WriteChar
- add esi, type XvalueS
- add edi, type YvalueS
- Loop LevelPrint
- ret
- letterS ENDP
- ;--------------------------------------------------------------------------------------------------------
- ; PRINTS OUT A GIANT H
- ;--------------------------------------------------------------------------------------------------------
- ; GOTO LETTERH
- letterH PROC
- mov ecx, lengthof XvalueH
- mov esi, offset XvalueH
- mov edi, offset YvalueH
- mov eax, 219
- LevelPrint:
- push eax
- mov eax, 50
- call Delay
- pop eax
- mov dl, [esi]
- mov dh, [edi]
- call Gotoxy
- call WriteChar
- add esi, type XvalueH
- add edi, type YvalueH
- Loop LevelPrint
- ret
- letterH ENDP
- ;--------------------------------------------------------------------------------------------------------
- ; PRINTS OUT A GIANT I
- ;--------------------------------------------------------------------------------------------------------
- ; GOTO LETTERI
- letterI PROC
- mov ecx, lengthof XvalueI
- mov esi, offset XvalueI
- mov edi, offset YvalueI
- mov eax, 219
- LevelPrint:
- push eax
- mov eax, 50
- call Delay
- pop eax
- mov dl, [esi]
- mov dh, [edi]
- call Gotoxy
- call WriteChar
- add esi, type XvalueI
- add edi, type YvalueI
- Loop LevelPrint
- ret
- letterI ENDP
- ;--------------------------------------------------------------------------------------------------------
- ; PRINTS OUT A GIANT P
- ;--------------------------------------------------------------------------------------------------------
- ; GOTO LETTERP
- letterP PROC
- mov ecx, lengthof XvalueP
- mov esi, offset XvalueP
- mov edi, offset YvalueP
- mov eax, 219
- LevelPrint:
- push eax
- mov eax, 50
- call Delay
- pop eax
- mov dl, [esi]
- mov dh, [edi]
- call Gotoxy
- call WriteChar
- add esi, type XvalueP
- add edi, type YvalueP
- Loop LevelPrint
- ret
- letterP ENDP
- ;--------------------------------------------------------------------------------------------------------
- ; PRINTS OUT A GIANT !
- ;--------------------------------------------------------------------------------------------------------
- ; GOTO LETTEREX1
- letterEx1 PROC
- mov ecx, lengthof xValueEx1
- mov esi, offset xValueEx1
- mov edi, offset yValueEx1
- mov eax, 219
- LevelPrint:
- push eax
- mov eax, 50
- call Delay
- pop eax
- mov dl, [esi]
- mov dh, [edi]
- call Gotoxy
- call WriteChar
- add esi, type xValueEx1
- add edi, type yValueEx1
- Loop LevelPrint
- ret
- letterEx1 ENDP
- ;--------------------------------------------------------------------------------------------------------
- ; PRINTS OUT A GIANT !
- ;--------------------------------------------------------------------------------------------------------
- ; GOTO LETTEREX2
- letterEx2 PROC
- mov ecx, lengthof xValueEx2
- mov esi, offset xValueEx2
- mov edi, offset yValueEx2
- mov eax, 219
- LevelPrint:
- push eax
- mov eax, 50
- call Delay
- pop eax
- mov dl, [esi]
- mov dh, [edi]
- call Gotoxy
- call WriteChar
- add esi, type xValueEx2
- add edi, type yValueEx2
- Loop LevelPrint
- ret
- letterEx2 ENDP
- ;--------------------------------------------------------------------------------------------------------
- ; PRINTS OUT A GIANT !
- ;--------------------------------------------------------------------------------------------------------
- ; GOTO LETTEREX3
- letterEx3 PROC
- mov ecx, lengthof xValueEx3
- mov esi, offset xValueEx3
- mov edi, offset yValueEx3
- mov eax, 219
- LevelPrint:
- push eax
- mov eax, 50
- call Delay
- pop eax
- mov dl, [esi]
- mov dh, [edi]
- call Gotoxy
- call WriteChar
- add esi, type xValueEx3
- add edi, type yValueEx3
- Loop LevelPrint
- ret
- letterEx3 ENDP
- ;--------------------------------------------------------------------------------------------------------
- ; PRINTS OUT A GIANT !
- ;--------------------------------------------------------------------------------------------------------
- ; GOTO LETTEREX3
- letterEx4 PROC
- mov ecx, lengthof xValueEx4
- mov esi, offset xValueEx4
- mov edi, offset yValueEx4
- mov eax, 219
- LevelPrint:
- push eax
- mov eax, 50
- call Delay
- pop eax
- mov dl, [esi]
- mov dh, [edi]
- call Gotoxy
- call WriteChar
- add esi, type xValueEx4
- add edi, type yValueEx4
- Loop LevelPrint
- ret
- letterEx4 ENDP
- ;--------------------------------------------------------------------------------------------------------
- ; PRINTS OUT A GIANT !
- ;--------------------------------------------------------------------------------------------------------
- ; GOTO LETTEREX3
- letterEx5 PROC
- mov ecx, lengthof xValueEx5
- mov esi, offset xValueEx5
- mov edi, offset yValueEx5
- mov eax, 219
- LevelPrint:
- push eax
- mov eax, 50
- call Delay
- pop eax
- mov dl, [esi]
- mov dh, [edi]
- call Gotoxy
- call WriteChar
- add esi, type xValueEx5
- add edi, type yValueEx5
- Loop LevelPrint
- ret
- letterEx5 ENDP
- ;--------------------------------------------------------------------------------------------------------
- ; PICKS THE ORIENTATION OF THE CARRIER
- ;--------------------------------------------------------------------------------------------------------
- ; GOTO CARRIERORIENTATIONCLICK
- CarrierOrientationClick PROC
- invoke GetStdHandle, STD_INPUT_HANDLE
- mov rHnd, eax
- invoke SetConsoleMode, rHnd, ENABLE_LINE_INPUT OR ENABLE_MOUSE_INPUT OR ENABLE_EXTENDED_FLAGS
- appContinue:
- invoke GetNumberOfConsoleInputEvents, rHnd, OFFSET numEventsOccurred
- cmp numEventsOccurred, 0
- je appContinue
- invoke ReadConsoleInput, rHnd, OFFSET eventBuffer, numEventsOccurred, OFFSET numEventsRead
- mov ecx, numEventsRead
- mov esi, OFFSET eventBuffer
- loopOverEvents:
- cmp (INPUT_RECORD PTR [esi]).EventType, MOUSE_EVENT
- jne notMouse
- cmp (INPUT_RECORD PTR [esi]).MouseEvent.dwEventFlags, MOUSE_MOVED
- jne continue
- continue:
- test (INPUT_RECORD PTR [esi]).MouseEvent.dwButtonState, FROM_LEFT_1ST_BUTTON_PRESSED
- jz notMouse
- movzx eax, (INPUT_RECORD PTR [esi]).MouseEvent.dwMousePosition.x
- mov decision, eax
- cmp decision, 70
- je Yposition
- cmp decision, 75
- je Yposition
- call Crlf
- mov edx, offset promptoverlap
- call WriteString
- call CarrierOrientationClick
- Yposition:
- movzx eax, (INPUT_RECORD PTR [esi]).MouseEvent.dwMousePosition.y
- cmp eax, 13
- je HorizontalDone
- call Crlf
- mov edx, offset promptoverlap
- call WriteString
- call CarrierOrientationClick
- notMouse:
- add esi, TYPE INPUT_RECORD
- loop loopOverEvents
- jmp appContinue
- HorizontalDone:
- cmp decision, 75
- jne VerticalDone
- mov orientation, 0
- mov edx, offset horizontalChoice
- call Crlf
- call WriteString
- jmp DoneDone
- VerticalDone:
- mov orientation, 1
- mov edx, offset verticalChoice
- call Crlf
- call WriteString
- DoneDone:
- call CarrierPlacementClick
- invoke ExitProcess, 0
- ret
- CarrierOrientationClick ENDP
- ;--------------------------------------------------------------------------------------------------------
- ; PICKS THE PLACEMENT OF THE CARRIER
- ;--------------------------------------------------------------------------------------------------------
- ; GOTO CARRIERPLACEMENTCLICK
- CarrierPlacementClick PROC
- mov lengthship, 5
- StartPlacement:
- invoke GetStdHandle, STD_INPUT_HANDLE
- mov rHndPlacement, eax
- invoke SetConsoleMode, rHnd, ENABLE_LINE_INPUT OR ENABLE_MOUSE_INPUT OR ENABLE_EXTENDED_FLAGS
- appContinuePlacement:
- invoke GetNumberOfConsoleInputEvents, rHndPlacement, OFFSET numEventsOccurredPlacement
- cmp numEventsOccurredPlacement, 0
- je appContinuePlacement
- invoke ReadConsoleInput, rHndPlacement, OFFSET eventBufferPlacement, numEventsOccurredPlacement, OFFSET numEventsReadPlacement
- mov ecx, numEventsReadPlacement
- mov esi, OFFSET eventBufferPlacement
- loopOverEventsPlacement:
- cmp (INPUT_RECORD PTR [esi]).EventType, MOUSE_EVENT
- jne notMousePlacement
- cmp (INPUT_RECORD PTR [esi]).MouseEvent.dwEventFlags, MOUSE_MOVED
- jne continuePlacement
- continuePlacement:
- test (INPUT_RECORD PTR [esi]).MouseEvent.dwButtonState, FROM_LEFT_1ST_BUTTON_PRESSED
- jz notMousePlacement
- movzx eax, (INPUT_RECORD PTR [esi]).MouseEvent.dwMousePosition.x
- sub eax, 19
- mov ebx, 2
- mov edx, 0
- div ebx
- cmp al, 9
- jg StartPlacement
- cmp al, 0
- jl StartPlacement
- mov xpoint, al
- movzx eax, (INPUT_RECORD PTR [esi]).MouseEvent.dwMousePosition.y
- sub eax, 13
- cmp al, 9
- jg StartPlacement
- mov ypoint, al
- ;cmp al,
- call Crlf
- jmp DonePlacement
- notMousePlacement:
- add esi, INPUT_RECORD
- loop loopOverEventsPlacement
- jmp appContinuePlacement
- DonePlacement:
- call validShipPlacement1
- call displayPlayer1Board
- mov eax, 1000
- call Delay
- call ship2Screen
- invoke ExitProcess, 0
- ret
- CarrierPlacementClick ENDP
- ;--------------------------------------------------------------------------------------------------------
- ; PICKS THE ORIENTATION OF THE BATTLESHIP
- ;--------------------------------------------------------------------------------------------------------
- ; GOTO BATTLEORIENTATIONCLICK
- BattleOrientationClick PROC
- invoke GetStdHandle, STD_INPUT_HANDLE
- mov rHnd, eax
- invoke SetConsoleMode, rHnd, ENABLE_LINE_INPUT OR ENABLE_MOUSE_INPUT OR ENABLE_EXTENDED_FLAGS
- appContinue:
- invoke GetNumberOfConsoleInputEvents, rHnd, OFFSET numEventsOccurred
- cmp numEventsOccurred, 0
- je appContinue
- invoke ReadConsoleInput, rHnd, OFFSET eventBuffer, numEventsOccurred, OFFSET numEventsRead
- mov ecx, numEventsRead
- mov esi, OFFSET eventBuffer
- loopOverEvents:
- cmp (INPUT_RECORD PTR [esi]).EventType, MOUSE_EVENT
- jne notMouse
- cmp (INPUT_RECORD PTR [esi]).MouseEvent.dwEventFlags, MOUSE_MOVED
- jne continue
- continue:
- test (INPUT_RECORD PTR [esi]).MouseEvent.dwButtonState, FROM_LEFT_1ST_BUTTON_PRESSED
- jz notMouse
- movzx eax, (INPUT_RECORD PTR [esi]).MouseEvent.dwMousePosition.x
- mov decision, eax
- cmp decision, 70
- je Yposition
- cmp decision, 75
- je Yposition
- call Crlf
- mov edx, offset promptoverlap
- call WriteString
- call BattleOrientationClick
- Yposition:
- movzx eax, (INPUT_RECORD PTR [esi]).MouseEvent.dwMousePosition.y
- cmp eax, 13
- je HorizontalDone
- call Crlf
- mov edx, offset promptoverlap
- call WriteString
- call BattleOrientationClick
- notMouse:
- add esi, TYPE INPUT_RECORD
- loop loopOverEvents
- jmp appContinue
- HorizontalDone:
- cmp decision, 75
- jne VerticalDone
- mov orientation, 0
- mov edx, offset horizontalChoice
- call Crlf
- call WriteString
- jmp DoneDone
- VerticalDone:
- mov orientation, 1
- mov edx, offset verticalChoice
- call Crlf
- call WriteString
- DoneDone:
- call BattlePlacementClick
- invoke ExitProcess, 0
- ret
- BattleOrientationClick ENDP
- ;--------------------------------------------------------------------------------------------------------
- ; PICKS THE PLACEMENT OF THE BATTLESHIP
- ;--------------------------------------------------------------------------------------------------------
- ; GOTO BATTLEPLACEMENTCLICK
- BattlePlacementClick PROC
- mov lengthship, 4
- StartPlacement:
- invoke GetStdHandle, STD_INPUT_HANDLE
- mov rHndPlacement, eax
- invoke SetConsoleMode, rHnd, ENABLE_LINE_INPUT OR ENABLE_MOUSE_INPUT OR ENABLE_EXTENDED_FLAGS
- appContinuePlacement:
- invoke GetNumberOfConsoleInputEvents, rHndPlacement, OFFSET numEventsOccurredPlacement
- cmp numEventsOccurredPlacement, 0
- je appContinuePlacement
- invoke ReadConsoleInput, rHndPlacement, OFFSET eventBufferPlacement, numEventsOccurredPlacement, OFFSET numEventsReadPlacement
- mov ecx, numEventsReadPlacement
- mov esi, OFFSET eventBufferPlacement
- loopOverEventsPlacement:
- cmp (INPUT_RECORD PTR [esi]).EventType, MOUSE_EVENT
- jne notMousePlacement
- cmp (INPUT_RECORD PTR [esi]).MouseEvent.dwEventFlags, MOUSE_MOVED
- jne continuePlacement
- continuePlacement:
- test (INPUT_RECORD PTR [esi]).MouseEvent.dwButtonState, FROM_LEFT_1ST_BUTTON_PRESSED
- jz notMousePlacement
- movzx eax, (INPUT_RECORD PTR [esi]).MouseEvent.dwMousePosition.x
- sub eax, 19
- mov ebx, 2
- mov edx, 0
- div ebx
- cmp al, 9
- jg StartPlacement
- cmp al, 0
- jl StartPlacement
- mov xpoint, al
- movzx eax, (INPUT_RECORD PTR [esi]).MouseEvent.dwMousePosition.y
- sub eax, 13
- cmp al, 9
- jg StartPlacement
- mov ypoint, al
- ;cmp al,
- call Crlf
- jmp DonePlacement
- notMousePlacement:
- add esi, INPUT_RECORD
- loop loopOverEventsPlacement
- jmp appContinuePlacement
- DonePlacement:
- call validShipPlacement1
- call displayPlayer1Board
- mov eax, 1000
- call Delay
- call ship3Screen
- invoke ExitProcess, 0
- ret
- BattlePlacementClick ENDP
- ;--------------------------------------------------------------------------------------------------------
- ; PICKS THE ORIENTATION OF THE CRUISER
- ;--------------------------------------------------------------------------------------------------------
- ; GOTO CRUISERORIENTATIONCLICK
- CruiserOrientationClick PROC
- invoke GetStdHandle, STD_INPUT_HANDLE
- mov rHnd, eax
- invoke SetConsoleMode, rHnd, ENABLE_LINE_INPUT OR ENABLE_MOUSE_INPUT OR ENABLE_EXTENDED_FLAGS
- appContinue:
- invoke GetNumberOfConsoleInputEvents, rHnd, OFFSET numEventsOccurred
- cmp numEventsOccurred, 0
- je appContinue
- invoke ReadConsoleInput, rHnd, OFFSET eventBuffer, numEventsOccurred, OFFSET numEventsRead
- mov ecx, numEventsRead
- mov esi, OFFSET eventBuffer
- loopOverEvents:
- cmp (INPUT_RECORD PTR [esi]).EventType, MOUSE_EVENT
- jne notMouse
- cmp (INPUT_RECORD PTR [esi]).MouseEvent.dwEventFlags, MOUSE_MOVED
- jne continue
- continue:
- test (INPUT_RECORD PTR [esi]).MouseEvent.dwButtonState, FROM_LEFT_1ST_BUTTON_PRESSED
- jz notMouse
- movzx eax, (INPUT_RECORD PTR [esi]).MouseEvent.dwMousePosition.x
- mov decision, eax
- cmp decision, 70
- je Yposition
- cmp decision, 75
- je Yposition
- call Crlf
- mov edx, offset promptoverlap
- call WriteString
- call CruiserOrientationClick
- Yposition:
- movzx eax, (INPUT_RECORD PTR [esi]).MouseEvent.dwMousePosition.y
- cmp eax, 13
- je HorizontalDone
- call Crlf
- mov edx, offset promptoverlap
- call WriteString
- call CruiserOrientationClick
- notMouse:
- add esi, TYPE INPUT_RECORD
- loop loopOverEvents
- jmp appContinue
- HorizontalDone:
- cmp decision, 75
- jne VerticalDone
- mov orientation, 0
- mov edx, offset horizontalChoice
- call Crlf
- call WriteString
- jmp DoneDone
- VerticalDone:
- mov orientation, 1
- mov edx, offset verticalChoice
- call Crlf
- call WriteString
- DoneDone:
- call CruiserPlacementClick
- invoke ExitProcess, 0
- ret
- CruiserOrientationClick ENDP
- ;--------------------------------------------------------------------------------------------------------
- ; PICKS THE PLACEMENT OF THE CRUISER
- ;--------------------------------------------------------------------------------------------------------
- ; GOTO CRUISERPLACEMENTCLICK
- CruiserPlacementClick PROC
- mov lengthship, 3
- StartPlacement:
- invoke GetStdHandle, STD_INPUT_HANDLE
- mov rHndPlacement, eax
- invoke SetConsoleMode, rHnd, ENABLE_LINE_INPUT OR ENABLE_MOUSE_INPUT OR ENABLE_EXTENDED_FLAGS
- appContinuePlacement:
- invoke GetNumberOfConsoleInputEvents, rHndPlacement, OFFSET numEventsOccurredPlacement
- cmp numEventsOccurredPlacement, 0
- je appContinuePlacement
- invoke ReadConsoleInput, rHndPlacement, OFFSET eventBufferPlacement, numEventsOccurredPlacement, OFFSET numEventsReadPlacement
- mov ecx, numEventsReadPlacement
- mov esi, OFFSET eventBufferPlacement
- loopOverEventsPlacement:
- cmp (INPUT_RECORD PTR [esi]).EventType, MOUSE_EVENT
- jne notMousePlacement
- cmp (INPUT_RECORD PTR [esi]).MouseEvent.dwEventFlags, MOUSE_MOVED
- jne continuePlacement
- continuePlacement:
- test (INPUT_RECORD PTR [esi]).MouseEvent.dwButtonState, FROM_LEFT_1ST_BUTTON_PRESSED
- jz notMousePlacement
- movzx eax, (INPUT_RECORD PTR [esi]).MouseEvent.dwMousePosition.x
- sub eax, 19
- mov ebx, 2
- mov edx, 0
- div ebx
- cmp al, 9
- jg StartPlacement
- cmp al, 0
- jl StartPlacement
- mov xpoint, al
- movzx eax, (INPUT_RECORD PTR [esi]).MouseEvent.dwMousePosition.y
- sub eax, 13
- cmp al, 9
- jg StartPlacement
- mov ypoint, al
- ;cmp al,
- call Crlf
- jmp DonePlacement
- notMousePlacement:
- add esi, INPUT_RECORD
- loop loopOverEventsPlacement
- jmp appContinuePlacement
- DonePlacement:
- call validShipPlacement1
- call displayPlayer1Board
- mov eax, 1000
- call Delay
- call ship4Screen
- invoke ExitProcess, 0
- ret
- CruiserPlacementClick ENDP
- ;--------------------------------------------------------------------------------------------------------
- ; PICKS THE ORIENTATION OF THE SUBMARINE
- ;--------------------------------------------------------------------------------------------------------
- ; GOTO SUBMARINEORIENTATIONCLICK
- SubmarineOrientationClick PROC
- invoke GetStdHandle, STD_INPUT_HANDLE
- mov rHnd, eax
- invoke SetConsoleMode, rHnd, ENABLE_LINE_INPUT OR ENABLE_MOUSE_INPUT OR ENABLE_EXTENDED_FLAGS
- appContinue:
- invoke GetNumberOfConsoleInputEvents, rHnd, OFFSET numEventsOccurred
- cmp numEventsOccurred, 0
- je appContinue
- invoke ReadConsoleInput, rHnd, OFFSET eventBuffer, numEventsOccurred, OFFSET numEventsRead
- mov ecx, numEventsRead
- mov esi, OFFSET eventBuffer
- loopOverEvents:
- cmp (INPUT_RECORD PTR [esi]).EventType, MOUSE_EVENT
- jne notMouse
- cmp (INPUT_RECORD PTR [esi]).MouseEvent.dwEventFlags, MOUSE_MOVED
- jne continue
- continue:
- test (INPUT_RECORD PTR [esi]).MouseEvent.dwButtonState, FROM_LEFT_1ST_BUTTON_PRESSED
- jz notMouse
- movzx eax, (INPUT_RECORD PTR [esi]).MouseEvent.dwMousePosition.x
- mov decision, eax
- cmp decision, 70
- je Yposition
- cmp decision, 75
- je Yposition
- call Crlf
- mov edx, offset promptoverlap
- call WriteString
- call SubmarineOrientationClick
- Yposition:
- movzx eax, (INPUT_RECORD PTR [esi]).MouseEvent.dwMousePosition.y
- cmp eax, 13
- je HorizontalDone
- call Crlf
- mov edx, offset promptoverlap
- call WriteString
- call SubmarineOrientationClick
- notMouse:
- add esi, TYPE INPUT_RECORD
- loop loopOverEvents
- jmp appContinue
- HorizontalDone:
- cmp decision, 75
- jne VerticalDone
- mov orientation, 0
- mov edx, offset horizontalChoice
- call Crlf
- call WriteString
- jmp DoneDone
- VerticalDone:
- mov orientation, 1
- mov edx, offset verticalChoice
- call Crlf
- call WriteString
- DoneDone:
- call SubmarinePlacementClick
- invoke ExitProcess, 0
- ret
- SubmarineOrientationClick ENDP
- ;--------------------------------------------------------------------------------------------------------
- ; PICKS THE PLACEMENT OF THE SUBMARINE
- ;--------------------------------------------------------------------------------------------------------
- ; GOTO SUBMARINEPLACEMENTCLICK
- SubmarinePlacementClick PROC
- mov lengthship, 3
- mov whichShip3, 1
- StartPlacement:
- invoke GetStdHandle, STD_INPUT_HANDLE
- mov rHndPlacement, eax
- invoke SetConsoleMode, rHnd, ENABLE_LINE_INPUT OR ENABLE_MOUSE_INPUT OR ENABLE_EXTENDED_FLAGS
- appContinuePlacement:
- invoke GetNumberOfConsoleInputEvents, rHndPlacement, OFFSET numEventsOccurredPlacement
- cmp numEventsOccurredPlacement, 0
- je appContinuePlacement
- invoke ReadConsoleInput, rHndPlacement, OFFSET eventBufferPlacement, numEventsOccurredPlacement, OFFSET numEventsReadPlacement
- mov ecx, numEventsReadPlacement
- mov esi, OFFSET eventBufferPlacement
- loopOverEventsPlacement:
- cmp (INPUT_RECORD PTR [esi]).EventType, MOUSE_EVENT
- jne notMousePlacement
- cmp (INPUT_RECORD PTR [esi]).MouseEvent.dwEventFlags, MOUSE_MOVED
- jne continuePlacement
- continuePlacement:
- test (INPUT_RECORD PTR [esi]).MouseEvent.dwButtonState, FROM_LEFT_1ST_BUTTON_PRESSED
- jz notMousePlacement
- movzx eax, (INPUT_RECORD PTR [esi]).MouseEvent.dwMousePosition.x
- sub eax, 19
- mov ebx, 2
- mov edx, 0
- div ebx
- cmp al, 9
- jg StartPlacement
- cmp al, 0
- jl StartPlacement
- mov xpoint, al
- movzx eax, (INPUT_RECORD PTR [esi]).MouseEvent.dwMousePosition.y
- sub eax, 13
- cmp al, 9
- jg StartPlacement
- mov ypoint, al
- call Crlf
- jmp DonePlacement
- notMousePlacement:
- add esi, INPUT_RECORD
- loop loopOverEventsPlacement
- jmp appContinuePlacement
- DonePlacement:
- call validShipPlacement1
- call displayPlayer1Board
- mov eax, 1000
- call Delay
- call ship5Screen
- invoke ExitProcess, 0
- ret
- SubmarinePlacementClick ENDP
- ;--------------------------------------------------------------------------------------------------------
- ; PICKS THE ORIENTATION OF THE DESTROYER
- ;--------------------------------------------------------------------------------------------------------
- ; GOTO DESTROYERORIENTATIONCLICK
- DestroyerOrientationClick PROC
- invoke GetStdHandle, STD_INPUT_HANDLE
- mov rHnd, eax
- invoke SetConsoleMode, rHnd, ENABLE_LINE_INPUT OR ENABLE_MOUSE_INPUT OR ENABLE_EXTENDED_FLAGS
- appContinue:
- invoke GetNumberOfConsoleInputEvents, rHnd, OFFSET numEventsOccurred
- cmp numEventsOccurred, 0
- je appContinue
- invoke ReadConsoleInput, rHnd, OFFSET eventBuffer, numEventsOccurred, OFFSET numEventsRead
- mov ecx, numEventsRead
- mov esi, OFFSET eventBuffer
- loopOverEvents:
- cmp (INPUT_RECORD PTR [esi]).EventType, MOUSE_EVENT
- jne notMouse
- cmp (INPUT_RECORD PTR [esi]).MouseEvent.dwEventFlags, MOUSE_MOVED
- jne continue
- continue:
- test (INPUT_RECORD PTR [esi]).MouseEvent.dwButtonState, FROM_LEFT_1ST_BUTTON_PRESSED
- jz notMouse
- movzx eax, (INPUT_RECORD PTR [esi]).MouseEvent.dwMousePosition.x
- mov decision, eax
- cmp decision, 70
- je Yposition
- cmp decision, 75
- je Yposition
- call Crlf
- mov edx, offset promptoverlap
- call WriteString
- call DestroyerOrientationClick
- Yposition:
- movzx eax, (INPUT_RECORD PTR [esi]).MouseEvent.dwMousePosition.y
- cmp eax, 13
- je HorizontalDone
- call Crlf
- mov edx, offset promptoverlap
- call WriteString
- call DestroyerOrientationClick
- notMouse:
- add esi, TYPE INPUT_RECORD
- loop loopOverEvents
- jmp appContinue
- HorizontalDone:
- cmp decision, 75
- jne VerticalDone
- mov orientation, 0
- mov edx, offset horizontalChoice
- call Crlf
- call WriteString
- jmp DoneDone
- VerticalDone:
- mov orientation, 1
- mov edx, offset verticalChoice
- call Crlf
- call WriteString
- DoneDone:
- call DestroyerPlacementClick
- invoke ExitProcess, 0
- ret
- DestroyerOrientationClick ENDP
- ;--------------------------------------------------------------------------------------------------------
- ; PICKS THE PLACEMENT OF THE DESTROYER
- ;--------------------------------------------------------------------------------------------------------
- ; GOTO DESTROYERPLACEMENTCLICK
- DestroyerPlacementClick PROC
- mov lengthship, 2
- StartPlacement:
- invoke GetStdHandle, STD_INPUT_HANDLE
- mov rHndPlacement, eax
- invoke SetConsoleMode, rHnd, ENABLE_LINE_INPUT OR ENABLE_MOUSE_INPUT OR ENABLE_EXTENDED_FLAGS
- appContinuePlacement:
- invoke GetNumberOfConsoleInputEvents, rHndPlacement, OFFSET numEventsOccurredPlacement
- cmp numEventsOccurredPlacement, 0
- je appContinuePlacement
- invoke ReadConsoleInput, rHndPlacement, OFFSET eventBufferPlacement, numEventsOccurredPlacement, OFFSET numEventsReadPlacement
- mov ecx, numEventsReadPlacement
- mov esi, OFFSET eventBufferPlacement
- loopOverEventsPlacement:
- cmp (INPUT_RECORD PTR [esi]).EventType, MOUSE_EVENT
- jne notMousePlacement
- cmp (INPUT_RECORD PTR [esi]).MouseEvent.dwEventFlags, MOUSE_MOVED
- jne continuePlacement
- continuePlacement:
- test (INPUT_RECORD PTR [esi]).MouseEvent.dwButtonState, FROM_LEFT_1ST_BUTTON_PRESSED
- jz notMousePlacement
- movzx eax, (INPUT_RECORD PTR [esi]).MouseEvent.dwMousePosition.x
- sub eax, 19
- mov ebx, 2
- mov edx, 0
- div ebx
- cmp al, 9
- jg StartPlacement
- cmp al, 0
- jl StartPlacement
- mov xpoint, al
- movzx eax, (INPUT_RECORD PTR [esi]).MouseEvent.dwMousePosition.y
- sub eax, 13
- cmp al, 9
- jg StartPlacement
- mov ypoint, al
- ;cmp al,
- call Crlf
- jmp DonePlacement
- notMousePlacement:
- add esi, INPUT_RECORD
- loop loopOverEventsPlacement
- jmp appContinuePlacement
- DonePlacement:
- call validShipPlacement1
- call displayPlayer1Board
- mov eax, 1000
- call Delay
- call playScreen
- invoke ExitProcess, 0
- ret
- DestroyerPlacementClick ENDP
- ;--------------------------------------------------------------------------------------------------------
- ; SCREEN SETUP
- ; - x-coordinate stored in dl
- ; - y-coordinate stored in dh
- ;--------------------------------------------------------------------------------------------------------
- screen PROC
- ; betterUS BYTE 205, 0
- ; betterLine BYTE 186, 0
- ; inter BYTE 203, 0
- mov dl, 60
- mov dh, 7
- mov ecx, 23
- L1:
- mov ah, dh
- mov al, dl
- call Gotoxy
- mov esi, offset betterLine
- mov edx, esi
- call WriteString
- mov dh, ah
- mov dl, al
- inc dh
- Loop L1
- mov dl, 0
- mov dh, 6
- mov ecx, 120
- L2:
- mov ah, dh
- mov al, dl
- call Gotoxy
- mov esi, offset betterUS
- mov edx, esi
- call WriteString
- mov dh, ah
- mov dl, al
- inc dl
- Loop L2
- mov dl, 60
- mov dh, 6
- call Gotoxy
- mov esi, offset inter
- mov edx, esi
- call WriteString
- ret
- screen ENDP
- ;-------------------------------------------------------------------------------------------------------------
- ; CHECK IF PLAYER 1'S SHIP PLACEMENT IS LEGAL OR NOT
- ; Input: orientation, xpoint, ypoint, length
- ;-------------------------------------------------------------------------------------------------------------
- ; GOTO VALIDSHIPPLACEMENT1
- validShipPlacement1 PROC
- mov edx, 0
- mov dl, xpoint
- mov tempxpoint, dl
- mov dl, ypoint
- mov tempypoint, dl
- cmp orientation, 0
- je checkHorizontalBound
- jmp checkVerticalBound
- checkHorizontalBound:
- mov edx, 0
- mov dl, lengthship
- add tempxpoint, dl
- cmp tempxpoint, 10
- jle checkHorizontalOverlap
- jmp invalidPlacement
- checkVerticalBound:
- mov edx, 0
- mov dl, lengthship
- add tempypoint, dl
- cmp tempypoint, 10
- jle checkVerticalOverlap
- jmp invalidPlacement
- invalidPlacement:
- mov esi, offset promptoverlap
- mov edx, esi
- call WriteString
- call Crlf
- cmp lengthship, 5
- je carrierPlacementClick
- cmp lengthship, 4
- je battlePlacementClick
- cmp lengthship, 3
- je cruiserOrSub
- cmp lengthship,2
- je DestroyerPlacementClick
- cruiserOrSub:
- cmp whichShip3, 0
- je cruiserPlacementClick
- jmp submarinePlacementClick
- carrierPlacementClick:
- call CarrierPlacementClick
- jmp stopPlacingShip
- battlePlacementClick:
- call BattlePlacementClick
- jmp stopPlacingShip
- cruiserPlacementClick:
- call CruiserPlacementClick
- jmp stopPlacingShip
- submarinePlacementClick:
- call SubmarinePlacementClick
- jmp stopPlacingShip
- validPlacement:
- call placeShipPlayer1
- jmp stopPlacingShip
- checkHorizontalOverlap:
- mov dl, 254
- mov ecx, 0
- mov cl, lengthship
- loopHorizontalOverlap:
- mov esi, offset player1board
- push ecx
- call coordinateToIndex
- pop ecx
- movzx ebx, indexarray
- add esi, ebx
- mov dl, 254
- cmp [esi], dl
- je invalidPlacement
- inc xpoint
- loop loopHorizontalOverlap
- mov edx, 0
- mov dl, lengthship
- sub xpoint, dl
- jmp validPlacement
- checkVerticalOverlap:
- mov edx, 0
- mov dl, 254
- mov ecx, 0
- mov cl, lengthship
- loopVerticalOverlap:
- mov esi, offset player1board
- push ecx
- call coordinateToIndex
- pop ecx
- movzx ebx, indexarray
- add esi, ebx
- cmp [esi], dl
- je invalidPlacement
- inc ypoint
- loop loopVerticalOverlap
- mov edx, 0
- mov dl, lengthship
- sub ypoint, dl
- jmp validPlacement
- stopPlacingShip:
- ret
- validShipPlacement1 ENDP
- ;-------------------------------------------------------------------------------------------------------------
- ; CHECK IF PLAYER 2'S SHIP PLACEMENT IS LEGAL OR NOT
- ; Input: orientation, xpoint, ypoint, length
- ;-------------------------------------------------------------------------------------------------------------
- ; GOTO VALIDSHIPPLACEMENT2
- validShipPlacement2 PROC
- mov edx, 0
- mov dl, xpoint
- mov tempxpoint, dl
- mov dl, ypoint
- mov tempypoint, dl
- cmp orientation, 0
- je checkHorizontalBound
- jmp checkVerticalBound
- checkHorizontalBound:
- mov edx, 0
- mov dl, lengthship
- add tempxpoint, dl
- cmp tempxpoint, 10
- jle checkHorizontalOverlap
- jmp invalidPlacement
- checkVerticalBound:
- mov edx, 0
- mov dl, lengthship
- add tempypoint, dl
- cmp tempypoint, 10
- jle checkVerticalOverlap
- jmp invalidPlacement
- invalidPlacement:
- mov esi, offset promptoverlap
- mov edx, esi
- call WriteString
- call Crlf
- call pickShipsPlayer2
- validPlacement:
- inc computershipcounter
- jmp stopPlacingShip
- checkHorizontalOverlap:
- mov dl, 254
- mov ecx, 0
- mov cl, lengthship
- loopHorizontalOverlap:
- mov esi, offset player2hiddenboard
- push ecx
- call coordinateToIndex
- pop ecx
- movzx ebx, indexarray
- add esi, ebx
- mov dl, 254
- cmp [esi], dl
- je invalidPlacement
- inc xpoint
- loop loopHorizontalOverlap
- mov edx, 0
- mov dl, lengthship
- sub xpoint, dl
- jmp validPlacement
- checkVerticalOverlap:
- mov edx, 0
- mov dl, 254
- mov ecx, 0
- mov cl, lengthship
- loopVerticalOverlap:
- mov esi, offset player2hiddenboard
- push ecx
- call coordinateToIndex
- pop ecx
- movzx ebx, indexarray
- add esi, ebx
- cmp [esi], dl
- je invalidPlacement
- inc ypoint
- loop loopVerticalOverlap
- mov edx, 0
- mov dl, lengthship
- sub ypoint, dl
- jmp validPlacement
- stopPlacingShip:
- call placeShipPlayer2
- ret
- validShipPlacement2 ENDP
- ;-------------------------------------------------------------------------------------------------------------
- ; CO-ORDINATE TO INDEX
- ; - Changes x and y coordinates into the index in the array
- ; - Takes in xpoint, ypoint
- ; - Returns indexarray
- ;-------------------------------------------------------------------------------------------------------------
- ; GOTO COORDINATETOINDEX
- coordinateToIndex PROC
- mov indexarray, 0
- mov eax, 0
- mov ecx, 10
- mulconfusesme:
- add ah, ypoint
- loop mulconfusesme
- add ah, xpoint
- mov indexarray, ah
- ret
- coordinateToIndex ENDP
- ;-------------------------------------------------------------------------------------------------------------
- ; PLACES SHIP IN PLAYER 1'S HIDDEN BOARD
- ; - Takes in orientation, xpoint, ypoint, lengthship
- ;-------------------------------------------------------------------------------------------------------------
- ; GOTO PLACESHIPPLAYER1
- placeShipPlayer1 PROC
- ; 254 is the ASCII code for the ship
- mov edx, 0
- mov dl, 254
- ; If orientation = 0, goes to placeHorizontal
- ; If not, goes to placeVertical for another check
- cmp orientation, 0
- je placeHorizontal
- jmp placeVertical
- placeHorizontal:
- ; Loops the same number times as the length of the ship
- mov ecx, 0
- mov cl, lengthship
- rick:
- mov esi, offset player1board
- push ecx
- call coordinateToIndex
- movzx ebx, indexarray
- add esi, ebx
- mov [esi], dl
- pop ecx
- inc xpoint
- loop rick
- jmp stopPlacingShip
- placeVertical:
- ; If orientation != 1, goes to stopPlacingShip
- cmp orientation, 1
- jne stopPlacingShip
- ; Loops the same number times as the length of the ship
- mov ecx, 0
- mov cl, lengthship
- morty:
- mov esi, offset player1board
- push ecx
- call coordinateToIndex
- movzx ebx, indexarray
- add esi, ebx
- mov [esi], dl
- pop ecx
- inc ypoint
- loop morty
- jmp stopPlacingShip
- stopPlacingShip:
- ; Ends the procedure
- ret
- placeShipPlayer1 ENDP
- ;-------------------------------------------------------------------------------------------------------------
- ; PLACES SHIP IN PLAYER 2'S HIDDEN BOARD
- ; - Takes in orientation, xpoint, ypoint, lengthship
- ;-------------------------------------------------------------------------------------------------------------
- ; GOTO PLACESHIPPLAYER2
- placeShipPlayer2 PROC
- ; 254 is the ASCII code for the ship
- mov edx, 0
- mov dl, 254
- ; If orientation = 0, goes to placeHorizontal
- ; If not, goes to placeVertical for another check
- cmp orientation, 0
- je placeHorizontal
- jmp placeVertical
- placeHorizontal:
- ; Loops the same number times as the length of the ship
- mov ecx, 0
- mov cl, lengthship
- rick:
- mov esi, offset player2hiddenboard
- push ecx
- call coordinateToIndex
- movzx ebx, indexarray
- add esi, ebx
- mov [esi], dl
- pop ecx
- inc xpoint
- loop rick
- jmp stopPlacingShip
- placeVertical:
- ; If orientation != 1, goes to stopPlacingShip
- cmp orientation, 1
- jne stopPlacingShip
- ; Loops the same number times as the length of the ship
- mov ecx, 0
- mov cl, lengthship
- morty:
- mov esi, offset player2hiddenboard
- push ecx
- call coordinateToIndex
- movzx ebx, indexarray
- add esi, ebx
- mov [esi], dl
- pop ecx
- inc ypoint
- loop morty
- jmp stopPlacingShip
- stopPlacingShip:
- ; Ends the procedure
- ret
- placeShipPlayer2 ENDP
- ;-------------------------------------------------------------------------------------------------------------
- ; PLAY SCREEN
- ; Displays Player 1 Board and Player 2 Visible Board
- ;-------------------------------------------------------------------------------------------------------------
- ; GOTO PLAYSCREEN
- playScreen PROC
- call Clrscr
- call screen
- call displayPlayer1Board
- call displayPlayer2VisibleBoard
- ;x in dl, y in dh
- ;;enemyGrid db "Enemy Grid", 0
- ;;attack db "ATTACK THE ENEMY", 0
- ;;yourTurn db "It's your turn.", 0
- ;enemyHits db "Enemy Hits: ", 0
- ;yourHits db "Your Hits: ", 0
- mov dl, 62
- mov dh, 26
- call Gotoxy
- mov esi, offset enemyHits
- mov edx, esi
- call WriteString
- mov dl, 46
- mov dh, 26
- call Gotoxy
- mov esi, offset yourHits
- mov edx, esi
- call WriteString
- mov dl, 15
- mov dh, 8
- call Gotoxy
- mov esi, offset yourTurn
- mov edx, esi
- call WriteString
- mov dl, 52
- mov dh, 3
- call Gotoxy
- mov esi, offset attack
- mov edx, esi
- call WriteString
- mov dl, 15
- mov dh, 24
- call Gotoxy
- mov esi, offset yourGrid
- mov edx, esi
- call WriteString
- call Crlf
- mov dl, 75
- mov dh, 24
- call Gotoxy
- mov esi, offset enemyGrid
- mov edx, esi
- call WriteString
- call Crlf
- call pickShipsPlayer2
- call guessClick
- ret
- playScreen ENDP
- ;-------------------------------------------------------------------------------------------------------------
- ; PLACES THE SHIPS FOR PLAYER 2
- ;-------------------------------------------------------------------------------------------------------------
- ; GOTO PICKSHIPSPLAYER2
- pickShipsPlayer2 PROC
- cmp computershipcounter, 5
- jge endPlacing
- jmp whichShip
- whichShip:
- cmp computershipcounter, 0
- je placeShip1
- cmp computershipcounter, 1
- je placeShip2
- cmp computershipcounter, 2
- je placeShip3
- cmp computershipcounter, 3
- je placeShip4
- cmp computershipcounter, 4
- je placeShip5
- placeShip1:
- mov lengthship, 5
- mov eax, 2
- call RandomRange
- mov orientation, al
- call WriteInt
- mov eax, 9
- call RandomRange
- inc eax
- mov xpoint, al
- call WriteInt
- call RandomRange
- mov ypoint, al
- call WriteInt
- call Crlf
- call validShipPlacement2
- placeShip2:
- mov lengthship, 4
- mov eax, 2
- call RandomRange
- mov orientation, al
- call WriteInt
- mov eax, 9
- call RandomRange
- inc eax
- mov xpoint, al
- call WriteInt
- call RandomRange
- mov ypoint, al
- call WriteInt
- call Crlf
- call validShipPlacement2
- placeShip3:
- mov lengthship, 3
- mov eax, 2
- call RandomRange
- mov orientation, al
- call WriteInt
- mov eax, 9
- call RandomRange
- inc eax
- mov xpoint, al
- call WriteInt
- call RandomRange
- mov ypoint, al
- call WriteInt
- call Crlf
- call validShipPlacement2
- placeShip4:
- mov lengthship, 3
- mov eax, 2
- call RandomRange
- mov orientation, al
- call WriteInt
- mov eax, 9
- call RandomRange
- inc eax
- mov xpoint, al
- call WriteInt
- call RandomRange
- mov ypoint, al
- call WriteInt
- call Crlf
- call validShipPlacement2
- placeShip5:
- mov lengthship, 2
- mov eax, 2
- call RandomRange
- mov orientation, al
- call WriteInt
- mov eax, 9
- call RandomRange
- inc eax
- mov xpoint, al
- call WriteInt
- call RandomRange
- mov ypoint, al
- call WriteInt
- call Crlf
- call validShipPlacement2
- endPlacing:
- call displayPlayer2HiddenBoard
- ret
- pickShipsPlayer2 ENDP
- ;-------------------------------------------------------------------------------------------------------------
- ; PLAYER 1'S TURN
- ; Needs the x and y points
- ;-------------------------------------------------------------------------------------------------------------
- ; GOTO PLAYER1TURN
- player1Turn PROC
- mov esi, offset player2hiddenboard
- mov edi, offset player2visibleboard
- call coordinateToIndex
- mov ebx, 0
- movzx ebx, indexarray
- add esi, ebx
- add edi, ebx
- mov ebx, 0
- mov bl, 254 ; ASCII for the ship
- cmp [esi], bl
- je player1Hits
- jmp player1Misses
- player1Hits:
- mov eax, 9
- call WriteInt
- mov turnorder, 1
- mov ebx, 0
- mov bl, 88 ; ASCII for X
- mov [edi], bl
- inc scoreplayer1
- cmp scoreplayer1, 17
- je player1Wins
- jmp endOfTurn
- player1Misses:
- mov turnorder, 2
- mov ebx, 0
- mov bl, 79
- mov [edi], bl
- jmp endOfTurn
- player1Wins:
- call winScreen
- endOfTurn:
- ret
- player1Turn ENDP
- ;-------------------------------------------------------------------------------------------------------------
- ; PLAYER 2'S TURN
- ;-------------------------------------------------------------------------------------------------------------
- ; GOTO PLAYER2TURN
- player2Turn PROC
- mov esi, offset player1board
- generatePoints:
- mov eax, 9
- call RandomRange
- mov xpoint, al
- call RandomRange
- mov ypoint, al
- checkHitOtNot:
- mov esi, offset player1board
- ; GETS THE VALUE AT THE INDEX
- call coordinateToIndex
- mov ebx, 0
- movzx ebx, indexarray
- add esi, ebx
- mov bl, 176
- cmp [esi], bl ; Checks if its an empty spot
- jne itsAlreadySelected ; If its not equal
- mov bl, 254
- cmp [esi], bl ; Checks if there's a ship there
- je player2Hits
- jmp player2Misses
- itsAlreadySelected:
- ; Gets the x and y indexes again
- call generatePoints
- player2Hits:
- mov turnorder, 2
- mov ebx, 0
- mov bl, 88
- mov [esi], bl
- inc scoreplayer2
- cmp scoreplayer2, 17
- je player2Wins
- jmp endOfTurn
- player2Misses:
- mov turnorder, 1
- mov botguesstype, 2
- mov ebx, 0
- mov bl, 79
- mov [esi], bl
- jmp endOfTurn
- player2Wins:
- call loseScreen
- endOfTurn:
- ret
- ret
- player2Turn ENDP
- guessClick PROC
- invoke GetStdHandle, STD_INPUT_HANDLE
- mov rHnd, eax
- invoke SetConsoleMode, rHnd, ENABLE_LINE_INPUT OR ENABLE_MOUSE_INPUT OR ENABLE_EXTENDED_FLAGS
- appContinue:
- invoke GetNumberOfConsoleInputEvents, rHnd, OFFSET numEventsOccurred
- cmp numEventsOccurred, 0
- je appContinue
- invoke ReadConsoleInput, rHnd, OFFSET eventBuffer, numEventsOccurred, OFFSET numEventsRead
- mov ecx, numEventsRead
- mov esi, OFFSET eventBuffer
- loopOverEvents:
- cmp (INPUT_RECORD PTR [esi]).EventType, MOUSE_EVENT
- jne notMouse
- cmp (INPUT_RECORD PTR [esi]).MouseEvent.dwEventFlags, MOUSE_MOVED
- jne continue
- continue:
- test (INPUT_RECORD PTR [esi]).MouseEvent.dwButtonState, FROM_LEFT_1ST_BUTTON_PRESSED
- jz notMouse
- mov edx, OFFset whereYouPressed
- call WriteString
- movzx eax, (INPUT_RECORD PTR [esi]).MouseEvent.dwMousePosition.x
- call WriteInt
- mov al, ','
- call WriteChar
- movzx eax, (INPUT_RECORD PTR [esi]).MouseEvent.dwMousePosition.y
- call WriteInt
- mov ah, ')'
- call Crlf
- jmp done
- notMouse:
- add esi, TYPE INPUT_RECORD
- loop loopOverEvents
- jmp appContinue
- done:
- call guessClick
- add scoreplayer1, 1
- call player1Turn
- cmp scoreplayer1, 17
- je player1Wins
- jmp donedone
- player1Wins:
- call winScreen
- donedone:
- invoke ExitProcess, 0
- ret
- guessClick ENDP
- ;-------------------------------------------------------------------------------------------------------------
- ; ASKS THE USER FOR THEIR NAME
- ; - Stores it in playername
- ;-------------------------------------------------------------------------------------------------------------
- askForName PROC
- mov dl, 46
- mov dh, 20
- call Gotoxy
- mov esi, offset promptforname
- mov edx, esi
- call WriteString
- mov edx, offset playername
- mov ecx, 20
- call ReadString
- ret
- askForName ENDP
- end main
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement