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:
- ;
- ; titleScreen Displays the title screen. Screen 1.
- ; ruleScreen Displays the rules of the game. Screen 2.
- ; ship1Screen Displays ship 1 so the player can choose where to place it.
- ; ship2Screen Displays ship 2 so the player can choose where to place it.
- ; ship3Screen Displays ship 3 so the player can choose where to place it.
- ; ship4Screen Displays ship 4 so the player can choose where to place it.
- ; ship5Screen Displays ship 5 so the player can choose where to place it.
- ; screen Positions the screens.
- ;
- ;
- ; askForName Gets the player's name and stores it in playername.
- ; coordinateToIndex Returns the index when x and y co-ordinate is passed in.
- ; placeShipPlayer1 Places the ship in Player 1's hidden board. Requires xpoint, ypoint, orientation and lengthship.
- ; placeShipPlayer2 Places the ship in Player 2's hidden board. Requires xpoint, ypoint, orientation and lengthship.
- ;--------------------------------------------------------------------------------------------------------
- .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 playable 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
- ;--------------------------------------------------------------------------------------------------------
- ; OPENING LETTERS
- ;
- ;--------------------------------------------------------------------------------------------------------
- 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
- ;--------------------------------------------------------------------------------------------------------
- ; 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)
- ;--------------------------------------------------------------------------------------------------------
- ; PLAYER BOARD
- ; - 176 is the ASCII to represent water (no ship to start with)
- ;--------------------------------------------------------------------------------------------------------
- player1hiddenboard BYTE 100 DUP (176) ; Stores the ships of Player 1
- player2hiddenboard BYTE 100 DUP (176) ; Stores the ships of Player 2 (Computer)
- player1visibleboard BYTE 100 DUP (176) ; Stores Player 2's hits on Player 1's board
- player2visibleboard BYTE 100 DUP (176) ; Stores Player 1's hits on Player 2's board
- ;--------------------------------------------------------------------------------------------------------
- ; 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)
- ; 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 "That's not valid, breh!", 0
- whichShip3 BYTE 0 ; 0 = First Ship (Cruiser). 1 = Second Ship (Submarine)
- ;--------------------------------------------------------------------------------------------------------
- ; 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
- button db "Let's Begin!", 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
- ; 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 data for the orientation of ships
- ;--------------------------------------------------------------------------------------------------------
- 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 data for the placement of ships
- ;--------------------------------------------------------------------------------------------------------
- ;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
- .code
- ;--------------------------------------------------------------------------------------------------------
- ; MAIN PROCEDURE
- ;--------------------------------------------------------------------------------------------------------
- main PROC
- ;call titleScreen
- call ReadInt
- call Clrscr
- call ruleScreen
- call ReadInt
- call Clrscr
- call ship1Screen
- call CarrierOrientationClick
- invoke ExitProcess, 0
- main ENDP
- ;--------------------------------------------------------------------------------------------------------
- ; DRAW THE BOARD WITH PLAYER 2'S HITS ON PLAYER 1
- ;--------------------------------------------------------------------------------------------------------
- displayPlayer1VisibleBoard PROC
- mov edi, offset player1visibleboard
- 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
- displayPlayer1VisibleBoard ENDP
- ;--------------------------------------------------------------------------------------------------------
- ; DRAW THE BOARD WITH PLAYER 1'S SHIPS
- ;--------------------------------------------------------------------------------------------------------
- displayPlayer1HiddenBoard PROC
- mov eax, 7
- call WriteInt
- mov edi, offset player1hiddenboard
- 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
- displayPlayer1HiddenBoard ENDP
- ;--------------------------------------------------------------------------------------------------------
- ; DRAW THE BOARD WITH PLAYER 2'S HITS ON PLAYER 1
- ;--------------------------------------------------------------------------------------------------------
- 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
- ;--------------------------------------------------------------------------------------------------------
- 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
- 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
- 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 displayPlayer1HiddenBoard
- mov eax, 1000
- call Delay
- call ship2Screen
- invoke ExitProcess, 0
- ret
- CarrierPlacementClick ENDP
- 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
- 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 displayPlayer1HiddenBoard
- mov eax, 1000
- call Delay
- call ship3Screen
- invoke ExitProcess, 0
- ret
- BattlePlacementClick ENDP
- 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
- 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 displayPlayer1HiddenBoard
- mov eax, 1000
- call Delay
- call ship4Screen
- invoke ExitProcess, 0
- ret
- CruiserPlacementClick ENDP
- 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
- 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
- ;cmp al,
- call Crlf
- jmp DonePlacement
- notMousePlacement:
- add esi, INPUT_RECORD
- loop loopOverEventsPlacement
- jmp appContinuePlacement
- DonePlacement:
- call validShipPlacement1
- call displayPlayer1HiddenBoard
- mov eax, 1000
- call Delay
- call ship5Screen
- invoke ExitProcess, 0
- ret
- SubmarinePlacementClick ENDP
- 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
- 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 displayPlayer1HiddenBoard
- mov eax, 1000
- call Delay
- call playScreen
- invoke ExitProcess, 0
- ret
- DestroyerPlacementClick ENDP
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- ;--------------------------------------------------------------------------------------------------------
- ; GRID
- ; - Displays Player 1's grid
- ;--------------------------------------------------------------------------------------------------------
- grid PROC
- 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
- ;--------------------------------------------------------------------------------------------------------
- gridEnemy PROC
- 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
- ;--------------------------------------------------------------------------------------------------------
- ; SCREEN SETUP
- ; - x-coordinate stored in dl
- ; - y-coordinate stored in dh
- ;--------------------------------------------------------------------------------------------------------
- screen PROC
- mov dl, 60
- mov dh, 7
- mov ecx, 23
- L1:
- 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 L1
- mov dl, 0
- mov dh, 6
- mov ecx, 120
- 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
- ret
- screen ENDP
- playScreen PROC
- call Clrscr
- call screen
- call grid
- call gridEnemy
- ;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
- ret
- playScreen ENDP
- ;--------------------------------------------------------------------------------------------------------
- ; TITLE SCREEN
- ;--------------------------------------------------------------------------------------------------------
- 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 Crlf
- call Crlf
- call Crlf
- call Crlf
- mov dl, 0
- mov dh, 29
- call Gotoxy
- mov esi, offset createdBy
- mov edx, esi
- call WriteString
- ret
- titleScreen ENDP
- bullseye PROC
- bullseye ENDP
- ;--------------------------------------------------------------------------------------------------------
- ; RULE SCREEN
- ;--------------------------------------------------------------------------------------------------------
- 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
- ;--------------------------------------------------------------------------------------------------------
- ; PLACE SHIP 1
- ; Name: Carrier | Length: 2
- ;--------------------------------------------------------------------------------------------------------
- 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
- ;--------------------------------------------------------------------------------------------------------
- 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
- ;--------------------------------------------------------------------------------------------------------
- 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 3
- ; Name: Submarine | Length: 3
- ;--------------------------------------------------------------------------------------------------------
- ship4Screen 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 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: 5
- ;--------------------------------------------------------------------------------------------------------
- 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
- ;-------------------------------------------------------------------------------------------------------------
- ; ASKS THE USER FOR THEIR NAME
- ; - Stores it in playername
- ;-------------------------------------------------------------------------------------------------------------
- askForName PROC
- mov dl, 46
- mov dh, 12
- call Gotoxy
- mov esi, offset promptforname
- mov edx, esi
- call WriteString
- mov edx, offset playername
- mov ecx, 20
- call ReadString
- ret
- askForName ENDP
- ;-------------------------------------------------------------------------------------------------------------
- ; CO-ORDINATE TO INDEX
- ; - Changes x and y coordinates into the index in the array
- ; - Takes in xpoint, ypoint
- ; - Returns indexarray
- ;-------------------------------------------------------------------------------------------------------------
- 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
- ;-------------------------------------------------------------------------------------------------------------
- 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 player1hiddenboard
- 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 player1hiddenboard
- 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
- ;-------------------------------------------------------------------------------------------------------------
- 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
- ;-------------------------------------------------------------------------------------------------------------
- ; CHECK IF PLAYER 1'S SHIP PLACEMENT IS LEGAL OR NOT
- ; Input: orientation, xpoint, ypoint, length
- ;-------------------------------------------------------------------------------------------------------------
- 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 player1hiddenboard
- 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 player1hiddenboard
- 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
- ;-------------------------------------------------------------------------------------------------------------
- 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
- jmp stopPlacingShip
- validPlacement:
- call placeShipPlayer1
- 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:
- ret
- validShipPlacement2 ENDP
- end main
- RAW Paste Data
- ;--------------------------------------------------------------------------------------------------------
- ; BATTLESHIP
- ;
- ; Shirshak Sharma, Jeff Tocco, Josh Berger
- ; Professor. Durga Suresh
- ;--------------------------------------------------------------------------------------------------------
- ; LIST OF PROCEDURES:
- ;
- ; titleScreen Displays the title screen. Screen 1.
- ; ruleScreen Displays the rules of the game. Screen 2.
- ; ship1Screen Displays ship 1 so the player can choose where to place it.
- ; ship2Screen Displays ship 2 so the player can choose where to place it.
- ; ship3Screen Displays ship 3 so the player can choose where to place it.
- ; ship4Screen Displays ship 4 so the player can choose where to place it.
- ; ship5Screen Displays ship 5 so the player can choose where to place it.
- ; screen Positions the screens.
- ;
- ;
- ; askForName Gets the player's name and stores it in playername.
- ; coordinateToIndex Returns the index when x and y co-ordinate is passed in.
- ; placeShipPlayer1 Places the ship in Player 1's hidden board. Requires xpoint, ypoint, orientation and lengthship.
- ; placeShipPlayer2 Places the ship in Player 2's hidden board. Requires xpoint, ypoint, orientation and lengthship.
- ;--------------------------------------------------------------------------------------------------------
- .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 playable 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
- ;--------------------------------------------------------------------------------------------------------
- ; OPENING LETTERS
- ;
- ;--------------------------------------------------------------------------------------------------------
- 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
- ;--------------------------------------------------------------------------------------------------------
- ; 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)
- ;--------------------------------------------------------------------------------------------------------
- ; PLAYER BOARD
- ; - 176 is the ASCII to represent water (no ship to start with)
- ;--------------------------------------------------------------------------------------------------------
- player1hiddenboard BYTE 100 DUP (176) ; Stores the ships of Player 1
- player2hiddenboard BYTE 100 DUP (176) ; Stores the ships of Player 2 (Computer)
- player1visibleboard BYTE 100 DUP (176) ; Stores Player 2's hits on Player 1's board
- player2visibleboard BYTE 100 DUP (176) ; Stores Player 1's hits on Player 2's board
- ;--------------------------------------------------------------------------------------------------------
- ; 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)
- ; 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 "That's not valid, breh!", 0
- ;--------------------------------------------------------------------------------------------------------
- ; 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
- button db "Let's Begin!", 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
- ; 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
- ;--------------------------------------------------------------------------------------------------------
- ; 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
- .code
- ;--------------------------------------------------------------------------------------------------------
- ; MAIN PROCEDURE
- ;--------------------------------------------------------------------------------------------------------
- ;main PROC
- ;call titleScreen
- ;call ruleScreen
- ;invoke ExitProcess, 0
- ;main ENDP
- ;&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&
- ; OPENING LETTERS
- ;&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- ;--------------------------------------------------------------------------------------------------------
- ; GRID
- ; - Displays Player 1's grid
- ;--------------------------------------------------------------------------------------------------------
- grid PROC
- 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
- ;--------------------------------------------------------------------------------------------------------
- gridEnemy PROC
- 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
- ;--------------------------------------------------------------------------------------------------------
- ; SCREEN SETUP
- ; - x-coordinate stored in dl
- ; - y-coordinate stored in dh
- ;--------------------------------------------------------------------------------------------------------
- screen PROC
- mov dl, 60
- mov dh, 7
- mov ecx, 23
- L1:
- 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 L1
- mov dl, 0
- mov dh, 6
- mov ecx, 120
- 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
- ret
- screen ENDP
- ;--------------------------------------------------------------------------------------------------------
- ; TITLE SCREEN
- ;--------------------------------------------------------------------------------------------------------
- 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 Crlf
- call Crlf
- call Crlf
- call Crlf
- mov dl, 0
- mov dh, 29
- call Gotoxy
- mov esi, offset createdBy
- mov edx, esi
- call WriteString
- ret
- titleScreen ENDP
- bullseye PROC
- bullseye ENDP
- ;--------------------------------------------------------------------------------------------------------
- ; RULE SCREEN
- ;--------------------------------------------------------------------------------------------------------
- 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
- ;--------------------------------------------------------------------------------------------------------
- ; PLACE SHIP 1
- ; Name: Carrier | Length: 2
- ;--------------------------------------------------------------------------------------------------------
- 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
- ;--------------------------------------------------------------------------------------------------------
- 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
- ;--------------------------------------------------------------------------------------------------------
- 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
- ;--------------------------------------------------------------------------------------------------------
- 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
- ret
- ship4Screen ENDP
- ;--------------------------------------------------------------------------------------------------------
- ; PLACE SHIP 5
- ; Name: Destroyer | Length: 2
- ;--------------------------------------------------------------------------------------------------------
- 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
- ;-------------------------------------------------------------------------------------------------------------
- ; ASKS THE USER FOR THEIR NAME
- ; - Stores it in playername
- ;-------------------------------------------------------------------------------------------------------------
- askForName PROC
- mov dl, 46
- mov dh, 12
- call Gotoxy
- mov esi, offset promptforname
- mov edx, esi
- call WriteString
- mov edx, offset playername
- mov ecx, 20
- call ReadString
- ret
- askForName ENDP
- ;-------------------------------------------------------------------------------------------------------------
- ; CO-ORDINATE TO INDEX
- ; - Changes x and y coordinates into the index in the array
- ; - Takes in xpoint, ypoint
- ; - Returns indexarray
- ;-------------------------------------------------------------------------------------------------------------
- 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
- ;-------------------------------------------------------------------------------------------------------------
- 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 player1hiddenboard
- 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 player1hiddenboard
- 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
- ;-------------------------------------------------------------------------------------------------------------
- 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
- ;-------------------------------------------------------------------------------------------------------------
- ; CHECK IF PLAYER 1'S SHIP PLACEMENT IS LEGAL OR NOT
- ; Input: orientation, xpoint, ypoint, length
- ;-------------------------------------------------------------------------------------------------------------
- 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
- jmp stopPlacingShip
- validPlacement:
- call placeShipPlayer1
- jmp stopPlacingShip
- checkHorizontalOverlap:
- mov dl, 254
- mov ecx, 0
- mov cl, lengthship
- loopHorizontalOverlap:
- mov esi, offset player1hiddenboard
- 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 player1hiddenboard
- 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
- ;-------------------------------------------------------------------------------------------------------------
- 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
- jmp stopPlacingShip
- validPlacement:
- call placeShipPlayer1
- 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:
- ret
- validShipPlacement2 ENDP
- end main
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement