Advertisement
Guest User

Untitled

a guest
May 3rd, 2018
181
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
QBasic 4.81 KB | None | 0 0
  1. SCREEN 12
  2. WIDTH 80, 60
  3. DIM a(8, 8), b(19, 2)
  4. a(4, 4) = 1: a(5, 5) = 1
  5. a(5, 4) = 2: a(4, 5) = 2
  6. 'a(2, 2) = 1: a(3, 2) = 2: a(2, 1) = 1: a(3, 1) = 2: a(2, 8) = 1: a(3, 8) = 2: a(6, 8) = 2: a(7, 8) = 1
  7. 'a(6, 7) = 2: a(7, 7) = 1: a(6, 1) = 0: a(7, 1) = 1: a(4, 1) = 2: a(1, 1) = 1: a(2, 1) = 2: a(5, 1) = 2
  8. 'a(7, 1) = 2: a(8, 1) = 1: a(8, 3) = 1: a(7, 2) = 2: a(8, 5) = 1: a(7, 4) = 2: a(6, 3) = 2: a(5, 4) = 0
  9. 'a(7, 6) = 1: a(6, 5) = 2: a(3, 6) = 2: a(2, 7) = 2: a(1, 8) = 1: a(2, 1) = 1: a(4, 3) = 2: a(5, 1) = 1
  10. 'a(5, 2) = 2: a(5, 3) = 2: a(5, 5) = 2: a(5, 6) = 2: a(5, 7) = 2: a(5, 8) = 1: a(6, 4) = 2: a(8, 4) = 1
  11. 'a(2, 4) = 2: a(3, 4) = 2: a(4, 4) = 2: a(1, 4) = 1
  12. xshift = 130
  13. yshift = 44
  14. GOSUB empty
  15. GOSUB board
  16. REM p = 1 means white player, p = 2 means black player
  17. p = 1
  18. FOR move = 1 TO 60
  19.     GOSUB Counter
  20.     p = 3 - p
  21.     DO
  22.         GOSUB ShowFlipNumbers: IF t = 0 THEN p = 3 - p: GOSUB ShowFlipNumbers: IF t = 0 THEN END
  23.         DO
  24.             DO WHILE _MOUSEINPUT: LOOP
  25.         LOOP UNTIL _MOUSEBUTTON(1) = -1
  26.         GOSUB HideFlipNumbers
  27.         x = INT((_MOUSEX - xshift) / 48) + 1
  28.         y = INT((_MOUSEY - yshift) / 48) + 1
  29.     LOOP UNTIL (x >= 1 AND x <= 8 AND y >= 1 AND y <= 8)
  30.     GOSUB legal
  31.     IF legal$ = "yes" THEN GOSUB Flip: GOSUB board
  32.     IF legal$ = "no" THEN move = move - 1: p = 3 - p
  33. NEXT move
  34. GOSUB Counter
  35. END
  36.  
  37. Counter:
  38. REM === the code will be below this LINE
  39.  
  40. REM === the code will be above this LINE
  41. RETURN
  42.  
  43. Flip:
  44. IF legal$ = "no" THEN RETURN
  45. IF legal$ = "yes" THEN
  46.     a(x, y) = p: GOSUB board: 'SLEEP 1
  47.     FOR s = 1 TO m
  48.         a(b(s, 1), b(s, 2)) = p
  49.     NEXT s
  50. END IF
  51. RETURN
  52.  
  53. HideFlipNumbers:
  54. FOR x = 1 TO 8
  55.     FOR y = 1 TO 8
  56.         IF (a(x, y) = 0) THEN
  57.             GOSUB legal
  58.             IF (legal$ = "yes") THEN
  59.                 IF p = 1 THEN c = 15: REM c = 15 means white stone colour
  60.                 IF p = 2 THEN c = 0: REM c = 0 means black stone colour
  61.                 FOR r = 19 TO 21 STEP 0.5: CIRCLE ((x - 0.5) * 48 + xshift, (y - 0.5) * 48 + yshift), r, 2: NEXT r
  62.                 LOCATE INT(((y - 0.5) * 48 + yshift) / 8 + 0.5), INT(((x - 0.5) * 48 + xshift) / 8 + 0.5) - INT(total / 10): COLOR 2, 2: PRINT total
  63.             END IF
  64.         END IF
  65.     NEXT y
  66. NEXT x
  67. RETURN
  68.  
  69. ShowFlipNumbers:
  70. t = 0
  71. FOR x = 1 TO 8
  72.     FOR y = 1 TO 8
  73.         IF (a(x, y) = 0) THEN
  74.             GOSUB legal
  75.             IF (legal$ = "yes") THEN
  76.                 t = t + 1
  77.                 IF p = 1 THEN c = 15: REM c = 15 means white stone colour
  78.                 IF p = 2 THEN c = 0: REM c = 0 means black stone colour
  79.                 FOR r = 19 TO 21 STEP 0.5: CIRCLE ((x - 0.5) * 48 + xshift, (y - 0.5) * 48 + yshift), r, c: NEXT r
  80.                 LOCATE INT(((y - 0.5) * 48 + yshift) / 8 + 0.5), INT(((x - 0.5) * 48 + xshift) / 8 + 0.5) - INT(total / 10): COLOR c, 2: PRINT total
  81.             END IF
  82.         END IF
  83.     NEXT y
  84. NEXT x
  85. RETURN
  86.  
  87. legal:
  88. legal$ = "yes"
  89. IF a(x, y) <> 0 THEN legal$ = "no": RETURN
  90. total = 0: m = 0
  91. FOR i = x - 1 TO x + 1
  92.     FOR j = y - 1 TO y + 1
  93.         IF (i >= 1 AND i <= 8 AND j >= 1 AND j <= 8) THEN
  94.             IF a(i, j) = 3 - p THEN
  95.                 n = 1: m = m + 1: dx = i - x: dy = j - y: b(m, 1) = i: b(m, 2) = j
  96.                 FOR k = 1 TO 7
  97.                     IF (i + k * dx < 1 OR i + k * dx > 8 OR j + k * dy < 1 OR j + k * dy > 8) THEN
  98.                         m = m - n: n = 0
  99.                     END IF
  100.                     IF (i + k * dx >= 1 AND i + k * dx <= 8 AND j + k * dy >= 1 AND j + k * dy <= 8) THEN
  101.                         IF (a(i + k * dx, j + k * dy) = 0) THEN m = m - n: n = 0
  102.                         IF (a(i + k * dx, j + k * dy) = 3 - p AND n > 0) THEN n = n + 1: m = m + 1: b(m, 1) = i + k * dx: b(m, 2) = j + k * dy
  103.                         IF (a(i + k * dx, j + k * dy) = p AND n > 0) THEN total = total + n: n = 0
  104.                     END IF
  105.                 NEXT k
  106.             END IF
  107.         END IF
  108.     NEXT j
  109. NEXT i
  110. IF (total = 0) THEN legal$ = "no"
  111. RETURN
  112.  
  113. empty:
  114. xb = 1: yb = 1
  115. IF xshift < xb THEN xb = 8 * 48 + 1 + xshift
  116. IF yshift < yb THEN yb = 8 * 48 + 1 + yshift
  117. PAINT (xb, yb), 2
  118. FOR i = 0 TO 8 * 48 STEP 48
  119.     LINE (i + xshift, 0 + yshift)-(i + xshift, 8 * 48 + yshift), 0
  120.     LINE (0 + xshift, i + yshift)-(8 * 48 + xshift, i + yshift), 0
  121. NEXT i
  122. PAINT (xb, yb), 8, 0
  123. RETURN
  124.  
  125. board:
  126. FOR i = 1 TO 8
  127.     FOR j = 1 TO 8
  128.         IF (a(i, j) <> 0) THEN
  129.             IF a(i, j) = 1 THEN c = 15: REM c=15 represents white stone colour
  130.             IF a(i, j) = 2 THEN c = 0: REM c=0 represents black stone colour
  131.             CIRCLE ((i - 0.5) * 48 + xshift, (j - 0.5) * 48 + yshift), 20, c
  132.             PAINT ((i - 0.5) * 48 + xshift, (j - 0.5) * 48 + yshift), c, c
  133.             CIRCLE ((i - 0.5) * 48 + xshift, (j - 0.5) * 48 + yshift), 20, 15 - c
  134.         END IF
  135.     NEXT j
  136. NEXT i
  137. RETURN
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement