Advertisement
Guest User

Untitled

a guest
Dec 5th, 2016
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 121.24 KB | None | 0 0
  1. ;--------------------------------------------------------------------------------------------------------
  2. ; BATTLESHIP
  3. ;
  4. ; Shirshak Sharma, Jeff Tocco, Josh Berger
  5. ; Professor. Durga Suresh
  6. ;--------------------------------------------------------------------------------------------------------
  7. ; LIST OF PROCEDURES:
  8. ;
  9. ; titleScreen Displays the title screen. Screen 1.
  10. ; ruleScreen Displays the rules of the game. Screen 2.
  11. ; ship1Screen Displays ship 1 so the player can choose where to place it.
  12. ; ship2Screen Displays ship 2 so the player can choose where to place it.
  13. ; ship3Screen Displays ship 3 so the player can choose where to place it.
  14. ; ship4Screen Displays ship 4 so the player can choose where to place it.
  15. ; ship5Screen Displays ship 5 so the player can choose where to place it.
  16. ; screen Positions the screens.
  17. ;
  18. ;
  19. ; askForName Gets the player's name and stores it in playername.
  20. ; coordinateToIndex Returns the index when x and y co-ordinate is passed in.
  21. ; placeShipPlayer1 Places the ship in Player 1's hidden board. Requires xpoint, ypoint, orientation and lengthship.
  22. ; placeShipPlayer2 Places the ship in Player 2's hidden board. Requires xpoint, ypoint, orientation and lengthship.
  23. ;--------------------------------------------------------------------------------------------------------
  24.  
  25. .386
  26. .MODEL Flat,StdCall
  27. OPTION CaseMap:None
  28. INCLUDE Irvine32_NOWIN.inc
  29. INCLUDE windows.inc
  30. INCLUDE user32.inc
  31. INCLUDE kernel32.inc
  32. INCLUDELIB User32.lib
  33. INCLUDELIB Kernel32.lib
  34.  
  35. .data
  36.  
  37. ;--------------------------------------------------------------------------------------------------------
  38. ; BATTLESHIP BOARD
  39. ; - Stored in 14 byte arrays
  40. ; - The playable grids are stored in index 3, 5, 7, 9, 11, 13, 15, 17, 19, 21 in boards 04 to 13
  41. ;--------------------------------------------------------------------------------------------------------
  42. 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
  43. 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
  44. 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
  45. 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
  46. 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
  47. 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
  48. 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
  49. 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
  50. 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
  51. 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
  52. 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
  53. 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
  54. 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
  55. 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
  56.  
  57. ;--------------------------------------------------------------------------------------------------------
  58. ; OPENING LETTERS
  59. ;
  60. ;--------------------------------------------------------------------------------------------------------
  61.  
  62. 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
  63. 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
  64.  
  65. 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
  66. 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
  67.  
  68. XvalueTfirst db 29,30,31,32,33,34,35,32,32,32,32,32,32
  69. YvalueTfirst db 7,7,7,7,7,7,7,8,9,10,11,12,13,
  70.  
  71. XvalueTsecond db 37,38,39,40,41,42,43,40,40,40,40,40,40
  72. YvalueTsecond db 7,7,7,7,7,7,7,8,9,10,11,12,13
  73.  
  74. XvalueL db 46,46,46,46,46,46,46,47,48,49,50
  75. YvalueL db 7,8,9,10,11,12,13,13,13,13,13,
  76.  
  77. XvalueE db 53,53,53,53,53,53,53,54,55,56,57,54,55,56,57,53,54,55,56,57
  78. YvalueE db 7,8,9,10,11,12,13,13,13,13,13,10,10,10,10,10,7,7,7,7,7
  79.  
  80. XvalueS db 64,64,63,62,61,60,60,60,60,61,62,63,64,64,64,64,63,62,61,60,60
  81. YvalueS db 8,7,7,7,7,7,8,9,10,10,10,10,10,11,12,13,13,13,13,13,12
  82.  
  83. XvalueH db 67,67,67,67,67,67,67,73,73,73,73,73,73,73,68,69,70,71,72
  84. YvalueH db 7,8,9,10,11,12,13,7,8,9,10,11,12,13,10,10,10,10,10
  85.  
  86. XvalueI db 76,77,78,79,80,78,78,78,78,78,78,76,77,79,80
  87. YvalueI db 7,7,7,7,7,8,9,10,11,12,13,13,13,13,13
  88.  
  89. XvalueP db 83,83,83,83,83,83,83,84,85,86,87,88,88,88,88,87,86,85,84
  90. YvalueP db 7,8,9,10,11,12,13,7,7,7,7,7,8,9,10,10,10,10,10,10
  91.  
  92.  
  93. ;--------------------------------------------------------------------------------------------------------
  94. ; SHIPS
  95. ; - 5 ships of length 2, 3, 3, 4 and 5 respectively
  96. ; - 219 is the ASCII code for a colored rectangle to represent ships
  97. ;--------------------------------------------------------------------------------------------------------
  98. player1ship1 BYTE 2 DUP (219)
  99. player1ship2 BYTE 3 DUP (219)
  100. player1ship3 BYTE 3 DUP (219)
  101. player1ship4 BYTE 4 DUP (219)
  102. player1ship5 BYTE 5 DUP (219)
  103.  
  104. player2ship1 BYTE 2 DUP (219)
  105. player2ship2 BYTE 3 DUP (219)
  106. player2ship3 BYTE 3 DUP (219)
  107. player2ship4 BYTE 4 DUP (219)
  108. player2ship5 BYTE 5 DUP (219)
  109.  
  110.  
  111. ;--------------------------------------------------------------------------------------------------------
  112. ; PLAYER BOARD
  113. ; - 176 is the ASCII to represent water (no ship to start with)
  114. ;--------------------------------------------------------------------------------------------------------
  115. player1hiddenboard BYTE 100 DUP (176) ; Stores the ships of Player 1
  116. player2hiddenboard BYTE 100 DUP (176) ; Stores the ships of Player 2 (Computer)
  117.  
  118. player1visibleboard BYTE 100 DUP (176) ; Stores Player 2's hits on Player 1's board
  119. player2visibleboard BYTE 100 DUP (176) ; Stores Player 1's hits on Player 2's board
  120.  
  121.  
  122. ;--------------------------------------------------------------------------------------------------------
  123. ; OTHER VARIABLES
  124. ;--------------------------------------------------------------------------------------------------------
  125.  
  126. emptyarray BYTE 100 DUP(176) ; Resets the board by replacing all the interactive elements. 176 is the ASCII for the water texture
  127. hitvalue BYTE 88 ; This value is displayed when a ship is hit. 88 is the ASCII for X
  128. missvalue BYTE 39 ; This value is displayed when a ship is missed. 39 is the ASCII for '
  129.  
  130. xpoint BYTE 0 ; Stores the x component of the grid
  131. ypoint BYTE 0 ; Stores the y component of the grid
  132. indexarray BYTE 0 ; Index of the co-ordinate in an array
  133. orientation db 0 ; 0 = Vertical. 1 = Horizontal
  134. lengthship db 0 ; Stores the length of the ship selected (valid values: 2, 3, 4, 5)
  135.  
  136. ; Same as above but stores the values in temp so checking legality doesn't mess up the values
  137. tempxpoint BYTE 0
  138. tempypoint BYTE 0
  139. tempindexarray BYTE 0
  140. temporientation BYTE 0
  141. templengthship BYTE 0
  142.  
  143. promptoverlap BYTE "That's not valid, breh!", 0
  144. whichShip3 BYTE 0 ; 0 = First Ship (Cruiser). 1 = Second Ship (Submarine)
  145.  
  146.  
  147. ;--------------------------------------------------------------------------------------------------------
  148. ; TITLE SCREEN ELEMENTS
  149. ; - The name of the game + the programmers
  150. ;--------------------------------------------------------------------------------------------------------
  151. titleName db "BATTLESHIP", 0
  152. createdBy db "Created By Shirshak Sharma, Jeff Tocco, and Josh Berger", 0
  153. playername dd 0 ; The player's name. obviously.
  154. promptforname db "What is your name, captain? ", 0
  155.  
  156.  
  157. ;--------------------------------------------------------------------------------------------------------
  158. ; RULE SCREEN ELEMENTS
  159. ; - The classic rules for Battleship
  160. ;--------------------------------------------------------------------------------------------------------
  161. hellomessage db "Hello and Welcome to Battle Ship!", 0
  162. setup db "Start by hitting the 'BEGIN' button, then placing your ships on the board displayed on the 10x10 play screen.", 0
  163. setupB db "The CPU will then to the same.", 0
  164. 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
  165.  
  166. 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
  167. 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
  168. rule3 db "3: If you guess incorrectly, you missed, which makes it the CPU's turn to guess where your ships are.", 0
  169. 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
  170.  
  171. button db "Let's Begin!", 0
  172.  
  173.  
  174. ;--------------------------------------------------------------------------------------------------------
  175. ; SHIP PLACEMENT ELEMENTS
  176. ;--------------------------------------------------------------------------------------------------------
  177. placingQuote db "PLACE YOUR SHIPS CAPTAIN", 0
  178. yourGrid db "Your Grid", 0
  179. startingPoint db "Pick your ship's orientation.", 0
  180. line db "|", 0
  181. underScore db "_", 0
  182.  
  183. ; CARRIER 5 spaces
  184. carrier db "Carrier:", 0
  185.  
  186. ; BATTLESHIP 4 spaces
  187. battleship db "Battleship:", 0
  188.  
  189. ; CRUISER 3 spaces
  190. cruiser db "Cruiser:", 0
  191.  
  192. ; SUBMARINE 3 spaces
  193. submarine db "Submarine:", 0
  194.  
  195. ; DESTROYER 2 spaces
  196. destroyer db "Destroyer:", 0
  197. destroyerXposition dd ?
  198. destroyerYposition dd ?
  199.  
  200.  
  201. ;--------------------------------------------------------------------------------------------------------
  202. ; PLAY SCREEN ELEMENTS
  203. ;--------------------------------------------------------------------------------------------------------
  204. enemyGrid db "Enemy Grid", 0
  205. attack db "ATTACK THE ENEMY", 0
  206. yourTurn db "It's your turn.", 0
  207. enemyHits db "Enemy Hits: ", 0
  208. yourHits db "Your Hits: ", 0
  209.  
  210. shipVert BYTE 219, 0
  211. shipHori BYTE 254, 0
  212.  
  213. ;--------------------------------------------------------------------------------------------------------
  214. ; Mouse Click data for the orientation of ships
  215. ;--------------------------------------------------------------------------------------------------------
  216. rHnd HANDLE ?
  217. numEventsRead DWORD ?
  218. numEventsOccurred DWORD ?
  219. eventBuffer INPUT_RECORD 128 DUP(<>)
  220. ;coordString BYTE "Coordinate change: (", 0
  221. ;buttonString BYTE "Left Button Pressed!", 0Ah, 0
  222. whereYouPressed BYTE "You clicked on: ", 0
  223. decision dd ?
  224. 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
  225. 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
  226.  
  227.  
  228. ;--------------------------------------------------------------------------------------------------------
  229. ; Mouse Click data for the placement of ships
  230. ;--------------------------------------------------------------------------------------------------------
  231. ;MouseClickTwo Data
  232. rHndPlacement HANDLE ?
  233. numEventsReadPlacement DWORD ?
  234. numEventsOccurredPlacement DWORD ?
  235. eventBufferPlacement INPUT_RECORD 128 DUP(<>)
  236. coordStringPlacement BYTE "Coordinate change: (", 0
  237. buttonStringPlacement BYTE "Left Button Pressed!", 0Ah, 0
  238. whereYouPressedPlacement BYTE "You clicked on: ", 0
  239.  
  240. .code
  241.  
  242. ;--------------------------------------------------------------------------------------------------------
  243. ; MAIN PROCEDURE
  244. ;--------------------------------------------------------------------------------------------------------
  245. main PROC
  246.  
  247. ;call titleScreen
  248. call ReadInt
  249. call Clrscr
  250. call ruleScreen
  251. call ReadInt
  252. call Clrscr
  253. call ship1Screen
  254. call CarrierOrientationClick
  255.  
  256. invoke ExitProcess, 0
  257. main ENDP
  258.  
  259.  
  260. ;--------------------------------------------------------------------------------------------------------
  261. ; DRAW THE BOARD WITH PLAYER 2'S HITS ON PLAYER 1
  262. ;--------------------------------------------------------------------------------------------------------
  263. displayPlayer1VisibleBoard PROC
  264.  
  265. mov edi, offset player1visibleboard
  266. mov eax, 0
  267.  
  268. mov dl, 15
  269. mov dh, 10
  270. call Gotoxy
  271. ; ROW 1 OF THE BOARD CONTAINS PIPES
  272. mov esi, offset board01
  273. mov edx, esi
  274. call WriteString
  275. call Crlf
  276.  
  277. mov dl, 15
  278. mov dh, 11
  279. call Gotoxy
  280. ; ROW 2 OF THE BOARD CONTAINS THE NUMBERS
  281. mov esi, offset board02
  282. mov edx, esi
  283. call WriteString
  284. call Crlf
  285.  
  286. mov dl, 15
  287. mov dh, 12
  288. call Gotoxy
  289. ; ROW 3 OF THE BOARD CONTAINS PIPES
  290. mov esi, offset board03
  291. mov edx, esi
  292. call WriteString
  293. call Crlf
  294.  
  295. mov dl, 15
  296. mov dh, 13
  297. call Gotoxy
  298. ; ROW 4 OF THE BOARD CONTAINS THE 1ST ROW OF THE GRID
  299. mov esi, offset board04
  300. add esi, 2
  301. mov ecx, 10
  302. Bored04:
  303. add esi, 2
  304. mov ah, [edi]
  305. mov [esi], ah
  306. inc edi
  307. loop Bored04
  308. mov esi, offset board04
  309. mov edx, esi
  310. call WriteString
  311. call Crlf
  312.  
  313. mov dl, 15
  314. mov dh, 14
  315. call Gotoxy
  316. ; ROW 5 OF THE BOARD CONTAINS THE 2ND ROW OF THE GRID
  317. mov esi, offset board05
  318. add esi, 2
  319. mov ecx, 10
  320. Bored05:
  321. add esi, 2
  322. mov ah, [edi]
  323. mov [esi], ah
  324. inc edi
  325. loop Bored05
  326. mov esi, offset board05
  327. mov edx, esi
  328. call WriteString
  329. call Crlf
  330.  
  331. mov dl, 15
  332. mov dh, 15
  333. call Gotoxy
  334. ; ROW 6 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
  335. mov esi, offset board06
  336. add esi, 2
  337. mov ecx, 10
  338. Bored06:
  339. add esi, 2
  340. mov ah, [edi]
  341. mov [esi], ah
  342. inc edi
  343. loop Bored06
  344. mov esi, offset board06
  345. mov edx, esi
  346. call WriteString
  347. call Crlf
  348.  
  349. mov dl, 15
  350. mov dh, 16
  351. call Gotoxy
  352. ; ROW 7 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
  353. mov esi, offset board07
  354. add esi, 2
  355. mov ecx, 10
  356. Bored07:
  357. add esi, 2
  358. mov ah, [edi]
  359. mov [esi], ah
  360. inc edi
  361. loop Bored07
  362. mov esi, offset board07
  363. mov edx, esi
  364. call WriteString
  365. call Crlf
  366.  
  367. mov dl, 15
  368. mov dh, 17
  369. call Gotoxy
  370. ; ROW 8 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
  371. mov esi, offset board08
  372. add esi, 2
  373. mov ecx, 10
  374. Bored08:
  375. add esi, 2
  376. mov ah, [edi]
  377. mov [esi], ah
  378. inc edi
  379. loop Bored08
  380. mov esi, offset board08
  381. mov edx, esi
  382. call WriteString
  383. call Crlf
  384.  
  385. mov dl, 15
  386. mov dh, 18
  387. call Gotoxy
  388. ; ROW 9 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
  389. mov esi, offset board09
  390. add esi, 2
  391. mov ecx, 10
  392. Bored09:
  393. add esi, 2
  394. mov ah, [edi]
  395. mov [esi], ah
  396. inc edi
  397. loop Bored09
  398. mov esi, offset board09
  399. mov edx, esi
  400. call WriteString
  401. call Crlf
  402.  
  403. mov dl, 15
  404. mov dh, 19
  405. call Gotoxy
  406. ; ROW 10 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
  407. mov esi, offset board10
  408. add esi, 2
  409. mov ecx, 10
  410. Bored10:
  411. add esi, 2
  412. mov ah, [edi]
  413. mov [esi], ah
  414. inc edi
  415. loop Bored10
  416. mov esi, offset board10
  417. mov edx, esi
  418. call WriteString
  419. call Crlf
  420.  
  421. mov dl, 15
  422. mov dh, 20
  423. call Gotoxy
  424. ; ROW 11 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
  425. mov esi, offset board11
  426. add esi, 2
  427. mov ecx, 10
  428. Bored11:
  429. add esi, 2
  430. mov ah, [edi]
  431. mov [esi], ah
  432. inc edi
  433. loop Bored11
  434. mov esi, offset board11
  435. mov edx, esi
  436. call WriteString
  437. call Crlf
  438.  
  439. mov dl, 15
  440. mov dh, 21
  441. call Gotoxy
  442. ; ROW 12 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
  443. mov esi, offset board12
  444. add esi, 2
  445. mov ecx, 10
  446. Bored12:
  447. add esi, 2
  448. mov ah, [edi]
  449. mov [esi], ah
  450. inc edi
  451. loop Bored12
  452. mov esi, offset board12
  453. mov edx, esi
  454. call WriteString
  455. call Crlf
  456.  
  457. mov dl, 15
  458. mov dh, 22
  459. call Gotoxy
  460. ; ROW 13 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
  461. mov esi, offset board13
  462. add esi, 2
  463. mov ecx, 10
  464. Bored13:
  465. add esi, 2
  466. mov ah, [edi]
  467. mov [esi], ah
  468. inc edi
  469. loop Bored13
  470. mov esi, offset board13
  471. mov edx, esi
  472. call WriteString
  473. call Crlf
  474.  
  475. mov dl, 15
  476. mov dh, 23
  477. call Gotoxy
  478. ; ROW 14 OF THE BOARD CONTAINS PIPES
  479. mov esi, offset board14
  480. mov edx, esi
  481. call WriteString
  482. call Crlf
  483.  
  484. ret
  485. displayPlayer1VisibleBoard ENDP
  486.  
  487.  
  488. ;--------------------------------------------------------------------------------------------------------
  489. ; DRAW THE BOARD WITH PLAYER 1'S SHIPS
  490. ;--------------------------------------------------------------------------------------------------------
  491. displayPlayer1HiddenBoard PROC
  492.  
  493. mov eax, 7
  494. call WriteInt
  495.  
  496. mov edi, offset player1hiddenboard
  497. mov eax, 0
  498.  
  499. mov dl, 15
  500. mov dh, 10
  501. call Gotoxy
  502. ; ROW 1 OF THE BOARD CONTAINS PIPES
  503. mov esi, offset board01
  504. mov edx, esi
  505. call WriteString
  506. call Crlf
  507.  
  508. mov dl, 15
  509. mov dh, 11
  510. call Gotoxy
  511. ; ROW 2 OF THE BOARD CONTAINS THE NUMBERS
  512. mov esi, offset board02
  513. mov edx, esi
  514. call WriteString
  515. call Crlf
  516.  
  517. mov dl, 15
  518. mov dh, 12
  519. call Gotoxy
  520. ; ROW 3 OF THE BOARD CONTAINS PIPES
  521. mov esi, offset board03
  522. mov edx, esi
  523. call WriteString
  524. call Crlf
  525.  
  526. mov dl, 15
  527. mov dh, 13
  528. call Gotoxy
  529. ; ROW 4 OF THE BOARD CONTAINS THE 1ST ROW OF THE GRID
  530. mov esi, offset board04
  531. add esi, 2
  532. mov ecx, 10
  533. Bored04:
  534. add esi, 2
  535. mov ah, [edi]
  536. mov [esi], ah
  537. inc edi
  538. loop Bored04
  539. mov esi, offset board04
  540. mov edx, esi
  541. call WriteString
  542. call Crlf
  543.  
  544. mov dl, 15
  545. mov dh, 14
  546. call Gotoxy
  547. ; ROW 5 OF THE BOARD CONTAINS THE 2ND ROW OF THE GRID
  548. mov esi, offset board05
  549. add esi, 2
  550. mov ecx, 10
  551. Bored05:
  552. add esi, 2
  553. mov ah, [edi]
  554. mov [esi], ah
  555. inc edi
  556. loop Bored05
  557. mov esi, offset board05
  558. mov edx, esi
  559. call WriteString
  560. call Crlf
  561.  
  562. mov dl, 15
  563. mov dh, 15
  564. call Gotoxy
  565. ; ROW 6 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
  566. mov esi, offset board06
  567. add esi, 2
  568. mov ecx, 10
  569. Bored06:
  570. add esi, 2
  571. mov ah, [edi]
  572. mov [esi], ah
  573. inc edi
  574. loop Bored06
  575. mov esi, offset board06
  576. mov edx, esi
  577. call WriteString
  578. call Crlf
  579.  
  580. mov dl, 15
  581. mov dh, 16
  582. call Gotoxy
  583. ; ROW 7 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
  584. mov esi, offset board07
  585. add esi, 2
  586. mov ecx, 10
  587. Bored07:
  588. add esi, 2
  589. mov ah, [edi]
  590. mov [esi], ah
  591. inc edi
  592. loop Bored07
  593. mov esi, offset board07
  594. mov edx, esi
  595. call WriteString
  596. call Crlf
  597.  
  598. mov dl, 15
  599. mov dh, 17
  600. call Gotoxy
  601. ; ROW 8 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
  602. mov esi, offset board08
  603. add esi, 2
  604. mov ecx, 10
  605. Bored08:
  606. add esi, 2
  607. mov ah, [edi]
  608. mov [esi], ah
  609. inc edi
  610. loop Bored08
  611. mov esi, offset board08
  612. mov edx, esi
  613. call WriteString
  614. call Crlf
  615.  
  616. mov dl, 15
  617. mov dh, 18
  618. call Gotoxy
  619. ; ROW 9 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
  620. mov esi, offset board09
  621. add esi, 2
  622. mov ecx, 10
  623. Bored09:
  624. add esi, 2
  625. mov ah, [edi]
  626. mov [esi], ah
  627. inc edi
  628. loop Bored09
  629. mov esi, offset board09
  630. mov edx, esi
  631. call WriteString
  632. call Crlf
  633.  
  634. mov dl, 15
  635. mov dh, 19
  636. call Gotoxy
  637. ; ROW 10 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
  638. mov esi, offset board10
  639. add esi, 2
  640. mov ecx, 10
  641. Bored10:
  642. add esi, 2
  643. mov ah, [edi]
  644. mov [esi], ah
  645. inc edi
  646. loop Bored10
  647. mov esi, offset board10
  648. mov edx, esi
  649. call WriteString
  650. call Crlf
  651.  
  652. mov dl, 15
  653. mov dh, 20
  654. call Gotoxy
  655. ; ROW 11 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
  656. mov esi, offset board11
  657. add esi, 2
  658. mov ecx, 10
  659. Bored11:
  660. add esi, 2
  661. mov ah, [edi]
  662. mov [esi], ah
  663. inc edi
  664. loop Bored11
  665. mov esi, offset board11
  666. mov edx, esi
  667. call WriteString
  668. call Crlf
  669.  
  670. mov dl, 15
  671. mov dh, 21
  672. call Gotoxy
  673. ; ROW 12 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
  674. mov esi, offset board12
  675. add esi, 2
  676. mov ecx, 10
  677. Bored12:
  678. add esi, 2
  679. mov ah, [edi]
  680. mov [esi], ah
  681. inc edi
  682. loop Bored12
  683. mov esi, offset board12
  684. mov edx, esi
  685. call WriteString
  686. call Crlf
  687.  
  688. mov dl, 15
  689. mov dh, 22
  690. call Gotoxy
  691. ; ROW 13 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
  692. mov esi, offset board13
  693. add esi, 2
  694. mov ecx, 10
  695. Bored13:
  696. add esi, 2
  697. mov ah, [edi]
  698. mov [esi], ah
  699. inc edi
  700. loop Bored13
  701. mov esi, offset board13
  702. mov edx, esi
  703. call WriteString
  704. call Crlf
  705.  
  706. mov dl, 15
  707. mov dh, 23
  708. call Gotoxy
  709. ; ROW 14 OF THE BOARD CONTAINS PIPES
  710. mov esi, offset board14
  711. mov edx, esi
  712. call WriteString
  713. call Crlf
  714.  
  715. ret
  716. displayPlayer1HiddenBoard ENDP
  717.  
  718.  
  719. ;--------------------------------------------------------------------------------------------------------
  720. ; DRAW THE BOARD WITH PLAYER 2'S HITS ON PLAYER 1
  721. ;--------------------------------------------------------------------------------------------------------
  722. displayPlayer2VisibleBoard PROC
  723.  
  724. mov edi, offset player2visibleboard
  725. mov eax, 0
  726.  
  727. mov dl, 75
  728. mov dh, 10
  729. call Gotoxy
  730. ; ROW 1 OF THE BOARD CONTAINS PIPES
  731. mov esi, offset board01
  732. mov edx, esi
  733. call WriteString
  734. call Crlf
  735.  
  736. mov dl, 75
  737. mov dh, 11
  738. call Gotoxy
  739. ; ROW 2 OF THE BOARD CONTAINS THE NUMBERS
  740. mov esi, offset board02
  741. mov edx, esi
  742. call WriteString
  743. call Crlf
  744.  
  745. mov dl, 75
  746. mov dh, 12
  747. call Gotoxy
  748. ; ROW 3 OF THE BOARD CONTAINS PIPES
  749. mov esi, offset board03
  750. mov edx, esi
  751. call WriteString
  752. call Crlf
  753.  
  754. mov dl, 75
  755. mov dh, 13
  756. call Gotoxy
  757. ; ROW 4 OF THE BOARD CONTAINS THE 1ST ROW OF THE GRID
  758. mov esi, offset board04
  759. add esi, 2
  760. mov ecx, 10
  761. Bored04:
  762. add esi, 2
  763. mov ah, [edi]
  764. mov [esi], ah
  765. inc edi
  766. loop Bored04
  767. mov esi, offset board04
  768. mov edx, esi
  769. call WriteString
  770. call Crlf
  771.  
  772. mov dl, 75
  773. mov dh, 14
  774. call Gotoxy
  775. ; ROW 5 OF THE BOARD CONTAINS THE 2ND ROW OF THE GRID
  776. mov esi, offset board05
  777. add esi, 2
  778. mov ecx, 10
  779. Bored05:
  780. add esi, 2
  781. mov ah, [edi]
  782. mov [esi], ah
  783. inc edi
  784. loop Bored05
  785. mov esi, offset board05
  786. mov edx, esi
  787. call WriteString
  788. call Crlf
  789.  
  790. mov dl, 75
  791. mov dh, 15
  792. call Gotoxy
  793. ; ROW 6 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
  794. mov esi, offset board06
  795. add esi, 2
  796. mov ecx, 10
  797. Bored06:
  798. add esi, 2
  799. mov ah, [edi]
  800. mov [esi], ah
  801. inc edi
  802. loop Bored06
  803. mov esi, offset board06
  804. mov edx, esi
  805. call WriteString
  806. call Crlf
  807.  
  808. mov dl, 75
  809. mov dh, 16
  810. call Gotoxy
  811. ; ROW 7 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
  812. mov esi, offset board07
  813. add esi, 2
  814. mov ecx, 10
  815. Bored07:
  816. add esi, 2
  817. mov ah, [edi]
  818. mov [esi], ah
  819. inc edi
  820. loop Bored07
  821. mov esi, offset board07
  822. mov edx, esi
  823. call WriteString
  824. call Crlf
  825.  
  826. mov dl, 75
  827. mov dh, 17
  828. call Gotoxy
  829. ; ROW 8 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
  830. mov esi, offset board08
  831. add esi, 2
  832. mov ecx, 10
  833. Bored08:
  834. add esi, 2
  835. mov ah, [edi]
  836. mov [esi], ah
  837. inc edi
  838. loop Bored08
  839. mov esi, offset board08
  840. mov edx, esi
  841. call WriteString
  842. call Crlf
  843.  
  844. mov dl, 75
  845. mov dh, 18
  846. call Gotoxy
  847. ; ROW 9 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
  848. mov esi, offset board09
  849. add esi, 2
  850. mov ecx, 10
  851. Bored09:
  852. add esi, 2
  853. mov ah, [edi]
  854. mov [esi], ah
  855. inc edi
  856. loop Bored09
  857. mov esi, offset board09
  858. mov edx, esi
  859. call WriteString
  860. call Crlf
  861.  
  862. mov dl, 75
  863. mov dh, 19
  864. call Gotoxy
  865. ; ROW 10 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
  866. mov esi, offset board10
  867. add esi, 2
  868. mov ecx, 10
  869. Bored10:
  870. add esi, 2
  871. mov ah, [edi]
  872. mov [esi], ah
  873. inc edi
  874. loop Bored10
  875. mov esi, offset board10
  876. mov edx, esi
  877. call WriteString
  878. call Crlf
  879.  
  880. mov dl, 75
  881. mov dh, 20
  882. call Gotoxy
  883. ; ROW 11 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
  884. mov esi, offset board11
  885. add esi, 2
  886. mov ecx, 10
  887. Bored11:
  888. add esi, 2
  889. mov ah, [edi]
  890. mov [esi], ah
  891. inc edi
  892. loop Bored11
  893. mov esi, offset board11
  894. mov edx, esi
  895. call WriteString
  896. call Crlf
  897.  
  898. mov dl, 75
  899. mov dh, 21
  900. call Gotoxy
  901. ; ROW 12 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
  902. mov esi, offset board12
  903. add esi, 2
  904. mov ecx, 10
  905. Bored12:
  906. add esi, 2
  907. mov ah, [edi]
  908. mov [esi], ah
  909. inc edi
  910. loop Bored12
  911. mov esi, offset board12
  912. mov edx, esi
  913. call WriteString
  914. call Crlf
  915.  
  916. mov dl, 75
  917. mov dh, 22
  918. call Gotoxy
  919. ; ROW 13 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
  920. mov esi, offset board13
  921. add esi, 2
  922. mov ecx, 10
  923. Bored13:
  924. add esi, 2
  925. mov ah, [edi]
  926. mov [esi], ah
  927. inc edi
  928. loop Bored13
  929. mov esi, offset board13
  930. mov edx, esi
  931. call WriteString
  932. call Crlf
  933.  
  934. mov dl, 75
  935. mov dh, 23
  936. call Gotoxy
  937. ; ROW 14 OF THE BOARD CONTAINS PIPES
  938. mov esi, offset board14
  939. mov edx, esi
  940. call WriteString
  941. call Crlf
  942.  
  943. ret
  944. displayPlayer2VisibleBoard ENDP
  945.  
  946.  
  947. ;--------------------------------------------------------------------------------------------------------
  948. ; DRAW THE BOARD WITH PLAYER 2'S SHIPS
  949. ;--------------------------------------------------------------------------------------------------------
  950. displayPlayer2HiddenBoard PROC
  951.  
  952. mov edi, offset player2hiddenboard
  953. mov eax, 0
  954.  
  955. mov dl, 75
  956. mov dh, 10
  957. call Gotoxy
  958. ; ROW 1 OF THE BOARD CONTAINS PIPES
  959. mov esi, offset board01
  960. mov edx, esi
  961. call WriteString
  962. call Crlf
  963.  
  964. mov dl, 75
  965. mov dh, 11
  966. call Gotoxy
  967. ; ROW 2 OF THE BOARD CONTAINS THE NUMBERS
  968. mov esi, offset board02
  969. mov edx, esi
  970. call WriteString
  971. call Crlf
  972.  
  973. mov dl, 75
  974. mov dh, 12
  975. call Gotoxy
  976. ; ROW 3 OF THE BOARD CONTAINS PIPES
  977. mov esi, offset board03
  978. mov edx, esi
  979. call WriteString
  980. call Crlf
  981.  
  982. mov dl, 75
  983. mov dh, 13
  984. call Gotoxy
  985. ; ROW 4 OF THE BOARD CONTAINS THE 1ST ROW OF THE GRID
  986. mov esi, offset board04
  987. add esi, 2
  988. mov ecx, 10
  989. Bored04:
  990. add esi, 2
  991. mov ah, [edi]
  992. mov [esi], ah
  993. inc edi
  994. loop Bored04
  995. mov esi, offset board04
  996. mov edx, esi
  997. call WriteString
  998. call Crlf
  999.  
  1000. mov dl, 75
  1001. mov dh, 14
  1002. call Gotoxy
  1003. ; ROW 5 OF THE BOARD CONTAINS THE 2ND ROW OF THE GRID
  1004. mov esi, offset board05
  1005. add esi, 2
  1006. mov ecx, 10
  1007. Bored05:
  1008. add esi, 2
  1009. mov ah, [edi]
  1010. mov [esi], ah
  1011. inc edi
  1012. loop Bored05
  1013. mov esi, offset board05
  1014. mov edx, esi
  1015. call WriteString
  1016. call Crlf
  1017.  
  1018. mov dl, 75
  1019. mov dh, 15
  1020. call Gotoxy
  1021. ; ROW 6 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
  1022. mov esi, offset board06
  1023. add esi, 2
  1024. mov ecx, 10
  1025. Bored06:
  1026. add esi, 2
  1027. mov ah, [edi]
  1028. mov [esi], ah
  1029. inc edi
  1030. loop Bored06
  1031. mov esi, offset board06
  1032. mov edx, esi
  1033. call WriteString
  1034. call Crlf
  1035.  
  1036. mov dl, 75
  1037. mov dh, 16
  1038. call Gotoxy
  1039. ; ROW 7 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
  1040. mov esi, offset board07
  1041. add esi, 2
  1042. mov ecx, 10
  1043. Bored07:
  1044. add esi, 2
  1045. mov ah, [edi]
  1046. mov [esi], ah
  1047. inc edi
  1048. loop Bored07
  1049. mov esi, offset board07
  1050. mov edx, esi
  1051. call WriteString
  1052. call Crlf
  1053.  
  1054. mov dl, 75
  1055. mov dh, 17
  1056. call Gotoxy
  1057. ; ROW 8 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
  1058. mov esi, offset board08
  1059. add esi, 2
  1060. mov ecx, 10
  1061. Bored08:
  1062. add esi, 2
  1063. mov ah, [edi]
  1064. mov [esi], ah
  1065. inc edi
  1066. loop Bored08
  1067. mov esi, offset board08
  1068. mov edx, esi
  1069. call WriteString
  1070. call Crlf
  1071.  
  1072. mov dl, 75
  1073. mov dh, 18
  1074. call Gotoxy
  1075. ; ROW 9 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
  1076. mov esi, offset board09
  1077. add esi, 2
  1078. mov ecx, 10
  1079. Bored09:
  1080. add esi, 2
  1081. mov ah, [edi]
  1082. mov [esi], ah
  1083. inc edi
  1084. loop Bored09
  1085. mov esi, offset board09
  1086. mov edx, esi
  1087. call WriteString
  1088. call Crlf
  1089.  
  1090. mov dl, 75
  1091. mov dh, 19
  1092. call Gotoxy
  1093. ; ROW 10 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
  1094. mov esi, offset board10
  1095. add esi, 2
  1096. mov ecx, 10
  1097. Bored10:
  1098. add esi, 2
  1099. mov ah, [edi]
  1100. mov [esi], ah
  1101. inc edi
  1102. loop Bored10
  1103. mov esi, offset board10
  1104. mov edx, esi
  1105. call WriteString
  1106. call Crlf
  1107.  
  1108. mov dl, 75
  1109. mov dh, 20
  1110. call Gotoxy
  1111. ; ROW 11 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
  1112. mov esi, offset board11
  1113. add esi, 2
  1114. mov ecx, 10
  1115. Bored11:
  1116. add esi, 2
  1117. mov ah, [edi]
  1118. mov [esi], ah
  1119. inc edi
  1120. loop Bored11
  1121. mov esi, offset board11
  1122. mov edx, esi
  1123. call WriteString
  1124. call Crlf
  1125.  
  1126. mov dl, 75
  1127. mov dh, 21
  1128. call Gotoxy
  1129. ; ROW 12 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
  1130. mov esi, offset board12
  1131. add esi, 2
  1132. mov ecx, 10
  1133. Bored12:
  1134. add esi, 2
  1135. mov ah, [edi]
  1136. mov [esi], ah
  1137. inc edi
  1138. loop Bored12
  1139. mov esi, offset board12
  1140. mov edx, esi
  1141. call WriteString
  1142. call Crlf
  1143.  
  1144. mov dl, 75
  1145. mov dh, 22
  1146. call Gotoxy
  1147. ; ROW 13 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
  1148. mov esi, offset board13
  1149. add esi, 2
  1150. mov ecx, 10
  1151. Bored13:
  1152. add esi, 2
  1153. mov ah, [edi]
  1154. mov [esi], ah
  1155. inc edi
  1156. loop Bored13
  1157. mov esi, offset board13
  1158. mov edx, esi
  1159. call WriteString
  1160. call Crlf
  1161.  
  1162. mov dl, 75
  1163. mov dh, 23
  1164. call Gotoxy
  1165. ; ROW 14 OF THE BOARD CONTAINS PIPES
  1166. mov esi, offset board14
  1167. mov edx, esi
  1168. call WriteString
  1169. call Crlf
  1170.  
  1171. ret
  1172. displayPlayer2HiddenBoard ENDP
  1173.  
  1174.  
  1175.  
  1176. CarrierOrientationClick PROC
  1177.  
  1178. invoke GetStdHandle, STD_INPUT_HANDLE
  1179. mov rHnd, eax
  1180. invoke SetConsoleMode, rHnd, ENABLE_LINE_INPUT OR ENABLE_MOUSE_INPUT OR ENABLE_EXTENDED_FLAGS
  1181. appContinue:
  1182. invoke GetNumberOfConsoleInputEvents, rHnd, OFFSET numEventsOccurred
  1183. cmp numEventsOccurred, 0
  1184. je appContinue
  1185. invoke ReadConsoleInput, rHnd, OFFSET eventBuffer, numEventsOccurred, OFFSET numEventsRead
  1186. mov ecx, numEventsRead
  1187. mov esi, OFFSET eventBuffer
  1188.  
  1189. loopOverEvents:
  1190.  
  1191. cmp (INPUT_RECORD PTR [esi]).EventType, MOUSE_EVENT
  1192. jne notMouse
  1193. cmp (INPUT_RECORD PTR [esi]).MouseEvent.dwEventFlags, MOUSE_MOVED
  1194. jne continue
  1195. continue:
  1196. test (INPUT_RECORD PTR [esi]).MouseEvent.dwButtonState, FROM_LEFT_1ST_BUTTON_PRESSED
  1197. jz notMouse
  1198.  
  1199. movzx eax, (INPUT_RECORD PTR [esi]).MouseEvent.dwMousePosition.x
  1200.  
  1201. mov decision, eax
  1202. cmp decision, 70
  1203. je Yposition
  1204.  
  1205. cmp decision, 75
  1206. je Yposition
  1207.  
  1208. call Crlf
  1209. mov edx, offset promptoverlap
  1210. call WriteString
  1211. call CarrierOrientationClick
  1212.  
  1213. Yposition:
  1214.  
  1215. movzx eax, (INPUT_RECORD PTR [esi]).MouseEvent.dwMousePosition.y
  1216. cmp eax, 13
  1217. je HorizontalDone
  1218. call Crlf
  1219. mov edx, offset promptoverlap
  1220. call WriteString
  1221. call CarrierOrientationClick
  1222. notMouse:
  1223. add esi, TYPE INPUT_RECORD
  1224.  
  1225. loop loopOverEvents
  1226.  
  1227.  
  1228. jmp appContinue
  1229.  
  1230. HorizontalDone:
  1231. cmp decision, 75
  1232. jne VerticalDone
  1233. mov orientation, 0
  1234. mov edx, offset horizontalChoice
  1235. call Crlf
  1236. call WriteString
  1237. jmp DoneDone
  1238.  
  1239. VerticalDone:
  1240. mov orientation, 1
  1241. mov edx, offset verticalChoice
  1242. call Crlf
  1243. call WriteString
  1244. DoneDone:
  1245. call CarrierPlacementClick
  1246. invoke ExitProcess, 0
  1247. ret
  1248. CarrierOrientationClick ENDP
  1249.  
  1250. CarrierPlacementClick PROC
  1251.  
  1252. mov lengthship, 5
  1253.  
  1254. StartPlacement:
  1255. invoke GetStdHandle, STD_INPUT_HANDLE
  1256. mov rHndPlacement, eax
  1257. invoke SetConsoleMode, rHnd, ENABLE_LINE_INPUT OR ENABLE_MOUSE_INPUT OR ENABLE_EXTENDED_FLAGS
  1258. appContinuePlacement:
  1259. invoke GetNumberOfConsoleInputEvents, rHndPlacement, OFFSET numEventsOccurredPlacement
  1260. cmp numEventsOccurredPlacement, 0
  1261. je appContinuePlacement
  1262. invoke ReadConsoleInput, rHndPlacement, OFFSET eventBufferPlacement, numEventsOccurredPlacement, OFFSET numEventsReadPlacement
  1263. mov ecx, numEventsReadPlacement
  1264. mov esi, OFFSET eventBufferPlacement
  1265.  
  1266. loopOverEventsPlacement:
  1267. cmp (INPUT_RECORD PTR [esi]).EventType, MOUSE_EVENT
  1268. jne notMousePlacement
  1269. cmp (INPUT_RECORD PTR [esi]).MouseEvent.dwEventFlags, MOUSE_MOVED
  1270. jne continuePlacement
  1271. continuePlacement:
  1272. test (INPUT_RECORD PTR [esi]).MouseEvent.dwButtonState, FROM_LEFT_1ST_BUTTON_PRESSED
  1273. jz notMousePlacement
  1274. movzx eax, (INPUT_RECORD PTR [esi]).MouseEvent.dwMousePosition.x
  1275.  
  1276. sub eax, 19
  1277. mov ebx, 2
  1278. mov edx, 0
  1279. div ebx
  1280.  
  1281. cmp al, 9
  1282. jg StartPlacement
  1283. cmp al, 0
  1284. jl StartPlacement
  1285.  
  1286. mov xpoint, al
  1287.  
  1288. movzx eax, (INPUT_RECORD PTR [esi]).MouseEvent.dwMousePosition.y
  1289. sub eax, 13
  1290. cmp al, 9
  1291. jg StartPlacement
  1292.  
  1293. mov ypoint, al
  1294. ;cmp al,
  1295.  
  1296. call Crlf
  1297. jmp DonePlacement
  1298. notMousePlacement:
  1299. add esi, INPUT_RECORD
  1300.  
  1301. loop loopOverEventsPlacement
  1302. jmp appContinuePlacement
  1303. DonePlacement:
  1304.  
  1305. call validShipPlacement1
  1306. call displayPlayer1HiddenBoard
  1307.  
  1308. mov eax, 1000
  1309. call Delay
  1310. call ship2Screen
  1311.  
  1312. invoke ExitProcess, 0
  1313. ret
  1314.  
  1315. CarrierPlacementClick ENDP
  1316.  
  1317. BattleOrientationClick PROC
  1318.  
  1319. invoke GetStdHandle, STD_INPUT_HANDLE
  1320. mov rHnd, eax
  1321. invoke SetConsoleMode, rHnd, ENABLE_LINE_INPUT OR ENABLE_MOUSE_INPUT OR ENABLE_EXTENDED_FLAGS
  1322. appContinue:
  1323. invoke GetNumberOfConsoleInputEvents, rHnd, OFFSET numEventsOccurred
  1324. cmp numEventsOccurred, 0
  1325. je appContinue
  1326. invoke ReadConsoleInput, rHnd, OFFSET eventBuffer, numEventsOccurred, OFFSET numEventsRead
  1327. mov ecx, numEventsRead
  1328. mov esi, OFFSET eventBuffer
  1329.  
  1330. loopOverEvents:
  1331.  
  1332. cmp (INPUT_RECORD PTR [esi]).EventType, MOUSE_EVENT
  1333. jne notMouse
  1334. cmp (INPUT_RECORD PTR [esi]).MouseEvent.dwEventFlags, MOUSE_MOVED
  1335. jne continue
  1336. continue:
  1337. test (INPUT_RECORD PTR [esi]).MouseEvent.dwButtonState, FROM_LEFT_1ST_BUTTON_PRESSED
  1338. jz notMouse
  1339.  
  1340. movzx eax, (INPUT_RECORD PTR [esi]).MouseEvent.dwMousePosition.x
  1341.  
  1342. mov decision, eax
  1343. cmp decision, 70
  1344. je Yposition
  1345.  
  1346. cmp decision, 75
  1347. je Yposition
  1348.  
  1349. call Crlf
  1350. mov edx, offset promptoverlap
  1351. call WriteString
  1352. call BattleOrientationClick
  1353.  
  1354. Yposition:
  1355.  
  1356. movzx eax, (INPUT_RECORD PTR [esi]).MouseEvent.dwMousePosition.y
  1357. cmp eax, 13
  1358. je HorizontalDone
  1359. call Crlf
  1360. mov edx, offset promptoverlap
  1361. call WriteString
  1362. call BattleOrientationClick
  1363. notMouse:
  1364. add esi, TYPE INPUT_RECORD
  1365.  
  1366. loop loopOverEvents
  1367.  
  1368.  
  1369. jmp appContinue
  1370.  
  1371. HorizontalDone:
  1372. cmp decision, 75
  1373. jne VerticalDone
  1374. mov orientation, 0
  1375. mov edx, offset horizontalChoice
  1376. call Crlf
  1377. call WriteString
  1378. jmp DoneDone
  1379.  
  1380. VerticalDone:
  1381. mov orientation, 1
  1382. mov edx, offset verticalChoice
  1383. call Crlf
  1384. call WriteString
  1385. DoneDone:
  1386. call BattlePlacementClick
  1387. invoke ExitProcess, 0
  1388. ret
  1389. BattleOrientationClick ENDP
  1390.  
  1391. BattlePlacementClick PROC
  1392.  
  1393. mov lengthship, 4
  1394.  
  1395. StartPlacement:
  1396. invoke GetStdHandle, STD_INPUT_HANDLE
  1397. mov rHndPlacement, eax
  1398. invoke SetConsoleMode, rHnd, ENABLE_LINE_INPUT OR ENABLE_MOUSE_INPUT OR ENABLE_EXTENDED_FLAGS
  1399. appContinuePlacement:
  1400. invoke GetNumberOfConsoleInputEvents, rHndPlacement, OFFSET numEventsOccurredPlacement
  1401. cmp numEventsOccurredPlacement, 0
  1402. je appContinuePlacement
  1403. invoke ReadConsoleInput, rHndPlacement, OFFSET eventBufferPlacement, numEventsOccurredPlacement, OFFSET numEventsReadPlacement
  1404. mov ecx, numEventsReadPlacement
  1405. mov esi, OFFSET eventBufferPlacement
  1406.  
  1407. loopOverEventsPlacement:
  1408. cmp (INPUT_RECORD PTR [esi]).EventType, MOUSE_EVENT
  1409. jne notMousePlacement
  1410. cmp (INPUT_RECORD PTR [esi]).MouseEvent.dwEventFlags, MOUSE_MOVED
  1411. jne continuePlacement
  1412. continuePlacement:
  1413. test (INPUT_RECORD PTR [esi]).MouseEvent.dwButtonState, FROM_LEFT_1ST_BUTTON_PRESSED
  1414. jz notMousePlacement
  1415. movzx eax, (INPUT_RECORD PTR [esi]).MouseEvent.dwMousePosition.x
  1416.  
  1417. sub eax, 19
  1418. mov ebx, 2
  1419. mov edx, 0
  1420. div ebx
  1421.  
  1422. cmp al, 9
  1423. jg StartPlacement
  1424. cmp al, 0
  1425. jl StartPlacement
  1426.  
  1427. mov xpoint, al
  1428.  
  1429. movzx eax, (INPUT_RECORD PTR [esi]).MouseEvent.dwMousePosition.y
  1430. sub eax, 13
  1431. cmp al, 9
  1432. jg StartPlacement
  1433.  
  1434. mov ypoint, al
  1435. ;cmp al,
  1436.  
  1437. call Crlf
  1438. jmp DonePlacement
  1439. notMousePlacement:
  1440. add esi, INPUT_RECORD
  1441.  
  1442. loop loopOverEventsPlacement
  1443. jmp appContinuePlacement
  1444. DonePlacement:
  1445.  
  1446. call validShipPlacement1
  1447. call displayPlayer1HiddenBoard
  1448.  
  1449. mov eax, 1000
  1450. call Delay
  1451. call ship3Screen
  1452.  
  1453. invoke ExitProcess, 0
  1454. ret
  1455.  
  1456. BattlePlacementClick ENDP
  1457.  
  1458. CruiserOrientationClick PROC
  1459.  
  1460. invoke GetStdHandle, STD_INPUT_HANDLE
  1461. mov rHnd, eax
  1462. invoke SetConsoleMode, rHnd, ENABLE_LINE_INPUT OR ENABLE_MOUSE_INPUT OR ENABLE_EXTENDED_FLAGS
  1463. appContinue:
  1464. invoke GetNumberOfConsoleInputEvents, rHnd, OFFSET numEventsOccurred
  1465. cmp numEventsOccurred, 0
  1466. je appContinue
  1467. invoke ReadConsoleInput, rHnd, OFFSET eventBuffer, numEventsOccurred, OFFSET numEventsRead
  1468. mov ecx, numEventsRead
  1469. mov esi, OFFSET eventBuffer
  1470.  
  1471. loopOverEvents:
  1472.  
  1473. cmp (INPUT_RECORD PTR [esi]).EventType, MOUSE_EVENT
  1474. jne notMouse
  1475. cmp (INPUT_RECORD PTR [esi]).MouseEvent.dwEventFlags, MOUSE_MOVED
  1476. jne continue
  1477. continue:
  1478. test (INPUT_RECORD PTR [esi]).MouseEvent.dwButtonState, FROM_LEFT_1ST_BUTTON_PRESSED
  1479. jz notMouse
  1480.  
  1481. movzx eax, (INPUT_RECORD PTR [esi]).MouseEvent.dwMousePosition.x
  1482.  
  1483. mov decision, eax
  1484. cmp decision, 70
  1485. je Yposition
  1486.  
  1487. cmp decision, 75
  1488. je Yposition
  1489.  
  1490. call Crlf
  1491. mov edx, offset promptoverlap
  1492. call WriteString
  1493. call CruiserOrientationClick
  1494.  
  1495. Yposition:
  1496.  
  1497. movzx eax, (INPUT_RECORD PTR [esi]).MouseEvent.dwMousePosition.y
  1498. cmp eax, 13
  1499. je HorizontalDone
  1500. call Crlf
  1501. mov edx, offset promptoverlap
  1502. call WriteString
  1503. call CruiserOrientationClick
  1504. notMouse:
  1505. add esi, TYPE INPUT_RECORD
  1506.  
  1507. loop loopOverEvents
  1508.  
  1509.  
  1510. jmp appContinue
  1511.  
  1512. HorizontalDone:
  1513. cmp decision, 75
  1514. jne VerticalDone
  1515. mov orientation, 0
  1516. mov edx, offset horizontalChoice
  1517. call Crlf
  1518. call WriteString
  1519. jmp DoneDone
  1520.  
  1521. VerticalDone:
  1522. mov orientation, 1
  1523. mov edx, offset verticalChoice
  1524. call Crlf
  1525. call WriteString
  1526. DoneDone:
  1527. call CruiserPlacementClick
  1528. invoke ExitProcess, 0
  1529. ret
  1530. CruiserOrientationClick ENDP
  1531.  
  1532. CruiserPlacementClick PROC
  1533.  
  1534. mov lengthship, 3
  1535.  
  1536. StartPlacement:
  1537. invoke GetStdHandle, STD_INPUT_HANDLE
  1538. mov rHndPlacement, eax
  1539. invoke SetConsoleMode, rHnd, ENABLE_LINE_INPUT OR ENABLE_MOUSE_INPUT OR ENABLE_EXTENDED_FLAGS
  1540. appContinuePlacement:
  1541. invoke GetNumberOfConsoleInputEvents, rHndPlacement, OFFSET numEventsOccurredPlacement
  1542. cmp numEventsOccurredPlacement, 0
  1543. je appContinuePlacement
  1544. invoke ReadConsoleInput, rHndPlacement, OFFSET eventBufferPlacement, numEventsOccurredPlacement, OFFSET numEventsReadPlacement
  1545. mov ecx, numEventsReadPlacement
  1546. mov esi, OFFSET eventBufferPlacement
  1547.  
  1548. loopOverEventsPlacement:
  1549. cmp (INPUT_RECORD PTR [esi]).EventType, MOUSE_EVENT
  1550. jne notMousePlacement
  1551. cmp (INPUT_RECORD PTR [esi]).MouseEvent.dwEventFlags, MOUSE_MOVED
  1552. jne continuePlacement
  1553. continuePlacement:
  1554. test (INPUT_RECORD PTR [esi]).MouseEvent.dwButtonState, FROM_LEFT_1ST_BUTTON_PRESSED
  1555. jz notMousePlacement
  1556. movzx eax, (INPUT_RECORD PTR [esi]).MouseEvent.dwMousePosition.x
  1557.  
  1558. sub eax, 19
  1559. mov ebx, 2
  1560. mov edx, 0
  1561. div ebx
  1562.  
  1563. cmp al, 9
  1564. jg StartPlacement
  1565. cmp al, 0
  1566. jl StartPlacement
  1567.  
  1568. mov xpoint, al
  1569.  
  1570. movzx eax, (INPUT_RECORD PTR [esi]).MouseEvent.dwMousePosition.y
  1571. sub eax, 13
  1572. cmp al, 9
  1573. jg StartPlacement
  1574.  
  1575. mov ypoint, al
  1576. ;cmp al,
  1577.  
  1578. call Crlf
  1579. jmp DonePlacement
  1580. notMousePlacement:
  1581. add esi, INPUT_RECORD
  1582.  
  1583. loop loopOverEventsPlacement
  1584. jmp appContinuePlacement
  1585. DonePlacement:
  1586.  
  1587. call validShipPlacement1
  1588. call displayPlayer1HiddenBoard
  1589.  
  1590. mov eax, 1000
  1591. call Delay
  1592. call ship4Screen
  1593.  
  1594. invoke ExitProcess, 0
  1595. ret
  1596.  
  1597. CruiserPlacementClick ENDP
  1598.  
  1599. SubmarineOrientationClick PROC
  1600. invoke GetStdHandle, STD_INPUT_HANDLE
  1601. mov rHnd, eax
  1602. invoke SetConsoleMode, rHnd, ENABLE_LINE_INPUT OR ENABLE_MOUSE_INPUT OR ENABLE_EXTENDED_FLAGS
  1603. appContinue:
  1604. invoke GetNumberOfConsoleInputEvents, rHnd, OFFSET numEventsOccurred
  1605. cmp numEventsOccurred, 0
  1606. je appContinue
  1607. invoke ReadConsoleInput, rHnd, OFFSET eventBuffer, numEventsOccurred, OFFSET numEventsRead
  1608. mov ecx, numEventsRead
  1609. mov esi, OFFSET eventBuffer
  1610.  
  1611. loopOverEvents:
  1612.  
  1613. cmp (INPUT_RECORD PTR [esi]).EventType, MOUSE_EVENT
  1614. jne notMouse
  1615. cmp (INPUT_RECORD PTR [esi]).MouseEvent.dwEventFlags, MOUSE_MOVED
  1616. jne continue
  1617. continue:
  1618. test (INPUT_RECORD PTR [esi]).MouseEvent.dwButtonState, FROM_LEFT_1ST_BUTTON_PRESSED
  1619. jz notMouse
  1620.  
  1621. movzx eax, (INPUT_RECORD PTR [esi]).MouseEvent.dwMousePosition.x
  1622.  
  1623. mov decision, eax
  1624. cmp decision, 70
  1625. je Yposition
  1626.  
  1627. cmp decision, 75
  1628. je Yposition
  1629.  
  1630. call Crlf
  1631. mov edx, offset promptoverlap
  1632. call WriteString
  1633. call SubmarineOrientationClick
  1634.  
  1635. Yposition:
  1636.  
  1637. movzx eax, (INPUT_RECORD PTR [esi]).MouseEvent.dwMousePosition.y
  1638. cmp eax, 13
  1639. je HorizontalDone
  1640. call Crlf
  1641. mov edx, offset promptoverlap
  1642. call WriteString
  1643. call SubmarineOrientationClick
  1644. notMouse:
  1645. add esi, TYPE INPUT_RECORD
  1646.  
  1647. loop loopOverEvents
  1648.  
  1649.  
  1650. jmp appContinue
  1651.  
  1652. HorizontalDone:
  1653. cmp decision, 75
  1654. jne VerticalDone
  1655. mov orientation, 0
  1656. mov edx, offset horizontalChoice
  1657. call Crlf
  1658. call WriteString
  1659. jmp DoneDone
  1660.  
  1661. VerticalDone:
  1662. mov orientation, 1
  1663. mov edx, offset verticalChoice
  1664. call Crlf
  1665. call WriteString
  1666. DoneDone:
  1667. call SubmarinePlacementClick
  1668. invoke ExitProcess, 0
  1669. ret
  1670. SubmarineOrientationClick ENDP
  1671.  
  1672. SubmarinePlacementClick PROC
  1673. mov lengthship, 3
  1674. mov whichShip3, 1
  1675.  
  1676. StartPlacement:
  1677. invoke GetStdHandle, STD_INPUT_HANDLE
  1678. mov rHndPlacement, eax
  1679. invoke SetConsoleMode, rHnd, ENABLE_LINE_INPUT OR ENABLE_MOUSE_INPUT OR ENABLE_EXTENDED_FLAGS
  1680. appContinuePlacement:
  1681. invoke GetNumberOfConsoleInputEvents, rHndPlacement, OFFSET numEventsOccurredPlacement
  1682. cmp numEventsOccurredPlacement, 0
  1683. je appContinuePlacement
  1684. invoke ReadConsoleInput, rHndPlacement, OFFSET eventBufferPlacement, numEventsOccurredPlacement, OFFSET numEventsReadPlacement
  1685. mov ecx, numEventsReadPlacement
  1686. mov esi, OFFSET eventBufferPlacement
  1687.  
  1688. loopOverEventsPlacement:
  1689. cmp (INPUT_RECORD PTR [esi]).EventType, MOUSE_EVENT
  1690. jne notMousePlacement
  1691. cmp (INPUT_RECORD PTR [esi]).MouseEvent.dwEventFlags, MOUSE_MOVED
  1692. jne continuePlacement
  1693. continuePlacement:
  1694. test (INPUT_RECORD PTR [esi]).MouseEvent.dwButtonState, FROM_LEFT_1ST_BUTTON_PRESSED
  1695. jz notMousePlacement
  1696. movzx eax, (INPUT_RECORD PTR [esi]).MouseEvent.dwMousePosition.x
  1697.  
  1698. sub eax, 19
  1699. mov ebx, 2
  1700. mov edx, 0
  1701. div ebx
  1702.  
  1703. cmp al, 9
  1704. jg StartPlacement
  1705. cmp al, 0
  1706. jl StartPlacement
  1707.  
  1708. mov xpoint, al
  1709.  
  1710. movzx eax, (INPUT_RECORD PTR [esi]).MouseEvent.dwMousePosition.y
  1711. sub eax, 13
  1712. cmp al, 9
  1713. jg StartPlacement
  1714.  
  1715. mov ypoint, al
  1716. ;cmp al,
  1717.  
  1718. call Crlf
  1719. jmp DonePlacement
  1720. notMousePlacement:
  1721. add esi, INPUT_RECORD
  1722.  
  1723. loop loopOverEventsPlacement
  1724. jmp appContinuePlacement
  1725. DonePlacement:
  1726.  
  1727. call validShipPlacement1
  1728. call displayPlayer1HiddenBoard
  1729.  
  1730. mov eax, 1000
  1731. call Delay
  1732. call ship5Screen
  1733.  
  1734. invoke ExitProcess, 0
  1735. ret
  1736. SubmarinePlacementClick ENDP
  1737.  
  1738. DestroyerOrientationClick PROC
  1739. invoke GetStdHandle, STD_INPUT_HANDLE
  1740. mov rHnd, eax
  1741. invoke SetConsoleMode, rHnd, ENABLE_LINE_INPUT OR ENABLE_MOUSE_INPUT OR ENABLE_EXTENDED_FLAGS
  1742. appContinue:
  1743. invoke GetNumberOfConsoleInputEvents, rHnd, OFFSET numEventsOccurred
  1744. cmp numEventsOccurred, 0
  1745. je appContinue
  1746. invoke ReadConsoleInput, rHnd, OFFSET eventBuffer, numEventsOccurred, OFFSET numEventsRead
  1747. mov ecx, numEventsRead
  1748. mov esi, OFFSET eventBuffer
  1749.  
  1750. loopOverEvents:
  1751.  
  1752. cmp (INPUT_RECORD PTR [esi]).EventType, MOUSE_EVENT
  1753. jne notMouse
  1754. cmp (INPUT_RECORD PTR [esi]).MouseEvent.dwEventFlags, MOUSE_MOVED
  1755. jne continue
  1756. continue:
  1757. test (INPUT_RECORD PTR [esi]).MouseEvent.dwButtonState, FROM_LEFT_1ST_BUTTON_PRESSED
  1758. jz notMouse
  1759.  
  1760. movzx eax, (INPUT_RECORD PTR [esi]).MouseEvent.dwMousePosition.x
  1761.  
  1762. mov decision, eax
  1763. cmp decision, 70
  1764. je Yposition
  1765.  
  1766. cmp decision, 75
  1767. je Yposition
  1768.  
  1769. call Crlf
  1770. mov edx, offset promptoverlap
  1771. call WriteString
  1772. call DestroyerOrientationClick
  1773.  
  1774. Yposition:
  1775.  
  1776. movzx eax, (INPUT_RECORD PTR [esi]).MouseEvent.dwMousePosition.y
  1777. cmp eax, 13
  1778. je HorizontalDone
  1779. call Crlf
  1780. mov edx, offset promptoverlap
  1781. call WriteString
  1782. call DestroyerOrientationClick
  1783. notMouse:
  1784. add esi, TYPE INPUT_RECORD
  1785.  
  1786. loop loopOverEvents
  1787.  
  1788.  
  1789. jmp appContinue
  1790.  
  1791. HorizontalDone:
  1792. cmp decision, 75
  1793. jne VerticalDone
  1794. mov orientation, 0
  1795. mov edx, offset horizontalChoice
  1796. call Crlf
  1797. call WriteString
  1798. jmp DoneDone
  1799.  
  1800. VerticalDone:
  1801. mov orientation, 1
  1802. mov edx, offset verticalChoice
  1803. call Crlf
  1804. call WriteString
  1805. DoneDone:
  1806. call DestroyerPlacementClick
  1807. invoke ExitProcess, 0
  1808. ret
  1809. DestroyerOrientationClick ENDP
  1810.  
  1811. DestroyerPlacementClick PROC
  1812. mov lengthship, 2
  1813.  
  1814. StartPlacement:
  1815. invoke GetStdHandle, STD_INPUT_HANDLE
  1816. mov rHndPlacement, eax
  1817. invoke SetConsoleMode, rHnd, ENABLE_LINE_INPUT OR ENABLE_MOUSE_INPUT OR ENABLE_EXTENDED_FLAGS
  1818. appContinuePlacement:
  1819. invoke GetNumberOfConsoleInputEvents, rHndPlacement, OFFSET numEventsOccurredPlacement
  1820. cmp numEventsOccurredPlacement, 0
  1821. je appContinuePlacement
  1822. invoke ReadConsoleInput, rHndPlacement, OFFSET eventBufferPlacement, numEventsOccurredPlacement, OFFSET numEventsReadPlacement
  1823. mov ecx, numEventsReadPlacement
  1824. mov esi, OFFSET eventBufferPlacement
  1825.  
  1826. loopOverEventsPlacement:
  1827. cmp (INPUT_RECORD PTR [esi]).EventType, MOUSE_EVENT
  1828. jne notMousePlacement
  1829. cmp (INPUT_RECORD PTR [esi]).MouseEvent.dwEventFlags, MOUSE_MOVED
  1830. jne continuePlacement
  1831. continuePlacement:
  1832. test (INPUT_RECORD PTR [esi]).MouseEvent.dwButtonState, FROM_LEFT_1ST_BUTTON_PRESSED
  1833. jz notMousePlacement
  1834. movzx eax, (INPUT_RECORD PTR [esi]).MouseEvent.dwMousePosition.x
  1835.  
  1836. sub eax, 19
  1837. mov ebx, 2
  1838. mov edx, 0
  1839. div ebx
  1840.  
  1841. cmp al, 9
  1842. jg StartPlacement
  1843. cmp al, 0
  1844. jl StartPlacement
  1845.  
  1846. mov xpoint, al
  1847.  
  1848. movzx eax, (INPUT_RECORD PTR [esi]).MouseEvent.dwMousePosition.y
  1849. sub eax, 13
  1850. cmp al, 9
  1851. jg StartPlacement
  1852.  
  1853. mov ypoint, al
  1854. ;cmp al,
  1855.  
  1856. call Crlf
  1857. jmp DonePlacement
  1858. notMousePlacement:
  1859. add esi, INPUT_RECORD
  1860.  
  1861. loop loopOverEventsPlacement
  1862. jmp appContinuePlacement
  1863. DonePlacement:
  1864.  
  1865. call validShipPlacement1
  1866. call displayPlayer1HiddenBoard
  1867.  
  1868. mov eax, 1000
  1869. call Delay
  1870. call playScreen
  1871.  
  1872. invoke ExitProcess, 0
  1873. ret
  1874. DestroyerPlacementClick ENDP
  1875.  
  1876. letterB PROC
  1877.  
  1878. mov ecx, lengthof XvalueB
  1879. mov esi, offset XvalueB
  1880. mov edi, offset YvalueB
  1881. mov eax, 219
  1882.  
  1883. LevelPrint:
  1884. push eax
  1885. mov eax, 50
  1886. call Delay
  1887. pop eax
  1888. mov dl, [esi]
  1889. mov dh, [edi]
  1890. call Gotoxy
  1891. call WriteChar
  1892. add esi, type XvalueB
  1893. add edi, type YvalueB
  1894. Loop LevelPrint
  1895.  
  1896. ret
  1897. letterB ENDP
  1898.  
  1899. letterA PROC
  1900.  
  1901. mov ecx, lengthof XvalueA
  1902. mov esi, offset XvalueA
  1903. mov edi, offset YvalueA
  1904. mov eax, 219
  1905.  
  1906. LevelPrint:
  1907. push eax
  1908. mov eax, 50
  1909. call Delay
  1910. pop eax
  1911. mov dl, [esi]
  1912. mov dh, [edi]
  1913. call Gotoxy
  1914. call WriteChar
  1915. add esi, type XvalueA
  1916. add edi, type YvalueA
  1917. Loop LevelPrint
  1918. ret
  1919. letterA ENDP
  1920.  
  1921. letterTfirst PROC
  1922.  
  1923. mov ecx, lengthof XvalueTfirst
  1924. mov esi, offset XvalueTfirst
  1925. mov edi, offset YvalueTfirst
  1926. mov eax, 219
  1927.  
  1928. LevelPrint:
  1929. push eax
  1930. mov eax, 50
  1931. call Delay
  1932. pop eax
  1933. mov dl, [esi]
  1934. mov dh, [edi]
  1935. call Gotoxy
  1936. call WriteChar
  1937. add esi, type XvalueTfirst
  1938. add edi, type YvalueTfirst
  1939. Loop LevelPrint
  1940.  
  1941. ret
  1942. letterTfirst ENDP
  1943.  
  1944. letterTsecond PROC
  1945.  
  1946. mov ecx, lengthof XvalueTsecond
  1947. mov esi, offset XvalueTsecond
  1948. mov edi, offset YvalueTsecond
  1949. mov eax, 219
  1950.  
  1951. LevelPrint:
  1952. push eax
  1953. mov eax, 50
  1954. call Delay
  1955. pop eax
  1956. mov dl, [esi]
  1957. mov dh, [edi]
  1958. call Gotoxy
  1959. call WriteChar
  1960. add esi, type XvalueTsecond
  1961. add edi, type YvalueTsecond
  1962. Loop LevelPrint
  1963.  
  1964. ret
  1965. letterTsecond ENDP
  1966.  
  1967. letterL PROC
  1968.  
  1969. mov ecx, lengthof XvalueL
  1970. mov esi, offset XvalueL
  1971. mov edi, offset YvalueL
  1972. mov eax, 219
  1973.  
  1974. LevelPrint:
  1975. push eax
  1976. mov eax, 50
  1977. call Delay
  1978. pop eax
  1979. mov dl, [esi]
  1980. mov dh, [edi]
  1981. call Gotoxy
  1982. call WriteChar
  1983. add esi, type XvalueL
  1984. add edi, type YvalueL
  1985. Loop LevelPrint
  1986. ret
  1987. letterL ENDP
  1988.  
  1989. letterE PROC
  1990.  
  1991. mov ecx, lengthof XvalueE
  1992. mov esi, offset XvalueE
  1993. mov edi, offset YvalueE
  1994. mov eax, 219
  1995.  
  1996. LevelPrint:
  1997. push eax
  1998. mov eax, 50
  1999. call Delay
  2000. pop eax
  2001. mov dl, [esi]
  2002. mov dh, [edi]
  2003. call Gotoxy
  2004. call WriteChar
  2005. add esi, type XvalueE
  2006. add edi, type YvalueE
  2007. Loop LevelPrint
  2008. ret
  2009. letterE ENDP
  2010.  
  2011. letterS PROC
  2012.  
  2013. mov ecx, lengthof XvalueS
  2014. mov esi, offset XvalueS
  2015. mov edi, offset YvalueS
  2016. mov eax, 219
  2017.  
  2018. LevelPrint:
  2019. push eax
  2020. mov eax, 50
  2021. call Delay
  2022. pop eax
  2023. mov dl, [esi]
  2024. mov dh, [edi]
  2025. call Gotoxy
  2026. call WriteChar
  2027. add esi, type XvalueS
  2028. add edi, type YvalueS
  2029. Loop LevelPrint
  2030. ret
  2031. letterS ENDP
  2032.  
  2033. letterH PROC
  2034.  
  2035. mov ecx, lengthof XvalueH
  2036. mov esi, offset XvalueH
  2037. mov edi, offset YvalueH
  2038. mov eax, 219
  2039.  
  2040. LevelPrint:
  2041. push eax
  2042. mov eax, 50
  2043. call Delay
  2044. pop eax
  2045. mov dl, [esi]
  2046. mov dh, [edi]
  2047. call Gotoxy
  2048. call WriteChar
  2049. add esi, type XvalueH
  2050. add edi, type YvalueH
  2051. Loop LevelPrint
  2052. ret
  2053. letterH ENDP
  2054.  
  2055. letterI PROC
  2056.  
  2057. mov ecx, lengthof XvalueI
  2058. mov esi, offset XvalueI
  2059. mov edi, offset YvalueI
  2060. mov eax, 219
  2061.  
  2062. LevelPrint:
  2063. push eax
  2064. mov eax, 50
  2065. call Delay
  2066. pop eax
  2067. mov dl, [esi]
  2068. mov dh, [edi]
  2069. call Gotoxy
  2070. call WriteChar
  2071. add esi, type XvalueI
  2072. add edi, type YvalueI
  2073. Loop LevelPrint
  2074. ret
  2075. letterI ENDP
  2076.  
  2077. letterP PROC
  2078.  
  2079. mov ecx, lengthof XvalueP
  2080. mov esi, offset XvalueP
  2081. mov edi, offset YvalueP
  2082. mov eax, 219
  2083.  
  2084. LevelPrint:
  2085. push eax
  2086. mov eax, 50
  2087. call Delay
  2088. pop eax
  2089. mov dl, [esi]
  2090. mov dh, [edi]
  2091. call Gotoxy
  2092. call WriteChar
  2093. add esi, type XvalueP
  2094. add edi, type YvalueP
  2095. Loop LevelPrint
  2096. ret
  2097. letterP ENDP
  2098.  
  2099. ;--------------------------------------------------------------------------------------------------------
  2100. ; GRID
  2101. ; - Displays Player 1's grid
  2102. ;--------------------------------------------------------------------------------------------------------
  2103. grid PROC
  2104.  
  2105. mov dl, 15
  2106. mov dh, 10
  2107. call Gotoxy
  2108. mov esi, offset board01
  2109. mov edx, esi
  2110. call WriteString
  2111. call Crlf
  2112.  
  2113. mov dl, 15
  2114. mov dh, 11
  2115. call Gotoxy
  2116. mov esi, offset board02
  2117. mov edx, esi
  2118. call WriteString
  2119. call Crlf
  2120.  
  2121. mov dl, 15
  2122. mov dh, 12
  2123. call Gotoxy
  2124. mov esi, offset board03
  2125. mov edx, esi
  2126. call WriteString
  2127. call Crlf
  2128.  
  2129. mov dl, 15
  2130. mov dh, 13
  2131. call Gotoxy
  2132. mov esi, offset board04
  2133. mov edx, esi
  2134. call WriteString
  2135. call Crlf
  2136.  
  2137. mov dl, 15
  2138. mov dh, 14
  2139. call Gotoxy
  2140. mov esi, offset board05
  2141. mov edx, esi
  2142. call WriteString
  2143. call Crlf
  2144.  
  2145. mov dl, 15
  2146. mov dh, 15
  2147. call Gotoxy
  2148. mov esi, offset board06
  2149. mov edx, esi
  2150. call WriteString
  2151. call Crlf
  2152.  
  2153. mov dl, 15
  2154. mov dh, 16
  2155. call Gotoxy
  2156. mov esi, offset board07
  2157. mov edx, esi
  2158. call WriteString
  2159. call Crlf
  2160.  
  2161. mov dl, 15
  2162. mov dh, 17
  2163. call Gotoxy
  2164. mov esi, offset board08
  2165. mov edx, esi
  2166. call WriteString
  2167. call Crlf
  2168.  
  2169. mov dl, 15
  2170. mov dh, 18
  2171. call Gotoxy
  2172. mov esi, offset board09
  2173. mov edx, esi
  2174. call WriteString
  2175. call Crlf
  2176.  
  2177. mov dl, 15
  2178. mov dh, 19
  2179. call Gotoxy
  2180. mov esi, offset board10
  2181. mov edx, esi
  2182. call WriteString
  2183. call Crlf
  2184.  
  2185. mov dl, 15
  2186. mov dh, 20
  2187. call Gotoxy
  2188. mov esi, offset board11
  2189. mov edx, esi
  2190. call WriteString
  2191. call Crlf
  2192.  
  2193. mov dl, 15
  2194. mov dh, 21
  2195. call Gotoxy
  2196. mov esi, offset board12
  2197. mov edx, esi
  2198. call WriteString
  2199. call Crlf
  2200.  
  2201. mov dl, 15
  2202. mov dh, 22
  2203. call Gotoxy
  2204. mov esi, offset board13
  2205. mov edx, esi
  2206. call WriteString
  2207. call Crlf
  2208.  
  2209. mov dl, 15
  2210. mov dh, 23
  2211. call Gotoxy
  2212. mov esi, offset board14
  2213. mov edx, esi
  2214. call WriteString
  2215. call Crlf
  2216.  
  2217. ret
  2218. grid ENDP
  2219.  
  2220.  
  2221. ;--------------------------------------------------------------------------------------------------------
  2222. ; GRID ENEMY
  2223. ; - Displays Player 2's grid
  2224. ;--------------------------------------------------------------------------------------------------------
  2225. gridEnemy PROC
  2226.  
  2227. mov dl, 75
  2228. mov dh, 10
  2229. call Gotoxy
  2230. mov esi, offset board01
  2231. mov edx, esi
  2232. call WriteString
  2233. call Crlf
  2234.  
  2235. mov dl, 75
  2236. mov dh, 11
  2237. call Gotoxy
  2238. mov esi, offset board02
  2239. mov edx, esi
  2240. call WriteString
  2241. call Crlf
  2242.  
  2243. mov dl, 75
  2244. mov dh, 12
  2245. call Gotoxy
  2246. mov esi, offset board03
  2247. mov edx, esi
  2248. call WriteString
  2249. call Crlf
  2250.  
  2251. mov dl, 75
  2252. mov dh, 13
  2253. call Gotoxy
  2254. mov esi, offset board04
  2255. mov edx, esi
  2256. call WriteString
  2257. call Crlf
  2258.  
  2259. mov dl, 75
  2260. mov dh, 14
  2261. call Gotoxy
  2262. mov esi, offset board05
  2263. mov edx, esi
  2264. call WriteString
  2265. call Crlf
  2266.  
  2267. mov dl, 75
  2268. mov dh, 15
  2269. call Gotoxy
  2270. mov esi, offset board06
  2271. mov edx, esi
  2272. call WriteString
  2273. call Crlf
  2274.  
  2275. mov dl, 75
  2276. mov dh, 16
  2277. call Gotoxy
  2278. mov esi, offset board07
  2279. mov edx, esi
  2280. call WriteString
  2281. call Crlf
  2282.  
  2283. mov dl, 75
  2284. mov dh, 17
  2285. call Gotoxy
  2286. mov esi, offset board08
  2287. mov edx, esi
  2288. call WriteString
  2289. call Crlf
  2290.  
  2291. mov dl, 75
  2292. mov dh, 18
  2293. call Gotoxy
  2294. mov esi, offset board09
  2295. mov edx, esi
  2296. call WriteString
  2297. call Crlf
  2298.  
  2299. mov dl, 75
  2300. mov dh, 19
  2301. call Gotoxy
  2302. mov esi, offset board10
  2303. mov edx, esi
  2304. call WriteString
  2305. call Crlf
  2306.  
  2307. mov dl, 75
  2308. mov dh, 20
  2309. call Gotoxy
  2310. mov esi, offset board11
  2311. mov edx, esi
  2312. call WriteString
  2313. call Crlf
  2314.  
  2315. mov dl, 75
  2316. mov dh, 21
  2317. call Gotoxy
  2318. mov esi, offset board12
  2319. mov edx, esi
  2320. call WriteString
  2321. call Crlf
  2322.  
  2323. mov dl, 75
  2324. mov dh, 22
  2325. call Gotoxy
  2326. mov esi, offset board13
  2327. mov edx, esi
  2328. call WriteString
  2329. call Crlf
  2330.  
  2331. mov dl, 75
  2332. mov dh, 23
  2333. call Gotoxy
  2334. mov esi, offset board14
  2335. mov edx, esi
  2336. call WriteString
  2337. call Crlf
  2338.  
  2339. ret
  2340. gridEnemy ENDP
  2341.  
  2342.  
  2343. ;--------------------------------------------------------------------------------------------------------
  2344. ; SCREEN SETUP
  2345. ; - x-coordinate stored in dl
  2346. ; - y-coordinate stored in dh
  2347. ;--------------------------------------------------------------------------------------------------------
  2348. screen PROC
  2349.  
  2350. mov dl, 60
  2351. mov dh, 7
  2352.  
  2353. mov ecx, 23
  2354. L1:
  2355.  
  2356. mov ah, dh
  2357. mov al, dl
  2358. call Gotoxy
  2359.  
  2360. mov esi, offset line
  2361. mov edx, esi
  2362. call WriteString
  2363.  
  2364. mov dh, ah
  2365. mov dl, al
  2366. inc dh
  2367.  
  2368. Loop L1
  2369.  
  2370. mov dl, 0
  2371. mov dh, 6
  2372.  
  2373. mov ecx, 120
  2374. L2:
  2375.  
  2376. mov ah, dh
  2377. mov al, dl
  2378. call Gotoxy
  2379.  
  2380. mov esi, offset underScore
  2381. mov edx, esi
  2382. call WriteString
  2383.  
  2384. mov dh, ah
  2385. mov dl, al
  2386. inc dl
  2387.  
  2388. Loop L2
  2389.  
  2390. ret
  2391. screen ENDP
  2392.  
  2393.  
  2394. playScreen PROC
  2395.  
  2396. call Clrscr
  2397. call screen
  2398. call grid
  2399. call gridEnemy
  2400.  
  2401. ;x in dl, y in dh
  2402.  
  2403. ;;enemyGrid db "Enemy Grid", 0
  2404. ;;attack db "ATTACK THE ENEMY", 0
  2405. ;;yourTurn db "It's your turn.", 0
  2406. ;enemyHits db "Enemy Hits: ", 0
  2407. ;yourHits db "Your Hits: ", 0
  2408.  
  2409. mov dl, 62
  2410. mov dh, 26
  2411. call Gotoxy
  2412. mov esi, offset enemyHits
  2413. mov edx, esi
  2414. call WriteString
  2415.  
  2416. mov dl, 46
  2417. mov dh, 26
  2418. call Gotoxy
  2419. mov esi, offset yourHits
  2420. mov edx, esi
  2421. call WriteString
  2422.  
  2423. mov dl, 15
  2424. mov dh, 8
  2425. call Gotoxy
  2426. mov esi, offset yourTurn
  2427. mov edx, esi
  2428. call WriteString
  2429.  
  2430. mov dl, 52
  2431. mov dh, 3
  2432. call Gotoxy
  2433. mov esi, offset attack
  2434. mov edx, esi
  2435. call WriteString
  2436.  
  2437. mov dl, 15
  2438. mov dh, 24
  2439. call Gotoxy
  2440. mov esi, offset yourGrid
  2441. mov edx, esi
  2442. call WriteString
  2443. call Crlf
  2444.  
  2445. mov dl, 75
  2446. mov dh, 24
  2447. call Gotoxy
  2448. mov esi, offset enemyGrid
  2449. mov edx, esi
  2450. call WriteString
  2451. call Crlf
  2452.  
  2453. ret
  2454.  
  2455. playScreen ENDP
  2456.  
  2457.  
  2458. ;--------------------------------------------------------------------------------------------------------
  2459. ; TITLE SCREEN
  2460. ;--------------------------------------------------------------------------------------------------------
  2461. titleScreen PROC
  2462.  
  2463. ; pushad
  2464. ; x and y are in dh and dl respectively
  2465.  
  2466.  
  2467.  
  2468. call letterB
  2469. call letterTfirst
  2470. call letterA
  2471. call letterTsecond
  2472. call letterE
  2473. call letterL
  2474. call letterS
  2475. call letterI
  2476. call letterH
  2477. call letterP
  2478. call Crlf
  2479. call Crlf
  2480. call Crlf
  2481. call Crlf
  2482.  
  2483. mov dl, 0
  2484. mov dh, 29
  2485. call Gotoxy
  2486. mov esi, offset createdBy
  2487. mov edx, esi
  2488. call WriteString
  2489.  
  2490. ret
  2491. titleScreen ENDP
  2492.  
  2493. bullseye PROC
  2494.  
  2495.  
  2496.  
  2497. bullseye ENDP
  2498.  
  2499. ;--------------------------------------------------------------------------------------------------------
  2500. ; RULE SCREEN
  2501. ;--------------------------------------------------------------------------------------------------------
  2502. ruleScreen PROC
  2503.  
  2504. ;pushad
  2505. ;call Clrscr
  2506.  
  2507. mov esi, offset hellomessage
  2508. mov edx, esi
  2509. call WriteString
  2510. call Crlf
  2511.  
  2512. call Crlf
  2513.  
  2514. mov esi, offset setup
  2515. mov edx, esi
  2516. call WriteString
  2517. call Crlf
  2518.  
  2519. mov esi, offset setupB
  2520. mov edx, esi
  2521. call WriteString
  2522. call Crlf
  2523.  
  2524. mov esi, offset objective
  2525. mov edx, esi
  2526. call WriteString
  2527. call Crlf
  2528.  
  2529. ; x and y are in dh and dl respectively
  2530. call Crlf
  2531.  
  2532. mov esi, offset rule1
  2533. mov edx, esi
  2534. call WriteString
  2535. call Crlf
  2536.  
  2537. mov esi, offset rule2
  2538. mov edx, esi
  2539. call WriteString
  2540. call Crlf
  2541.  
  2542. mov esi, offset rule3
  2543. mov edx, esi
  2544. call WriteString
  2545. call Crlf
  2546.  
  2547. mov esi, offset rule4
  2548. mov edx, esi
  2549. call WriteString
  2550. call Crlf
  2551.  
  2552. mov dl, 80
  2553. mov dh, 25
  2554. call Gotoxy
  2555. mov esi, offset button
  2556. mov edx, esi
  2557. call WriteString
  2558. call Crlf
  2559.  
  2560. mov dl, 78
  2561. mov dh, 23
  2562.  
  2563. mov ecx, 15
  2564. L1:
  2565.  
  2566. mov ah, dh
  2567. mov al, dl
  2568. call Gotoxy
  2569.  
  2570. mov esi, offset underScore
  2571. mov edx, esi
  2572. call WriteString
  2573.  
  2574. mov dh, ah
  2575. mov dl, al
  2576. inc dl
  2577.  
  2578. Loop L1
  2579.  
  2580. mov dl, 78
  2581. mov dh, 26
  2582.  
  2583. mov ecx, 15
  2584. L2:
  2585.  
  2586. mov ah, dh
  2587. mov al, dl
  2588. call Gotoxy
  2589.  
  2590. mov esi, offset underScore
  2591. mov edx, esi
  2592. call WriteString
  2593.  
  2594. mov dh, ah
  2595. mov dl, al
  2596. inc dl
  2597.  
  2598. Loop L2
  2599.  
  2600. mov dl, 77
  2601. mov dh, 24
  2602.  
  2603. mov ecx, 3
  2604. L3:
  2605.  
  2606. mov ah, dh
  2607. mov al, dl
  2608. call Gotoxy
  2609.  
  2610. mov esi, offset line
  2611. mov edx, esi
  2612. call WriteString
  2613.  
  2614. mov dh, ah
  2615. mov dl, al
  2616. inc dh
  2617.  
  2618. Loop L3
  2619.  
  2620. mov dl, 93
  2621. mov dh, 24
  2622.  
  2623. mov ecx, 3
  2624. L4:
  2625.  
  2626. mov ah, dh
  2627. mov al, dl
  2628. call Gotoxy
  2629.  
  2630. mov esi, offset line
  2631. mov edx, esi
  2632. call WriteString
  2633.  
  2634. mov dh, ah
  2635. mov dl, al
  2636. inc dh
  2637.  
  2638. Loop L4
  2639.  
  2640. ret
  2641. ruleScreen ENDP
  2642.  
  2643.  
  2644. ;--------------------------------------------------------------------------------------------------------
  2645. ; PLACE SHIP 1
  2646. ; Name: Carrier | Length: 2
  2647. ;--------------------------------------------------------------------------------------------------------
  2648. ship1Screen PROC
  2649.  
  2650. ;call Clrscr
  2651.  
  2652. call screen
  2653. call grid
  2654.  
  2655. ;yourGrid db "Your Grid", 0
  2656. ;startingPoint db "Pick your starting point.", 0
  2657.  
  2658. ;x in dl, y in dh
  2659.  
  2660. mov dl, 70
  2661. mov dh, 13
  2662. call Gotoxy
  2663. mov esi, offset shipVert
  2664. mov edx, esi
  2665. call WriteString
  2666.  
  2667. mov dl, 70
  2668. mov dh, 14
  2669. call Gotoxy
  2670. mov esi, offset shipVert
  2671. mov edx, esi
  2672. call WriteString
  2673.  
  2674. mov dl, 70
  2675. mov dh, 15
  2676. call Gotoxy
  2677. mov esi, offset shipVert
  2678. mov edx, esi
  2679. call WriteString
  2680.  
  2681. mov dl, 70
  2682. mov dh, 16
  2683. call Gotoxy
  2684. mov esi, offset shipVert
  2685. mov edx, esi
  2686. call WriteString
  2687.  
  2688. mov dl, 70
  2689. mov dh, 17
  2690. call Gotoxy
  2691. mov esi, offset shipVert
  2692. mov edx, esi
  2693. call WriteString
  2694.  
  2695. mov dl, 75
  2696. mov dh, 13
  2697. call Gotoxy
  2698. mov esi, offset shipHori
  2699. mov edx, esi
  2700. call WriteString
  2701.  
  2702. mov dl, 76
  2703. mov dh, 13
  2704. call Gotoxy
  2705. mov esi, offset shipHori
  2706. mov edx, esi
  2707. call WriteString
  2708.  
  2709. mov dl, 77
  2710. mov dh, 13
  2711. call Gotoxy
  2712. mov esi, offset shipHori
  2713. mov edx, esi
  2714. call WriteString
  2715.  
  2716. mov dl, 78
  2717. mov dh, 13
  2718. call Gotoxy
  2719. mov esi, offset shipHori
  2720. mov edx, esi
  2721. call WriteString
  2722.  
  2723. mov dl, 79
  2724. mov dh, 13
  2725. call Gotoxy
  2726. mov esi, offset shipHori
  2727. mov edx, esi
  2728. call WriteString
  2729.  
  2730.  
  2731. mov dl, 80
  2732. mov dh, 13
  2733. call Gotoxy
  2734. mov esi, offset shipHori
  2735. mov edx, esi
  2736. call WriteString
  2737.  
  2738. mov dl, 81
  2739. mov dh, 13
  2740. call Gotoxy
  2741. mov esi, offset shipHori
  2742. mov edx, esi
  2743. call WriteString
  2744.  
  2745. mov dl, 82
  2746. mov dh, 13
  2747. call Gotoxy
  2748. mov esi, offset shipHori
  2749. mov edx, esi
  2750. call WriteString
  2751.  
  2752. mov dl, 83
  2753. mov dh, 13
  2754. call Gotoxy
  2755. mov esi, offset shipHori
  2756. mov edx, esi
  2757. call WriteString
  2758.  
  2759. mov dl, 84
  2760. mov dh, 13
  2761. call Gotoxy
  2762. mov esi, offset shipHori
  2763. mov edx, esi
  2764. call WriteString
  2765.  
  2766. mov dl, 48
  2767. mov dh, 3
  2768. call Gotoxy
  2769. mov esi, offset placingQuote
  2770. mov edx, esi
  2771. call WriteString
  2772.  
  2773. mov dl, 70
  2774. mov dh, 11
  2775. call Gotoxy
  2776. mov esi, offset carrier
  2777. mov edx, esi
  2778. call WriteString
  2779.  
  2780. mov dl, 70
  2781. mov dh, 9
  2782. call Gotoxy
  2783. mov esi, offset startingPoint
  2784. mov edx, esi
  2785. call WriteString
  2786.  
  2787. mov dl, 15
  2788. mov dh, 24
  2789. call Gotoxy
  2790. mov esi, offset yourGrid
  2791. mov edx, esi
  2792. call WriteString
  2793. call Crlf
  2794.  
  2795. ret
  2796. ship1Screen ENDP
  2797.  
  2798. ;--------------------------------------------------------------------------------------------------------
  2799. ; PLACE SHIP 2
  2800. ; Name: Battleship | Length: 3
  2801. ;--------------------------------------------------------------------------------------------------------
  2802. ship2Screen PROC
  2803. call Clrscr
  2804. call screen
  2805. call grid
  2806.  
  2807.  
  2808.  
  2809.  
  2810. ;yourGrid db "Your Grid", 0
  2811. ;startingPoint db "Pick your starting point.", 0
  2812.  
  2813. ;x in dl, y in dh
  2814.  
  2815. mov dl, 70
  2816. mov dh, 13
  2817. call Gotoxy
  2818. mov esi, offset shipVert
  2819. mov edx, esi
  2820. call WriteString
  2821.  
  2822. mov dl, 70
  2823. mov dh, 14
  2824. call Gotoxy
  2825. mov esi, offset shipVert
  2826. mov edx, esi
  2827. call WriteString
  2828.  
  2829. mov dl, 70
  2830. mov dh, 15
  2831. call Gotoxy
  2832. mov esi, offset shipVert
  2833. mov edx, esi
  2834. call WriteString
  2835.  
  2836. mov dl, 70
  2837. mov dh, 16
  2838. call Gotoxy
  2839. mov esi, offset shipVert
  2840. mov edx, esi
  2841. call WriteString
  2842.  
  2843. mov dl, 75
  2844. mov dh, 13
  2845. call Gotoxy
  2846. mov esi, offset shipHori
  2847. mov edx, esi
  2848. call WriteString
  2849.  
  2850. mov dl, 76
  2851. mov dh, 13
  2852. call Gotoxy
  2853. mov esi, offset shipHori
  2854. mov edx, esi
  2855. call WriteString
  2856.  
  2857. mov dl, 77
  2858. mov dh, 13
  2859. call Gotoxy
  2860. mov esi, offset shipHori
  2861. mov edx, esi
  2862. call WriteString
  2863.  
  2864. mov dl, 78
  2865. mov dh, 13
  2866. call Gotoxy
  2867. mov esi, offset shipHori
  2868. mov edx, esi
  2869. call WriteString
  2870.  
  2871. mov dl, 79
  2872. mov dh, 13
  2873. call Gotoxy
  2874. mov esi, offset shipHori
  2875. mov edx, esi
  2876. call WriteString
  2877.  
  2878. mov dl, 80
  2879. mov dh, 13
  2880. call Gotoxy
  2881. mov esi, offset shipHori
  2882. mov edx, esi
  2883. call WriteString
  2884.  
  2885. mov dl, 81
  2886. mov dh, 13
  2887. call Gotoxy
  2888. mov esi, offset shipHori
  2889. mov edx, esi
  2890. call WriteString
  2891.  
  2892. mov dl, 82
  2893. mov dh, 13
  2894. call Gotoxy
  2895. mov esi, offset shipHori
  2896. mov edx, esi
  2897. call WriteString
  2898.  
  2899. mov dl, 48
  2900. mov dh, 3
  2901. call Gotoxy
  2902. mov esi, offset placingQuote
  2903. mov edx, esi
  2904. call WriteString
  2905.  
  2906. mov dl, 70
  2907. mov dh, 11
  2908. call Gotoxy
  2909. mov esi, offset battleship
  2910. mov edx, esi
  2911. call WriteString
  2912.  
  2913. mov dl, 70
  2914. mov dh, 9
  2915. call Gotoxy
  2916. mov esi, offset startingPoint
  2917. mov edx, esi
  2918. call WriteString
  2919.  
  2920. mov dl, 15
  2921. mov dh, 24
  2922. call Gotoxy
  2923. mov esi, offset yourGrid
  2924. mov edx, esi
  2925. call WriteString
  2926. call Crlf
  2927.  
  2928. call BattleOrientationClick
  2929.  
  2930. ret
  2931. ship2Screen ENDP
  2932.  
  2933.  
  2934. ;--------------------------------------------------------------------------------------------------------
  2935. ; PLACE SHIP 3
  2936. ; Name: Cruiser | Length: 3
  2937. ;--------------------------------------------------------------------------------------------------------
  2938. ship3Screen PROC
  2939. call Clrscr
  2940. call screen
  2941. call grid
  2942.  
  2943. ;yourGrid db "Your Grid", 0
  2944. ;startingPoint db "Pick your starting point.", 0
  2945.  
  2946. ;x in dl, y in dh
  2947.  
  2948. mov dl, 70
  2949. mov dh, 13
  2950. call Gotoxy
  2951. mov esi, offset shipVert
  2952. mov edx, esi
  2953. call WriteString
  2954.  
  2955. mov dl, 70
  2956. mov dh, 14
  2957. call Gotoxy
  2958. mov esi, offset shipVert
  2959. mov edx, esi
  2960. call WriteString
  2961.  
  2962. mov dl, 70
  2963. mov dh, 15
  2964. call Gotoxy
  2965. mov esi, offset shipVert
  2966. mov edx, esi
  2967. call WriteString
  2968.  
  2969. mov dl, 75
  2970. mov dh, 13
  2971. call Gotoxy
  2972. mov esi, offset shipHori
  2973. mov edx, esi
  2974. call WriteString
  2975.  
  2976. mov dl, 76
  2977. mov dh, 13
  2978. call Gotoxy
  2979. mov esi, offset shipHori
  2980. mov edx, esi
  2981. call WriteString
  2982.  
  2983. mov dl, 77
  2984. mov dh, 13
  2985. call Gotoxy
  2986. mov esi, offset shipHori
  2987. mov edx, esi
  2988. call WriteString
  2989.  
  2990. mov dl, 78
  2991. mov dh, 13
  2992. call Gotoxy
  2993. mov esi, offset shipHori
  2994. mov edx, esi
  2995. call WriteString
  2996.  
  2997. mov dl, 79
  2998. mov dh, 13
  2999. call Gotoxy
  3000. mov esi, offset shipHori
  3001. mov edx, esi
  3002. call WriteString
  3003.  
  3004. mov dl, 80
  3005. mov dh, 13
  3006. call Gotoxy
  3007. mov esi, offset shipHori
  3008. mov edx, esi
  3009. call WriteString
  3010.  
  3011. mov dl, 48
  3012. mov dh, 3
  3013. call Gotoxy
  3014. mov esi, offset placingQuote
  3015. mov edx, esi
  3016. call WriteString
  3017.  
  3018. mov dl, 70
  3019. mov dh, 11
  3020. call Gotoxy
  3021. mov esi, offset cruiser
  3022. mov edx, esi
  3023. call WriteString
  3024.  
  3025. mov dl, 70
  3026. mov dh, 9
  3027. call Gotoxy
  3028. mov esi, offset startingPoint
  3029. mov edx, esi
  3030. call WriteString
  3031.  
  3032. mov dl, 15
  3033. mov dh, 24
  3034. call Gotoxy
  3035. mov esi, offset yourGrid
  3036. mov edx, esi
  3037. call WriteString
  3038. call Crlf
  3039.  
  3040. call CruiserOrientationClick
  3041.  
  3042. ret
  3043. ship3Screen ENDP
  3044.  
  3045.  
  3046. ;--------------------------------------------------------------------------------------------------------
  3047. ; PLACE SHIP 3
  3048. ; Name: Submarine | Length: 3
  3049. ;--------------------------------------------------------------------------------------------------------
  3050. ship4Screen PROC
  3051. call Clrscr
  3052. call screen
  3053. call grid
  3054.  
  3055. ;yourGrid db "Your Grid", 0
  3056. ;startingPoint db "Pick your starting point.", 0
  3057.  
  3058. ;x in dl, y in dh
  3059.  
  3060. mov dl, 70
  3061. mov dh, 13
  3062. call Gotoxy
  3063. mov esi, offset shipVert
  3064. mov edx, esi
  3065. call WriteString
  3066.  
  3067. mov dl, 70
  3068. mov dh, 14
  3069. call Gotoxy
  3070. mov esi, offset shipVert
  3071. mov edx, esi
  3072. call WriteString
  3073.  
  3074. mov dl, 70
  3075. mov dh, 15
  3076. call Gotoxy
  3077. mov esi, offset shipVert
  3078. mov edx, esi
  3079. call WriteString
  3080.  
  3081. mov dl, 75
  3082. mov dh, 13
  3083. call Gotoxy
  3084. mov esi, offset shipHori
  3085. mov edx, esi
  3086. call WriteString
  3087.  
  3088. mov dl, 76
  3089. mov dh, 13
  3090. call Gotoxy
  3091. mov esi, offset shipHori
  3092. mov edx, esi
  3093. call WriteString
  3094.  
  3095. mov dl, 77
  3096. mov dh, 13
  3097. call Gotoxy
  3098. mov esi, offset shipHori
  3099. mov edx, esi
  3100. call WriteString
  3101.  
  3102. mov dl, 78
  3103. mov dh, 13
  3104. call Gotoxy
  3105. mov esi, offset shipHori
  3106. mov edx, esi
  3107. call WriteString
  3108.  
  3109. mov dl, 79
  3110. mov dh, 13
  3111. call Gotoxy
  3112. mov esi, offset shipHori
  3113. mov edx, esi
  3114. call WriteString
  3115.  
  3116. mov dl, 80
  3117. mov dh, 13
  3118. call Gotoxy
  3119. mov esi, offset shipHori
  3120. mov edx, esi
  3121. call WriteString
  3122.  
  3123. mov dl, 48
  3124. mov dh, 3
  3125. call Gotoxy
  3126. mov esi, offset placingQuote
  3127. mov edx, esi
  3128. call WriteString
  3129.  
  3130. mov dl, 70
  3131. mov dh, 11
  3132. call Gotoxy
  3133. mov esi, offset submarine
  3134. mov edx, esi
  3135. call WriteString
  3136.  
  3137. mov dl, 70
  3138. mov dh, 9
  3139. call Gotoxy
  3140. mov esi, offset startingPoint
  3141. mov edx, esi
  3142. call WriteString
  3143.  
  3144. mov dl, 15
  3145. mov dh, 24
  3146. call Gotoxy
  3147. mov esi, offset yourGrid
  3148. mov edx, esi
  3149. call WriteString
  3150. call Crlf
  3151.  
  3152. call SubmarineOrientationClick
  3153. ret
  3154. ship4Screen ENDP
  3155.  
  3156.  
  3157. ;--------------------------------------------------------------------------------------------------------
  3158. ; PLACE SHIP 5
  3159. ; Name: Destroyer | Length: 5
  3160. ;--------------------------------------------------------------------------------------------------------
  3161. ship5Screen PROC
  3162. call Clrscr
  3163. call screen
  3164. call grid
  3165.  
  3166. ;yourGrid db "Your Grid", 0
  3167. ;startingPoint db "Pick your starting point.", 0
  3168.  
  3169. ;x in dl, y in dh
  3170.  
  3171. mov dl, 70
  3172. mov dh, 13
  3173. call Gotoxy
  3174. mov esi, offset shipVert
  3175. mov edx, esi
  3176. call WriteString
  3177.  
  3178. mov dl, 70
  3179. mov dh, 14
  3180. call Gotoxy
  3181. mov esi, offset shipVert
  3182. mov edx, esi
  3183. call WriteString
  3184.  
  3185. mov dl, 75
  3186. mov dh, 13
  3187. call Gotoxy
  3188. mov esi, offset shipHori
  3189. mov edx, esi
  3190. call WriteString
  3191.  
  3192. mov dl, 76
  3193. mov dh, 13
  3194. call Gotoxy
  3195. mov esi, offset shipHori
  3196. mov edx, esi
  3197. call WriteString
  3198.  
  3199. mov dl, 77
  3200. mov dh, 13
  3201. call Gotoxy
  3202. mov esi, offset shipHori
  3203. mov edx, esi
  3204. call WriteString
  3205.  
  3206. mov dl, 78
  3207. mov dh, 13
  3208. call Gotoxy
  3209. mov esi, offset shipHori
  3210. mov edx, esi
  3211. call WriteString
  3212.  
  3213. mov dl, 48
  3214. mov dh, 3
  3215. call Gotoxy
  3216. mov esi, offset placingQuote
  3217. mov edx, esi
  3218. call WriteString
  3219.  
  3220. mov dl, 70
  3221. mov dh, 11
  3222. call Gotoxy
  3223. mov esi, offset destroyer
  3224. mov edx, esi
  3225. call WriteString
  3226.  
  3227. mov dl, 70
  3228. mov dh, 9
  3229. call Gotoxy
  3230. mov esi, offset startingPoint
  3231. mov edx, esi
  3232. call WriteString
  3233.  
  3234. mov dl, 15
  3235. mov dh, 24
  3236. call Gotoxy
  3237. mov esi, offset yourGrid
  3238. mov edx, esi
  3239. call WriteString
  3240. call Crlf
  3241.  
  3242. call DestroyerOrientationClick
  3243.  
  3244. ret
  3245. ship5Screen ENDP
  3246.  
  3247.  
  3248. ;-------------------------------------------------------------------------------------------------------------
  3249. ; ASKS THE USER FOR THEIR NAME
  3250. ; - Stores it in playername
  3251. ;-------------------------------------------------------------------------------------------------------------
  3252. askForName PROC
  3253.  
  3254. mov dl, 46
  3255. mov dh, 12
  3256.  
  3257. call Gotoxy
  3258.  
  3259. mov esi, offset promptforname
  3260. mov edx, esi
  3261. call WriteString
  3262.  
  3263. mov edx, offset playername
  3264. mov ecx, 20
  3265. call ReadString
  3266.  
  3267. ret
  3268. askForName ENDP
  3269.  
  3270.  
  3271. ;-------------------------------------------------------------------------------------------------------------
  3272. ; CO-ORDINATE TO INDEX
  3273. ; - Changes x and y coordinates into the index in the array
  3274. ; - Takes in xpoint, ypoint
  3275. ; - Returns indexarray
  3276. ;-------------------------------------------------------------------------------------------------------------
  3277. coordinateToIndex PROC
  3278.  
  3279. mov indexarray, 0
  3280. mov eax, 0
  3281. mov ecx, 10
  3282. mulconfusesme:
  3283. add ah, ypoint
  3284. loop mulconfusesme
  3285. add ah, xpoint
  3286.  
  3287. mov indexarray, ah
  3288.  
  3289. ret
  3290. coordinateToIndex ENDP
  3291.  
  3292.  
  3293. ;-------------------------------------------------------------------------------------------------------------
  3294. ; PLACES SHIP IN PLAYER 1'S HIDDEN BOARD
  3295. ; - Takes in orientation, xpoint, ypoint, lengthship
  3296. ;-------------------------------------------------------------------------------------------------------------
  3297. placeShipPlayer1 PROC
  3298.  
  3299. ; 254 is the ASCII code for the ship
  3300. mov edx, 0
  3301. mov dl, 254
  3302.  
  3303. ; If orientation = 0, goes to placeHorizontal
  3304. ; If not, goes to placeVertical for another check
  3305. cmp orientation, 0
  3306. je placeHorizontal
  3307. jmp placeVertical
  3308.  
  3309. placeHorizontal:
  3310.  
  3311. ; Loops the same number times as the length of the ship
  3312. mov ecx, 0
  3313. mov cl, lengthship
  3314.  
  3315. rick:
  3316. mov esi, offset player1hiddenboard
  3317. push ecx
  3318. call coordinateToIndex
  3319. movzx ebx, indexarray
  3320. add esi, ebx
  3321. mov [esi], dl
  3322. pop ecx
  3323. inc xpoint
  3324. loop rick
  3325.  
  3326. jmp stopPlacingShip
  3327.  
  3328. placeVertical:
  3329.  
  3330. ; If orientation != 1, goes to stopPlacingShip
  3331. cmp orientation, 1
  3332. jne stopPlacingShip
  3333.  
  3334. ; Loops the same number times as the length of the ship
  3335. mov ecx, 0
  3336. mov cl, lengthship
  3337.  
  3338. morty:
  3339. mov esi, offset player1hiddenboard
  3340. push ecx
  3341. call coordinateToIndex
  3342. movzx ebx, indexarray
  3343. add esi, ebx
  3344. mov [esi], dl
  3345. pop ecx
  3346. inc ypoint
  3347. loop morty
  3348.  
  3349. jmp stopPlacingShip
  3350.  
  3351. stopPlacingShip:
  3352.  
  3353. ; Ends the procedure
  3354. ret
  3355.  
  3356. placeShipPlayer1 ENDP
  3357.  
  3358.  
  3359. ;-------------------------------------------------------------------------------------------------------------
  3360. ; PLACES SHIP IN PLAYER 2'S HIDDEN BOARD
  3361. ; - Takes in orientation, xpoint, ypoint, lengthship
  3362. ;-------------------------------------------------------------------------------------------------------------
  3363. placeShipPlayer2 PROC
  3364.  
  3365. ; 254 is the ASCII code for the ship
  3366. mov edx, 0
  3367. mov dl, 254
  3368.  
  3369. ; If orientation = 0, goes to placeHorizontal
  3370. ; If not, goes to placeVertical for another check
  3371. cmp orientation, 0
  3372. je placeHorizontal
  3373. jmp placeVertical
  3374.  
  3375. placeHorizontal:
  3376.  
  3377. ; Loops the same number times as the length of the ship
  3378. mov ecx, 0
  3379. mov cl, lengthship
  3380.  
  3381. rick:
  3382. mov esi, offset player2hiddenboard
  3383. push ecx
  3384. call coordinateToIndex
  3385. movzx ebx, indexarray
  3386. add esi, ebx
  3387. mov [esi], dl
  3388. pop ecx
  3389. inc xpoint
  3390. loop rick
  3391.  
  3392. jmp stopPlacingShip
  3393.  
  3394. placeVertical:
  3395.  
  3396. ; If orientation != 1, goes to stopPlacingShip
  3397. cmp orientation, 1
  3398. jne stopPlacingShip
  3399.  
  3400. ; Loops the same number times as the length of the ship
  3401. mov ecx, 0
  3402. mov cl, lengthship
  3403.  
  3404. morty:
  3405. mov esi, offset player2hiddenboard
  3406. push ecx
  3407. call coordinateToIndex
  3408. movzx ebx, indexarray
  3409. add esi, ebx
  3410. mov [esi], dl
  3411. pop ecx
  3412. inc ypoint
  3413. loop morty
  3414.  
  3415. jmp stopPlacingShip
  3416.  
  3417. stopPlacingShip:
  3418.  
  3419. ; Ends the procedure
  3420. ret
  3421.  
  3422. placeShipPlayer2 ENDP
  3423.  
  3424.  
  3425. ;-------------------------------------------------------------------------------------------------------------
  3426. ; CHECK IF PLAYER 1'S SHIP PLACEMENT IS LEGAL OR NOT
  3427. ; Input: orientation, xpoint, ypoint, length
  3428. ;-------------------------------------------------------------------------------------------------------------
  3429. validShipPlacement1 PROC
  3430.  
  3431. mov edx, 0
  3432. mov dl, xpoint
  3433. mov tempxpoint, dl
  3434. mov dl, ypoint
  3435. mov tempypoint, dl
  3436.  
  3437. cmp orientation, 0
  3438. je checkHorizontalBound
  3439. jmp checkVerticalBound
  3440.  
  3441. checkHorizontalBound:
  3442. mov edx, 0
  3443. mov dl, lengthship
  3444. add tempxpoint, dl
  3445. cmp tempxpoint, 10
  3446. jle checkHorizontalOverlap
  3447. jmp invalidPlacement
  3448.  
  3449. checkVerticalBound:
  3450. mov edx, 0
  3451. mov dl, lengthship
  3452. add tempypoint, dl
  3453. cmp tempypoint, 10
  3454. jle checkVerticalOverlap
  3455. jmp invalidPlacement
  3456.  
  3457. invalidPlacement:
  3458. mov esi, offset promptoverlap
  3459. mov edx, esi
  3460. call WriteString
  3461. call Crlf
  3462.  
  3463. cmp lengthship, 5
  3464. je carrierPlacementClick
  3465.  
  3466. cmp lengthship, 4
  3467. je battlePlacementClick
  3468.  
  3469. cmp lengthship, 3
  3470. je cruiserOrSub
  3471.  
  3472. cmp lengthship,2
  3473. je DestroyerPlacementClick
  3474.  
  3475. cruiserOrSub:
  3476.  
  3477. cmp whichShip3, 0
  3478. je cruiserPlacementClick
  3479. jmp submarinePlacementClick
  3480.  
  3481.  
  3482. carrierPlacementClick:
  3483. call CarrierPlacementClick
  3484. jmp stopPlacingShip
  3485.  
  3486. battlePlacementClick:
  3487. call BattlePlacementClick
  3488. jmp stopPlacingShip
  3489.  
  3490. cruiserPlacementClick:
  3491. call CruiserPlacementClick
  3492. jmp stopPlacingShip
  3493.  
  3494. submarinePlacementClick:
  3495. call SubmarinePlacementClick
  3496. jmp stopPlacingShip
  3497.  
  3498. validPlacement:
  3499. call placeShipPlayer1
  3500. jmp stopPlacingShip
  3501.  
  3502. checkHorizontalOverlap:
  3503.  
  3504. mov dl, 254
  3505. mov ecx, 0
  3506. mov cl, lengthship
  3507. loopHorizontalOverlap:
  3508. mov esi, offset player1hiddenboard
  3509. push ecx
  3510. call coordinateToIndex
  3511. pop ecx
  3512. movzx ebx, indexarray
  3513. add esi, ebx
  3514. mov dl, 254
  3515. cmp [esi], dl
  3516. je invalidPlacement
  3517. inc xpoint
  3518. loop loopHorizontalOverlap
  3519.  
  3520. mov edx, 0
  3521. mov dl, lengthship
  3522. sub xpoint, dl
  3523.  
  3524. jmp validPlacement
  3525.  
  3526. checkVerticalOverlap:
  3527.  
  3528. mov edx, 0
  3529. mov dl, 254
  3530. mov ecx, 0
  3531. mov cl, lengthship
  3532. loopVerticalOverlap:
  3533. mov esi, offset player1hiddenboard
  3534. push ecx
  3535. call coordinateToIndex
  3536. pop ecx
  3537. movzx ebx, indexarray
  3538. add esi, ebx
  3539. cmp [esi], dl
  3540. je invalidPlacement
  3541. inc ypoint
  3542. loop loopVerticalOverlap
  3543.  
  3544. mov edx, 0
  3545. mov dl, lengthship
  3546. sub ypoint, dl
  3547.  
  3548. jmp validPlacement
  3549.  
  3550. stopPlacingShip:
  3551. ret
  3552.  
  3553. validShipPlacement1 ENDP
  3554.  
  3555.  
  3556. ;-------------------------------------------------------------------------------------------------------------
  3557. ; CHECK IF PLAYER 2'S SHIP PLACEMENT IS LEGAL OR NOT
  3558. ; Input: orientation, xpoint, ypoint, length
  3559. ;-------------------------------------------------------------------------------------------------------------
  3560. validShipPlacement2 PROC
  3561.  
  3562. mov edx, 0
  3563. mov dl, xpoint
  3564. mov tempxpoint, dl
  3565. mov dl, ypoint
  3566. mov tempypoint, dl
  3567.  
  3568. cmp orientation, 0
  3569. je checkHorizontalBound
  3570. jmp checkVerticalBound
  3571.  
  3572. checkHorizontalBound:
  3573. mov edx, 0
  3574. mov dl, lengthship
  3575. add tempxpoint, dl
  3576. cmp tempxpoint, 10
  3577. jle checkHorizontalOverlap
  3578. jmp invalidPlacement
  3579.  
  3580. checkVerticalBound:
  3581. mov edx, 0
  3582. mov dl, lengthship
  3583. add tempypoint, dl
  3584. cmp tempypoint, 10
  3585. jle checkVerticalOverlap
  3586. jmp invalidPlacement
  3587.  
  3588. invalidPlacement:
  3589. mov esi, offset promptoverlap
  3590. mov edx, esi
  3591. call WriteString
  3592. call Crlf
  3593. jmp stopPlacingShip
  3594.  
  3595. validPlacement:
  3596. call placeShipPlayer1
  3597. jmp stopPlacingShip
  3598.  
  3599. checkHorizontalOverlap:
  3600.  
  3601. mov dl, 254
  3602. mov ecx, 0
  3603. mov cl, lengthship
  3604. loopHorizontalOverlap:
  3605. mov esi, offset player2hiddenboard
  3606. push ecx
  3607. call coordinateToIndex
  3608. pop ecx
  3609. movzx ebx, indexarray
  3610. add esi, ebx
  3611. mov dl, 254
  3612. cmp [esi], dl
  3613. je invalidPlacement
  3614. inc xpoint
  3615. loop loopHorizontalOverlap
  3616.  
  3617. mov edx, 0
  3618. mov dl, lengthship
  3619. sub xpoint, dl
  3620.  
  3621. jmp validPlacement
  3622.  
  3623. checkVerticalOverlap:
  3624.  
  3625. mov edx, 0
  3626. mov dl, 254
  3627. mov ecx, 0
  3628. mov cl, lengthship
  3629. loopVerticalOverlap:
  3630. mov esi, offset player2hiddenboard
  3631. push ecx
  3632. call coordinateToIndex
  3633. pop ecx
  3634. movzx ebx, indexarray
  3635. add esi, ebx
  3636. cmp [esi], dl
  3637. je invalidPlacement
  3638. inc ypoint
  3639. loop loopVerticalOverlap
  3640.  
  3641. mov edx, 0
  3642. mov dl, lengthship
  3643. sub ypoint, dl
  3644.  
  3645. jmp validPlacement
  3646.  
  3647. stopPlacingShip:
  3648. ret
  3649.  
  3650. validShipPlacement2 ENDP
  3651.  
  3652.  
  3653. end main
  3654.  
  3655. RAW Paste Data
  3656. ;--------------------------------------------------------------------------------------------------------
  3657. ; BATTLESHIP
  3658. ;
  3659. ; Shirshak Sharma, Jeff Tocco, Josh Berger
  3660. ; Professor. Durga Suresh
  3661. ;--------------------------------------------------------------------------------------------------------
  3662. ; LIST OF PROCEDURES:
  3663. ;
  3664. ; titleScreen Displays the title screen. Screen 1.
  3665. ; ruleScreen Displays the rules of the game. Screen 2.
  3666. ; ship1Screen Displays ship 1 so the player can choose where to place it.
  3667. ; ship2Screen Displays ship 2 so the player can choose where to place it.
  3668. ; ship3Screen Displays ship 3 so the player can choose where to place it.
  3669. ; ship4Screen Displays ship 4 so the player can choose where to place it.
  3670. ; ship5Screen Displays ship 5 so the player can choose where to place it.
  3671. ; screen Positions the screens.
  3672. ;
  3673. ;
  3674. ; askForName Gets the player's name and stores it in playername.
  3675. ; coordinateToIndex Returns the index when x and y co-ordinate is passed in.
  3676. ; placeShipPlayer1 Places the ship in Player 1's hidden board. Requires xpoint, ypoint, orientation and lengthship.
  3677. ; placeShipPlayer2 Places the ship in Player 2's hidden board. Requires xpoint, ypoint, orientation and lengthship.
  3678. ;--------------------------------------------------------------------------------------------------------
  3679.  
  3680. .386
  3681. .MODEL Flat,StdCall
  3682. OPTION CaseMap:None
  3683. INCLUDE Irvine32_NOWIN.inc
  3684. INCLUDE windows.inc
  3685. INCLUDE user32.inc
  3686. INCLUDE kernel32.inc
  3687. INCLUDELIB User32.lib
  3688. INCLUDELIB Kernel32.lib
  3689.  
  3690. .data
  3691.  
  3692. ;--------------------------------------------------------------------------------------------------------
  3693. ; BATTLESHIP BOARD
  3694. ; - Stored in 14 byte arrays
  3695. ; - The playable grids are stored in index 3, 5, 7, 9, 11, 13, 15, 17, 19, 21 in boards 04 to 13
  3696. ;--------------------------------------------------------------------------------------------------------
  3697. 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
  3698. 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
  3699. 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
  3700. 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
  3701. 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
  3702. 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
  3703. 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
  3704. 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
  3705. 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
  3706. 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
  3707. 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
  3708. 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
  3709. 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
  3710. 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
  3711.  
  3712. ;--------------------------------------------------------------------------------------------------------
  3713. ; OPENING LETTERS
  3714. ;
  3715. ;--------------------------------------------------------------------------------------------------------
  3716.  
  3717. 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
  3718. 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
  3719.  
  3720. 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
  3721. 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
  3722.  
  3723. XvalueTfirst db 29,30,31,32,33,34,35,32,32,32,32,32,32
  3724. YvalueTfirst db 7,7,7,7,7,7,7,8,9,10,11,12,13,
  3725.  
  3726. XvalueTsecond db 37,38,39,40,41,42,43,40,40,40,40,40,40
  3727. YvalueTsecond db 7,7,7,7,7,7,7,8,9,10,11,12,13
  3728.  
  3729. XvalueL db 46,46,46,46,46,46,46,47,48,49,50
  3730. YvalueL db 7,8,9,10,11,12,13,13,13,13,13,
  3731.  
  3732. XvalueE db 53,53,53,53,53,53,53,54,55,56,57,54,55,56,57,53,54,55,56,57
  3733. YvalueE db 7,8,9,10,11,12,13,13,13,13,13,10,10,10,10,10,7,7,7,7,7
  3734.  
  3735. XvalueS db 64,64,63,62,61,60,60,60,60,61,62,63,64,64,64,64,63,62,61,60,60
  3736. YvalueS db 8,7,7,7,7,7,8,9,10,10,10,10,10,11,12,13,13,13,13,13,12
  3737.  
  3738. XvalueH db 67,67,67,67,67,67,67,73,73,73,73,73,73,73,68,69,70,71,72
  3739. YvalueH db 7,8,9,10,11,12,13,7,8,9,10,11,12,13,10,10,10,10,10
  3740.  
  3741. XvalueI db 76,77,78,79,80,78,78,78,78,78,78,76,77,79,80
  3742. YvalueI db 7,7,7,7,7,8,9,10,11,12,13,13,13,13,13
  3743.  
  3744. XvalueP db 83,83,83,83,83,83,83,84,85,86,87,88,88,88,88,87,86,85,84
  3745. YvalueP db 7,8,9,10,11,12,13,7,7,7,7,7,8,9,10,10,10,10,10,10
  3746.  
  3747.  
  3748. ;--------------------------------------------------------------------------------------------------------
  3749. ; SHIPS
  3750. ; - 5 ships of length 2, 3, 3, 4 and 5 respectively
  3751. ; - 219 is the ASCII code for a colored rectangle to represent ships
  3752. ;--------------------------------------------------------------------------------------------------------
  3753. player1ship1 BYTE 2 DUP (219)
  3754. player1ship2 BYTE 3 DUP (219)
  3755. player1ship3 BYTE 3 DUP (219)
  3756. player1ship4 BYTE 4 DUP (219)
  3757. player1ship5 BYTE 5 DUP (219)
  3758.  
  3759. player2ship1 BYTE 2 DUP (219)
  3760. player2ship2 BYTE 3 DUP (219)
  3761. player2ship3 BYTE 3 DUP (219)
  3762. player2ship4 BYTE 4 DUP (219)
  3763. player2ship5 BYTE 5 DUP (219)
  3764.  
  3765.  
  3766. ;--------------------------------------------------------------------------------------------------------
  3767. ; PLAYER BOARD
  3768. ; - 176 is the ASCII to represent water (no ship to start with)
  3769. ;--------------------------------------------------------------------------------------------------------
  3770. player1hiddenboard BYTE 100 DUP (176) ; Stores the ships of Player 1
  3771. player2hiddenboard BYTE 100 DUP (176) ; Stores the ships of Player 2 (Computer)
  3772.  
  3773. player1visibleboard BYTE 100 DUP (176) ; Stores Player 2's hits on Player 1's board
  3774. player2visibleboard BYTE 100 DUP (176) ; Stores Player 1's hits on Player 2's board
  3775.  
  3776.  
  3777. ;--------------------------------------------------------------------------------------------------------
  3778. ; OTHER VARIABLES
  3779. ;--------------------------------------------------------------------------------------------------------
  3780.  
  3781. emptyarray BYTE 100 DUP(176) ; Resets the board by replacing all the interactive elements. 176 is the ASCII for the water texture
  3782. hitvalue BYTE 88 ; This value is displayed when a ship is hit. 88 is the ASCII for X
  3783. missvalue BYTE 39 ; This value is displayed when a ship is missed. 39 is the ASCII for '
  3784.  
  3785. xpoint BYTE 0 ; Stores the x component of the grid
  3786. ypoint BYTE 0 ; Stores the y component of the grid
  3787. indexarray BYTE 0 ; Index of the co-ordinate in an array
  3788. orientation db 0 ; 0 = Vertical. 1 = Horizontal
  3789. lengthship db 0 ; Stores the length of the ship selected (valid values: 2, 3, 4, 5)
  3790.  
  3791. ; Same as above but stores the values in temp so checking legality doesn't mess up the values
  3792. tempxpoint BYTE 0
  3793. tempypoint BYTE 0
  3794. tempindexarray BYTE 0
  3795. temporientation BYTE 0
  3796. templengthship BYTE 0
  3797.  
  3798. promptoverlap BYTE "That's not valid, breh!", 0
  3799.  
  3800.  
  3801. ;--------------------------------------------------------------------------------------------------------
  3802. ; TITLE SCREEN ELEMENTS
  3803. ; - The name of the game + the programmers
  3804. ;--------------------------------------------------------------------------------------------------------
  3805. titleName db "BATTLESHIP", 0
  3806. createdBy db "Created By Shirshak Sharma, Jeff Tocco, and Josh Berger", 0
  3807. playername dd 0 ; The player's name. obviously.
  3808. promptforname db "What is your name, captain? ", 0
  3809.  
  3810.  
  3811. ;--------------------------------------------------------------------------------------------------------
  3812. ; RULE SCREEN ELEMENTS
  3813. ; - The classic rules for Battleship
  3814. ;--------------------------------------------------------------------------------------------------------
  3815. hellomessage db "Hello and Welcome to Battle Ship!", 0
  3816. setup db "Start by hitting the 'BEGIN' button, then placing your ships on the board displayed on the 10x10 play screen.", 0
  3817. setupB db "The CPU will then to the same.", 0
  3818. 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
  3819.  
  3820. 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
  3821. 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
  3822. rule3 db "3: If you guess incorrectly, you missed, which makes it the CPU's turn to guess where your ships are.", 0
  3823. 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
  3824.  
  3825. button db "Let's Begin!", 0
  3826.  
  3827.  
  3828. ;--------------------------------------------------------------------------------------------------------
  3829. ; SHIP PLACEMENT ELEMENTS
  3830. ;--------------------------------------------------------------------------------------------------------
  3831. placingQuote db "PLACE YOUR SHIPS CAPTAIN", 0
  3832. yourGrid db "Your Grid", 0
  3833. startingPoint db "Pick your ship's orientation.", 0
  3834. line db "|", 0
  3835. underScore db "_", 0
  3836.  
  3837. ; CARRIER 5 spaces
  3838. carrier db "Carrier:", 0
  3839.  
  3840. ; BATTLESHIP 4 spaces
  3841. battleship db "Battleship:", 0
  3842.  
  3843. ; CRUISER 3 spaces
  3844. cruiser db "Cruiser:", 0
  3845.  
  3846. ; SUBMARINE 3 spaces
  3847. submarine db "Submarine:", 0
  3848.  
  3849. ; DESTROYER 2 spaces
  3850. destroyer db "Destroyer:", 0
  3851.  
  3852.  
  3853. ;--------------------------------------------------------------------------------------------------------
  3854. ; PLAY SCREEN ELEMENTS
  3855. ;--------------------------------------------------------------------------------------------------------
  3856. enemyGrid db "Enemy Grid", 0
  3857. attack db "ATTACK THE ENEMY", 0
  3858. yourTurn db "It's your turn.", 0
  3859. enemyHits db "Enemy Hits: ", 0
  3860. yourHits db "Your Hits: ", 0
  3861.  
  3862. shipVert BYTE 219, 0
  3863. shipHori BYTE 254, 0
  3864.  
  3865. .code
  3866.  
  3867. ;--------------------------------------------------------------------------------------------------------
  3868. ; MAIN PROCEDURE
  3869. ;--------------------------------------------------------------------------------------------------------
  3870. ;main PROC
  3871.  
  3872. ;call titleScreen
  3873. ;call ruleScreen
  3874.  
  3875. ;invoke ExitProcess, 0
  3876. ;main ENDP
  3877. ;&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&
  3878. ; OPENING LETTERS
  3879. ;&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&
  3880.  
  3881. letterB PROC
  3882.  
  3883. mov ecx, lengthof XvalueB
  3884. mov esi, offset XvalueB
  3885. mov edi, offset YvalueB
  3886. mov eax, 219
  3887.  
  3888. LevelPrint:
  3889. push eax
  3890. mov eax, 50
  3891. call Delay
  3892. pop eax
  3893. mov dl, [esi]
  3894. mov dh, [edi]
  3895. call Gotoxy
  3896. call WriteChar
  3897. add esi, type XvalueB
  3898. add edi, type YvalueB
  3899. Loop LevelPrint
  3900.  
  3901. ret
  3902. letterB ENDP
  3903.  
  3904. letterA PROC
  3905.  
  3906. mov ecx, lengthof XvalueA
  3907. mov esi, offset XvalueA
  3908. mov edi, offset YvalueA
  3909. mov eax, 219
  3910.  
  3911. LevelPrint:
  3912. push eax
  3913. mov eax, 50
  3914. call Delay
  3915. pop eax
  3916. mov dl, [esi]
  3917. mov dh, [edi]
  3918. call Gotoxy
  3919. call WriteChar
  3920. add esi, type XvalueA
  3921. add edi, type YvalueA
  3922. Loop LevelPrint
  3923. ret
  3924. letterA ENDP
  3925.  
  3926. letterTfirst PROC
  3927.  
  3928. mov ecx, lengthof XvalueTfirst
  3929. mov esi, offset XvalueTfirst
  3930. mov edi, offset YvalueTfirst
  3931. mov eax, 219
  3932.  
  3933. LevelPrint:
  3934. push eax
  3935. mov eax, 50
  3936. call Delay
  3937. pop eax
  3938. mov dl, [esi]
  3939. mov dh, [edi]
  3940. call Gotoxy
  3941. call WriteChar
  3942. add esi, type XvalueTfirst
  3943. add edi, type YvalueTfirst
  3944. Loop LevelPrint
  3945.  
  3946. ret
  3947. letterTfirst ENDP
  3948.  
  3949. letterTsecond PROC
  3950.  
  3951. mov ecx, lengthof XvalueTsecond
  3952. mov esi, offset XvalueTsecond
  3953. mov edi, offset YvalueTsecond
  3954. mov eax, 219
  3955.  
  3956. LevelPrint:
  3957. push eax
  3958. mov eax, 50
  3959. call Delay
  3960. pop eax
  3961. mov dl, [esi]
  3962. mov dh, [edi]
  3963. call Gotoxy
  3964. call WriteChar
  3965. add esi, type XvalueTsecond
  3966. add edi, type YvalueTsecond
  3967. Loop LevelPrint
  3968.  
  3969. ret
  3970. letterTsecond ENDP
  3971.  
  3972. letterL PROC
  3973.  
  3974. mov ecx, lengthof XvalueL
  3975. mov esi, offset XvalueL
  3976. mov edi, offset YvalueL
  3977. mov eax, 219
  3978.  
  3979. LevelPrint:
  3980. push eax
  3981. mov eax, 50
  3982. call Delay
  3983. pop eax
  3984. mov dl, [esi]
  3985. mov dh, [edi]
  3986. call Gotoxy
  3987. call WriteChar
  3988. add esi, type XvalueL
  3989. add edi, type YvalueL
  3990. Loop LevelPrint
  3991. ret
  3992. letterL ENDP
  3993.  
  3994. letterE PROC
  3995.  
  3996. mov ecx, lengthof XvalueE
  3997. mov esi, offset XvalueE
  3998. mov edi, offset YvalueE
  3999. mov eax, 219
  4000.  
  4001. LevelPrint:
  4002. push eax
  4003. mov eax, 50
  4004. call Delay
  4005. pop eax
  4006. mov dl, [esi]
  4007. mov dh, [edi]
  4008. call Gotoxy
  4009. call WriteChar
  4010. add esi, type XvalueE
  4011. add edi, type YvalueE
  4012. Loop LevelPrint
  4013. ret
  4014. letterE ENDP
  4015.  
  4016. letterS PROC
  4017.  
  4018. mov ecx, lengthof XvalueS
  4019. mov esi, offset XvalueS
  4020. mov edi, offset YvalueS
  4021. mov eax, 219
  4022.  
  4023. LevelPrint:
  4024. push eax
  4025. mov eax, 50
  4026. call Delay
  4027. pop eax
  4028. mov dl, [esi]
  4029. mov dh, [edi]
  4030. call Gotoxy
  4031. call WriteChar
  4032. add esi, type XvalueS
  4033. add edi, type YvalueS
  4034. Loop LevelPrint
  4035. ret
  4036. letterS ENDP
  4037.  
  4038. letterH PROC
  4039.  
  4040. mov ecx, lengthof XvalueH
  4041. mov esi, offset XvalueH
  4042. mov edi, offset YvalueH
  4043. mov eax, 219
  4044.  
  4045. LevelPrint:
  4046. push eax
  4047. mov eax, 50
  4048. call Delay
  4049. pop eax
  4050. mov dl, [esi]
  4051. mov dh, [edi]
  4052. call Gotoxy
  4053. call WriteChar
  4054. add esi, type XvalueH
  4055. add edi, type YvalueH
  4056. Loop LevelPrint
  4057. ret
  4058. letterH ENDP
  4059.  
  4060. letterI PROC
  4061.  
  4062. mov ecx, lengthof XvalueI
  4063. mov esi, offset XvalueI
  4064. mov edi, offset YvalueI
  4065. mov eax, 219
  4066.  
  4067. LevelPrint:
  4068. push eax
  4069. mov eax, 50
  4070. call Delay
  4071. pop eax
  4072. mov dl, [esi]
  4073. mov dh, [edi]
  4074. call Gotoxy
  4075. call WriteChar
  4076. add esi, type XvalueI
  4077. add edi, type YvalueI
  4078. Loop LevelPrint
  4079. ret
  4080. letterI ENDP
  4081.  
  4082. letterP PROC
  4083.  
  4084. mov ecx, lengthof XvalueP
  4085. mov esi, offset XvalueP
  4086. mov edi, offset YvalueP
  4087. mov eax, 219
  4088.  
  4089. LevelPrint:
  4090. push eax
  4091. mov eax, 50
  4092. call Delay
  4093. pop eax
  4094. mov dl, [esi]
  4095. mov dh, [edi]
  4096. call Gotoxy
  4097. call WriteChar
  4098. add esi, type XvalueP
  4099. add edi, type YvalueP
  4100. Loop LevelPrint
  4101. ret
  4102. letterP ENDP
  4103.  
  4104. ;--------------------------------------------------------------------------------------------------------
  4105. ; GRID
  4106. ; - Displays Player 1's grid
  4107. ;--------------------------------------------------------------------------------------------------------
  4108. grid PROC
  4109.  
  4110. mov dl, 15
  4111. mov dh, 10
  4112. call Gotoxy
  4113. mov esi, offset board01
  4114. mov edx, esi
  4115. call WriteString
  4116. call Crlf
  4117.  
  4118. mov dl, 15
  4119. mov dh, 11
  4120. call Gotoxy
  4121. mov esi, offset board02
  4122. mov edx, esi
  4123. call WriteString
  4124. call Crlf
  4125.  
  4126. mov dl, 15
  4127. mov dh, 12
  4128. call Gotoxy
  4129. mov esi, offset board03
  4130. mov edx, esi
  4131. call WriteString
  4132. call Crlf
  4133.  
  4134. mov dl, 15
  4135. mov dh, 13
  4136. call Gotoxy
  4137. mov esi, offset board04
  4138. mov edx, esi
  4139. call WriteString
  4140. call Crlf
  4141.  
  4142. mov dl, 15
  4143. mov dh, 14
  4144. call Gotoxy
  4145. mov esi, offset board05
  4146. mov edx, esi
  4147. call WriteString
  4148. call Crlf
  4149.  
  4150. mov dl, 15
  4151. mov dh, 15
  4152. call Gotoxy
  4153. mov esi, offset board06
  4154. mov edx, esi
  4155. call WriteString
  4156. call Crlf
  4157.  
  4158. mov dl, 15
  4159. mov dh, 16
  4160. call Gotoxy
  4161. mov esi, offset board07
  4162. mov edx, esi
  4163. call WriteString
  4164. call Crlf
  4165.  
  4166. mov dl, 15
  4167. mov dh, 17
  4168. call Gotoxy
  4169. mov esi, offset board08
  4170. mov edx, esi
  4171. call WriteString
  4172. call Crlf
  4173.  
  4174. mov dl, 15
  4175. mov dh, 18
  4176. call Gotoxy
  4177. mov esi, offset board09
  4178. mov edx, esi
  4179. call WriteString
  4180. call Crlf
  4181.  
  4182. mov dl, 15
  4183. mov dh, 19
  4184. call Gotoxy
  4185. mov esi, offset board10
  4186. mov edx, esi
  4187. call WriteString
  4188. call Crlf
  4189.  
  4190. mov dl, 15
  4191. mov dh, 20
  4192. call Gotoxy
  4193. mov esi, offset board11
  4194. mov edx, esi
  4195. call WriteString
  4196. call Crlf
  4197.  
  4198. mov dl, 15
  4199. mov dh, 21
  4200. call Gotoxy
  4201. mov esi, offset board12
  4202. mov edx, esi
  4203. call WriteString
  4204. call Crlf
  4205.  
  4206. mov dl, 15
  4207. mov dh, 22
  4208. call Gotoxy
  4209. mov esi, offset board13
  4210. mov edx, esi
  4211. call WriteString
  4212. call Crlf
  4213.  
  4214. mov dl, 15
  4215. mov dh, 23
  4216. call Gotoxy
  4217. mov esi, offset board14
  4218. mov edx, esi
  4219. call WriteString
  4220. call Crlf
  4221.  
  4222. ret
  4223. grid ENDP
  4224.  
  4225.  
  4226. ;--------------------------------------------------------------------------------------------------------
  4227. ; GRID ENEMY
  4228. ; - Displays Player 2's grid
  4229. ;--------------------------------------------------------------------------------------------------------
  4230. gridEnemy PROC
  4231.  
  4232. mov dl, 75
  4233. mov dh, 10
  4234. call Gotoxy
  4235. mov esi, offset board01
  4236. mov edx, esi
  4237. call WriteString
  4238. call Crlf
  4239.  
  4240. mov dl, 75
  4241. mov dh, 11
  4242. call Gotoxy
  4243. mov esi, offset board02
  4244. mov edx, esi
  4245. call WriteString
  4246. call Crlf
  4247.  
  4248. mov dl, 75
  4249. mov dh, 12
  4250. call Gotoxy
  4251. mov esi, offset board03
  4252. mov edx, esi
  4253. call WriteString
  4254. call Crlf
  4255.  
  4256. mov dl, 75
  4257. mov dh, 13
  4258. call Gotoxy
  4259. mov esi, offset board04
  4260. mov edx, esi
  4261. call WriteString
  4262. call Crlf
  4263.  
  4264. mov dl, 75
  4265. mov dh, 14
  4266. call Gotoxy
  4267. mov esi, offset board05
  4268. mov edx, esi
  4269. call WriteString
  4270. call Crlf
  4271.  
  4272. mov dl, 75
  4273. mov dh, 15
  4274. call Gotoxy
  4275. mov esi, offset board06
  4276. mov edx, esi
  4277. call WriteString
  4278. call Crlf
  4279.  
  4280. mov dl, 75
  4281. mov dh, 16
  4282. call Gotoxy
  4283. mov esi, offset board07
  4284. mov edx, esi
  4285. call WriteString
  4286. call Crlf
  4287.  
  4288. mov dl, 75
  4289. mov dh, 17
  4290. call Gotoxy
  4291. mov esi, offset board08
  4292. mov edx, esi
  4293. call WriteString
  4294. call Crlf
  4295.  
  4296. mov dl, 75
  4297. mov dh, 18
  4298. call Gotoxy
  4299. mov esi, offset board09
  4300. mov edx, esi
  4301. call WriteString
  4302. call Crlf
  4303.  
  4304. mov dl, 75
  4305. mov dh, 19
  4306. call Gotoxy
  4307. mov esi, offset board10
  4308. mov edx, esi
  4309. call WriteString
  4310. call Crlf
  4311.  
  4312. mov dl, 75
  4313. mov dh, 20
  4314. call Gotoxy
  4315. mov esi, offset board11
  4316. mov edx, esi
  4317. call WriteString
  4318. call Crlf
  4319.  
  4320. mov dl, 75
  4321. mov dh, 21
  4322. call Gotoxy
  4323. mov esi, offset board12
  4324. mov edx, esi
  4325. call WriteString
  4326. call Crlf
  4327.  
  4328. mov dl, 75
  4329. mov dh, 22
  4330. call Gotoxy
  4331. mov esi, offset board13
  4332. mov edx, esi
  4333. call WriteString
  4334. call Crlf
  4335.  
  4336. mov dl, 75
  4337. mov dh, 23
  4338. call Gotoxy
  4339. mov esi, offset board14
  4340. mov edx, esi
  4341. call WriteString
  4342. call Crlf
  4343.  
  4344. ret
  4345. gridEnemy ENDP
  4346.  
  4347.  
  4348. ;--------------------------------------------------------------------------------------------------------
  4349. ; SCREEN SETUP
  4350. ; - x-coordinate stored in dl
  4351. ; - y-coordinate stored in dh
  4352. ;--------------------------------------------------------------------------------------------------------
  4353. screen PROC
  4354.  
  4355. mov dl, 60
  4356. mov dh, 7
  4357.  
  4358. mov ecx, 23
  4359. L1:
  4360.  
  4361. mov ah, dh
  4362. mov al, dl
  4363. call Gotoxy
  4364.  
  4365. mov esi, offset line
  4366. mov edx, esi
  4367. call WriteString
  4368.  
  4369. mov dh, ah
  4370. mov dl, al
  4371. inc dh
  4372.  
  4373. Loop L1
  4374.  
  4375. mov dl, 0
  4376. mov dh, 6
  4377.  
  4378. mov ecx, 120
  4379. L2:
  4380.  
  4381. mov ah, dh
  4382. mov al, dl
  4383. call Gotoxy
  4384.  
  4385. mov esi, offset underScore
  4386. mov edx, esi
  4387. call WriteString
  4388.  
  4389. mov dh, ah
  4390. mov dl, al
  4391. inc dl
  4392.  
  4393. Loop L2
  4394.  
  4395. ret
  4396. screen ENDP
  4397.  
  4398.  
  4399. ;--------------------------------------------------------------------------------------------------------
  4400. ; TITLE SCREEN
  4401. ;--------------------------------------------------------------------------------------------------------
  4402. titleScreen PROC
  4403.  
  4404. ; pushad
  4405. ; x and y are in dh and dl respectively
  4406.  
  4407.  
  4408.  
  4409. call letterB
  4410. call letterTfirst
  4411. call letterA
  4412. call letterTsecond
  4413. call letterE
  4414. call letterL
  4415. call letterS
  4416. call letterI
  4417. call letterH
  4418. call letterP
  4419. call Crlf
  4420. call Crlf
  4421. call Crlf
  4422. call Crlf
  4423.  
  4424. mov dl, 0
  4425. mov dh, 29
  4426. call Gotoxy
  4427. mov esi, offset createdBy
  4428. mov edx, esi
  4429. call WriteString
  4430.  
  4431. ret
  4432. titleScreen ENDP
  4433.  
  4434. bullseye PROC
  4435.  
  4436.  
  4437.  
  4438. bullseye ENDP
  4439.  
  4440. ;--------------------------------------------------------------------------------------------------------
  4441. ; RULE SCREEN
  4442. ;--------------------------------------------------------------------------------------------------------
  4443. ruleScreen PROC
  4444.  
  4445. ;pushad
  4446. ;call Clrscr
  4447.  
  4448. mov esi, offset hellomessage
  4449. mov edx, esi
  4450. call WriteString
  4451. call Crlf
  4452.  
  4453. call Crlf
  4454.  
  4455. mov esi, offset setup
  4456. mov edx, esi
  4457. call WriteString
  4458. call Crlf
  4459.  
  4460. mov esi, offset setupB
  4461. mov edx, esi
  4462. call WriteString
  4463. call Crlf
  4464.  
  4465. mov esi, offset objective
  4466. mov edx, esi
  4467. call WriteString
  4468. call Crlf
  4469.  
  4470. ; x and y are in dh and dl respectively
  4471. call Crlf
  4472.  
  4473. mov esi, offset rule1
  4474. mov edx, esi
  4475. call WriteString
  4476. call Crlf
  4477.  
  4478. mov esi, offset rule2
  4479. mov edx, esi
  4480. call WriteString
  4481. call Crlf
  4482.  
  4483. mov esi, offset rule3
  4484. mov edx, esi
  4485. call WriteString
  4486. call Crlf
  4487.  
  4488. mov esi, offset rule4
  4489. mov edx, esi
  4490. call WriteString
  4491. call Crlf
  4492.  
  4493. mov dl, 80
  4494. mov dh, 25
  4495. call Gotoxy
  4496. mov esi, offset button
  4497. mov edx, esi
  4498. call WriteString
  4499. call Crlf
  4500.  
  4501. mov dl, 78
  4502. mov dh, 23
  4503.  
  4504. mov ecx, 15
  4505. L1:
  4506.  
  4507. mov ah, dh
  4508. mov al, dl
  4509. call Gotoxy
  4510.  
  4511. mov esi, offset underScore
  4512. mov edx, esi
  4513. call WriteString
  4514.  
  4515. mov dh, ah
  4516. mov dl, al
  4517. inc dl
  4518.  
  4519. Loop L1
  4520.  
  4521. mov dl, 78
  4522. mov dh, 26
  4523.  
  4524. mov ecx, 15
  4525. L2:
  4526.  
  4527. mov ah, dh
  4528. mov al, dl
  4529. call Gotoxy
  4530.  
  4531. mov esi, offset underScore
  4532. mov edx, esi
  4533. call WriteString
  4534.  
  4535. mov dh, ah
  4536. mov dl, al
  4537. inc dl
  4538.  
  4539. Loop L2
  4540.  
  4541. mov dl, 77
  4542. mov dh, 24
  4543.  
  4544. mov ecx, 3
  4545. L3:
  4546.  
  4547. mov ah, dh
  4548. mov al, dl
  4549. call Gotoxy
  4550.  
  4551. mov esi, offset line
  4552. mov edx, esi
  4553. call WriteString
  4554.  
  4555. mov dh, ah
  4556. mov dl, al
  4557. inc dh
  4558.  
  4559. Loop L3
  4560.  
  4561. mov dl, 93
  4562. mov dh, 24
  4563.  
  4564. mov ecx, 3
  4565. L4:
  4566.  
  4567. mov ah, dh
  4568. mov al, dl
  4569. call Gotoxy
  4570.  
  4571. mov esi, offset line
  4572. mov edx, esi
  4573. call WriteString
  4574.  
  4575. mov dh, ah
  4576. mov dl, al
  4577. inc dh
  4578.  
  4579. Loop L4
  4580.  
  4581. ret
  4582. ruleScreen ENDP
  4583.  
  4584.  
  4585. ;--------------------------------------------------------------------------------------------------------
  4586. ; PLACE SHIP 1
  4587. ; Name: Carrier | Length: 2
  4588. ;--------------------------------------------------------------------------------------------------------
  4589. ship1Screen PROC
  4590.  
  4591. ;call Clrscr
  4592.  
  4593. call screen
  4594. call grid
  4595.  
  4596. ;yourGrid db "Your Grid", 0
  4597. ;startingPoint db "Pick your starting point.", 0
  4598.  
  4599. ;x in dl, y in dh
  4600.  
  4601. mov dl, 70
  4602. mov dh, 13
  4603. call Gotoxy
  4604. mov esi, offset shipVert
  4605. mov edx, esi
  4606. call WriteString
  4607.  
  4608. mov dl, 70
  4609. mov dh, 14
  4610. call Gotoxy
  4611. mov esi, offset shipVert
  4612. mov edx, esi
  4613. call WriteString
  4614.  
  4615. mov dl, 70
  4616. mov dh, 15
  4617. call Gotoxy
  4618. mov esi, offset shipVert
  4619. mov edx, esi
  4620. call WriteString
  4621.  
  4622. mov dl, 70
  4623. mov dh, 16
  4624. call Gotoxy
  4625. mov esi, offset shipVert
  4626. mov edx, esi
  4627. call WriteString
  4628.  
  4629. mov dl, 70
  4630. mov dh, 17
  4631. call Gotoxy
  4632. mov esi, offset shipVert
  4633. mov edx, esi
  4634. call WriteString
  4635.  
  4636. mov dl, 75
  4637. mov dh, 13
  4638. call Gotoxy
  4639. mov esi, offset shipHori
  4640. mov edx, esi
  4641. call WriteString
  4642.  
  4643. mov dl, 76
  4644. mov dh, 13
  4645. call Gotoxy
  4646. mov esi, offset shipHori
  4647. mov edx, esi
  4648. call WriteString
  4649.  
  4650. mov dl, 77
  4651. mov dh, 13
  4652. call Gotoxy
  4653. mov esi, offset shipHori
  4654. mov edx, esi
  4655. call WriteString
  4656.  
  4657. mov dl, 78
  4658. mov dh, 13
  4659. call Gotoxy
  4660. mov esi, offset shipHori
  4661. mov edx, esi
  4662. call WriteString
  4663.  
  4664. mov dl, 79
  4665. mov dh, 13
  4666. call Gotoxy
  4667. mov esi, offset shipHori
  4668. mov edx, esi
  4669. call WriteString
  4670.  
  4671.  
  4672. mov dl, 80
  4673. mov dh, 13
  4674. call Gotoxy
  4675. mov esi, offset shipHori
  4676. mov edx, esi
  4677. call WriteString
  4678.  
  4679. mov dl, 81
  4680. mov dh, 13
  4681. call Gotoxy
  4682. mov esi, offset shipHori
  4683. mov edx, esi
  4684. call WriteString
  4685.  
  4686. mov dl, 82
  4687. mov dh, 13
  4688. call Gotoxy
  4689. mov esi, offset shipHori
  4690. mov edx, esi
  4691. call WriteString
  4692.  
  4693. mov dl, 83
  4694. mov dh, 13
  4695. call Gotoxy
  4696. mov esi, offset shipHori
  4697. mov edx, esi
  4698. call WriteString
  4699.  
  4700. mov dl, 84
  4701. mov dh, 13
  4702. call Gotoxy
  4703. mov esi, offset shipHori
  4704. mov edx, esi
  4705. call WriteString
  4706.  
  4707. mov dl, 48
  4708. mov dh, 3
  4709. call Gotoxy
  4710. mov esi, offset placingQuote
  4711. mov edx, esi
  4712. call WriteString
  4713.  
  4714. mov dl, 70
  4715. mov dh, 11
  4716. call Gotoxy
  4717. mov esi, offset carrier
  4718. mov edx, esi
  4719. call WriteString
  4720.  
  4721. mov dl, 70
  4722. mov dh, 9
  4723. call Gotoxy
  4724. mov esi, offset startingPoint
  4725. mov edx, esi
  4726. call WriteString
  4727.  
  4728. mov dl, 15
  4729. mov dh, 24
  4730. call Gotoxy
  4731. mov esi, offset yourGrid
  4732. mov edx, esi
  4733. call WriteString
  4734. call Crlf
  4735.  
  4736. ret
  4737. ship1Screen ENDP
  4738.  
  4739. ;--------------------------------------------------------------------------------------------------------
  4740. ; PLACE SHIP 2
  4741. ; Name: Battleship | Length: 3
  4742. ;--------------------------------------------------------------------------------------------------------
  4743. ship2Screen PROC
  4744.  
  4745. call Clrscr
  4746. call screen
  4747. call grid
  4748.  
  4749.  
  4750. ;yourGrid db "Your Grid", 0
  4751. ;startingPoint db "Pick your starting point.", 0
  4752.  
  4753. ;x in dl, y in dh
  4754.  
  4755. mov dl, 70
  4756. mov dh, 13
  4757. call Gotoxy
  4758. mov esi, offset shipVert
  4759. mov edx, esi
  4760. call WriteString
  4761.  
  4762. mov dl, 70
  4763. mov dh, 14
  4764. call Gotoxy
  4765. mov esi, offset shipVert
  4766. mov edx, esi
  4767. call WriteString
  4768.  
  4769. mov dl, 70
  4770. mov dh, 15
  4771. call Gotoxy
  4772. mov esi, offset shipVert
  4773. mov edx, esi
  4774. call WriteString
  4775.  
  4776. mov dl, 70
  4777. mov dh, 16
  4778. call Gotoxy
  4779. mov esi, offset shipVert
  4780. mov edx, esi
  4781. call WriteString
  4782.  
  4783. mov dl, 75
  4784. mov dh, 13
  4785. call Gotoxy
  4786. mov esi, offset shipHori
  4787. mov edx, esi
  4788. call WriteString
  4789.  
  4790. mov dl, 76
  4791. mov dh, 13
  4792. call Gotoxy
  4793. mov esi, offset shipHori
  4794. mov edx, esi
  4795. call WriteString
  4796.  
  4797. mov dl, 77
  4798. mov dh, 13
  4799. call Gotoxy
  4800. mov esi, offset shipHori
  4801. mov edx, esi
  4802. call WriteString
  4803.  
  4804. mov dl, 78
  4805. mov dh, 13
  4806. call Gotoxy
  4807. mov esi, offset shipHori
  4808. mov edx, esi
  4809. call WriteString
  4810.  
  4811. mov dl, 79
  4812. mov dh, 13
  4813. call Gotoxy
  4814. mov esi, offset shipHori
  4815. mov edx, esi
  4816. call WriteString
  4817.  
  4818. mov dl, 80
  4819. mov dh, 13
  4820. call Gotoxy
  4821. mov esi, offset shipHori
  4822. mov edx, esi
  4823. call WriteString
  4824.  
  4825. mov dl, 81
  4826. mov dh, 13
  4827. call Gotoxy
  4828. mov esi, offset shipHori
  4829. mov edx, esi
  4830. call WriteString
  4831.  
  4832. mov dl, 82
  4833. mov dh, 13
  4834. call Gotoxy
  4835. mov esi, offset shipHori
  4836. mov edx, esi
  4837. call WriteString
  4838.  
  4839. mov dl, 48
  4840. mov dh, 3
  4841. call Gotoxy
  4842. mov esi, offset placingQuote
  4843. mov edx, esi
  4844. call WriteString
  4845.  
  4846. mov dl, 70
  4847. mov dh, 11
  4848. call Gotoxy
  4849. mov esi, offset battleship
  4850. mov edx, esi
  4851. call WriteString
  4852.  
  4853. mov dl, 70
  4854. mov dh, 9
  4855. call Gotoxy
  4856. mov esi, offset startingPoint
  4857. mov edx, esi
  4858. call WriteString
  4859.  
  4860. mov dl, 15
  4861. mov dh, 24
  4862. call Gotoxy
  4863. mov esi, offset yourGrid
  4864. mov edx, esi
  4865. call WriteString
  4866. call Crlf
  4867.  
  4868. call BattleOrientationClick
  4869.  
  4870. ret
  4871. ship2Screen ENDP
  4872.  
  4873.  
  4874. ;--------------------------------------------------------------------------------------------------------
  4875. ; PLACE SHIP 3
  4876. ; Name: Cruiser | Length: 3
  4877. ;--------------------------------------------------------------------------------------------------------
  4878. ship3Screen PROC
  4879. call Clrscr
  4880. call screen
  4881. call grid
  4882.  
  4883. ;yourGrid db "Your Grid", 0
  4884. ;startingPoint db "Pick your starting point.", 0
  4885.  
  4886. ;x in dl, y in dh
  4887.  
  4888. mov dl, 70
  4889. mov dh, 13
  4890. call Gotoxy
  4891. mov esi, offset shipVert
  4892. mov edx, esi
  4893. call WriteString
  4894.  
  4895. mov dl, 70
  4896. mov dh, 14
  4897. call Gotoxy
  4898. mov esi, offset shipVert
  4899. mov edx, esi
  4900. call WriteString
  4901.  
  4902. mov dl, 70
  4903. mov dh, 15
  4904. call Gotoxy
  4905. mov esi, offset shipVert
  4906. mov edx, esi
  4907. call WriteString
  4908.  
  4909. mov dl, 75
  4910. mov dh, 13
  4911. call Gotoxy
  4912. mov esi, offset shipHori
  4913. mov edx, esi
  4914. call WriteString
  4915.  
  4916. mov dl, 76
  4917. mov dh, 13
  4918. call Gotoxy
  4919. mov esi, offset shipHori
  4920. mov edx, esi
  4921. call WriteString
  4922.  
  4923. mov dl, 77
  4924. mov dh, 13
  4925. call Gotoxy
  4926. mov esi, offset shipHori
  4927. mov edx, esi
  4928. call WriteString
  4929.  
  4930. mov dl, 78
  4931. mov dh, 13
  4932. call Gotoxy
  4933. mov esi, offset shipHori
  4934. mov edx, esi
  4935. call WriteString
  4936.  
  4937. mov dl, 79
  4938. mov dh, 13
  4939. call Gotoxy
  4940. mov esi, offset shipHori
  4941. mov edx, esi
  4942. call WriteString
  4943.  
  4944. mov dl, 80
  4945. mov dh, 13
  4946. call Gotoxy
  4947. mov esi, offset shipHori
  4948. mov edx, esi
  4949. call WriteString
  4950.  
  4951. mov dl, 48
  4952. mov dh, 3
  4953. call Gotoxy
  4954. mov esi, offset placingQuote
  4955. mov edx, esi
  4956. call WriteString
  4957.  
  4958. mov dl, 70
  4959. mov dh, 11
  4960. call Gotoxy
  4961. mov esi, offset cruiser
  4962. mov edx, esi
  4963. call WriteString
  4964.  
  4965. mov dl, 70
  4966. mov dh, 9
  4967. call Gotoxy
  4968. mov esi, offset startingPoint
  4969. mov edx, esi
  4970. call WriteString
  4971.  
  4972. mov dl, 15
  4973. mov dh, 24
  4974. call Gotoxy
  4975. mov esi, offset yourGrid
  4976. mov edx, esi
  4977. call WriteString
  4978. call Crlf
  4979.  
  4980. call CruiserOrientationClick
  4981.  
  4982. ret
  4983. ship3Screen ENDP
  4984.  
  4985.  
  4986. ;--------------------------------------------------------------------------------------------------------
  4987. ; PLACE SHIP 4
  4988. ; Name: Submarine | Length: 4
  4989. ;--------------------------------------------------------------------------------------------------------
  4990. ship4Screen PROC
  4991.  
  4992. call screen
  4993. call grid
  4994.  
  4995. ;yourGrid db "Your Grid", 0
  4996. ;startingPoint db "Pick your starting point.", 0
  4997.  
  4998. ;x in dl, y in dh
  4999.  
  5000. mov dl, 70
  5001. mov dh, 13
  5002. call Gotoxy
  5003. mov esi, offset shipVert
  5004. mov edx, esi
  5005. call WriteString
  5006.  
  5007. mov dl, 70
  5008. mov dh, 14
  5009. call Gotoxy
  5010. mov esi, offset shipVert
  5011. mov edx, esi
  5012. call WriteString
  5013.  
  5014. mov dl, 70
  5015. mov dh, 15
  5016. call Gotoxy
  5017. mov esi, offset shipVert
  5018. mov edx, esi
  5019. call WriteString
  5020.  
  5021. mov dl, 75
  5022. mov dh, 13
  5023. call Gotoxy
  5024. mov esi, offset shipHori
  5025. mov edx, esi
  5026. call WriteString
  5027.  
  5028. mov dl, 76
  5029. mov dh, 13
  5030. call Gotoxy
  5031. mov esi, offset shipHori
  5032. mov edx, esi
  5033. call WriteString
  5034.  
  5035. mov dl, 77
  5036. mov dh, 13
  5037. call Gotoxy
  5038. mov esi, offset shipHori
  5039. mov edx, esi
  5040. call WriteString
  5041.  
  5042. mov dl, 78
  5043. mov dh, 13
  5044. call Gotoxy
  5045. mov esi, offset shipHori
  5046. mov edx, esi
  5047. call WriteString
  5048.  
  5049. mov dl, 79
  5050. mov dh, 13
  5051. call Gotoxy
  5052. mov esi, offset shipHori
  5053. mov edx, esi
  5054. call WriteString
  5055.  
  5056. mov dl, 80
  5057. mov dh, 13
  5058. call Gotoxy
  5059. mov esi, offset shipHori
  5060. mov edx, esi
  5061. call WriteString
  5062.  
  5063. mov dl, 48
  5064. mov dh, 3
  5065. call Gotoxy
  5066. mov esi, offset placingQuote
  5067. mov edx, esi
  5068. call WriteString
  5069.  
  5070. mov dl, 70
  5071. mov dh, 11
  5072. call Gotoxy
  5073. mov esi, offset submarine
  5074. mov edx, esi
  5075. call WriteString
  5076.  
  5077. mov dl, 70
  5078. mov dh, 9
  5079. call Gotoxy
  5080. mov esi, offset startingPoint
  5081. mov edx, esi
  5082. call WriteString
  5083.  
  5084. mov dl, 15
  5085. mov dh, 24
  5086. call Gotoxy
  5087. mov esi, offset yourGrid
  5088. mov edx, esi
  5089. call WriteString
  5090. call Crlf
  5091.  
  5092. ret
  5093. ship4Screen ENDP
  5094.  
  5095.  
  5096. ;--------------------------------------------------------------------------------------------------------
  5097. ; PLACE SHIP 5
  5098. ; Name: Destroyer | Length: 2
  5099. ;--------------------------------------------------------------------------------------------------------
  5100. ship5Screen PROC
  5101.  
  5102. Call Clrscr
  5103. call screen
  5104. call grid
  5105.  
  5106. ;yourGrid db "Your Grid", 0
  5107. ;startingPoint db "Pick your starting point.", 0
  5108.  
  5109. ;x in dl, y in dh
  5110.  
  5111. mov dl, 70
  5112. mov dh, 13
  5113. call Gotoxy
  5114. mov esi, offset shipVert
  5115. mov edx, esi
  5116. call WriteString
  5117.  
  5118. mov dl, 70
  5119. mov dh, 14
  5120. call Gotoxy
  5121. mov esi, offset shipVert
  5122. mov edx, esi
  5123. call WriteString
  5124.  
  5125. mov dl, 75
  5126. mov dh, 13
  5127. call Gotoxy
  5128. mov esi, offset shipHori
  5129. mov edx, esi
  5130. call WriteString
  5131.  
  5132. mov dl, 76
  5133. mov dh, 13
  5134. call Gotoxy
  5135. mov esi, offset shipHori
  5136. mov edx, esi
  5137. call WriteString
  5138.  
  5139. mov dl, 77
  5140. mov dh, 13
  5141. call Gotoxy
  5142. mov esi, offset shipHori
  5143. mov edx, esi
  5144. call WriteString
  5145.  
  5146. mov dl, 78
  5147. mov dh, 13
  5148. call Gotoxy
  5149. mov esi, offset shipHori
  5150. mov edx, esi
  5151. call WriteString
  5152.  
  5153. mov dl, 48
  5154. mov dh, 3
  5155. call Gotoxy
  5156. mov esi, offset placingQuote
  5157. mov edx, esi
  5158. call WriteString
  5159.  
  5160. mov dl, 70
  5161. mov dh, 11
  5162. call Gotoxy
  5163. mov esi, offset destroyer
  5164. mov edx, esi
  5165. call WriteString
  5166.  
  5167. mov dl, 70
  5168. mov dh, 9
  5169. call Gotoxy
  5170. mov esi, offset startingPoint
  5171. mov edx, esi
  5172. call WriteString
  5173.  
  5174. mov dl, 15
  5175. mov dh, 24
  5176. call Gotoxy
  5177. mov esi, offset yourGrid
  5178. mov edx, esi
  5179. call WriteString
  5180. call Crlf
  5181.  
  5182. call DestroyerOrientationClick
  5183. ret
  5184. ship5Screen ENDP
  5185.  
  5186.  
  5187. ;-------------------------------------------------------------------------------------------------------------
  5188. ; ASKS THE USER FOR THEIR NAME
  5189. ; - Stores it in playername
  5190. ;-------------------------------------------------------------------------------------------------------------
  5191. askForName PROC
  5192.  
  5193. mov dl, 46
  5194. mov dh, 12
  5195.  
  5196. call Gotoxy
  5197.  
  5198. mov esi, offset promptforname
  5199. mov edx, esi
  5200. call WriteString
  5201.  
  5202. mov edx, offset playername
  5203. mov ecx, 20
  5204. call ReadString
  5205.  
  5206. ret
  5207. askForName ENDP
  5208.  
  5209.  
  5210. ;-------------------------------------------------------------------------------------------------------------
  5211. ; CO-ORDINATE TO INDEX
  5212. ; - Changes x and y coordinates into the index in the array
  5213. ; - Takes in xpoint, ypoint
  5214. ; - Returns indexarray
  5215. ;-------------------------------------------------------------------------------------------------------------
  5216. coordinateToIndex PROC
  5217.  
  5218. mov indexarray, 0
  5219. mov eax, 0
  5220. mov ecx, 10
  5221. mulconfusesme:
  5222. add ah, ypoint
  5223. loop mulconfusesme
  5224. add ah, xpoint
  5225.  
  5226. mov indexarray, ah
  5227.  
  5228. ret
  5229. coordinateToIndex ENDP
  5230.  
  5231.  
  5232. ;-------------------------------------------------------------------------------------------------------------
  5233. ; PLACES SHIP IN PLAYER 1'S HIDDEN BOARD
  5234. ; - Takes in orientation, xpoint, ypoint, lengthship
  5235. ;-------------------------------------------------------------------------------------------------------------
  5236. placeShipPlayer1 PROC
  5237.  
  5238. ; 254 is the ASCII code for the ship
  5239. mov edx, 0
  5240. mov dl, 254
  5241.  
  5242. ; If orientation = 0, goes to placeHorizontal
  5243. ; If not, goes to placeVertical for another check
  5244. cmp orientation, 0
  5245. je placeHorizontal
  5246. jmp placeVertical
  5247.  
  5248. placeHorizontal:
  5249.  
  5250. ; Loops the same number times as the length of the ship
  5251. mov ecx, 0
  5252. mov cl, lengthship
  5253.  
  5254. rick:
  5255. mov esi, offset player1hiddenboard
  5256. push ecx
  5257. call coordinateToIndex
  5258. movzx ebx, indexarray
  5259. add esi, ebx
  5260. mov [esi], dl
  5261. pop ecx
  5262. inc xpoint
  5263. loop rick
  5264.  
  5265. jmp stopPlacingShip
  5266.  
  5267. placeVertical:
  5268.  
  5269. ; If orientation != 1, goes to stopPlacingShip
  5270. cmp orientation, 1
  5271. jne stopPlacingShip
  5272.  
  5273. ; Loops the same number times as the length of the ship
  5274. mov ecx, 0
  5275. mov cl, lengthship
  5276.  
  5277. morty:
  5278. mov esi, offset player1hiddenboard
  5279. push ecx
  5280. call coordinateToIndex
  5281. movzx ebx, indexarray
  5282. add esi, ebx
  5283. mov [esi], dl
  5284. pop ecx
  5285. inc ypoint
  5286. loop morty
  5287.  
  5288. jmp stopPlacingShip
  5289.  
  5290. stopPlacingShip:
  5291.  
  5292. ; Ends the procedure
  5293. ret
  5294.  
  5295. placeShipPlayer1 ENDP
  5296.  
  5297.  
  5298. ;-------------------------------------------------------------------------------------------------------------
  5299. ; PLACES SHIP IN PLAYER 2'S HIDDEN BOARD
  5300. ; - Takes in orientation, xpoint, ypoint, lengthship
  5301. ;-------------------------------------------------------------------------------------------------------------
  5302. placeShipPlayer2 PROC
  5303.  
  5304. ; 254 is the ASCII code for the ship
  5305. mov edx, 0
  5306. mov dl, 254
  5307.  
  5308. ; If orientation = 0, goes to placeHorizontal
  5309. ; If not, goes to placeVertical for another check
  5310. cmp orientation, 0
  5311. je placeHorizontal
  5312. jmp placeVertical
  5313.  
  5314. placeHorizontal:
  5315.  
  5316. ; Loops the same number times as the length of the ship
  5317. mov ecx, 0
  5318. mov cl, lengthship
  5319.  
  5320. rick:
  5321. mov esi, offset player2hiddenboard
  5322. push ecx
  5323. call coordinateToIndex
  5324. movzx ebx, indexarray
  5325. add esi, ebx
  5326. mov [esi], dl
  5327. pop ecx
  5328. inc xpoint
  5329. loop rick
  5330.  
  5331. jmp stopPlacingShip
  5332.  
  5333. placeVertical:
  5334.  
  5335. ; If orientation != 1, goes to stopPlacingShip
  5336. cmp orientation, 1
  5337. jne stopPlacingShip
  5338.  
  5339. ; Loops the same number times as the length of the ship
  5340. mov ecx, 0
  5341. mov cl, lengthship
  5342.  
  5343. morty:
  5344. mov esi, offset player2hiddenboard
  5345. push ecx
  5346. call coordinateToIndex
  5347. movzx ebx, indexarray
  5348. add esi, ebx
  5349. mov [esi], dl
  5350. pop ecx
  5351. inc ypoint
  5352. loop morty
  5353.  
  5354. jmp stopPlacingShip
  5355.  
  5356. stopPlacingShip:
  5357.  
  5358. ; Ends the procedure
  5359. ret
  5360.  
  5361. placeShipPlayer2 ENDP
  5362.  
  5363.  
  5364. ;-------------------------------------------------------------------------------------------------------------
  5365. ; CHECK IF PLAYER 1'S SHIP PLACEMENT IS LEGAL OR NOT
  5366. ; Input: orientation, xpoint, ypoint, length
  5367. ;-------------------------------------------------------------------------------------------------------------
  5368. validShipPlacement1 PROC
  5369.  
  5370. mov edx, 0
  5371. mov dl, xpoint
  5372. mov tempxpoint, dl
  5373. mov dl, ypoint
  5374. mov tempypoint, dl
  5375.  
  5376. cmp orientation, 0
  5377. je checkHorizontalBound
  5378. jmp checkVerticalBound
  5379.  
  5380. checkHorizontalBound:
  5381. mov edx, 0
  5382. mov dl, lengthship
  5383. add tempxpoint, dl
  5384. cmp tempxpoint, 10
  5385. jle checkHorizontalOverlap
  5386. jmp invalidPlacement
  5387.  
  5388. checkVerticalBound:
  5389. mov edx, 0
  5390. mov dl, lengthship
  5391. add tempypoint, dl
  5392. cmp tempypoint, 10
  5393. jle checkVerticalOverlap
  5394. jmp invalidPlacement
  5395.  
  5396. invalidPlacement:
  5397. mov esi, offset promptoverlap
  5398. mov edx, esi
  5399. call WriteString
  5400. call Crlf
  5401. jmp stopPlacingShip
  5402.  
  5403. validPlacement:
  5404. call placeShipPlayer1
  5405. jmp stopPlacingShip
  5406.  
  5407. checkHorizontalOverlap:
  5408.  
  5409. mov dl, 254
  5410. mov ecx, 0
  5411. mov cl, lengthship
  5412. loopHorizontalOverlap:
  5413. mov esi, offset player1hiddenboard
  5414. push ecx
  5415. call coordinateToIndex
  5416. pop ecx
  5417. movzx ebx, indexarray
  5418. add esi, ebx
  5419. mov dl, 254
  5420. cmp [esi], dl
  5421. je invalidPlacement
  5422. inc xpoint
  5423. loop loopHorizontalOverlap
  5424.  
  5425. mov edx, 0
  5426. mov dl, lengthship
  5427. sub xpoint, dl
  5428.  
  5429. jmp validPlacement
  5430.  
  5431. checkVerticalOverlap:
  5432.  
  5433. mov edx, 0
  5434. mov dl, 254
  5435. mov ecx, 0
  5436. mov cl, lengthship
  5437. loopVerticalOverlap:
  5438. mov esi, offset player1hiddenboard
  5439. push ecx
  5440. call coordinateToIndex
  5441. pop ecx
  5442. movzx ebx, indexarray
  5443. add esi, ebx
  5444. cmp [esi], dl
  5445. je invalidPlacement
  5446. inc ypoint
  5447. loop loopVerticalOverlap
  5448.  
  5449. mov edx, 0
  5450. mov dl, lengthship
  5451. sub ypoint, dl
  5452.  
  5453. jmp validPlacement
  5454.  
  5455. stopPlacingShip:
  5456. ret
  5457.  
  5458. validShipPlacement1 ENDP
  5459.  
  5460. ;-------------------------------------------------------------------------------------------------------------
  5461. ; CHECK IF PLAYER 2'S SHIP PLACEMENT IS LEGAL OR NOT
  5462. ; Input: orientation, xpoint, ypoint, length
  5463. ;-------------------------------------------------------------------------------------------------------------
  5464. validShipPlacement2 PROC
  5465.  
  5466. mov edx, 0
  5467. mov dl, xpoint
  5468. mov tempxpoint, dl
  5469. mov dl, ypoint
  5470. mov tempypoint, dl
  5471.  
  5472. cmp orientation, 0
  5473. je checkHorizontalBound
  5474. jmp checkVerticalBound
  5475.  
  5476. checkHorizontalBound:
  5477. mov edx, 0
  5478. mov dl, lengthship
  5479. add tempxpoint, dl
  5480. cmp tempxpoint, 10
  5481. jle checkHorizontalOverlap
  5482. jmp invalidPlacement
  5483.  
  5484. checkVerticalBound:
  5485. mov edx, 0
  5486. mov dl, lengthship
  5487. add tempypoint, dl
  5488. cmp tempypoint, 10
  5489. jle checkVerticalOverlap
  5490. jmp invalidPlacement
  5491.  
  5492. invalidPlacement:
  5493. mov esi, offset promptoverlap
  5494. mov edx, esi
  5495. call WriteString
  5496. call Crlf
  5497. jmp stopPlacingShip
  5498.  
  5499. validPlacement:
  5500. call placeShipPlayer1
  5501. jmp stopPlacingShip
  5502.  
  5503. checkHorizontalOverlap:
  5504.  
  5505. mov dl, 254
  5506. mov ecx, 0
  5507. mov cl, lengthship
  5508. loopHorizontalOverlap:
  5509. mov esi, offset player2hiddenboard
  5510. push ecx
  5511. call coordinateToIndex
  5512. pop ecx
  5513. movzx ebx, indexarray
  5514. add esi, ebx
  5515. mov dl, 254
  5516. cmp [esi], dl
  5517. je invalidPlacement
  5518. inc xpoint
  5519. loop loopHorizontalOverlap
  5520.  
  5521. mov edx, 0
  5522. mov dl, lengthship
  5523. sub xpoint, dl
  5524.  
  5525. jmp validPlacement
  5526.  
  5527. checkVerticalOverlap:
  5528.  
  5529. mov edx, 0
  5530. mov dl, 254
  5531. mov ecx, 0
  5532. mov cl, lengthship
  5533. loopVerticalOverlap:
  5534. mov esi, offset player2hiddenboard
  5535. push ecx
  5536. call coordinateToIndex
  5537. pop ecx
  5538. movzx ebx, indexarray
  5539. add esi, ebx
  5540. cmp [esi], dl
  5541. je invalidPlacement
  5542. inc ypoint
  5543. loop loopVerticalOverlap
  5544.  
  5545. mov edx, 0
  5546. mov dl, lengthship
  5547. sub ypoint, dl
  5548.  
  5549. jmp validPlacement
  5550.  
  5551. stopPlacingShip:
  5552. ret
  5553.  
  5554. validShipPlacement2 ENDP
  5555.  
  5556.  
  5557. end main
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement