Advertisement
jnt369

Untitled

Dec 6th, 2016
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 92.95 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. ; displayPlayer1Board
  10. ; displayPlayer2VisibleBoard
  11. ; displayPlayer2HiddenBoard
  12. ; grid
  13. ; gridEnemy
  14. ;--------------------------------------------------------------------------------------------------------
  15.  
  16.  
  17. .386
  18. .MODEL Flat,StdCall
  19. OPTION CaseMap:None
  20. INCLUDE Irvine32_NOWIN.inc
  21. INCLUDE windows.inc
  22. INCLUDE user32.inc
  23. INCLUDE kernel32.inc
  24. INCLUDELIB User32.lib
  25. INCLUDELIB Kernel32.lib
  26.  
  27. .data
  28.  
  29. ;--------------------------------------------------------------------------------------------------------
  30. ; BATTLESHIP BOARD
  31. ; - Stored in 14 byte arrays
  32. ; - The editable grids are stored in index 3, 5, 7, 9, 11, 13, 15, 17, 19, 21 in boards 04 to 13
  33. ;--------------------------------------------------------------------------------------------------------
  34. 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
  35. 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
  36. 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
  37. 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
  38. 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
  39. 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
  40. 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
  41. 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
  42. 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
  43. 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
  44. 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
  45. 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
  46. 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
  47. 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
  48.  
  49.  
  50. ;--------------------------------------------------------------------------------------------------------
  51. ; PLAYER BOARD
  52. ; - 176 is the ASCII to represent water (no ship to start with)
  53. ;--------------------------------------------------------------------------------------------------------
  54. player1board BYTE 100 DUP (176) ; Stores the ships of Player 1 + Hits from Player 2
  55. player2hiddenboard BYTE 100 DUP (176) ; Stores the ships of Player 2
  56. player2visibleboard BYTE 100 DUP (176) ; Stores the hits from Player 1
  57.  
  58.  
  59. ;--------------------------------------------------------------------------------------------------------
  60. ; OPENING LETTERS TO DISPLAY THE WORD 'BATTLESHIP'
  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. xValueEx1 db 91,91,91,91,91,91
  93. yValueEx1 db 7,8,9,10,11,13
  94.  
  95. xValueEx2 db 94,94,94,94,94,94
  96. yValueEx2 db 7,8,9,10,11,13
  97.  
  98. xValueEx3 db 97,97,97,97,97,97
  99. yValueEx3 db 7,8,9,10,11,13
  100.  
  101. xValueEx4 db 100,100,100,100,100,100
  102. yValueEx4 db 7,8,9,10,11,13
  103.  
  104. xValueEx5 db 103,103,103,103,103,103
  105. yValueEx5 db 7,8,9,10,11,13
  106. ;--------------------------------------------------------------------------------------------------------
  107. ; SHIPS
  108. ; - 5 ships of length 2, 3, 3, 4 and 5 respectively
  109. ; - 219 is the ASCII code for a colored rectangle to represent ships
  110. ;--------------------------------------------------------------------------------------------------------
  111.  
  112. lose1 db "__ ______ _ _ _ ____ _____ ______ ", 0
  113. lose2 db "\ \ / / __ \| | | | | | / __ \ / ____| ____|", 0
  114. lose3 db " \ \_/ / | | | | | | | | | | | | (___ | |__ ", 0
  115. lose4 db " \ /| | | | | | | | | | | | |\___ \| __| ", 0
  116. lose5 db " | | | |__| | |__| | | |___| |__| |____) | |____ ", 0
  117. lose6 db " |_| \____/ \____/ |______\____/|_____/|______|", 0
  118.  
  119. win1 db " __ ______ _ _ __ _______ _ _ ", 0
  120. win2 db " \ \ / / __ \| | | | \ \ / /_ _| \ | |", 0
  121. win3 db " \ \_/ / | | | | | | \ \ /\ / / | | | \| |", 0
  122. win4 db " \ /| | | | | | | \ \/ \/ / | | | . ` |", 0
  123. win5 db " | | | |__| | |__| | \ /\ / _| |_| |\ |", 0
  124. win6 db " |_| \____/ \____/ \/ \/ |_____|_| \_|", 0
  125.  
  126. exit db "Click to Exit", 0
  127.  
  128. buttonT BYTE 201, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 187, 0
  129. buttonM BYTE 186, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 186, 0
  130. buttonB BYTE 200, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 188, 0
  131.  
  132.  
  133. button db "Let's Begin!", 0
  134. start db "START", 0
  135. ;--------------------------------------------------------------------------------------------------------
  136. ; SHIPS
  137. ; - 5 ships of length 2, 3, 3, 4 and 5 respectively
  138. ; - 219 is the ASCII code for a colored rectangle to represent ships
  139. ;--------------------------------------------------------------------------------------------------------
  140. player1ship1 BYTE 2 DUP (219)
  141. player1ship2 BYTE 3 DUP (219)
  142. player1ship3 BYTE 3 DUP (219)
  143. player1ship4 BYTE 4 DUP (219)
  144. player1ship5 BYTE 5 DUP (219)
  145.  
  146. player2ship1 BYTE 2 DUP (219)
  147. player2ship2 BYTE 3 DUP (219)
  148. player2ship3 BYTE 3 DUP (219)
  149. player2ship4 BYTE 4 DUP (219)
  150. player2ship5 BYTE 5 DUP (219)
  151.  
  152.  
  153. ;--------------------------------------------------------------------------------------------------------
  154. ; TITLE SCREEN ELEMENTS
  155. ; - The name of the game + the programmers
  156. ;--------------------------------------------------------------------------------------------------------
  157. titleName db "BATTLESHIP", 0
  158. createdBy db "Created By Shirshak Sharma, Jeff Tocco, and Josh Berger", 0
  159. playername dd 0 ; The player's name. obviously.
  160. promptforname db "What is your name, captain? ", 0
  161.  
  162.  
  163. ;--------------------------------------------------------------------------------------------------------
  164. ; RULE SCREEN ELEMENTS
  165. ; - The classic rules for Battleship
  166. ;--------------------------------------------------------------------------------------------------------
  167. hellomessage db "Hello and Welcome to Battle Ship!", 0
  168. setup db "Start by hitting the 'BEGIN' button, then placing your ships on the board displayed on the 10x10 play screen.", 0
  169. setupB db "The CPU will then to the same.", 0
  170. 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
  171.  
  172. 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
  173. 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
  174. rule3 db "3: If you guess incorrectly, you missed, which makes it the CPU's turn to guess where your ships are.", 0
  175. 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
  176.  
  177.  
  178.  
  179. ;--------------------------------------------------------------------------------------------------------
  180. ; SHIP PLACEMENT ELEMENTS
  181. ;--------------------------------------------------------------------------------------------------------
  182. placingQuote db "PLACE YOUR SHIPS CAPTAIN", 0
  183. yourGrid db "Your Grid", 0
  184. startingPoint db "Pick your ship's orientation.", 0
  185. line db "|", 0
  186. underScore db "_", 0
  187.  
  188. betterUS BYTE 205, 0
  189. betterLine BYTE 186, 0
  190. inter BYTE 203, 0
  191.  
  192. ; CARRIER 5 spaces
  193. carrier db "Carrier:", 0
  194.  
  195. ; BATTLESHIP 4 spaces
  196. battleship db "Battleship:", 0
  197.  
  198. ; CRUISER 3 spaces
  199. cruiser db "Cruiser:", 0
  200.  
  201. ; SUBMARINE 3 spaces
  202. submarine db "Submarine:", 0
  203.  
  204. ; DESTROYER 2 spaces
  205. destroyer db "Destroyer:", 0
  206. destroyerXposition dd ?
  207. destroyerYposition dd ?
  208.  
  209.  
  210. ;--------------------------------------------------------------------------------------------------------
  211. ; PLAY SCREEN ELEMENTS
  212. ;--------------------------------------------------------------------------------------------------------
  213. enemyGrid db "Enemy Grid", 0
  214. attack db "ATTACK THE ENEMY", 0
  215. yourTurn db "It's your turn.", 0
  216. enemyHits db "Enemy Hits: ", 0
  217. yourHits db "Your Hits: ", 0
  218.  
  219. shipVert BYTE 219, 0
  220. shipHori BYTE 254, 0
  221.  
  222.  
  223. ;--------------------------------------------------------------------------------------------------------
  224. ; MOUSE CLICK FOR ORIENTATION
  225. ;--------------------------------------------------------------------------------------------------------
  226. rHnd HANDLE ?
  227. numEventsRead DWORD ?
  228. numEventsOccurred DWORD ?
  229. eventBuffer INPUT_RECORD 128 DUP(<>)
  230. ;coordString BYTE "Coordinate change: (", 0
  231. ;buttonString BYTE "Left Button Pressed!", 0Ah, 0
  232. whereYouPressed BYTE "You clicked on: ", 0
  233. decision dd ?
  234. 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
  235. 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
  236.  
  237.  
  238. ;--------------------------------------------------------------------------------------------------------
  239. ; MOUSE CLICK FOR PLACEMENT
  240. ;--------------------------------------------------------------------------------------------------------
  241. ;MouseClickTwo Data
  242. rHndPlacement HANDLE ?
  243. numEventsReadPlacement DWORD ?
  244. numEventsOccurredPlacement DWORD ?
  245. eventBufferPlacement INPUT_RECORD 128 DUP(<>)
  246. coordStringPlacement BYTE "Coordinate change: (", 0
  247. buttonStringPlacement BYTE "Left Button Pressed!", 0Ah, 0
  248. whereYouPressedPlacement BYTE "You clicked on: ", 0
  249.  
  250.  
  251. ;--------------------------------------------------------------------------------------------------------
  252. ; OTHER VARIABLES
  253. ;--------------------------------------------------------------------------------------------------------
  254. emptyarray BYTE 100 DUP(176) ; Resets the board by replacing all the interactive elements. 176 is the ASCII for the water texture
  255. hitvalue BYTE 88 ; This value is displayed when a ship is hit. 88 is the ASCII for X
  256. missvalue BYTE 39 ; This value is displayed when a ship is missed. 39 is the ASCII for '
  257.  
  258. xpoint BYTE 0 ; Stores the x component of the grid
  259. ypoint BYTE 0 ; Stores the y component of the grid
  260. indexarray BYTE 0 ; Index of the co-ordinate in an array
  261. orientation db 0 ; 0 = Vertical. 1 = Horizontal
  262. lengthship db 0 ; Stores the length of the ship selected (valid values: 2, 3, 4, 5)
  263.  
  264. scoreplayer1 db 0 ; Stores Player 1's score
  265. scoreplayer2 db 0 ; Stores Player 2's score
  266.  
  267. botguesstype db 0 ; Stores some stuff for the bot to work
  268. ; Guess Type 0 = horizontal
  269. ; Guess Type 1 = vertical
  270. ; Guess Type 2 = random
  271. ; Guess Type 3 = there's only been one hit
  272.  
  273. ; Same as above but stores the values in temp so checking legality doesn't mess up the values
  274. tempxpoint BYTE 0
  275. tempypoint BYTE 0
  276. tempindexarray BYTE 0
  277. temporientation BYTE 0
  278. templengthship BYTE 0
  279.  
  280. promptoverlap BYTE "Invalid :(", 0
  281.  
  282. whichShip3 BYTE 0 ; 0 = First Ship (Cruiser). 1 = Second Ship (Submarine)
  283.  
  284. computershipcounter BYTE 0 ; Stores the number of ships the computer has placed. Values: 0, 1, 2, 3, 4, 5.
  285. turnorder BYTE 1 ; Stores whose order it is. 1 = Player 1. 2 = Player 2.
  286.  
  287.  
  288. .code
  289.  
  290. ;--------------------------------------------------------------------------------------------------------
  291. ; MAIN PROCEDURE
  292. ; GOTO MAIN
  293. ;--------------------------------------------------------------------------------------------------------
  294. main proc
  295.  
  296. call Randomize
  297.  
  298. call titleScreen
  299. call ReadInt
  300. call Clrscr
  301. call ruleScreen
  302. call ReadInt
  303. call Clrscr
  304. call ship1Screen
  305. call CarrierOrientationClick
  306. call pickShipsPlayer2
  307.  
  308. invoke ExitProcess, 0
  309. main ENDP
  310.  
  311. ;--------------------------------------------------------------------------------------------------------
  312. ; PLACE SHIP 1
  313. ; Name: Carrier | Length: 2
  314. ;--------------------------------------------------------------------------------------------------------
  315. ; GOTO SHIP1SCREEN
  316. ship1Screen PROC
  317.  
  318. ;call Clrscr
  319.  
  320. call screen
  321. call grid
  322.  
  323. ;yourGrid db "Your Grid", 0
  324. ;startingPoint db "Pick your starting point.", 0
  325.  
  326. ;x in dl, y in dh
  327.  
  328. mov dl, 70
  329. mov dh, 13
  330. call Gotoxy
  331. mov esi, offset shipVert
  332. mov edx, esi
  333. call WriteString
  334.  
  335. mov dl, 70
  336. mov dh, 14
  337. call Gotoxy
  338. mov esi, offset shipVert
  339. mov edx, esi
  340. call WriteString
  341.  
  342. mov dl, 70
  343. mov dh, 15
  344. call Gotoxy
  345. mov esi, offset shipVert
  346. mov edx, esi
  347. call WriteString
  348.  
  349. mov dl, 70
  350. mov dh, 16
  351. call Gotoxy
  352. mov esi, offset shipVert
  353. mov edx, esi
  354. call WriteString
  355.  
  356. mov dl, 70
  357. mov dh, 17
  358. call Gotoxy
  359. mov esi, offset shipVert
  360. mov edx, esi
  361. call WriteString
  362.  
  363. mov dl, 75
  364. mov dh, 13
  365. call Gotoxy
  366. mov esi, offset shipHori
  367. mov edx, esi
  368. call WriteString
  369.  
  370. mov dl, 76
  371. mov dh, 13
  372. call Gotoxy
  373. mov esi, offset shipHori
  374. mov edx, esi
  375. call WriteString
  376.  
  377. mov dl, 77
  378. mov dh, 13
  379. call Gotoxy
  380. mov esi, offset shipHori
  381. mov edx, esi
  382. call WriteString
  383.  
  384. mov dl, 78
  385. mov dh, 13
  386. call Gotoxy
  387. mov esi, offset shipHori
  388. mov edx, esi
  389. call WriteString
  390.  
  391. mov dl, 79
  392. mov dh, 13
  393. call Gotoxy
  394. mov esi, offset shipHori
  395. mov edx, esi
  396. call WriteString
  397.  
  398.  
  399. mov dl, 80
  400. mov dh, 13
  401. call Gotoxy
  402. mov esi, offset shipHori
  403. mov edx, esi
  404. call WriteString
  405.  
  406. mov dl, 81
  407. mov dh, 13
  408. call Gotoxy
  409. mov esi, offset shipHori
  410. mov edx, esi
  411. call WriteString
  412.  
  413. mov dl, 82
  414. mov dh, 13
  415. call Gotoxy
  416. mov esi, offset shipHori
  417. mov edx, esi
  418. call WriteString
  419.  
  420. mov dl, 83
  421. mov dh, 13
  422. call Gotoxy
  423. mov esi, offset shipHori
  424. mov edx, esi
  425. call WriteString
  426.  
  427. mov dl, 84
  428. mov dh, 13
  429. call Gotoxy
  430. mov esi, offset shipHori
  431. mov edx, esi
  432. call WriteString
  433.  
  434. mov dl, 48
  435. mov dh, 3
  436. call Gotoxy
  437. mov esi, offset placingQuote
  438. mov edx, esi
  439. call WriteString
  440.  
  441. mov dl, 70
  442. mov dh, 11
  443. call Gotoxy
  444. mov esi, offset carrier
  445. mov edx, esi
  446. call WriteString
  447.  
  448. mov dl, 70
  449. mov dh, 9
  450. call Gotoxy
  451. mov esi, offset startingPoint
  452. mov edx, esi
  453. call WriteString
  454.  
  455. mov dl, 15
  456. mov dh, 24
  457. call Gotoxy
  458. mov esi, offset yourGrid
  459. mov edx, esi
  460. call WriteString
  461. call Crlf
  462.  
  463. ret
  464. ship1Screen ENDP
  465.  
  466. ;--------------------------------------------------------------------------------------------------------
  467. ; PLACE SHIP 2
  468. ; Name: Battleship | Length: 3
  469. ;--------------------------------------------------------------------------------------------------------
  470. ; GOTO SHIP2SCREEN
  471. ship2Screen PROC
  472.  
  473. call Clrscr
  474. call screen
  475. call grid
  476.  
  477.  
  478. ;yourGrid db "Your Grid", 0
  479. ;startingPoint db "Pick your starting point.", 0
  480.  
  481. ;x in dl, y in dh
  482.  
  483. mov dl, 70
  484. mov dh, 13
  485. call Gotoxy
  486. mov esi, offset shipVert
  487. mov edx, esi
  488. call WriteString
  489.  
  490. mov dl, 70
  491. mov dh, 14
  492. call Gotoxy
  493. mov esi, offset shipVert
  494. mov edx, esi
  495. call WriteString
  496.  
  497. mov dl, 70
  498. mov dh, 15
  499. call Gotoxy
  500. mov esi, offset shipVert
  501. mov edx, esi
  502. call WriteString
  503.  
  504. mov dl, 70
  505. mov dh, 16
  506. call Gotoxy
  507. mov esi, offset shipVert
  508. mov edx, esi
  509. call WriteString
  510.  
  511. mov dl, 75
  512. mov dh, 13
  513. call Gotoxy
  514. mov esi, offset shipHori
  515. mov edx, esi
  516. call WriteString
  517.  
  518. mov dl, 76
  519. mov dh, 13
  520. call Gotoxy
  521. mov esi, offset shipHori
  522. mov edx, esi
  523. call WriteString
  524.  
  525. mov dl, 77
  526. mov dh, 13
  527. call Gotoxy
  528. mov esi, offset shipHori
  529. mov edx, esi
  530. call WriteString
  531.  
  532. mov dl, 78
  533. mov dh, 13
  534. call Gotoxy
  535. mov esi, offset shipHori
  536. mov edx, esi
  537. call WriteString
  538.  
  539. mov dl, 79
  540. mov dh, 13
  541. call Gotoxy
  542. mov esi, offset shipHori
  543. mov edx, esi
  544. call WriteString
  545.  
  546. mov dl, 80
  547. mov dh, 13
  548. call Gotoxy
  549. mov esi, offset shipHori
  550. mov edx, esi
  551. call WriteString
  552.  
  553. mov dl, 81
  554. mov dh, 13
  555. call Gotoxy
  556. mov esi, offset shipHori
  557. mov edx, esi
  558. call WriteString
  559.  
  560. mov dl, 82
  561. mov dh, 13
  562. call Gotoxy
  563. mov esi, offset shipHori
  564. mov edx, esi
  565. call WriteString
  566.  
  567. mov dl, 48
  568. mov dh, 3
  569. call Gotoxy
  570. mov esi, offset placingQuote
  571. mov edx, esi
  572. call WriteString
  573.  
  574. mov dl, 70
  575. mov dh, 11
  576. call Gotoxy
  577. mov esi, offset battleship
  578. mov edx, esi
  579. call WriteString
  580.  
  581. mov dl, 70
  582. mov dh, 9
  583. call Gotoxy
  584. mov esi, offset startingPoint
  585. mov edx, esi
  586. call WriteString
  587.  
  588. mov dl, 15
  589. mov dh, 24
  590. call Gotoxy
  591. mov esi, offset yourGrid
  592. mov edx, esi
  593. call WriteString
  594. call Crlf
  595.  
  596. call BattleOrientationClick
  597.  
  598. ret
  599. ship2Screen ENDP
  600.  
  601.  
  602. ;--------------------------------------------------------------------------------------------------------
  603. ; PLACE SHIP 3
  604. ; Name: Cruiser | Length: 3
  605. ;--------------------------------------------------------------------------------------------------------
  606. ; GOTO SHIP3SCREEN
  607. ship3Screen PROC
  608. call Clrscr
  609. call screen
  610. call grid
  611.  
  612. ;yourGrid db "Your Grid", 0
  613. ;startingPoint db "Pick your starting point.", 0
  614.  
  615. ;x in dl, y in dh
  616.  
  617. mov dl, 70
  618. mov dh, 13
  619. call Gotoxy
  620. mov esi, offset shipVert
  621. mov edx, esi
  622. call WriteString
  623.  
  624. mov dl, 70
  625. mov dh, 14
  626. call Gotoxy
  627. mov esi, offset shipVert
  628. mov edx, esi
  629. call WriteString
  630.  
  631. mov dl, 70
  632. mov dh, 15
  633. call Gotoxy
  634. mov esi, offset shipVert
  635. mov edx, esi
  636. call WriteString
  637.  
  638. mov dl, 75
  639. mov dh, 13
  640. call Gotoxy
  641. mov esi, offset shipHori
  642. mov edx, esi
  643. call WriteString
  644.  
  645. mov dl, 76
  646. mov dh, 13
  647. call Gotoxy
  648. mov esi, offset shipHori
  649. mov edx, esi
  650. call WriteString
  651.  
  652. mov dl, 77
  653. mov dh, 13
  654. call Gotoxy
  655. mov esi, offset shipHori
  656. mov edx, esi
  657. call WriteString
  658.  
  659. mov dl, 78
  660. mov dh, 13
  661. call Gotoxy
  662. mov esi, offset shipHori
  663. mov edx, esi
  664. call WriteString
  665.  
  666. mov dl, 79
  667. mov dh, 13
  668. call Gotoxy
  669. mov esi, offset shipHori
  670. mov edx, esi
  671. call WriteString
  672.  
  673. mov dl, 80
  674. mov dh, 13
  675. call Gotoxy
  676. mov esi, offset shipHori
  677. mov edx, esi
  678. call WriteString
  679.  
  680. mov dl, 48
  681. mov dh, 3
  682. call Gotoxy
  683. mov esi, offset placingQuote
  684. mov edx, esi
  685. call WriteString
  686.  
  687. mov dl, 70
  688. mov dh, 11
  689. call Gotoxy
  690. mov esi, offset cruiser
  691. mov edx, esi
  692. call WriteString
  693.  
  694. mov dl, 70
  695. mov dh, 9
  696. call Gotoxy
  697. mov esi, offset startingPoint
  698. mov edx, esi
  699. call WriteString
  700.  
  701. mov dl, 15
  702. mov dh, 24
  703. call Gotoxy
  704. mov esi, offset yourGrid
  705. mov edx, esi
  706. call WriteString
  707. call Crlf
  708.  
  709. call CruiserOrientationClick
  710.  
  711. ret
  712. ship3Screen ENDP
  713.  
  714.  
  715. ;--------------------------------------------------------------------------------------------------------
  716. ; PLACE SHIP 4
  717. ; Name: Submarine | Length: 4
  718. ;--------------------------------------------------------------------------------------------------------
  719. ; GOTO SHIP4SCREEN
  720. ship4Screen PROC
  721.  
  722. call screen
  723. call grid
  724.  
  725. ;yourGrid db "Your Grid", 0
  726. ;startingPoint db "Pick your starting point.", 0
  727.  
  728. ;x in dl, y in dh
  729.  
  730. mov dl, 70
  731. mov dh, 13
  732. call Gotoxy
  733. mov esi, offset shipVert
  734. mov edx, esi
  735. call WriteString
  736.  
  737. mov dl, 70
  738. mov dh, 14
  739. call Gotoxy
  740. mov esi, offset shipVert
  741. mov edx, esi
  742. call WriteString
  743.  
  744. mov dl, 70
  745. mov dh, 15
  746. call Gotoxy
  747. mov esi, offset shipVert
  748. mov edx, esi
  749. call WriteString
  750.  
  751. mov dl, 75
  752. mov dh, 13
  753. call Gotoxy
  754. mov esi, offset shipHori
  755. mov edx, esi
  756. call WriteString
  757.  
  758. mov dl, 76
  759. mov dh, 13
  760. call Gotoxy
  761. mov esi, offset shipHori
  762. mov edx, esi
  763. call WriteString
  764.  
  765. mov dl, 77
  766. mov dh, 13
  767. call Gotoxy
  768. mov esi, offset shipHori
  769. mov edx, esi
  770. call WriteString
  771.  
  772. mov dl, 78
  773. mov dh, 13
  774. call Gotoxy
  775. mov esi, offset shipHori
  776. mov edx, esi
  777. call WriteString
  778.  
  779. mov dl, 79
  780. mov dh, 13
  781. call Gotoxy
  782. mov esi, offset shipHori
  783. mov edx, esi
  784. call WriteString
  785.  
  786. mov dl, 80
  787. mov dh, 13
  788. call Gotoxy
  789. mov esi, offset shipHori
  790. mov edx, esi
  791. call WriteString
  792.  
  793. mov dl, 48
  794. mov dh, 3
  795. call Gotoxy
  796. mov esi, offset placingQuote
  797. mov edx, esi
  798. call WriteString
  799.  
  800. mov dl, 70
  801. mov dh, 11
  802. call Gotoxy
  803. mov esi, offset submarine
  804. mov edx, esi
  805. call WriteString
  806.  
  807. mov dl, 70
  808. mov dh, 9
  809. call Gotoxy
  810. mov esi, offset startingPoint
  811. mov edx, esi
  812. call WriteString
  813.  
  814. mov dl, 15
  815. mov dh, 24
  816. call Gotoxy
  817. mov esi, offset yourGrid
  818. mov edx, esi
  819. call WriteString
  820. call Crlf
  821.  
  822. call SubmarineOrientationClick
  823.  
  824. ret
  825. ship4Screen ENDP
  826.  
  827.  
  828. ;--------------------------------------------------------------------------------------------------------
  829. ; PLACE SHIP 5
  830. ; Name: Destroyer | Length: 2
  831. ;--------------------------------------------------------------------------------------------------------
  832. ; GOTO SHIP5SCREEN
  833. ship5Screen PROC
  834.  
  835. Call Clrscr
  836. call screen
  837. call grid
  838.  
  839. ;yourGrid db "Your Grid", 0
  840. ;startingPoint db "Pick your starting point.", 0
  841.  
  842. ;x in dl, y in dh
  843.  
  844. mov dl, 70
  845. mov dh, 13
  846. call Gotoxy
  847. mov esi, offset shipVert
  848. mov edx, esi
  849. call WriteString
  850.  
  851. mov dl, 70
  852. mov dh, 14
  853. call Gotoxy
  854. mov esi, offset shipVert
  855. mov edx, esi
  856. call WriteString
  857.  
  858. mov dl, 75
  859. mov dh, 13
  860. call Gotoxy
  861. mov esi, offset shipHori
  862. mov edx, esi
  863. call WriteString
  864.  
  865. mov dl, 76
  866. mov dh, 13
  867. call Gotoxy
  868. mov esi, offset shipHori
  869. mov edx, esi
  870. call WriteString
  871.  
  872. mov dl, 77
  873. mov dh, 13
  874. call Gotoxy
  875. mov esi, offset shipHori
  876. mov edx, esi
  877. call WriteString
  878.  
  879. mov dl, 78
  880. mov dh, 13
  881. call Gotoxy
  882. mov esi, offset shipHori
  883. mov edx, esi
  884. call WriteString
  885.  
  886. mov dl, 48
  887. mov dh, 3
  888. call Gotoxy
  889. mov esi, offset placingQuote
  890. mov edx, esi
  891. call WriteString
  892.  
  893. mov dl, 70
  894. mov dh, 11
  895. call Gotoxy
  896. mov esi, offset destroyer
  897. mov edx, esi
  898. call WriteString
  899.  
  900. mov dl, 70
  901. mov dh, 9
  902. call Gotoxy
  903. mov esi, offset startingPoint
  904. mov edx, esi
  905. call WriteString
  906.  
  907. mov dl, 15
  908. mov dh, 24
  909. call Gotoxy
  910. mov esi, offset yourGrid
  911. mov edx, esi
  912. call WriteString
  913. call Crlf
  914.  
  915. call DestroyerOrientationClick
  916. ret
  917. ship5Screen ENDP
  918.  
  919.  
  920. ;------------------------------------------------------------------
  921. ; WIN/LOSE SCREENS
  922. ;------------------------------------------------------------------
  923.  
  924. loseScreen PROC
  925.  
  926. mov dl, 30
  927. mov dh, 10
  928. call Gotoxy
  929. mov esi, offset lose1
  930. mov edx, esi
  931. call WriteString
  932.  
  933. mov dl, 30
  934. mov dh, 11
  935. call Gotoxy
  936. mov esi, offset lose2
  937. mov edx, esi
  938. call WriteString
  939.  
  940. mov dl, 30
  941. mov dh, 12
  942. call Gotoxy
  943. mov esi, offset lose3
  944. mov edx, esi
  945. call WriteString
  946.  
  947. mov dl, 30
  948. mov dh, 13
  949. call Gotoxy
  950. mov esi, offset lose4
  951. mov edx, esi
  952. call WriteString
  953.  
  954. mov dl, 30
  955. mov dh, 14
  956. call Gotoxy
  957. mov esi, offset lose5
  958. mov edx, esi
  959. call WriteString
  960.  
  961. mov dl, 30
  962. mov dh, 15
  963. call Gotoxy
  964. mov esi, offset lose6
  965. mov edx, esi
  966. call WriteString
  967.  
  968. call exitButton
  969.  
  970. ret
  971. loseScreen ENDP
  972.  
  973. winScreen PROC
  974.  
  975. mov dl, 33
  976. mov dh, 10
  977. call Gotoxy
  978. mov esi, offset win1
  979. mov edx, esi
  980. call WriteString
  981.  
  982. mov dl, 33
  983. mov dh, 11
  984. call Gotoxy
  985. mov esi, offset win2
  986. mov edx, esi
  987. call WriteString
  988.  
  989. mov dl, 33
  990. mov dh, 12
  991. call Gotoxy
  992. mov esi, offset win3
  993. mov edx, esi
  994. call WriteString
  995.  
  996. mov dl, 33
  997. mov dh, 13
  998. call Gotoxy
  999. mov esi, offset win4
  1000. mov edx, esi
  1001. call WriteString
  1002.  
  1003. mov dl, 33
  1004. mov dh, 14
  1005. call Gotoxy
  1006. mov esi, offset win5
  1007. mov edx, esi
  1008. call WriteString
  1009.  
  1010. mov dl, 33
  1011. mov dh, 15
  1012. call Gotoxy
  1013. mov esi, offset win6
  1014. mov edx, esi
  1015. call WriteString
  1016.  
  1017. call exitButton
  1018.  
  1019. ret
  1020. winScreen ENDP
  1021.  
  1022. exitButton PROC
  1023.  
  1024. mov dl, 50
  1025. mov dh, 23
  1026. call Gotoxy
  1027. mov esi, offset buttonT
  1028. mov edx, esi
  1029. call WriteString
  1030.  
  1031. mov dl, 50
  1032. mov dh, 24
  1033. call Gotoxy
  1034. mov esi, offset buttonM
  1035. mov edx, esi
  1036. call WriteString
  1037.  
  1038. mov dl, 50
  1039. mov dh, 25
  1040. call Gotoxy
  1041. mov esi, offset buttonB
  1042. mov edx, esi
  1043. call WriteString
  1044.  
  1045. mov dl, 52
  1046. mov dh, 24
  1047. call Gotoxy
  1048. mov esi, offset exit
  1049. mov edx, esi
  1050. call WriteString
  1051. call Crlf
  1052.  
  1053. ret
  1054.  
  1055. exitButton ENDP
  1056.  
  1057. ;--------------------------------------------------------------------------------------------------------
  1058. ; TITLE SCREEN
  1059. ;--------------------------------------------------------------------------------------------------------
  1060. ; GOTO TITLESCREEN
  1061. titleScreen PROC
  1062.  
  1063. ; pushad
  1064. ; x and y are in dh and dl respectively
  1065.  
  1066. call letterB
  1067. call letterTfirst
  1068. call letterA
  1069. call letterTsecond
  1070. call letterE
  1071. call letterL
  1072. call letterS
  1073. call letterI
  1074. call letterH
  1075. call letterP
  1076. call letterEx1
  1077. call letterEx2
  1078. call letterEx3
  1079. call letterEx4
  1080. call letterEx5
  1081. call Crlf
  1082. call Crlf
  1083. call Crlf
  1084. call Crlf
  1085.  
  1086. mov dl, 50
  1087. mov dh, 24
  1088. call Gotoxy
  1089. mov esi, offset buttonT
  1090. mov edx, esi
  1091. call WriteString
  1092. call Crlf
  1093.  
  1094. mov dl, 50
  1095. mov dh, 25
  1096. call Gotoxy
  1097. mov esi, offset buttonM
  1098. mov edx, esi
  1099. call WriteString
  1100. call Crlf
  1101.  
  1102. mov dl, 50
  1103. mov dh, 26
  1104. call Gotoxy
  1105. mov esi, offset buttonB
  1106. mov edx, esi
  1107. call WriteString
  1108. call Crlf
  1109.  
  1110. mov dl, 56
  1111. mov dh, 25
  1112. call Gotoxy
  1113. mov esi, offset start
  1114. mov edx, esi
  1115. call WriteString
  1116. call Crlf
  1117.  
  1118. mov dl, 0
  1119. mov dh, 29
  1120. call Gotoxy
  1121. mov esi, offset createdBy
  1122. mov edx, esi
  1123. call WriteString
  1124.  
  1125. call askForName
  1126.  
  1127. ret
  1128. titleScreen ENDP
  1129.  
  1130. ;--------------------------------------------------------------------------------------------------------
  1131. ; RULE SCREEN
  1132. ;--------------------------------------------------------------------------------------------------------
  1133. ; GOTO RULESCREEN
  1134. ruleScreen PROC
  1135.  
  1136. ;pushad
  1137. ;call Clrscr
  1138.  
  1139. mov esi, offset hellomessage
  1140. mov edx, esi
  1141. call WriteString
  1142. call Crlf
  1143.  
  1144. call Crlf
  1145.  
  1146. mov esi, offset setup
  1147. mov edx, esi
  1148. call WriteString
  1149. call Crlf
  1150.  
  1151. mov esi, offset setupB
  1152. mov edx, esi
  1153. call WriteString
  1154. call Crlf
  1155.  
  1156. mov esi, offset objective
  1157. mov edx, esi
  1158. call WriteString
  1159. call Crlf
  1160.  
  1161. ; x and y are in dh and dl respectively
  1162. call Crlf
  1163.  
  1164. mov esi, offset rule1
  1165. mov edx, esi
  1166. call WriteString
  1167. call Crlf
  1168.  
  1169. mov esi, offset rule2
  1170. mov edx, esi
  1171. call WriteString
  1172. call Crlf
  1173.  
  1174. mov esi, offset rule3
  1175. mov edx, esi
  1176. call WriteString
  1177. call Crlf
  1178.  
  1179. mov esi, offset rule4
  1180. mov edx, esi
  1181. call WriteString
  1182. call Crlf
  1183.  
  1184. mov dl, 80
  1185. mov dh, 25
  1186. call Gotoxy
  1187. mov esi, offset button
  1188. mov edx, esi
  1189. call WriteString
  1190. call Crlf
  1191.  
  1192. mov dl, 78
  1193. mov dh, 23
  1194.  
  1195. mov ecx, 15
  1196. L1:
  1197.  
  1198. mov ah, dh
  1199. mov al, dl
  1200. call Gotoxy
  1201.  
  1202. mov esi, offset underScore
  1203. mov edx, esi
  1204. call WriteString
  1205.  
  1206. mov dh, ah
  1207. mov dl, al
  1208. inc dl
  1209.  
  1210. Loop L1
  1211.  
  1212. mov dl, 78
  1213. mov dh, 26
  1214.  
  1215. mov ecx, 15
  1216. L2:
  1217.  
  1218. mov ah, dh
  1219. mov al, dl
  1220. call Gotoxy
  1221.  
  1222. mov esi, offset underScore
  1223. mov edx, esi
  1224. call WriteString
  1225.  
  1226. mov dh, ah
  1227. mov dl, al
  1228. inc dl
  1229.  
  1230. Loop L2
  1231.  
  1232. mov dl, 77
  1233. mov dh, 24
  1234.  
  1235. mov ecx, 3
  1236. L3:
  1237.  
  1238. mov ah, dh
  1239. mov al, dl
  1240. call Gotoxy
  1241.  
  1242. mov esi, offset line
  1243. mov edx, esi
  1244. call WriteString
  1245.  
  1246. mov dh, ah
  1247. mov dl, al
  1248. inc dh
  1249.  
  1250. Loop L3
  1251.  
  1252. mov dl, 93
  1253. mov dh, 24
  1254.  
  1255. mov ecx, 3
  1256. L4:
  1257.  
  1258. mov ah, dh
  1259. mov al, dl
  1260. call Gotoxy
  1261.  
  1262. mov esi, offset line
  1263. mov edx, esi
  1264. call WriteString
  1265.  
  1266. mov dh, ah
  1267. mov dl, al
  1268. inc dh
  1269.  
  1270. Loop L4
  1271.  
  1272. ret
  1273. ruleScreen ENDP
  1274.  
  1275. ;--------------------------------------------------------------------------------------------------------
  1276. ; DRAW THE BOARD WITH PLAYER 2'S HITS ON PLAYER 1
  1277. ;--------------------------------------------------------------------------------------------------------
  1278. ; GOTO DISPLAYPLAYER1BOARD
  1279. displayPlayer1Board PROC
  1280.  
  1281. mov edi, offset player1board
  1282. mov eax, 0
  1283.  
  1284. mov dl, 15
  1285. mov dh, 10
  1286. call Gotoxy
  1287. ; ROW 1 OF THE BOARD CONTAINS PIPES
  1288. mov esi, offset board01
  1289. mov edx, esi
  1290. call WriteString
  1291. call Crlf
  1292.  
  1293. mov dl, 15
  1294. mov dh, 11
  1295. call Gotoxy
  1296. ; ROW 2 OF THE BOARD CONTAINS THE NUMBERS
  1297. mov esi, offset board02
  1298. mov edx, esi
  1299. call WriteString
  1300. call Crlf
  1301.  
  1302. mov dl, 15
  1303. mov dh, 12
  1304. call Gotoxy
  1305. ; ROW 3 OF THE BOARD CONTAINS PIPES
  1306. mov esi, offset board03
  1307. mov edx, esi
  1308. call WriteString
  1309. call Crlf
  1310.  
  1311. mov dl, 15
  1312. mov dh, 13
  1313. call Gotoxy
  1314. ; ROW 4 OF THE BOARD CONTAINS THE 1ST ROW OF THE GRID
  1315. mov esi, offset board04
  1316. add esi, 2
  1317. mov ecx, 10
  1318. Bored04:
  1319. add esi, 2
  1320. mov ah, [edi]
  1321. mov [esi], ah
  1322. inc edi
  1323. loop Bored04
  1324. mov esi, offset board04
  1325. mov edx, esi
  1326. call WriteString
  1327. call Crlf
  1328.  
  1329. mov dl, 15
  1330. mov dh, 14
  1331. call Gotoxy
  1332. ; ROW 5 OF THE BOARD CONTAINS THE 2ND ROW OF THE GRID
  1333. mov esi, offset board05
  1334. add esi, 2
  1335. mov ecx, 10
  1336. Bored05:
  1337. add esi, 2
  1338. mov ah, [edi]
  1339. mov [esi], ah
  1340. inc edi
  1341. loop Bored05
  1342. mov esi, offset board05
  1343. mov edx, esi
  1344. call WriteString
  1345. call Crlf
  1346.  
  1347. mov dl, 15
  1348. mov dh, 15
  1349. call Gotoxy
  1350. ; ROW 6 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
  1351. mov esi, offset board06
  1352. add esi, 2
  1353. mov ecx, 10
  1354. Bored06:
  1355. add esi, 2
  1356. mov ah, [edi]
  1357. mov [esi], ah
  1358. inc edi
  1359. loop Bored06
  1360. mov esi, offset board06
  1361. mov edx, esi
  1362. call WriteString
  1363. call Crlf
  1364.  
  1365. mov dl, 15
  1366. mov dh, 16
  1367. call Gotoxy
  1368. ; ROW 7 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
  1369. mov esi, offset board07
  1370. add esi, 2
  1371. mov ecx, 10
  1372. Bored07:
  1373. add esi, 2
  1374. mov ah, [edi]
  1375. mov [esi], ah
  1376. inc edi
  1377. loop Bored07
  1378. mov esi, offset board07
  1379. mov edx, esi
  1380. call WriteString
  1381. call Crlf
  1382.  
  1383. mov dl, 15
  1384. mov dh, 17
  1385. call Gotoxy
  1386. ; ROW 8 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
  1387. mov esi, offset board08
  1388. add esi, 2
  1389. mov ecx, 10
  1390. Bored08:
  1391. add esi, 2
  1392. mov ah, [edi]
  1393. mov [esi], ah
  1394. inc edi
  1395. loop Bored08
  1396. mov esi, offset board08
  1397. mov edx, esi
  1398. call WriteString
  1399. call Crlf
  1400.  
  1401. mov dl, 15
  1402. mov dh, 18
  1403. call Gotoxy
  1404. ; ROW 9 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
  1405. mov esi, offset board09
  1406. add esi, 2
  1407. mov ecx, 10
  1408. Bored09:
  1409. add esi, 2
  1410. mov ah, [edi]
  1411. mov [esi], ah
  1412. inc edi
  1413. loop Bored09
  1414. mov esi, offset board09
  1415. mov edx, esi
  1416. call WriteString
  1417. call Crlf
  1418.  
  1419. mov dl, 15
  1420. mov dh, 19
  1421. call Gotoxy
  1422. ; ROW 10 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
  1423. mov esi, offset board10
  1424. add esi, 2
  1425. mov ecx, 10
  1426. Bored10:
  1427. add esi, 2
  1428. mov ah, [edi]
  1429. mov [esi], ah
  1430. inc edi
  1431. loop Bored10
  1432. mov esi, offset board10
  1433. mov edx, esi
  1434. call WriteString
  1435. call Crlf
  1436.  
  1437. mov dl, 15
  1438. mov dh, 20
  1439. call Gotoxy
  1440. ; ROW 11 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
  1441. mov esi, offset board11
  1442. add esi, 2
  1443. mov ecx, 10
  1444. Bored11:
  1445. add esi, 2
  1446. mov ah, [edi]
  1447. mov [esi], ah
  1448. inc edi
  1449. loop Bored11
  1450. mov esi, offset board11
  1451. mov edx, esi
  1452. call WriteString
  1453. call Crlf
  1454.  
  1455. mov dl, 15
  1456. mov dh, 21
  1457. call Gotoxy
  1458. ; ROW 12 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
  1459. mov esi, offset board12
  1460. add esi, 2
  1461. mov ecx, 10
  1462. Bored12:
  1463. add esi, 2
  1464. mov ah, [edi]
  1465. mov [esi], ah
  1466. inc edi
  1467. loop Bored12
  1468. mov esi, offset board12
  1469. mov edx, esi
  1470. call WriteString
  1471. call Crlf
  1472.  
  1473. mov dl, 15
  1474. mov dh, 22
  1475. call Gotoxy
  1476. ; ROW 13 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
  1477. mov esi, offset board13
  1478. add esi, 2
  1479. mov ecx, 10
  1480. Bored13:
  1481. add esi, 2
  1482. mov ah, [edi]
  1483. mov [esi], ah
  1484. inc edi
  1485. loop Bored13
  1486. mov esi, offset board13
  1487. mov edx, esi
  1488. call WriteString
  1489. call Crlf
  1490.  
  1491. mov dl, 15
  1492. mov dh, 23
  1493. call Gotoxy
  1494. ; ROW 14 OF THE BOARD CONTAINS PIPES
  1495. mov esi, offset board14
  1496. mov edx, esi
  1497. call WriteString
  1498. call Crlf
  1499.  
  1500. ret
  1501. displayPlayer1Board ENDP
  1502.  
  1503.  
  1504. ;--------------------------------------------------------------------------------------------------------
  1505. ; DRAW THE BOARD WITH PLAYER 2'S HITS ON PLAYER 1
  1506. ;--------------------------------------------------------------------------------------------------------
  1507. ; GOTO DISPLAYPLAYER2VISIBLEBOARD
  1508. displayPlayer2VisibleBoard PROC
  1509.  
  1510. mov edi, offset player2visibleboard
  1511. mov eax, 0
  1512.  
  1513. mov dl, 75
  1514. mov dh, 10
  1515. call Gotoxy
  1516. ; ROW 1 OF THE BOARD CONTAINS PIPES
  1517. mov esi, offset board01
  1518. mov edx, esi
  1519. call WriteString
  1520. call Crlf
  1521.  
  1522. mov dl, 75
  1523. mov dh, 11
  1524. call Gotoxy
  1525. ; ROW 2 OF THE BOARD CONTAINS THE NUMBERS
  1526. mov esi, offset board02
  1527. mov edx, esi
  1528. call WriteString
  1529. call Crlf
  1530.  
  1531. mov dl, 75
  1532. mov dh, 12
  1533. call Gotoxy
  1534. ; ROW 3 OF THE BOARD CONTAINS PIPES
  1535. mov esi, offset board03
  1536. mov edx, esi
  1537. call WriteString
  1538. call Crlf
  1539.  
  1540. mov dl, 75
  1541. mov dh, 13
  1542. call Gotoxy
  1543. ; ROW 4 OF THE BOARD CONTAINS THE 1ST ROW OF THE GRID
  1544. mov esi, offset board04
  1545. add esi, 2
  1546. mov ecx, 10
  1547. Bored04:
  1548. add esi, 2
  1549. mov ah, [edi]
  1550. mov [esi], ah
  1551. inc edi
  1552. loop Bored04
  1553. mov esi, offset board04
  1554. mov edx, esi
  1555. call WriteString
  1556. call Crlf
  1557.  
  1558. mov dl, 75
  1559. mov dh, 14
  1560. call Gotoxy
  1561. ; ROW 5 OF THE BOARD CONTAINS THE 2ND ROW OF THE GRID
  1562. mov esi, offset board05
  1563. add esi, 2
  1564. mov ecx, 10
  1565. Bored05:
  1566. add esi, 2
  1567. mov ah, [edi]
  1568. mov [esi], ah
  1569. inc edi
  1570. loop Bored05
  1571. mov esi, offset board05
  1572. mov edx, esi
  1573. call WriteString
  1574. call Crlf
  1575.  
  1576. mov dl, 75
  1577. mov dh, 15
  1578. call Gotoxy
  1579. ; ROW 6 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
  1580. mov esi, offset board06
  1581. add esi, 2
  1582. mov ecx, 10
  1583. Bored06:
  1584. add esi, 2
  1585. mov ah, [edi]
  1586. mov [esi], ah
  1587. inc edi
  1588. loop Bored06
  1589. mov esi, offset board06
  1590. mov edx, esi
  1591. call WriteString
  1592. call Crlf
  1593.  
  1594. mov dl, 75
  1595. mov dh, 16
  1596. call Gotoxy
  1597. ; ROW 7 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
  1598. mov esi, offset board07
  1599. add esi, 2
  1600. mov ecx, 10
  1601. Bored07:
  1602. add esi, 2
  1603. mov ah, [edi]
  1604. mov [esi], ah
  1605. inc edi
  1606. loop Bored07
  1607. mov esi, offset board07
  1608. mov edx, esi
  1609. call WriteString
  1610. call Crlf
  1611.  
  1612. mov dl, 75
  1613. mov dh, 17
  1614. call Gotoxy
  1615. ; ROW 8 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
  1616. mov esi, offset board08
  1617. add esi, 2
  1618. mov ecx, 10
  1619. Bored08:
  1620. add esi, 2
  1621. mov ah, [edi]
  1622. mov [esi], ah
  1623. inc edi
  1624. loop Bored08
  1625. mov esi, offset board08
  1626. mov edx, esi
  1627. call WriteString
  1628. call Crlf
  1629.  
  1630. mov dl, 75
  1631. mov dh, 18
  1632. call Gotoxy
  1633. ; ROW 9 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
  1634. mov esi, offset board09
  1635. add esi, 2
  1636. mov ecx, 10
  1637. Bored09:
  1638. add esi, 2
  1639. mov ah, [edi]
  1640. mov [esi], ah
  1641. inc edi
  1642. loop Bored09
  1643. mov esi, offset board09
  1644. mov edx, esi
  1645. call WriteString
  1646. call Crlf
  1647.  
  1648. mov dl, 75
  1649. mov dh, 19
  1650. call Gotoxy
  1651. ; ROW 10 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
  1652. mov esi, offset board10
  1653. add esi, 2
  1654. mov ecx, 10
  1655. Bored10:
  1656. add esi, 2
  1657. mov ah, [edi]
  1658. mov [esi], ah
  1659. inc edi
  1660. loop Bored10
  1661. mov esi, offset board10
  1662. mov edx, esi
  1663. call WriteString
  1664. call Crlf
  1665.  
  1666. mov dl, 75
  1667. mov dh, 20
  1668. call Gotoxy
  1669. ; ROW 11 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
  1670. mov esi, offset board11
  1671. add esi, 2
  1672. mov ecx, 10
  1673. Bored11:
  1674. add esi, 2
  1675. mov ah, [edi]
  1676. mov [esi], ah
  1677. inc edi
  1678. loop Bored11
  1679. mov esi, offset board11
  1680. mov edx, esi
  1681. call WriteString
  1682. call Crlf
  1683.  
  1684. mov dl, 75
  1685. mov dh, 21
  1686. call Gotoxy
  1687. ; ROW 12 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
  1688. mov esi, offset board12
  1689. add esi, 2
  1690. mov ecx, 10
  1691. Bored12:
  1692. add esi, 2
  1693. mov ah, [edi]
  1694. mov [esi], ah
  1695. inc edi
  1696. loop Bored12
  1697. mov esi, offset board12
  1698. mov edx, esi
  1699. call WriteString
  1700. call Crlf
  1701.  
  1702. mov dl, 75
  1703. mov dh, 22
  1704. call Gotoxy
  1705. ; ROW 13 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
  1706. mov esi, offset board13
  1707. add esi, 2
  1708. mov ecx, 10
  1709. Bored13:
  1710. add esi, 2
  1711. mov ah, [edi]
  1712. mov [esi], ah
  1713. inc edi
  1714. loop Bored13
  1715. mov esi, offset board13
  1716. mov edx, esi
  1717. call WriteString
  1718. call Crlf
  1719.  
  1720. mov dl, 75
  1721. mov dh, 23
  1722. call Gotoxy
  1723. ; ROW 14 OF THE BOARD CONTAINS PIPES
  1724. mov esi, offset board14
  1725. mov edx, esi
  1726. call WriteString
  1727. call Crlf
  1728.  
  1729. ret
  1730. displayPlayer2VisibleBoard ENDP
  1731.  
  1732.  
  1733. ;--------------------------------------------------------------------------------------------------------
  1734. ; DRAW THE BOARD WITH PLAYER 2'S SHIPS
  1735. ;--------------------------------------------------------------------------------------------------------
  1736. ; GOTO DISPLAYPLAYER2HIDDENBOARD
  1737. displayPlayer2HiddenBoard PROC
  1738.  
  1739. mov edi, offset player2hiddenboard
  1740. mov eax, 0
  1741.  
  1742. mov dl, 75
  1743. mov dh, 10
  1744. call Gotoxy
  1745. ; ROW 1 OF THE BOARD CONTAINS PIPES
  1746. mov esi, offset board01
  1747. mov edx, esi
  1748. call WriteString
  1749. call Crlf
  1750.  
  1751. mov dl, 75
  1752. mov dh, 11
  1753. call Gotoxy
  1754. ; ROW 2 OF THE BOARD CONTAINS THE NUMBERS
  1755. mov esi, offset board02
  1756. mov edx, esi
  1757. call WriteString
  1758. call Crlf
  1759.  
  1760. mov dl, 75
  1761. mov dh, 12
  1762. call Gotoxy
  1763. ; ROW 3 OF THE BOARD CONTAINS PIPES
  1764. mov esi, offset board03
  1765. mov edx, esi
  1766. call WriteString
  1767. call Crlf
  1768.  
  1769. mov dl, 75
  1770. mov dh, 13
  1771. call Gotoxy
  1772. ; ROW 4 OF THE BOARD CONTAINS THE 1ST ROW OF THE GRID
  1773. mov esi, offset board04
  1774. add esi, 2
  1775. mov ecx, 10
  1776. Bored04:
  1777. add esi, 2
  1778. mov ah, [edi]
  1779. mov [esi], ah
  1780. inc edi
  1781. loop Bored04
  1782. mov esi, offset board04
  1783. mov edx, esi
  1784. call WriteString
  1785. call Crlf
  1786.  
  1787. mov dl, 75
  1788. mov dh, 14
  1789. call Gotoxy
  1790. ; ROW 5 OF THE BOARD CONTAINS THE 2ND ROW OF THE GRID
  1791. mov esi, offset board05
  1792. add esi, 2
  1793. mov ecx, 10
  1794. Bored05:
  1795. add esi, 2
  1796. mov ah, [edi]
  1797. mov [esi], ah
  1798. inc edi
  1799. loop Bored05
  1800. mov esi, offset board05
  1801. mov edx, esi
  1802. call WriteString
  1803. call Crlf
  1804.  
  1805. mov dl, 75
  1806. mov dh, 15
  1807. call Gotoxy
  1808. ; ROW 6 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
  1809. mov esi, offset board06
  1810. add esi, 2
  1811. mov ecx, 10
  1812. Bored06:
  1813. add esi, 2
  1814. mov ah, [edi]
  1815. mov [esi], ah
  1816. inc edi
  1817. loop Bored06
  1818. mov esi, offset board06
  1819. mov edx, esi
  1820. call WriteString
  1821. call Crlf
  1822.  
  1823. mov dl, 75
  1824. mov dh, 16
  1825. call Gotoxy
  1826. ; ROW 7 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
  1827. mov esi, offset board07
  1828. add esi, 2
  1829. mov ecx, 10
  1830. Bored07:
  1831. add esi, 2
  1832. mov ah, [edi]
  1833. mov [esi], ah
  1834. inc edi
  1835. loop Bored07
  1836. mov esi, offset board07
  1837. mov edx, esi
  1838. call WriteString
  1839. call Crlf
  1840.  
  1841. mov dl, 75
  1842. mov dh, 17
  1843. call Gotoxy
  1844. ; ROW 8 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
  1845. mov esi, offset board08
  1846. add esi, 2
  1847. mov ecx, 10
  1848. Bored08:
  1849. add esi, 2
  1850. mov ah, [edi]
  1851. mov [esi], ah
  1852. inc edi
  1853. loop Bored08
  1854. mov esi, offset board08
  1855. mov edx, esi
  1856. call WriteString
  1857. call Crlf
  1858.  
  1859. mov dl, 75
  1860. mov dh, 18
  1861. call Gotoxy
  1862. ; ROW 9 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
  1863. mov esi, offset board09
  1864. add esi, 2
  1865. mov ecx, 10
  1866. Bored09:
  1867. add esi, 2
  1868. mov ah, [edi]
  1869. mov [esi], ah
  1870. inc edi
  1871. loop Bored09
  1872. mov esi, offset board09
  1873. mov edx, esi
  1874. call WriteString
  1875. call Crlf
  1876.  
  1877. mov dl, 75
  1878. mov dh, 19
  1879. call Gotoxy
  1880. ; ROW 10 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
  1881. mov esi, offset board10
  1882. add esi, 2
  1883. mov ecx, 10
  1884. Bored10:
  1885. add esi, 2
  1886. mov ah, [edi]
  1887. mov [esi], ah
  1888. inc edi
  1889. loop Bored10
  1890. mov esi, offset board10
  1891. mov edx, esi
  1892. call WriteString
  1893. call Crlf
  1894.  
  1895. mov dl, 75
  1896. mov dh, 20
  1897. call Gotoxy
  1898. ; ROW 11 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
  1899. mov esi, offset board11
  1900. add esi, 2
  1901. mov ecx, 10
  1902. Bored11:
  1903. add esi, 2
  1904. mov ah, [edi]
  1905. mov [esi], ah
  1906. inc edi
  1907. loop Bored11
  1908. mov esi, offset board11
  1909. mov edx, esi
  1910. call WriteString
  1911. call Crlf
  1912.  
  1913. mov dl, 75
  1914. mov dh, 21
  1915. call Gotoxy
  1916. ; ROW 12 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
  1917. mov esi, offset board12
  1918. add esi, 2
  1919. mov ecx, 10
  1920. Bored12:
  1921. add esi, 2
  1922. mov ah, [edi]
  1923. mov [esi], ah
  1924. inc edi
  1925. loop Bored12
  1926. mov esi, offset board12
  1927. mov edx, esi
  1928. call WriteString
  1929. call Crlf
  1930.  
  1931. mov dl, 75
  1932. mov dh, 22
  1933. call Gotoxy
  1934. ; ROW 13 OF THE BOARD CONTAINS THE 3RD ROW OF THE GRID
  1935. mov esi, offset board13
  1936. add esi, 2
  1937. mov ecx, 10
  1938. Bored13:
  1939. add esi, 2
  1940. mov ah, [edi]
  1941. mov [esi], ah
  1942. inc edi
  1943. loop Bored13
  1944. mov esi, offset board13
  1945. mov edx, esi
  1946. call WriteString
  1947. call Crlf
  1948.  
  1949. mov dl, 75
  1950. mov dh, 23
  1951. call Gotoxy
  1952. ; ROW 14 OF THE BOARD CONTAINS PIPES
  1953. mov esi, offset board14
  1954. mov edx, esi
  1955. call WriteString
  1956. call Crlf
  1957.  
  1958. ret
  1959. displayPlayer2HiddenBoard ENDP
  1960.  
  1961.  
  1962. ;--------------------------------------------------------------------------------------------------------
  1963. ; GRID
  1964. ; - Displays Player 1's grid
  1965. ;--------------------------------------------------------------------------------------------------------
  1966. ; GOTO GRID
  1967. grid PROC
  1968.  
  1969. call displayPlayer1Board
  1970. ret
  1971.  
  1972. mov dl, 15
  1973. mov dh, 10
  1974. call Gotoxy
  1975. mov esi, offset board01
  1976. mov edx, esi
  1977. call WriteString
  1978. call Crlf
  1979.  
  1980. mov dl, 15
  1981. mov dh, 11
  1982. call Gotoxy
  1983. mov esi, offset board02
  1984. mov edx, esi
  1985. call WriteString
  1986. call Crlf
  1987.  
  1988. mov dl, 15
  1989. mov dh, 12
  1990. call Gotoxy
  1991. mov esi, offset board03
  1992. mov edx, esi
  1993. call WriteString
  1994. call Crlf
  1995.  
  1996. mov dl, 15
  1997. mov dh, 13
  1998. call Gotoxy
  1999. mov esi, offset board04
  2000. mov edx, esi
  2001. call WriteString
  2002. call Crlf
  2003.  
  2004. mov dl, 15
  2005. mov dh, 14
  2006. call Gotoxy
  2007. mov esi, offset board05
  2008. mov edx, esi
  2009. call WriteString
  2010. call Crlf
  2011.  
  2012. mov dl, 15
  2013. mov dh, 15
  2014. call Gotoxy
  2015. mov esi, offset board06
  2016. mov edx, esi
  2017. call WriteString
  2018. call Crlf
  2019.  
  2020. mov dl, 15
  2021. mov dh, 16
  2022. call Gotoxy
  2023. mov esi, offset board07
  2024. mov edx, esi
  2025. call WriteString
  2026. call Crlf
  2027.  
  2028. mov dl, 15
  2029. mov dh, 17
  2030. call Gotoxy
  2031. mov esi, offset board08
  2032. mov edx, esi
  2033. call WriteString
  2034. call Crlf
  2035.  
  2036. mov dl, 15
  2037. mov dh, 18
  2038. call Gotoxy
  2039. mov esi, offset board09
  2040. mov edx, esi
  2041. call WriteString
  2042. call Crlf
  2043.  
  2044. mov dl, 15
  2045. mov dh, 19
  2046. call Gotoxy
  2047. mov esi, offset board10
  2048. mov edx, esi
  2049. call WriteString
  2050. call Crlf
  2051.  
  2052. mov dl, 15
  2053. mov dh, 20
  2054. call Gotoxy
  2055. mov esi, offset board11
  2056. mov edx, esi
  2057. call WriteString
  2058. call Crlf
  2059.  
  2060. mov dl, 15
  2061. mov dh, 21
  2062. call Gotoxy
  2063. mov esi, offset board12
  2064. mov edx, esi
  2065. call WriteString
  2066. call Crlf
  2067.  
  2068. mov dl, 15
  2069. mov dh, 22
  2070. call Gotoxy
  2071. mov esi, offset board13
  2072. mov edx, esi
  2073. call WriteString
  2074. call Crlf
  2075.  
  2076. mov dl, 15
  2077. mov dh, 23
  2078. call Gotoxy
  2079. mov esi, offset board14
  2080. mov edx, esi
  2081. call WriteString
  2082. call Crlf
  2083.  
  2084. ret
  2085. grid ENDP
  2086.  
  2087.  
  2088. ;--------------------------------------------------------------------------------------------------------
  2089. ; GRID ENEMY
  2090. ; - Displays Player 2's grid
  2091. ;--------------------------------------------------------------------------------------------------------
  2092. ; GOTO GRIDENEMY
  2093. gridEnemy PROC
  2094.  
  2095. call displayPlayer2VisibleBoard
  2096.  
  2097. mov dl, 75
  2098. mov dh, 10
  2099. call Gotoxy
  2100. mov esi, offset board01
  2101. mov edx, esi
  2102. call WriteString
  2103. call Crlf
  2104.  
  2105. mov dl, 75
  2106. mov dh, 11
  2107. call Gotoxy
  2108. mov esi, offset board02
  2109. mov edx, esi
  2110. call WriteString
  2111. call Crlf
  2112.  
  2113. mov dl, 75
  2114. mov dh, 12
  2115. call Gotoxy
  2116. mov esi, offset board03
  2117. mov edx, esi
  2118. call WriteString
  2119. call Crlf
  2120.  
  2121. mov dl, 75
  2122. mov dh, 13
  2123. call Gotoxy
  2124. mov esi, offset board04
  2125. mov edx, esi
  2126. call WriteString
  2127. call Crlf
  2128.  
  2129. mov dl, 75
  2130. mov dh, 14
  2131. call Gotoxy
  2132. mov esi, offset board05
  2133. mov edx, esi
  2134. call WriteString
  2135. call Crlf
  2136.  
  2137. mov dl, 75
  2138. mov dh, 15
  2139. call Gotoxy
  2140. mov esi, offset board06
  2141. mov edx, esi
  2142. call WriteString
  2143. call Crlf
  2144.  
  2145. mov dl, 75
  2146. mov dh, 16
  2147. call Gotoxy
  2148. mov esi, offset board07
  2149. mov edx, esi
  2150. call WriteString
  2151. call Crlf
  2152.  
  2153. mov dl, 75
  2154. mov dh, 17
  2155. call Gotoxy
  2156. mov esi, offset board08
  2157. mov edx, esi
  2158. call WriteString
  2159. call Crlf
  2160.  
  2161. mov dl, 75
  2162. mov dh, 18
  2163. call Gotoxy
  2164. mov esi, offset board09
  2165. mov edx, esi
  2166. call WriteString
  2167. call Crlf
  2168.  
  2169. mov dl, 75
  2170. mov dh, 19
  2171. call Gotoxy
  2172. mov esi, offset board10
  2173. mov edx, esi
  2174. call WriteString
  2175. call Crlf
  2176.  
  2177. mov dl, 75
  2178. mov dh, 20
  2179. call Gotoxy
  2180. mov esi, offset board11
  2181. mov edx, esi
  2182. call WriteString
  2183. call Crlf
  2184.  
  2185. mov dl, 75
  2186. mov dh, 21
  2187. call Gotoxy
  2188. mov esi, offset board12
  2189. mov edx, esi
  2190. call WriteString
  2191. call Crlf
  2192.  
  2193. mov dl, 75
  2194. mov dh, 22
  2195. call Gotoxy
  2196. mov esi, offset board13
  2197. mov edx, esi
  2198. call WriteString
  2199. call Crlf
  2200.  
  2201. mov dl, 75
  2202. mov dh, 23
  2203. call Gotoxy
  2204. mov esi, offset board14
  2205. mov edx, esi
  2206. call WriteString
  2207. call Crlf
  2208.  
  2209. ret
  2210. gridEnemy ENDP
  2211.  
  2212. ;--------------------------------------------------------------------------------------------------------
  2213. ; PRINTS OUT A GIANT B
  2214. ;--------------------------------------------------------------------------------------------------------
  2215. ; GOTO LETTERB
  2216. letterB PROC
  2217.  
  2218. mov ecx, lengthof XvalueB
  2219. mov esi, offset XvalueB
  2220. mov edi, offset YvalueB
  2221. mov eax, 219
  2222.  
  2223. LevelPrint:
  2224. push eax
  2225. mov eax, 50
  2226. call Delay
  2227. pop eax
  2228. mov dl, [esi]
  2229. mov dh, [edi]
  2230. call Gotoxy
  2231. call WriteChar
  2232. add esi, type XvalueB
  2233. add edi, type YvalueB
  2234. Loop LevelPrint
  2235.  
  2236. ret
  2237. letterB ENDP
  2238.  
  2239.  
  2240. ;--------------------------------------------------------------------------------------------------------
  2241. ; PRINTS OUT A GIANT A
  2242. ;--------------------------------------------------------------------------------------------------------
  2243. ; GOTO LETTERA
  2244. letterA PROC
  2245.  
  2246. mov ecx, lengthof XvalueA
  2247. mov esi, offset XvalueA
  2248. mov edi, offset YvalueA
  2249. mov eax, 219
  2250.  
  2251. LevelPrint:
  2252. push eax
  2253. mov eax, 50
  2254. call Delay
  2255. pop eax
  2256. mov dl, [esi]
  2257. mov dh, [edi]
  2258. call Gotoxy
  2259. call WriteChar
  2260. add esi, type XvalueA
  2261. add edi, type YvalueA
  2262. Loop LevelPrint
  2263. ret
  2264. letterA ENDP
  2265.  
  2266.  
  2267. ;--------------------------------------------------------------------------------------------------------
  2268. ; PRINTS OUT A GIANT T
  2269. ;--------------------------------------------------------------------------------------------------------
  2270. ; GOTO LETTERTFIRST
  2271. letterTfirst PROC
  2272.  
  2273. mov ecx, lengthof XvalueTfirst
  2274. mov esi, offset XvalueTfirst
  2275. mov edi, offset YvalueTfirst
  2276. mov eax, 219
  2277.  
  2278. LevelPrint:
  2279. push eax
  2280. mov eax, 50
  2281. call Delay
  2282. pop eax
  2283. mov dl, [esi]
  2284. mov dh, [edi]
  2285. call Gotoxy
  2286. call WriteChar
  2287. add esi, type XvalueTfirst
  2288. add edi, type YvalueTfirst
  2289. Loop LevelPrint
  2290.  
  2291. ret
  2292. letterTfirst ENDP
  2293.  
  2294.  
  2295. ;--------------------------------------------------------------------------------------------------------
  2296. ; PRINTS OUT A GIANT T
  2297. ;--------------------------------------------------------------------------------------------------------
  2298. ; GOTO LETTERTSECOND
  2299. letterTsecond PROC
  2300.  
  2301. mov ecx, lengthof XvalueTsecond
  2302. mov esi, offset XvalueTsecond
  2303. mov edi, offset YvalueTsecond
  2304. mov eax, 219
  2305.  
  2306. LevelPrint:
  2307. push eax
  2308. mov eax, 50
  2309. call Delay
  2310. pop eax
  2311. mov dl, [esi]
  2312. mov dh, [edi]
  2313. call Gotoxy
  2314. call WriteChar
  2315. add esi, type XvalueTsecond
  2316. add edi, type YvalueTsecond
  2317. Loop LevelPrint
  2318.  
  2319. ret
  2320. letterTsecond ENDP
  2321.  
  2322.  
  2323. ;--------------------------------------------------------------------------------------------------------
  2324. ; PRINTS OUT A GIANT L (the L stands for Josh)
  2325. ;--------------------------------------------------------------------------------------------------------
  2326. ; GOTO LETTERL
  2327. letterL PROC
  2328.  
  2329. mov ecx, lengthof XvalueL
  2330. mov esi, offset XvalueL
  2331. mov edi, offset YvalueL
  2332. mov eax, 219
  2333.  
  2334. LevelPrint:
  2335. push eax
  2336. mov eax, 50
  2337. call Delay
  2338. pop eax
  2339. mov dl, [esi]
  2340. mov dh, [edi]
  2341. call Gotoxy
  2342. call WriteChar
  2343. add esi, type XvalueL
  2344. add edi, type YvalueL
  2345. Loop LevelPrint
  2346. ret
  2347. letterL ENDP
  2348.  
  2349.  
  2350. ;--------------------------------------------------------------------------------------------------------
  2351. ; PRINTS OUT A GIANT E
  2352. ;--------------------------------------------------------------------------------------------------------
  2353. ; GOTO LETTERE
  2354. letterE PROC
  2355.  
  2356. mov ecx, lengthof XvalueE
  2357. mov esi, offset XvalueE
  2358. mov edi, offset YvalueE
  2359. mov eax, 219
  2360.  
  2361. LevelPrint:
  2362. push eax
  2363. mov eax, 50
  2364. call Delay
  2365. pop eax
  2366. mov dl, [esi]
  2367. mov dh, [edi]
  2368. call Gotoxy
  2369. call WriteChar
  2370. add esi, type XvalueE
  2371. add edi, type YvalueE
  2372. Loop LevelPrint
  2373. ret
  2374. letterE ENDP
  2375.  
  2376.  
  2377. ;--------------------------------------------------------------------------------------------------------
  2378. ; PRINTS OUT A GIANT S
  2379. ;--------------------------------------------------------------------------------------------------------
  2380. ; GOTO LETTERS
  2381. letterS PROC
  2382.  
  2383. mov ecx, lengthof XvalueS
  2384. mov esi, offset XvalueS
  2385. mov edi, offset YvalueS
  2386. mov eax, 219
  2387.  
  2388. LevelPrint:
  2389. push eax
  2390. mov eax, 50
  2391. call Delay
  2392. pop eax
  2393. mov dl, [esi]
  2394. mov dh, [edi]
  2395. call Gotoxy
  2396. call WriteChar
  2397. add esi, type XvalueS
  2398. add edi, type YvalueS
  2399. Loop LevelPrint
  2400. ret
  2401. letterS ENDP
  2402.  
  2403.  
  2404. ;--------------------------------------------------------------------------------------------------------
  2405. ; PRINTS OUT A GIANT H
  2406. ;--------------------------------------------------------------------------------------------------------
  2407. ; GOTO LETTERH
  2408. letterH PROC
  2409.  
  2410. mov ecx, lengthof XvalueH
  2411. mov esi, offset XvalueH
  2412. mov edi, offset YvalueH
  2413. mov eax, 219
  2414.  
  2415. LevelPrint:
  2416. push eax
  2417. mov eax, 50
  2418. call Delay
  2419. pop eax
  2420. mov dl, [esi]
  2421. mov dh, [edi]
  2422. call Gotoxy
  2423. call WriteChar
  2424. add esi, type XvalueH
  2425. add edi, type YvalueH
  2426. Loop LevelPrint
  2427. ret
  2428. letterH ENDP
  2429.  
  2430.  
  2431. ;--------------------------------------------------------------------------------------------------------
  2432. ; PRINTS OUT A GIANT I
  2433. ;--------------------------------------------------------------------------------------------------------
  2434. ; GOTO LETTERI
  2435. letterI PROC
  2436.  
  2437. mov ecx, lengthof XvalueI
  2438. mov esi, offset XvalueI
  2439. mov edi, offset YvalueI
  2440. mov eax, 219
  2441.  
  2442. LevelPrint:
  2443. push eax
  2444. mov eax, 50
  2445. call Delay
  2446. pop eax
  2447. mov dl, [esi]
  2448. mov dh, [edi]
  2449. call Gotoxy
  2450. call WriteChar
  2451. add esi, type XvalueI
  2452. add edi, type YvalueI
  2453. Loop LevelPrint
  2454. ret
  2455. letterI ENDP
  2456.  
  2457.  
  2458. ;--------------------------------------------------------------------------------------------------------
  2459. ; PRINTS OUT A GIANT P
  2460. ;--------------------------------------------------------------------------------------------------------
  2461. ; GOTO LETTERP
  2462. letterP PROC
  2463.  
  2464. mov ecx, lengthof XvalueP
  2465. mov esi, offset XvalueP
  2466. mov edi, offset YvalueP
  2467. mov eax, 219
  2468.  
  2469. LevelPrint:
  2470. push eax
  2471. mov eax, 50
  2472. call Delay
  2473. pop eax
  2474. mov dl, [esi]
  2475. mov dh, [edi]
  2476. call Gotoxy
  2477. call WriteChar
  2478. add esi, type XvalueP
  2479. add edi, type YvalueP
  2480. Loop LevelPrint
  2481. ret
  2482. letterP ENDP
  2483.  
  2484.  
  2485. ;--------------------------------------------------------------------------------------------------------
  2486. ; PRINTS OUT A GIANT !
  2487. ;--------------------------------------------------------------------------------------------------------
  2488. ; GOTO LETTEREX1
  2489. letterEx1 PROC
  2490.  
  2491. mov ecx, lengthof xValueEx1
  2492. mov esi, offset xValueEx1
  2493. mov edi, offset yValueEx1
  2494. mov eax, 219
  2495.  
  2496. LevelPrint:
  2497. push eax
  2498. mov eax, 50
  2499. call Delay
  2500. pop eax
  2501. mov dl, [esi]
  2502. mov dh, [edi]
  2503. call Gotoxy
  2504. call WriteChar
  2505. add esi, type xValueEx1
  2506. add edi, type yValueEx1
  2507. Loop LevelPrint
  2508. ret
  2509. letterEx1 ENDP
  2510.  
  2511.  
  2512. ;--------------------------------------------------------------------------------------------------------
  2513. ; PRINTS OUT A GIANT !
  2514. ;--------------------------------------------------------------------------------------------------------
  2515. ; GOTO LETTEREX2
  2516. letterEx2 PROC
  2517.  
  2518. mov ecx, lengthof xValueEx2
  2519. mov esi, offset xValueEx2
  2520. mov edi, offset yValueEx2
  2521. mov eax, 219
  2522.  
  2523. LevelPrint:
  2524. push eax
  2525. mov eax, 50
  2526. call Delay
  2527. pop eax
  2528. mov dl, [esi]
  2529. mov dh, [edi]
  2530. call Gotoxy
  2531. call WriteChar
  2532. add esi, type xValueEx2
  2533. add edi, type yValueEx2
  2534. Loop LevelPrint
  2535. ret
  2536. letterEx2 ENDP
  2537.  
  2538.  
  2539. ;--------------------------------------------------------------------------------------------------------
  2540. ; PRINTS OUT A GIANT !
  2541. ;--------------------------------------------------------------------------------------------------------
  2542. ; GOTO LETTEREX3
  2543. letterEx3 PROC
  2544.  
  2545. mov ecx, lengthof xValueEx3
  2546. mov esi, offset xValueEx3
  2547. mov edi, offset yValueEx3
  2548. mov eax, 219
  2549.  
  2550. LevelPrint:
  2551. push eax
  2552. mov eax, 50
  2553. call Delay
  2554. pop eax
  2555. mov dl, [esi]
  2556. mov dh, [edi]
  2557. call Gotoxy
  2558. call WriteChar
  2559. add esi, type xValueEx3
  2560. add edi, type yValueEx3
  2561. Loop LevelPrint
  2562. ret
  2563. letterEx3 ENDP
  2564.  
  2565. ;--------------------------------------------------------------------------------------------------------
  2566. ; PRINTS OUT A GIANT !
  2567. ;--------------------------------------------------------------------------------------------------------
  2568. ; GOTO LETTEREX3
  2569. letterEx4 PROC
  2570.  
  2571. mov ecx, lengthof xValueEx4
  2572. mov esi, offset xValueEx4
  2573. mov edi, offset yValueEx4
  2574. mov eax, 219
  2575.  
  2576. LevelPrint:
  2577. push eax
  2578. mov eax, 50
  2579. call Delay
  2580. pop eax
  2581. mov dl, [esi]
  2582. mov dh, [edi]
  2583. call Gotoxy
  2584. call WriteChar
  2585. add esi, type xValueEx4
  2586. add edi, type yValueEx4
  2587. Loop LevelPrint
  2588. ret
  2589. letterEx4 ENDP
  2590.  
  2591. ;--------------------------------------------------------------------------------------------------------
  2592. ; PRINTS OUT A GIANT !
  2593. ;--------------------------------------------------------------------------------------------------------
  2594. ; GOTO LETTEREX3
  2595. letterEx5 PROC
  2596.  
  2597. mov ecx, lengthof xValueEx5
  2598. mov esi, offset xValueEx5
  2599. mov edi, offset yValueEx5
  2600. mov eax, 219
  2601.  
  2602. LevelPrint:
  2603. push eax
  2604. mov eax, 50
  2605. call Delay
  2606. pop eax
  2607. mov dl, [esi]
  2608. mov dh, [edi]
  2609. call Gotoxy
  2610. call WriteChar
  2611. add esi, type xValueEx5
  2612. add edi, type yValueEx5
  2613. Loop LevelPrint
  2614. ret
  2615. letterEx5 ENDP
  2616.  
  2617. ;--------------------------------------------------------------------------------------------------------
  2618. ; PICKS THE ORIENTATION OF THE CARRIER
  2619. ;--------------------------------------------------------------------------------------------------------
  2620. ; GOTO CARRIERORIENTATIONCLICK
  2621. CarrierOrientationClick PROC
  2622.  
  2623. invoke GetStdHandle, STD_INPUT_HANDLE
  2624. mov rHnd, eax
  2625. invoke SetConsoleMode, rHnd, ENABLE_LINE_INPUT OR ENABLE_MOUSE_INPUT OR ENABLE_EXTENDED_FLAGS
  2626. appContinue:
  2627. invoke GetNumberOfConsoleInputEvents, rHnd, OFFSET numEventsOccurred
  2628. cmp numEventsOccurred, 0
  2629. je appContinue
  2630. invoke ReadConsoleInput, rHnd, OFFSET eventBuffer, numEventsOccurred, OFFSET numEventsRead
  2631. mov ecx, numEventsRead
  2632. mov esi, OFFSET eventBuffer
  2633.  
  2634. loopOverEvents:
  2635.  
  2636. cmp (INPUT_RECORD PTR [esi]).EventType, MOUSE_EVENT
  2637. jne notMouse
  2638. cmp (INPUT_RECORD PTR [esi]).MouseEvent.dwEventFlags, MOUSE_MOVED
  2639. jne continue
  2640. continue:
  2641. test (INPUT_RECORD PTR [esi]).MouseEvent.dwButtonState, FROM_LEFT_1ST_BUTTON_PRESSED
  2642. jz notMouse
  2643.  
  2644. movzx eax, (INPUT_RECORD PTR [esi]).MouseEvent.dwMousePosition.x
  2645.  
  2646. mov decision, eax
  2647. cmp decision, 70
  2648. je Yposition
  2649.  
  2650. cmp decision, 75
  2651. je Yposition
  2652.  
  2653. call Crlf
  2654. mov edx, offset promptoverlap
  2655. call WriteString
  2656. call CarrierOrientationClick
  2657.  
  2658. Yposition:
  2659.  
  2660. movzx eax, (INPUT_RECORD PTR [esi]).MouseEvent.dwMousePosition.y
  2661. cmp eax, 13
  2662. je HorizontalDone
  2663. call Crlf
  2664. mov edx, offset promptoverlap
  2665. call WriteString
  2666. call CarrierOrientationClick
  2667. notMouse:
  2668. add esi, TYPE INPUT_RECORD
  2669.  
  2670. loop loopOverEvents
  2671.  
  2672.  
  2673. jmp appContinue
  2674.  
  2675. HorizontalDone:
  2676. cmp decision, 75
  2677. jne VerticalDone
  2678. mov orientation, 0
  2679. mov edx, offset horizontalChoice
  2680. call Crlf
  2681. call WriteString
  2682. jmp DoneDone
  2683.  
  2684. VerticalDone:
  2685. mov orientation, 1
  2686. mov edx, offset verticalChoice
  2687. call Crlf
  2688. call WriteString
  2689. DoneDone:
  2690. call CarrierPlacementClick
  2691.  
  2692. invoke ExitProcess, 0
  2693. ret
  2694. CarrierOrientationClick ENDP
  2695.  
  2696.  
  2697. ;--------------------------------------------------------------------------------------------------------
  2698. ; PICKS THE PLACEMENT OF THE CARRIER
  2699. ;--------------------------------------------------------------------------------------------------------
  2700. ; GOTO CARRIERPLACEMENTCLICK
  2701. CarrierPlacementClick PROC
  2702.  
  2703. mov lengthship, 5
  2704.  
  2705. StartPlacement:
  2706. invoke GetStdHandle, STD_INPUT_HANDLE
  2707. mov rHndPlacement, eax
  2708. invoke SetConsoleMode, rHnd, ENABLE_LINE_INPUT OR ENABLE_MOUSE_INPUT OR ENABLE_EXTENDED_FLAGS
  2709. appContinuePlacement:
  2710. invoke GetNumberOfConsoleInputEvents, rHndPlacement, OFFSET numEventsOccurredPlacement
  2711. cmp numEventsOccurredPlacement, 0
  2712. je appContinuePlacement
  2713. invoke ReadConsoleInput, rHndPlacement, OFFSET eventBufferPlacement, numEventsOccurredPlacement, OFFSET numEventsReadPlacement
  2714. mov ecx, numEventsReadPlacement
  2715. mov esi, OFFSET eventBufferPlacement
  2716.  
  2717. loopOverEventsPlacement:
  2718. cmp (INPUT_RECORD PTR [esi]).EventType, MOUSE_EVENT
  2719. jne notMousePlacement
  2720. cmp (INPUT_RECORD PTR [esi]).MouseEvent.dwEventFlags, MOUSE_MOVED
  2721. jne continuePlacement
  2722. continuePlacement:
  2723. test (INPUT_RECORD PTR [esi]).MouseEvent.dwButtonState, FROM_LEFT_1ST_BUTTON_PRESSED
  2724. jz notMousePlacement
  2725. movzx eax, (INPUT_RECORD PTR [esi]).MouseEvent.dwMousePosition.x
  2726.  
  2727. sub eax, 19
  2728. mov ebx, 2
  2729. mov edx, 0
  2730. div ebx
  2731.  
  2732. cmp al, 9
  2733. jg StartPlacement
  2734. cmp al, 0
  2735. jl StartPlacement
  2736.  
  2737. mov xpoint, al
  2738.  
  2739. movzx eax, (INPUT_RECORD PTR [esi]).MouseEvent.dwMousePosition.y
  2740. sub eax, 13
  2741. cmp al, 9
  2742. jg StartPlacement
  2743.  
  2744. mov ypoint, al
  2745. ;cmp al,
  2746.  
  2747. call Crlf
  2748. jmp DonePlacement
  2749. notMousePlacement:
  2750. add esi, INPUT_RECORD
  2751.  
  2752. loop loopOverEventsPlacement
  2753. jmp appContinuePlacement
  2754.  
  2755. DonePlacement:
  2756.  
  2757. call validShipPlacement1
  2758. call displayPlayer1Board
  2759.  
  2760. mov eax, 1000
  2761. call Delay
  2762. call ship2Screen
  2763.  
  2764. invoke ExitProcess, 0
  2765.  
  2766. ret
  2767. CarrierPlacementClick ENDP
  2768.  
  2769. ;--------------------------------------------------------------------------------------------------------
  2770. ; PICKS THE ORIENTATION OF THE BATTLESHIP
  2771. ;--------------------------------------------------------------------------------------------------------
  2772. ; GOTO BATTLEORIENTATIONCLICK
  2773. BattleOrientationClick PROC
  2774.  
  2775. invoke GetStdHandle, STD_INPUT_HANDLE
  2776. mov rHnd, eax
  2777. invoke SetConsoleMode, rHnd, ENABLE_LINE_INPUT OR ENABLE_MOUSE_INPUT OR ENABLE_EXTENDED_FLAGS
  2778. appContinue:
  2779. invoke GetNumberOfConsoleInputEvents, rHnd, OFFSET numEventsOccurred
  2780. cmp numEventsOccurred, 0
  2781. je appContinue
  2782. invoke ReadConsoleInput, rHnd, OFFSET eventBuffer, numEventsOccurred, OFFSET numEventsRead
  2783. mov ecx, numEventsRead
  2784. mov esi, OFFSET eventBuffer
  2785.  
  2786. loopOverEvents:
  2787.  
  2788. cmp (INPUT_RECORD PTR [esi]).EventType, MOUSE_EVENT
  2789. jne notMouse
  2790. cmp (INPUT_RECORD PTR [esi]).MouseEvent.dwEventFlags, MOUSE_MOVED
  2791. jne continue
  2792. continue:
  2793. test (INPUT_RECORD PTR [esi]).MouseEvent.dwButtonState, FROM_LEFT_1ST_BUTTON_PRESSED
  2794. jz notMouse
  2795.  
  2796. movzx eax, (INPUT_RECORD PTR [esi]).MouseEvent.dwMousePosition.x
  2797.  
  2798. mov decision, eax
  2799. cmp decision, 70
  2800. je Yposition
  2801.  
  2802. cmp decision, 75
  2803. je Yposition
  2804.  
  2805. call Crlf
  2806. mov edx, offset promptoverlap
  2807. call WriteString
  2808. call BattleOrientationClick
  2809.  
  2810. Yposition:
  2811.  
  2812. movzx eax, (INPUT_RECORD PTR [esi]).MouseEvent.dwMousePosition.y
  2813. cmp eax, 13
  2814. je HorizontalDone
  2815. call Crlf
  2816. mov edx, offset promptoverlap
  2817. call WriteString
  2818. call BattleOrientationClick
  2819. notMouse:
  2820. add esi, TYPE INPUT_RECORD
  2821.  
  2822. loop loopOverEvents
  2823.  
  2824.  
  2825. jmp appContinue
  2826.  
  2827. HorizontalDone:
  2828. cmp decision, 75
  2829. jne VerticalDone
  2830. mov orientation, 0
  2831. mov edx, offset horizontalChoice
  2832. call Crlf
  2833. call WriteString
  2834. jmp DoneDone
  2835.  
  2836. VerticalDone:
  2837. mov orientation, 1
  2838. mov edx, offset verticalChoice
  2839. call Crlf
  2840. call WriteString
  2841. DoneDone:
  2842. call BattlePlacementClick
  2843. invoke ExitProcess, 0
  2844. ret
  2845. BattleOrientationClick ENDP
  2846.  
  2847.  
  2848. ;--------------------------------------------------------------------------------------------------------
  2849. ; PICKS THE PLACEMENT OF THE BATTLESHIP
  2850. ;--------------------------------------------------------------------------------------------------------
  2851. ; GOTO BATTLEPLACEMENTCLICK
  2852. BattlePlacementClick PROC
  2853.  
  2854. mov lengthship, 4
  2855.  
  2856. StartPlacement:
  2857. invoke GetStdHandle, STD_INPUT_HANDLE
  2858. mov rHndPlacement, eax
  2859. invoke SetConsoleMode, rHnd, ENABLE_LINE_INPUT OR ENABLE_MOUSE_INPUT OR ENABLE_EXTENDED_FLAGS
  2860. appContinuePlacement:
  2861. invoke GetNumberOfConsoleInputEvents, rHndPlacement, OFFSET numEventsOccurredPlacement
  2862. cmp numEventsOccurredPlacement, 0
  2863. je appContinuePlacement
  2864. invoke ReadConsoleInput, rHndPlacement, OFFSET eventBufferPlacement, numEventsOccurredPlacement, OFFSET numEventsReadPlacement
  2865. mov ecx, numEventsReadPlacement
  2866. mov esi, OFFSET eventBufferPlacement
  2867.  
  2868. loopOverEventsPlacement:
  2869. cmp (INPUT_RECORD PTR [esi]).EventType, MOUSE_EVENT
  2870. jne notMousePlacement
  2871. cmp (INPUT_RECORD PTR [esi]).MouseEvent.dwEventFlags, MOUSE_MOVED
  2872. jne continuePlacement
  2873. continuePlacement:
  2874. test (INPUT_RECORD PTR [esi]).MouseEvent.dwButtonState, FROM_LEFT_1ST_BUTTON_PRESSED
  2875. jz notMousePlacement
  2876. movzx eax, (INPUT_RECORD PTR [esi]).MouseEvent.dwMousePosition.x
  2877.  
  2878. sub eax, 19
  2879. mov ebx, 2
  2880. mov edx, 0
  2881. div ebx
  2882.  
  2883. cmp al, 9
  2884. jg StartPlacement
  2885. cmp al, 0
  2886. jl StartPlacement
  2887.  
  2888. mov xpoint, al
  2889.  
  2890. movzx eax, (INPUT_RECORD PTR [esi]).MouseEvent.dwMousePosition.y
  2891. sub eax, 13
  2892. cmp al, 9
  2893. jg StartPlacement
  2894.  
  2895. mov ypoint, al
  2896. ;cmp al,
  2897.  
  2898. call Crlf
  2899. jmp DonePlacement
  2900. notMousePlacement:
  2901. add esi, INPUT_RECORD
  2902.  
  2903. loop loopOverEventsPlacement
  2904. jmp appContinuePlacement
  2905. DonePlacement:
  2906.  
  2907. call validShipPlacement1
  2908. call displayPlayer1Board
  2909.  
  2910. mov eax, 1000
  2911. call Delay
  2912. call ship3Screen
  2913.  
  2914. invoke ExitProcess, 0
  2915. ret
  2916. BattlePlacementClick ENDP
  2917.  
  2918.  
  2919. ;--------------------------------------------------------------------------------------------------------
  2920. ; PICKS THE ORIENTATION OF THE CRUISER
  2921. ;--------------------------------------------------------------------------------------------------------
  2922. ; GOTO CRUISERORIENTATIONCLICK
  2923. CruiserOrientationClick PROC
  2924.  
  2925. invoke GetStdHandle, STD_INPUT_HANDLE
  2926. mov rHnd, eax
  2927. invoke SetConsoleMode, rHnd, ENABLE_LINE_INPUT OR ENABLE_MOUSE_INPUT OR ENABLE_EXTENDED_FLAGS
  2928. appContinue:
  2929. invoke GetNumberOfConsoleInputEvents, rHnd, OFFSET numEventsOccurred
  2930. cmp numEventsOccurred, 0
  2931. je appContinue
  2932. invoke ReadConsoleInput, rHnd, OFFSET eventBuffer, numEventsOccurred, OFFSET numEventsRead
  2933. mov ecx, numEventsRead
  2934. mov esi, OFFSET eventBuffer
  2935.  
  2936. loopOverEvents:
  2937.  
  2938. cmp (INPUT_RECORD PTR [esi]).EventType, MOUSE_EVENT
  2939. jne notMouse
  2940. cmp (INPUT_RECORD PTR [esi]).MouseEvent.dwEventFlags, MOUSE_MOVED
  2941. jne continue
  2942. continue:
  2943. test (INPUT_RECORD PTR [esi]).MouseEvent.dwButtonState, FROM_LEFT_1ST_BUTTON_PRESSED
  2944. jz notMouse
  2945.  
  2946. movzx eax, (INPUT_RECORD PTR [esi]).MouseEvent.dwMousePosition.x
  2947.  
  2948. mov decision, eax
  2949. cmp decision, 70
  2950. je Yposition
  2951.  
  2952. cmp decision, 75
  2953. je Yposition
  2954.  
  2955. call Crlf
  2956. mov edx, offset promptoverlap
  2957. call WriteString
  2958. call CruiserOrientationClick
  2959.  
  2960. Yposition:
  2961.  
  2962. movzx eax, (INPUT_RECORD PTR [esi]).MouseEvent.dwMousePosition.y
  2963. cmp eax, 13
  2964. je HorizontalDone
  2965. call Crlf
  2966. mov edx, offset promptoverlap
  2967. call WriteString
  2968. call CruiserOrientationClick
  2969. notMouse:
  2970. add esi, TYPE INPUT_RECORD
  2971.  
  2972. loop loopOverEvents
  2973. jmp appContinue
  2974.  
  2975. HorizontalDone:
  2976. cmp decision, 75
  2977. jne VerticalDone
  2978. mov orientation, 0
  2979. mov edx, offset horizontalChoice
  2980. call Crlf
  2981. call WriteString
  2982. jmp DoneDone
  2983.  
  2984. VerticalDone:
  2985. mov orientation, 1
  2986. mov edx, offset verticalChoice
  2987. call Crlf
  2988. call WriteString
  2989. DoneDone:
  2990. call CruiserPlacementClick
  2991. invoke ExitProcess, 0
  2992. ret
  2993. CruiserOrientationClick ENDP
  2994.  
  2995.  
  2996. ;--------------------------------------------------------------------------------------------------------
  2997. ; PICKS THE PLACEMENT OF THE CRUISER
  2998. ;--------------------------------------------------------------------------------------------------------
  2999. ; GOTO CRUISERPLACEMENTCLICK
  3000. CruiserPlacementClick PROC
  3001.  
  3002. mov lengthship, 3
  3003.  
  3004. StartPlacement:
  3005. invoke GetStdHandle, STD_INPUT_HANDLE
  3006. mov rHndPlacement, eax
  3007. invoke SetConsoleMode, rHnd, ENABLE_LINE_INPUT OR ENABLE_MOUSE_INPUT OR ENABLE_EXTENDED_FLAGS
  3008. appContinuePlacement:
  3009. invoke GetNumberOfConsoleInputEvents, rHndPlacement, OFFSET numEventsOccurredPlacement
  3010. cmp numEventsOccurredPlacement, 0
  3011. je appContinuePlacement
  3012. invoke ReadConsoleInput, rHndPlacement, OFFSET eventBufferPlacement, numEventsOccurredPlacement, OFFSET numEventsReadPlacement
  3013. mov ecx, numEventsReadPlacement
  3014. mov esi, OFFSET eventBufferPlacement
  3015.  
  3016. loopOverEventsPlacement:
  3017. cmp (INPUT_RECORD PTR [esi]).EventType, MOUSE_EVENT
  3018. jne notMousePlacement
  3019. cmp (INPUT_RECORD PTR [esi]).MouseEvent.dwEventFlags, MOUSE_MOVED
  3020. jne continuePlacement
  3021. continuePlacement:
  3022. test (INPUT_RECORD PTR [esi]).MouseEvent.dwButtonState, FROM_LEFT_1ST_BUTTON_PRESSED
  3023. jz notMousePlacement
  3024. movzx eax, (INPUT_RECORD PTR [esi]).MouseEvent.dwMousePosition.x
  3025.  
  3026. sub eax, 19
  3027. mov ebx, 2
  3028. mov edx, 0
  3029. div ebx
  3030.  
  3031. cmp al, 9
  3032. jg StartPlacement
  3033. cmp al, 0
  3034. jl StartPlacement
  3035.  
  3036. mov xpoint, al
  3037.  
  3038. movzx eax, (INPUT_RECORD PTR [esi]).MouseEvent.dwMousePosition.y
  3039. sub eax, 13
  3040. cmp al, 9
  3041. jg StartPlacement
  3042.  
  3043. mov ypoint, al
  3044. ;cmp al,
  3045.  
  3046. call Crlf
  3047. jmp DonePlacement
  3048. notMousePlacement:
  3049. add esi, INPUT_RECORD
  3050.  
  3051. loop loopOverEventsPlacement
  3052. jmp appContinuePlacement
  3053.  
  3054. DonePlacement:
  3055. call validShipPlacement1
  3056. call displayPlayer1Board
  3057.  
  3058. mov eax, 1000
  3059. call Delay
  3060. call ship4Screen
  3061.  
  3062. invoke ExitProcess, 0
  3063. ret
  3064. CruiserPlacementClick ENDP
  3065.  
  3066.  
  3067. ;--------------------------------------------------------------------------------------------------------
  3068. ; PICKS THE ORIENTATION OF THE SUBMARINE
  3069. ;--------------------------------------------------------------------------------------------------------
  3070. ; GOTO SUBMARINEORIENTATIONCLICK
  3071. SubmarineOrientationClick PROC
  3072.  
  3073. invoke GetStdHandle, STD_INPUT_HANDLE
  3074. mov rHnd, eax
  3075. invoke SetConsoleMode, rHnd, ENABLE_LINE_INPUT OR ENABLE_MOUSE_INPUT OR ENABLE_EXTENDED_FLAGS
  3076. appContinue:
  3077. invoke GetNumberOfConsoleInputEvents, rHnd, OFFSET numEventsOccurred
  3078. cmp numEventsOccurred, 0
  3079. je appContinue
  3080. invoke ReadConsoleInput, rHnd, OFFSET eventBuffer, numEventsOccurred, OFFSET numEventsRead
  3081. mov ecx, numEventsRead
  3082. mov esi, OFFSET eventBuffer
  3083.  
  3084. loopOverEvents:
  3085.  
  3086. cmp (INPUT_RECORD PTR [esi]).EventType, MOUSE_EVENT
  3087. jne notMouse
  3088. cmp (INPUT_RECORD PTR [esi]).MouseEvent.dwEventFlags, MOUSE_MOVED
  3089. jne continue
  3090. continue:
  3091. test (INPUT_RECORD PTR [esi]).MouseEvent.dwButtonState, FROM_LEFT_1ST_BUTTON_PRESSED
  3092. jz notMouse
  3093.  
  3094. movzx eax, (INPUT_RECORD PTR [esi]).MouseEvent.dwMousePosition.x
  3095.  
  3096. mov decision, eax
  3097. cmp decision, 70
  3098. je Yposition
  3099.  
  3100. cmp decision, 75
  3101. je Yposition
  3102.  
  3103. call Crlf
  3104. mov edx, offset promptoverlap
  3105. call WriteString
  3106. call SubmarineOrientationClick
  3107.  
  3108. Yposition:
  3109.  
  3110. movzx eax, (INPUT_RECORD PTR [esi]).MouseEvent.dwMousePosition.y
  3111. cmp eax, 13
  3112. je HorizontalDone
  3113. call Crlf
  3114. mov edx, offset promptoverlap
  3115. call WriteString
  3116. call SubmarineOrientationClick
  3117. notMouse:
  3118. add esi, TYPE INPUT_RECORD
  3119.  
  3120. loop loopOverEvents
  3121. jmp appContinue
  3122.  
  3123. HorizontalDone:
  3124. cmp decision, 75
  3125. jne VerticalDone
  3126. mov orientation, 0
  3127. mov edx, offset horizontalChoice
  3128. call Crlf
  3129. call WriteString
  3130. jmp DoneDone
  3131.  
  3132. VerticalDone:
  3133. mov orientation, 1
  3134. mov edx, offset verticalChoice
  3135. call Crlf
  3136. call WriteString
  3137. DoneDone:
  3138. call SubmarinePlacementClick
  3139. invoke ExitProcess, 0
  3140. ret
  3141. SubmarineOrientationClick ENDP
  3142.  
  3143.  
  3144. ;--------------------------------------------------------------------------------------------------------
  3145. ; PICKS THE PLACEMENT OF THE SUBMARINE
  3146. ;--------------------------------------------------------------------------------------------------------
  3147. ; GOTO SUBMARINEPLACEMENTCLICK
  3148. SubmarinePlacementClick PROC
  3149. mov lengthship, 3
  3150. mov whichShip3, 1
  3151.  
  3152. StartPlacement:
  3153. invoke GetStdHandle, STD_INPUT_HANDLE
  3154. mov rHndPlacement, eax
  3155. invoke SetConsoleMode, rHnd, ENABLE_LINE_INPUT OR ENABLE_MOUSE_INPUT OR ENABLE_EXTENDED_FLAGS
  3156. appContinuePlacement:
  3157. invoke GetNumberOfConsoleInputEvents, rHndPlacement, OFFSET numEventsOccurredPlacement
  3158. cmp numEventsOccurredPlacement, 0
  3159. je appContinuePlacement
  3160. invoke ReadConsoleInput, rHndPlacement, OFFSET eventBufferPlacement, numEventsOccurredPlacement, OFFSET numEventsReadPlacement
  3161. mov ecx, numEventsReadPlacement
  3162. mov esi, OFFSET eventBufferPlacement
  3163.  
  3164. loopOverEventsPlacement:
  3165. cmp (INPUT_RECORD PTR [esi]).EventType, MOUSE_EVENT
  3166. jne notMousePlacement
  3167. cmp (INPUT_RECORD PTR [esi]).MouseEvent.dwEventFlags, MOUSE_MOVED
  3168. jne continuePlacement
  3169. continuePlacement:
  3170. test (INPUT_RECORD PTR [esi]).MouseEvent.dwButtonState, FROM_LEFT_1ST_BUTTON_PRESSED
  3171. jz notMousePlacement
  3172. movzx eax, (INPUT_RECORD PTR [esi]).MouseEvent.dwMousePosition.x
  3173.  
  3174. sub eax, 19
  3175. mov ebx, 2
  3176. mov edx, 0
  3177. div ebx
  3178.  
  3179. cmp al, 9
  3180. jg StartPlacement
  3181. cmp al, 0
  3182. jl StartPlacement
  3183.  
  3184. mov xpoint, al
  3185.  
  3186. movzx eax, (INPUT_RECORD PTR [esi]).MouseEvent.dwMousePosition.y
  3187. sub eax, 13
  3188. cmp al, 9
  3189. jg StartPlacement
  3190.  
  3191. mov ypoint, al
  3192.  
  3193. call Crlf
  3194. jmp DonePlacement
  3195. notMousePlacement:
  3196. add esi, INPUT_RECORD
  3197.  
  3198. loop loopOverEventsPlacement
  3199. jmp appContinuePlacement
  3200. DonePlacement:
  3201.  
  3202. call validShipPlacement1
  3203. call displayPlayer1Board
  3204.  
  3205. mov eax, 1000
  3206. call Delay
  3207. call ship5Screen
  3208.  
  3209. invoke ExitProcess, 0
  3210. ret
  3211. SubmarinePlacementClick ENDP
  3212.  
  3213.  
  3214. ;--------------------------------------------------------------------------------------------------------
  3215. ; PICKS THE ORIENTATION OF THE DESTROYER
  3216. ;--------------------------------------------------------------------------------------------------------
  3217. ; GOTO DESTROYERORIENTATIONCLICK
  3218. DestroyerOrientationClick PROC
  3219.  
  3220. invoke GetStdHandle, STD_INPUT_HANDLE
  3221. mov rHnd, eax
  3222. invoke SetConsoleMode, rHnd, ENABLE_LINE_INPUT OR ENABLE_MOUSE_INPUT OR ENABLE_EXTENDED_FLAGS
  3223. appContinue:
  3224. invoke GetNumberOfConsoleInputEvents, rHnd, OFFSET numEventsOccurred
  3225. cmp numEventsOccurred, 0
  3226. je appContinue
  3227. invoke ReadConsoleInput, rHnd, OFFSET eventBuffer, numEventsOccurred, OFFSET numEventsRead
  3228. mov ecx, numEventsRead
  3229. mov esi, OFFSET eventBuffer
  3230.  
  3231. loopOverEvents:
  3232.  
  3233. cmp (INPUT_RECORD PTR [esi]).EventType, MOUSE_EVENT
  3234. jne notMouse
  3235. cmp (INPUT_RECORD PTR [esi]).MouseEvent.dwEventFlags, MOUSE_MOVED
  3236. jne continue
  3237. continue:
  3238. test (INPUT_RECORD PTR [esi]).MouseEvent.dwButtonState, FROM_LEFT_1ST_BUTTON_PRESSED
  3239. jz notMouse
  3240.  
  3241. movzx eax, (INPUT_RECORD PTR [esi]).MouseEvent.dwMousePosition.x
  3242.  
  3243. mov decision, eax
  3244. cmp decision, 70
  3245. je Yposition
  3246.  
  3247. cmp decision, 75
  3248. je Yposition
  3249.  
  3250. call Crlf
  3251. mov edx, offset promptoverlap
  3252. call WriteString
  3253. call DestroyerOrientationClick
  3254.  
  3255. Yposition:
  3256.  
  3257. movzx eax, (INPUT_RECORD PTR [esi]).MouseEvent.dwMousePosition.y
  3258. cmp eax, 13
  3259. je HorizontalDone
  3260. call Crlf
  3261. mov edx, offset promptoverlap
  3262. call WriteString
  3263. call DestroyerOrientationClick
  3264. notMouse:
  3265. add esi, TYPE INPUT_RECORD
  3266.  
  3267. loop loopOverEvents
  3268. jmp appContinue
  3269.  
  3270. HorizontalDone:
  3271. cmp decision, 75
  3272. jne VerticalDone
  3273. mov orientation, 0
  3274. mov edx, offset horizontalChoice
  3275. call Crlf
  3276. call WriteString
  3277. jmp DoneDone
  3278.  
  3279. VerticalDone:
  3280. mov orientation, 1
  3281. mov edx, offset verticalChoice
  3282. call Crlf
  3283. call WriteString
  3284. DoneDone:
  3285. call DestroyerPlacementClick
  3286. invoke ExitProcess, 0
  3287. ret
  3288. DestroyerOrientationClick ENDP
  3289.  
  3290.  
  3291. ;--------------------------------------------------------------------------------------------------------
  3292. ; PICKS THE PLACEMENT OF THE DESTROYER
  3293. ;--------------------------------------------------------------------------------------------------------
  3294. ; GOTO DESTROYERPLACEMENTCLICK
  3295. DestroyerPlacementClick PROC
  3296.  
  3297. mov lengthship, 2
  3298.  
  3299. StartPlacement:
  3300. invoke GetStdHandle, STD_INPUT_HANDLE
  3301. mov rHndPlacement, eax
  3302. invoke SetConsoleMode, rHnd, ENABLE_LINE_INPUT OR ENABLE_MOUSE_INPUT OR ENABLE_EXTENDED_FLAGS
  3303. appContinuePlacement:
  3304. invoke GetNumberOfConsoleInputEvents, rHndPlacement, OFFSET numEventsOccurredPlacement
  3305. cmp numEventsOccurredPlacement, 0
  3306. je appContinuePlacement
  3307. invoke ReadConsoleInput, rHndPlacement, OFFSET eventBufferPlacement, numEventsOccurredPlacement, OFFSET numEventsReadPlacement
  3308. mov ecx, numEventsReadPlacement
  3309. mov esi, OFFSET eventBufferPlacement
  3310.  
  3311. loopOverEventsPlacement:
  3312. cmp (INPUT_RECORD PTR [esi]).EventType, MOUSE_EVENT
  3313. jne notMousePlacement
  3314. cmp (INPUT_RECORD PTR [esi]).MouseEvent.dwEventFlags, MOUSE_MOVED
  3315. jne continuePlacement
  3316. continuePlacement:
  3317. test (INPUT_RECORD PTR [esi]).MouseEvent.dwButtonState, FROM_LEFT_1ST_BUTTON_PRESSED
  3318. jz notMousePlacement
  3319. movzx eax, (INPUT_RECORD PTR [esi]).MouseEvent.dwMousePosition.x
  3320.  
  3321. sub eax, 19
  3322. mov ebx, 2
  3323. mov edx, 0
  3324. div ebx
  3325.  
  3326. cmp al, 9
  3327. jg StartPlacement
  3328. cmp al, 0
  3329. jl StartPlacement
  3330.  
  3331. mov xpoint, al
  3332.  
  3333. movzx eax, (INPUT_RECORD PTR [esi]).MouseEvent.dwMousePosition.y
  3334. sub eax, 13
  3335. cmp al, 9
  3336. jg StartPlacement
  3337.  
  3338. mov ypoint, al
  3339. ;cmp al,
  3340.  
  3341. call Crlf
  3342. jmp DonePlacement
  3343. notMousePlacement:
  3344. add esi, INPUT_RECORD
  3345.  
  3346. loop loopOverEventsPlacement
  3347. jmp appContinuePlacement
  3348.  
  3349. DonePlacement:
  3350.  
  3351. call validShipPlacement1
  3352. call displayPlayer1Board
  3353.  
  3354. mov eax, 1000
  3355. call Delay
  3356. call playScreen
  3357.  
  3358. invoke ExitProcess, 0
  3359. ret
  3360. DestroyerPlacementClick ENDP
  3361.  
  3362.  
  3363. ;--------------------------------------------------------------------------------------------------------
  3364. ; SCREEN SETUP
  3365. ; - x-coordinate stored in dl
  3366. ; - y-coordinate stored in dh
  3367. ;--------------------------------------------------------------------------------------------------------
  3368. screen PROC
  3369.  
  3370. ; betterUS BYTE 205, 0
  3371. ; betterLine BYTE 186, 0
  3372. ; inter BYTE 203, 0
  3373.  
  3374. mov dl, 60
  3375. mov dh, 7
  3376.  
  3377. mov ecx, 23
  3378. L1:
  3379.  
  3380. mov ah, dh
  3381. mov al, dl
  3382. call Gotoxy
  3383.  
  3384. mov esi, offset betterLine
  3385. mov edx, esi
  3386. call WriteString
  3387.  
  3388. mov dh, ah
  3389. mov dl, al
  3390. inc dh
  3391.  
  3392. Loop L1
  3393.  
  3394. mov dl, 0
  3395. mov dh, 6
  3396.  
  3397. mov ecx, 120
  3398. L2:
  3399.  
  3400. mov ah, dh
  3401. mov al, dl
  3402. call Gotoxy
  3403.  
  3404. mov esi, offset betterUS
  3405. mov edx, esi
  3406. call WriteString
  3407.  
  3408. mov dh, ah
  3409. mov dl, al
  3410. inc dl
  3411.  
  3412. Loop L2
  3413.  
  3414. mov dl, 60
  3415. mov dh, 6
  3416. call Gotoxy
  3417. mov esi, offset inter
  3418. mov edx, esi
  3419. call WriteString
  3420.  
  3421. ret
  3422. screen ENDP
  3423.  
  3424. ;-------------------------------------------------------------------------------------------------------------
  3425. ; CHECK IF PLAYER 1'S SHIP PLACEMENT IS LEGAL OR NOT
  3426. ; Input: orientation, xpoint, ypoint, length
  3427. ;-------------------------------------------------------------------------------------------------------------
  3428. ; GOTO VALIDSHIPPLACEMENT1
  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 player1board
  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 player1board
  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. ; GOTO VALIDSHIPPLACEMENT2
  3561. validShipPlacement2 PROC
  3562.  
  3563. mov edx, 0
  3564. mov dl, xpoint
  3565. mov tempxpoint, dl
  3566. mov dl, ypoint
  3567. mov tempypoint, dl
  3568.  
  3569. cmp orientation, 0
  3570. je checkHorizontalBound
  3571. jmp checkVerticalBound
  3572.  
  3573. checkHorizontalBound:
  3574. mov edx, 0
  3575. mov dl, lengthship
  3576. add tempxpoint, dl
  3577. cmp tempxpoint, 10
  3578. jle checkHorizontalOverlap
  3579. jmp invalidPlacement
  3580.  
  3581. checkVerticalBound:
  3582. mov edx, 0
  3583. mov dl, lengthship
  3584. add tempypoint, dl
  3585. cmp tempypoint, 10
  3586. jle checkVerticalOverlap
  3587. jmp invalidPlacement
  3588.  
  3589. invalidPlacement:
  3590. mov esi, offset promptoverlap
  3591. mov edx, esi
  3592. call WriteString
  3593. call Crlf
  3594. call pickShipsPlayer2
  3595.  
  3596. validPlacement:
  3597. inc computershipcounter
  3598. jmp stopPlacingShip
  3599.  
  3600. checkHorizontalOverlap:
  3601.  
  3602. mov dl, 254
  3603. mov ecx, 0
  3604. mov cl, lengthship
  3605. loopHorizontalOverlap:
  3606. mov esi, offset player2hiddenboard
  3607. push ecx
  3608. call coordinateToIndex
  3609. pop ecx
  3610. movzx ebx, indexarray
  3611. add esi, ebx
  3612. mov dl, 254
  3613. cmp [esi], dl
  3614. je invalidPlacement
  3615. inc xpoint
  3616. loop loopHorizontalOverlap
  3617.  
  3618. mov edx, 0
  3619. mov dl, lengthship
  3620. sub xpoint, dl
  3621.  
  3622. jmp validPlacement
  3623.  
  3624. checkVerticalOverlap:
  3625.  
  3626. mov edx, 0
  3627. mov dl, 254
  3628. mov ecx, 0
  3629. mov cl, lengthship
  3630. loopVerticalOverlap:
  3631. mov esi, offset player2hiddenboard
  3632. push ecx
  3633. call coordinateToIndex
  3634. pop ecx
  3635. movzx ebx, indexarray
  3636. add esi, ebx
  3637. cmp [esi], dl
  3638. je invalidPlacement
  3639. inc ypoint
  3640. loop loopVerticalOverlap
  3641.  
  3642. mov edx, 0
  3643. mov dl, lengthship
  3644. sub ypoint, dl
  3645.  
  3646. jmp validPlacement
  3647.  
  3648. stopPlacingShip:
  3649. call placeShipPlayer2
  3650.  
  3651. ret
  3652.  
  3653. validShipPlacement2 ENDP
  3654.  
  3655. ;-------------------------------------------------------------------------------------------------------------
  3656. ; CO-ORDINATE TO INDEX
  3657. ; - Changes x and y coordinates into the index in the array
  3658. ; - Takes in xpoint, ypoint
  3659. ; - Returns indexarray
  3660. ;-------------------------------------------------------------------------------------------------------------
  3661. ; GOTO COORDINATETOINDEX
  3662. coordinateToIndex PROC
  3663.  
  3664. mov indexarray, 0
  3665. mov eax, 0
  3666. mov ecx, 10
  3667. mulconfusesme:
  3668. add ah, ypoint
  3669. loop mulconfusesme
  3670. add ah, xpoint
  3671.  
  3672. mov indexarray, ah
  3673.  
  3674. ret
  3675. coordinateToIndex ENDP
  3676.  
  3677.  
  3678. ;-------------------------------------------------------------------------------------------------------------
  3679. ; PLACES SHIP IN PLAYER 1'S HIDDEN BOARD
  3680. ; - Takes in orientation, xpoint, ypoint, lengthship
  3681. ;-------------------------------------------------------------------------------------------------------------
  3682. ; GOTO PLACESHIPPLAYER1
  3683. placeShipPlayer1 PROC
  3684.  
  3685. ; 254 is the ASCII code for the ship
  3686. mov edx, 0
  3687. mov dl, 254
  3688.  
  3689. ; If orientation = 0, goes to placeHorizontal
  3690. ; If not, goes to placeVertical for another check
  3691. cmp orientation, 0
  3692. je placeHorizontal
  3693. jmp placeVertical
  3694.  
  3695. placeHorizontal:
  3696.  
  3697. ; Loops the same number times as the length of the ship
  3698. mov ecx, 0
  3699. mov cl, lengthship
  3700.  
  3701. rick:
  3702. mov esi, offset player1board
  3703. push ecx
  3704. call coordinateToIndex
  3705. movzx ebx, indexarray
  3706. add esi, ebx
  3707. mov [esi], dl
  3708. pop ecx
  3709. inc xpoint
  3710. loop rick
  3711.  
  3712. jmp stopPlacingShip
  3713.  
  3714. placeVertical:
  3715.  
  3716. ; If orientation != 1, goes to stopPlacingShip
  3717. cmp orientation, 1
  3718. jne stopPlacingShip
  3719.  
  3720. ; Loops the same number times as the length of the ship
  3721. mov ecx, 0
  3722. mov cl, lengthship
  3723.  
  3724. morty:
  3725. mov esi, offset player1board
  3726. push ecx
  3727. call coordinateToIndex
  3728. movzx ebx, indexarray
  3729. add esi, ebx
  3730. mov [esi], dl
  3731. pop ecx
  3732. inc ypoint
  3733. loop morty
  3734.  
  3735. jmp stopPlacingShip
  3736.  
  3737. stopPlacingShip:
  3738.  
  3739. ; Ends the procedure
  3740. ret
  3741.  
  3742. placeShipPlayer1 ENDP
  3743.  
  3744.  
  3745. ;-------------------------------------------------------------------------------------------------------------
  3746. ; PLACES SHIP IN PLAYER 2'S HIDDEN BOARD
  3747. ; - Takes in orientation, xpoint, ypoint, lengthship
  3748. ;-------------------------------------------------------------------------------------------------------------
  3749. ; GOTO PLACESHIPPLAYER2
  3750. placeShipPlayer2 PROC
  3751.  
  3752. ; 254 is the ASCII code for the ship
  3753. mov edx, 0
  3754. mov dl, 254
  3755.  
  3756. ; If orientation = 0, goes to placeHorizontal
  3757. ; If not, goes to placeVertical for another check
  3758. cmp orientation, 0
  3759. je placeHorizontal
  3760. jmp placeVertical
  3761.  
  3762. placeHorizontal:
  3763.  
  3764. ; Loops the same number times as the length of the ship
  3765. mov ecx, 0
  3766. mov cl, lengthship
  3767.  
  3768. rick:
  3769. mov esi, offset player2hiddenboard
  3770. push ecx
  3771. call coordinateToIndex
  3772. movzx ebx, indexarray
  3773. add esi, ebx
  3774. mov [esi], dl
  3775. pop ecx
  3776. inc xpoint
  3777. loop rick
  3778.  
  3779. jmp stopPlacingShip
  3780.  
  3781. placeVertical:
  3782.  
  3783. ; If orientation != 1, goes to stopPlacingShip
  3784. cmp orientation, 1
  3785. jne stopPlacingShip
  3786.  
  3787. ; Loops the same number times as the length of the ship
  3788. mov ecx, 0
  3789. mov cl, lengthship
  3790.  
  3791. morty:
  3792. mov esi, offset player2hiddenboard
  3793. push ecx
  3794. call coordinateToIndex
  3795. movzx ebx, indexarray
  3796. add esi, ebx
  3797. mov [esi], dl
  3798. pop ecx
  3799. inc ypoint
  3800. loop morty
  3801.  
  3802. jmp stopPlacingShip
  3803.  
  3804. stopPlacingShip:
  3805.  
  3806. ; Ends the procedure
  3807. ret
  3808.  
  3809. placeShipPlayer2 ENDP
  3810.  
  3811.  
  3812. ;-------------------------------------------------------------------------------------------------------------
  3813. ; PLAY SCREEN
  3814. ; Displays Player 1 Board and Player 2 Visible Board
  3815. ;-------------------------------------------------------------------------------------------------------------
  3816. ; GOTO PLAYSCREEN
  3817. playScreen PROC
  3818.  
  3819. call Clrscr
  3820. call screen
  3821. call displayPlayer1Board
  3822. call displayPlayer2VisibleBoard
  3823.  
  3824. ;x in dl, y in dh
  3825.  
  3826. ;;enemyGrid db "Enemy Grid", 0
  3827. ;;attack db "ATTACK THE ENEMY", 0
  3828. ;;yourTurn db "It's your turn.", 0
  3829. ;enemyHits db "Enemy Hits: ", 0
  3830. ;yourHits db "Your Hits: ", 0
  3831.  
  3832. mov dl, 62
  3833. mov dh, 26
  3834. call Gotoxy
  3835. mov esi, offset enemyHits
  3836. mov edx, esi
  3837. call WriteString
  3838.  
  3839. mov dl, 46
  3840. mov dh, 26
  3841. call Gotoxy
  3842. mov esi, offset yourHits
  3843. mov edx, esi
  3844. call WriteString
  3845.  
  3846. mov dl, 15
  3847. mov dh, 8
  3848. call Gotoxy
  3849. mov esi, offset yourTurn
  3850. mov edx, esi
  3851. call WriteString
  3852.  
  3853. mov dl, 52
  3854. mov dh, 3
  3855. call Gotoxy
  3856. mov esi, offset attack
  3857. mov edx, esi
  3858. call WriteString
  3859.  
  3860. mov dl, 15
  3861. mov dh, 24
  3862. call Gotoxy
  3863. mov esi, offset yourGrid
  3864. mov edx, esi
  3865. call WriteString
  3866. call Crlf
  3867.  
  3868. mov dl, 75
  3869. mov dh, 24
  3870. call Gotoxy
  3871. mov esi, offset enemyGrid
  3872. mov edx, esi
  3873. call WriteString
  3874. call Crlf
  3875. call pickShipsPlayer2
  3876. call guessClick
  3877. ret
  3878. playScreen ENDP
  3879.  
  3880.  
  3881. ;-------------------------------------------------------------------------------------------------------------
  3882. ; PLACES THE SHIPS FOR PLAYER 2
  3883. ;-------------------------------------------------------------------------------------------------------------
  3884. ; GOTO PICKSHIPSPLAYER2
  3885. pickShipsPlayer2 PROC
  3886.  
  3887. cmp computershipcounter, 5
  3888. jge endPlacing
  3889. jmp whichShip
  3890.  
  3891. whichShip:
  3892. cmp computershipcounter, 0
  3893. je placeShip1
  3894.  
  3895. cmp computershipcounter, 1
  3896. je placeShip2
  3897.  
  3898. cmp computershipcounter, 2
  3899. je placeShip3
  3900.  
  3901. cmp computershipcounter, 3
  3902. je placeShip4
  3903.  
  3904. cmp computershipcounter, 4
  3905. je placeShip5
  3906.  
  3907.  
  3908. placeShip1:
  3909. mov lengthship, 5
  3910. mov eax, 2
  3911. call RandomRange
  3912. mov orientation, al
  3913. call WriteInt
  3914. mov eax, 9
  3915. call RandomRange
  3916. inc eax
  3917. mov xpoint, al
  3918. call WriteInt
  3919. call RandomRange
  3920. mov ypoint, al
  3921. call WriteInt
  3922. call Crlf
  3923.  
  3924. call validShipPlacement2
  3925.  
  3926.  
  3927. placeShip2:
  3928. mov lengthship, 4
  3929. mov eax, 2
  3930. call RandomRange
  3931. mov orientation, al
  3932. call WriteInt
  3933. mov eax, 9
  3934. call RandomRange
  3935. inc eax
  3936. mov xpoint, al
  3937. call WriteInt
  3938. call RandomRange
  3939. mov ypoint, al
  3940. call WriteInt
  3941. call Crlf
  3942. call validShipPlacement2
  3943.  
  3944.  
  3945. placeShip3:
  3946. mov lengthship, 3
  3947. mov eax, 2
  3948. call RandomRange
  3949. mov orientation, al
  3950. call WriteInt
  3951. mov eax, 9
  3952. call RandomRange
  3953. inc eax
  3954. mov xpoint, al
  3955. call WriteInt
  3956. call RandomRange
  3957. mov ypoint, al
  3958. call WriteInt
  3959. call Crlf
  3960. call validShipPlacement2
  3961.  
  3962.  
  3963. placeShip4:
  3964. mov lengthship, 3
  3965. mov eax, 2
  3966. call RandomRange
  3967. mov orientation, al
  3968. call WriteInt
  3969. mov eax, 9
  3970. call RandomRange
  3971. inc eax
  3972. mov xpoint, al
  3973. call WriteInt
  3974. call RandomRange
  3975. mov ypoint, al
  3976. call WriteInt
  3977. call Crlf
  3978. call validShipPlacement2
  3979.  
  3980.  
  3981. placeShip5:
  3982. mov lengthship, 2
  3983. mov eax, 2
  3984. call RandomRange
  3985. mov orientation, al
  3986. call WriteInt
  3987. mov eax, 9
  3988. call RandomRange
  3989. inc eax
  3990. mov xpoint, al
  3991. call WriteInt
  3992. call RandomRange
  3993. mov ypoint, al
  3994. call WriteInt
  3995. call Crlf
  3996. call validShipPlacement2
  3997.  
  3998. endPlacing:
  3999. call displayPlayer2HiddenBoard
  4000. ret
  4001.  
  4002. pickShipsPlayer2 ENDP
  4003.  
  4004.  
  4005.  
  4006. ;-------------------------------------------------------------------------------------------------------------
  4007. ; PLAYER 1'S TURN
  4008. ; Needs the x and y points
  4009. ;-------------------------------------------------------------------------------------------------------------
  4010. ; GOTO PLAYER1TURN
  4011. player1Turn PROC
  4012.  
  4013. mov esi, offset player2hiddenboard
  4014. mov edi, offset player2visibleboard
  4015.  
  4016. call coordinateToIndex
  4017. mov ebx, 0
  4018. movzx ebx, indexarray
  4019. add esi, ebx
  4020. add edi, ebx
  4021. mov ebx, 0
  4022. mov bl, 254 ; ASCII for the ship
  4023. cmp [esi], bl
  4024. je player1Hits
  4025. jmp player1Misses
  4026.  
  4027.  
  4028. player1Hits:
  4029.  
  4030. mov eax, 9
  4031. call WriteInt
  4032.  
  4033. mov turnorder, 1
  4034. mov ebx, 0
  4035. mov bl, 88 ; ASCII for X
  4036. mov [edi], bl
  4037. inc scoreplayer1
  4038. cmp scoreplayer1, 17
  4039. je player1Wins
  4040. jmp endOfTurn
  4041.  
  4042.  
  4043. player1Misses:
  4044. mov turnorder, 2
  4045. mov ebx, 0
  4046. mov bl, 79
  4047. mov [edi], bl
  4048. jmp endOfTurn
  4049.  
  4050. player1Wins:
  4051. call winScreen
  4052.  
  4053. endOfTurn:
  4054. ret
  4055.  
  4056. player1Turn ENDP
  4057.  
  4058.  
  4059.  
  4060. ;-------------------------------------------------------------------------------------------------------------
  4061. ; PLAYER 2'S TURN
  4062. ;-------------------------------------------------------------------------------------------------------------
  4063. ; GOTO PLAYER2TURN
  4064. player2Turn PROC
  4065.  
  4066. mov esi, offset player1board
  4067.  
  4068. generatePoints:
  4069. mov eax, 9
  4070. call RandomRange
  4071. mov xpoint, al
  4072. call RandomRange
  4073. mov ypoint, al
  4074.  
  4075. checkHitOtNot:
  4076. mov esi, offset player1board
  4077. ; GETS THE VALUE AT THE INDEX
  4078. call coordinateToIndex
  4079. mov ebx, 0
  4080. movzx ebx, indexarray
  4081. add esi, ebx
  4082.  
  4083. mov bl, 176
  4084. cmp [esi], bl ; Checks if its an empty spot
  4085. jne itsAlreadySelected ; If its not equal
  4086.  
  4087. mov bl, 254
  4088. cmp [esi], bl ; Checks if there's a ship there
  4089. je player2Hits
  4090. jmp player2Misses
  4091.  
  4092. itsAlreadySelected:
  4093. ; Gets the x and y indexes again
  4094. call generatePoints
  4095.  
  4096. player2Hits:
  4097. mov turnorder, 2
  4098. mov ebx, 0
  4099. mov bl, 88
  4100. mov [esi], bl
  4101. inc scoreplayer2
  4102. cmp scoreplayer2, 17
  4103. je player2Wins
  4104. jmp endOfTurn
  4105.  
  4106. player2Misses:
  4107. mov turnorder, 1
  4108. mov botguesstype, 2
  4109. mov ebx, 0
  4110. mov bl, 79
  4111. mov [esi], bl
  4112. jmp endOfTurn
  4113.  
  4114. player2Wins:
  4115. call loseScreen
  4116.  
  4117. endOfTurn:
  4118. ret
  4119.  
  4120. ret
  4121. player2Turn ENDP
  4122.  
  4123. guessClick PROC
  4124.  
  4125. invoke GetStdHandle, STD_INPUT_HANDLE
  4126. mov rHnd, eax
  4127. invoke SetConsoleMode, rHnd, ENABLE_LINE_INPUT OR ENABLE_MOUSE_INPUT OR ENABLE_EXTENDED_FLAGS
  4128. appContinue:
  4129. invoke GetNumberOfConsoleInputEvents, rHnd, OFFSET numEventsOccurred
  4130. cmp numEventsOccurred, 0
  4131. je appContinue
  4132. invoke ReadConsoleInput, rHnd, OFFSET eventBuffer, numEventsOccurred, OFFSET numEventsRead
  4133. mov ecx, numEventsRead
  4134. mov esi, OFFSET eventBuffer
  4135.  
  4136. loopOverEvents:
  4137. cmp (INPUT_RECORD PTR [esi]).EventType, MOUSE_EVENT
  4138. jne notMouse
  4139. cmp (INPUT_RECORD PTR [esi]).MouseEvent.dwEventFlags, MOUSE_MOVED
  4140. jne continue
  4141. continue:
  4142. test (INPUT_RECORD PTR [esi]).MouseEvent.dwButtonState, FROM_LEFT_1ST_BUTTON_PRESSED
  4143. jz notMouse
  4144. mov edx, OFFset whereYouPressed
  4145. call WriteString
  4146. movzx eax, (INPUT_RECORD PTR [esi]).MouseEvent.dwMousePosition.x
  4147. call WriteInt
  4148. mov al, ','
  4149. call WriteChar
  4150. movzx eax, (INPUT_RECORD PTR [esi]).MouseEvent.dwMousePosition.y
  4151. call WriteInt
  4152. mov ah, ')'
  4153. call Crlf
  4154.  
  4155. jmp done
  4156.  
  4157. notMouse:
  4158. add esi, TYPE INPUT_RECORD
  4159.  
  4160. loop loopOverEvents
  4161.  
  4162. jmp appContinue
  4163.  
  4164. done:
  4165. call guessClick
  4166. add scoreplayer1, 1
  4167. call player1Turn
  4168. cmp scoreplayer1, 17
  4169. je player1Wins
  4170. jmp donedone
  4171.  
  4172. player1Wins:
  4173. call winScreen
  4174.  
  4175. donedone:
  4176. invoke ExitProcess, 0
  4177.  
  4178.  
  4179. ret
  4180. guessClick ENDP
  4181.  
  4182. ;-------------------------------------------------------------------------------------------------------------
  4183. ; ASKS THE USER FOR THEIR NAME
  4184. ; - Stores it in playername
  4185. ;-------------------------------------------------------------------------------------------------------------
  4186. askForName PROC
  4187.  
  4188. mov dl, 46
  4189. mov dh, 20
  4190.  
  4191. call Gotoxy
  4192.  
  4193. mov esi, offset promptforname
  4194. mov edx, esi
  4195. call WriteString
  4196.  
  4197. mov edx, offset playername
  4198. mov ecx, 20
  4199. call ReadString
  4200.  
  4201. ret
  4202. askForName ENDP
  4203.  
  4204. end main
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement