回 帖 发 新 帖 刷新版面

主题:[原创]双人坦克

问题大多解决了
修改后的

DECLARE SUB ankey2 (j3!, j4!, ke)
DECLARE SUB htu (b1!, b2!, b3!, b4!)
DECLARE SUB ankey1 (j1, j2, ke)
SCREEN 12
COLOR 5
LOCATE 1, 57: PRINT "IGDX tank - II"
DATA 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
DATA 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
DATA 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
DATA 1,0,0,1,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,1
DATA 1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1
DATA 1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1
DATA 1,0,0,1,0,0,1,1,1,1,1,0,0,0,0,0,1,0,0,1
DATA 1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1
DATA 1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1
DATA 1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1
DATA 1,0,0,1,1,1,1,0,0,0,1,1,1,1,0,0,1,0,0,1
DATA 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
DATA 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
DATA 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
DIM SHARED t1s(120), t2x(120), t3z(120), t4y(120)
't1  shang---------------
LINE (0, 0)-(27, 27), 0, BF
LINE (7, 11)-(21, 25), 7, BF
LINE (13, 2)-(15, 12), 7, BF
FOR i = 2 TO 12 STEP 2
  LINE (7, 11 + i)-(9, 11 + i), 0
NEXT
FOR i = 2 TO 12 STEP 2
  LINE (19, 11 + i)-(21, 11 + i), 0
NEXT
GET (0, 0)-(27, 27), t1s
't2 xia------------
LINE (0, 0)-(27, 27), 0, BF
LINE (7, 2)-(21, 16), 7, BF
LINE (13, 15)-(15, 25), 7, BF
FOR i = 2 TO 12 STEP 2
  LINE (7, 2 + i)-(9, 2 + i), 0
NEXT
FOR i = 2 TO 12 STEP 2
  LINE (19, 2 + i)-(21, 2 + i), 0
NEXT
GET (0, 0)-(27, 27), t2x
't3 zuo---------
LINE (0, 0)-(27, 27), 0, BF
LINE (11, 7)-(25, 21), 7, BF
LINE (2, 13)-(12, 15), 7, BF
FOR i = 2 TO 12 STEP 2
  LINE (11 + i, 7)-(11 + i, 9), 0
NEXT
FOR i = 2 TO 12 STEP 2
  LINE (11 + i, 19)-(11 + i, 21), 0
NEXT
GET (0, 0)-(27, 27), t3z
't4 --------------------
LINE (0, 0)-(27, 27), 0, BF
LINE (2, 7)-(16, 21), 7, BF
LINE (15, 13)-(25, 15), 7, BF
FOR i = 2 TO 12 STEP 2
  LINE (2 + i, 7)-(2 + i, 9), 0
NEXT
FOR i = 2 TO 12 STEP 2
  LINE (2 + i, 19)-(2 + i, 29), 0
NEXT
GET (0, 0)-(27, 27), t4y
LINE (0, 0)-(27, 27), 0, BF
'---------------
DIM SHARED tu%(20, 14)
FOR i = 1 TO 14
FOR j = 1 TO 20
  READ tus
tu%(j, i) = tus
NEXT j, i
'hua tu --------------
FOR i = 1 TO 14
FOR j = 1 TO 20
  IF tu%(j, i) = 1 THEN
    CALL htu(j * 28, i * 28, j * 28 + 28, i * 28 + 28)
  END IF
NEXT j, i
'----------------
PUT (8 * 28, 13 * 28), t1s
PUT (12 * 28, 13 * 28), t1s
DO: LOOP UNTIL INKEY$ <> ""
PUT (8 * 28, 13 * 28), t1s
PUT (12 * 28, 13 * 28), t1s
'main()-----------------
DIM SHARED a1, a2, a3, a4, a, w, s, j1, j2, j3, j4, aa2, ww2, dd2, ss2, sc1
DIM SHARED d, up, left, et, sp, down, right, aa1, ww1, dd1, ss1, k1, k2, sc2
j1 = 12: j2 = 13: j3 = 8: j4 = 13
a1 = 12: a2 = 13: a3 = 8: a4 = 13
PUT (8 * 28, 13 * 28), t1s
PUT (12 * 28, 13 * 28), t1s
'-----main-----
DO
ke = INP(&H60)
CALL ankey1(j1, j2, ke)
CALL ankey2(j3, j4, ke)
LOOP

SUB ankey1 (j1, j2, ke)
'ankey1----------------
SELECT CASE ke
  CASE 28
    et = 28: up = 72 + 128: left = 75 + 128: down = 80 + 128: right = 77 + 128
  CASE 28 + 128
    et = 28 + 128
  CASE 72
    up = 72: et = 28 + 128: left = 75 + 128: down = 80 + 128: right = 77 + 128
  CASE 72 + 128
    up = 72 + 128
  CASE 75
    left = 75: up = 72 + 128: et = 28 + 128: down = 80 + 128: right = 77 + 128
  CASE 75 + 128
    left = 75 + 128
  CASE 80
    down = 80: up = 72 + 128: et = 28 + 128: left = 75 + 128: right = 77 + 128
  CASE 80 + 128
    down = 80 + 128
  CASE 77
    right = 77: up = 72 + 128: et = 28 + 128: left = 75 + 128: down = 80 + 128
  CASE 77 + 128
    right = 77 + 128
  CASE 1
    END
END SELECT
'-----------------------

回复列表 (共22个回复)

沙发

SELECT CASE right
  CASE 77
    IF ABS(j1 + 1 - j3) = 0 AND (ABS(j2 - j4) < 1 OR j2 = j4) AND dd1 = 1 THEN
    k1 = 1
    ELSE
    dd1 = 1: ww1 = 0: ss1 = 0: aa1 = 0: k1 = 0
    IF tu%(j1 + 1, j2 + .47) <> 1 AND tu%(j1 + 1, j2 - .47) <> 1 AND tu%(j1 + 1, j2) <> 1 THEN
      LINE (a1 * 28, a2 * 28)-(a1 * 28 + 28, a2 * 28 + 28), 0, BF
      j1 = j1 + .0625 / 2: a1 = j1
      PUT (j1 * 28, j2 * 28), t4y
    ELSEIF j1 <> INT(j1) THEN
      LINE (a1 * 28, a2 * 28)-(a1 * 28 + 28, a2 * 28 + 28), 0, BF
      j1 = j1 + .0625 / 2: a1 = j1
      PUT (j1 * 28, j2 * 28), t4y
    END IF
    END IF
END SELECT
   
SELECT CASE up
  CASE 72
    IF ABS(j2 - (j4 + 1)) = 0 AND (ABS(j1 - j3) < 1 OR j3 = j1) AND ww1 = 1 THEN
    k1 = 1
    ELSE
    ww1 = 1: ss1 = 0: aa1 = 0: dd1 = 0: k1 = 0
    IF tu%(j1 + .47, j2 - 1) <> 1 AND tu%(j1 - .47, j2 - 1) <> 1 AND tu%(j1, j2 - 1) <> 1 THEN
      LINE (a1 * 28, a2 * 28)-(a1 * 28 + 28, a2 * 28 + 28), 0, BF
      j2 = j2 - .0625 / 2: a2 = j2
      PUT (j1 * 28, j2 * 28), t1s
    ELSEIF j2 <> INT(j2) THEN
      LINE (a1 * 28, a2 * 28)-(a1 * 28 + 28, a2 * 28 + 28), 0, BF
      j2 = j2 - .0625 / 2: a2 = j2
      PUT (j1 * 28, j2 * 28), t1s
    END IF
    END IF
END SELECT

SELECT CASE left
  CASE 75
    IF ABS(j1 - (j3 + 1)) = 0 AND (ABS(j2 - j4) < 1 OR j2 = j4) AND aa1 = 1 THEN
    k1 = 1
    ELSE
    aa1 = 1: ww1 = 0: ss1 = 0: dd1 = 0: k1 = 0
    IF tu%(j1 - 1, j2 + .47) <> 1 AND tu%(j1 - 1, j2 - .47) <> 1 AND tu%(j1 - 1, j2) <> 1 THEN
      LINE (a1 * 28, a2 * 28)-(a1 * 28 + 28, a2 * 28 + 28), 0, BF
      j1 = j1 - .0625 / 2: a1 = j1
      PUT (j1 * 28, j2 * 28), t3z
    ELSEIF j1 <> INT(j1) THEN
      LINE (a1 * 28, a2 * 28)-(a1 * 28 + 28, a2 * 28 + 28), 0, BF
      j1 = j1 - .0625 / 2: a1 = j1
      PUT (j1 * 28, j2 * 28), t3z
    END IF
    END IF
END SELECT

SELECT CASE down
  CASE 80
    IF ABS(j2 + 1 - j4) = 0 AND (ABS(j1 - j3) < 1 OR j1 = j3) AND ss1 = 1 THEN
    k1 = 1
    ELSE
    ss1 = 1: ww1 = 0: aa1 = 0: dd1 = 0: k1 = 0
    IF tu%(j1 + .47, j2 + 1) <> 1 AND tu%(j1 - .47, j2 + 1) <> 1 AND tu%(j1, j2 + 1) <> 1 THEN
      LINE (a1 * 28, a2 * 28)-(a1 * 28 + 28, a2 * 28 + 28), 0, BF
      j2 = j2 + .0625 / 2: a2 = j2
      PUT (j1 * 28, j2 * 28), t2x
    ELSEIF j2 <> INT(j2) THEN
      LINE (a1 * 28, a2 * 28)-(a1 * 28 + 28, a2 * 28 + 28), 0, BF
      j2 = j2 + .0625 / 2: a2 = j2
      PUT (j1 * 28, j2 * 28), t2x
    END IF
    END IF
END SELECT

SELECT CASE et
  CASE 28
    IF k1 = 1 THEN
      CIRCLE (j3 * 28 + 14, j4 * 28 + 14), 6, 2
      PAINT (j3 * 28 + 14, j4 * 28 + 14), 2
      sc1 = sc1 + 1
      LOCATE 28, 3: PRINT "1p"; sc1
    k1 = 0
    END IF
END SELECT
END SUB

SUB ankey2 (j3, j4, ke)
'ankey2-----------------
SELECT CASE ke
  CASE 57
    sp = 57: d = 32 + 128: a = 30 + 128: w = 17 + 128: s = 31 + 128
  CASE 57 + 128
    sp = 57 + 128
  CASE 17
    w = 17: sp = 57 + 128: d = 32 + 128: a = 30 + 128: s = 31 + 128
  CASE 17 + 128
    w = 17 + 128
  CASE 30
    a = 30: sp = 57 + 128: d = 32 + 128: w = 17 + 128: s = 31 + 128
  CASE 30 + 128
    a = 30 + 128
  CASE 31
    s = 31: sp = 57 + 128: d = 32 + 128: a = 30 + 128: w = 17 + 128
  CASE 31 + 128
    s = 31 + 128
  CASE 32
    d = 32: sp = 57 + 128: a = 30 + 128: w = 17 + 128: s = 31 + 128
  CASE 32 + 128
    d = 32 + 128
  CASE 1
    END
END SELECT
'-----------------------
SELECT CASE d
  CASE 32
    IF ABS(j3 + 1 - j1) = 0 AND (ABS(j4 - j2) < 1 OR j4 = j2) AND dd2 = 1 THEN
      k2 = 1
    ELSE
      k2 = 0
      dd2 = 1: ww2 = 0: aa2 = 0: ss2 = 0
      IF tu%(j3 + 1, j4 + .47) <> 1 AND tu%(j3 + 1, j4 - .47) <> 1 AND tu%(j3 + 1, j4) <> 1 THEN
        LINE (a3 * 28, a4 * 28)-(a3 * 28 + 28, a4 * 28 + 28), 0, BF
        j3 = j3 + .0625 / 2: a3 = j3
        PUT (j3 * 28, j4 * 28), t4y
      ELSEIF j3 <> INT(j3) THEN
        LINE (a3 * 28, a4 * 28)-(a3 * 28 + 28, a4 * 28 + 28), 0, BF
        j3 = j3 + .0625 / 2: a3 = j3
        PUT (j3 * 28, j4 * 28), t4y
      END IF
    END IF
END SELECT

SELECT CASE w
  CASE 17
    IF (ABS(j3 - j1) < 1 OR j3 = j1) AND ABS(j4 - (j2 + 1)) = 0 AND ww2 = 1 THEN
      k2 = 1
    ELSE
      k2 = 0
      ww2 = 1: dd2 = 0: aa2 = 0: ss2 = 0
      IF tu%(j3 + .47, j4 - 1) <> 1 AND tu%(j3 - .47, j4 - 1) <> 1 AND tu%(j3, j4 - 1) <> 1 THEN
        LINE (a3 * 28, a4 * 28)-(a3 * 28 + 28, a4 * 28 + 28), 0, BF
        j4 = j4 - .0625 / 2: a4 = j4
        PUT (j3 * 28, j4 * 28), t1s
      ELSEIF j4 <> INT(j4) THEN
        LINE (a3 * 28, a4 * 28)-(a3 * 28 + 28, a4 * 28 + 28), 0, BF
        j4 = j4 - .0625 / 2: a4 = j4
        PUT (j3 * 28, j4 * 28), t1s
      END IF
    END IF
END SELECT

板凳

SELECT CASE a
  CASE 30
    IF ABS(j3 - (j1 + 1)) = 0 AND (ABS(j4 - j2) < 1 OR j4 = j2) AND aa2 = 1 THEN
      k2 = 1
    ELSE
      k2 = 0
      aa2 = 1: dd2 = 0: ww2 = 0: ss2 = 0
      IF tu%(j3 - 1, j4 + .47) <> 1 AND tu%(j3 - 1, j4 - .47) <> 1 AND tu%(j3 - 1, j4) <> 1 THEN
        LINE (a3 * 28, a4 * 28)-(a3 * 28 + 28, a4 * 28 + 28), 0, BF
        j3 = j3 - .0625 / 2: a3 = j3
        PUT (j3 * 28, j4 * 28), t3z
      ELSEIF j3 <> INT(j3) THEN
        LINE (a3 * 28, a4 * 28)-(a3 * 28 + 28, a4 * 28 + 28), 0, BF
        j3 = j3 - .0625 / 2: a3 = j3
        PUT (j3 * 28, j4 * 28), t3z
      END IF
    END IF
END SELECT

SELECT CASE s
  CASE 31
    IF (ABS(j3 - j1) < 1 OR j3 = j1) AND ABS(j4 + 1 - j2) = 0 AND ss2 = 1 THEN
      k2 = 1
    ELSE
      k2 = 0
      ss2 = 1: dd2 = 0: ww2 = 0: aa2 = 0
      IF tu%(j3 + .47, j4 + 1) <> 1 AND tu%(j3 - .47, j4 + 1) <> 1 AND tu%(j3, j4 + 1) <> 1 THEN
        LINE (a3 * 28, a4 * 28)-(a3 * 28 + 28, a4 * 28 + 28), 0, BF
        j4 = j4 + .0625 / 2: a4 = j4
        PUT (j3 * 28, j4 * 28), t2x
      ELSEIF j4 <> INT(j4) THEN
        LINE (a3 * 28, a4 * 28)-(a3 * 28 + 28, a4 * 28 + 28), 0, BF
        j4 = j4 + .0625 / 2: a4 = j4
        PUT (j3 * 28, j4 * 28), t2x
      END IF
    END IF
END SELECT

SELECT CASE sp
  CASE 57
    IF k2 = 1 THEN
     CIRCLE (j1 * 28 + 14, j2 * 28 + 14), 5, 14
     PAINT (j1 * 28 + 14, j2 * 28 + 14), 14
     sc2 = sc2 + 1
     LOCATE 28, 73: PRINT "2p"; sc2
     k2 = 0
    END IF
END SELECT
END SUB

SUB htu (b1, b2, b3, b4)
  LINE (b1, b2)-(b3, b4), 6, BF
  LINE (b1 + 1, b2 + 1)-(b3 - 1, b4 - 1), 7, B
END SUB

3 楼

图形做得还不错,

只是存在不少意想不到的漏洞.

应该是因为思考不周全.

1. 其中一辆坦克可以越过另一架,而且越过后第二辆不动的话,无法恢复显示
2. 按键方面也有点漏洞,有些时候没按键,但屏幕上坦克一直拼命跑,而且闪得严重
3. 某些墙甚至可以穿越,而且无法恢复,
   很奇怪,在某一个地方可以穿越,其他地方无法逾越.
   墙很容易出现不应该的屏幕破坏.

4 楼

望多多指点小弟

5 楼

qb论坛让我收益颇多

6 楼

[em1]

7 楼

我对图形操作的确不在行
只是粗略说说我肤浅的看法

1. A. 控制两坦克不可相交穿越
   B. 如果允许穿越,穿越后需要刷新两坦克图像
2. 准确检查前方是否无法逾越的障碍
3. 按键控制方面我还是建议使用inkey$
   如果需要检测同时按键的话,
   建议参考一下那张贴--"多重按键检测"

8 楼

好了
就是有些闪
其它问题解决了

9 楼

怎么没有敌人的坦克?

10 楼

对打的
在零距离按空格 回车

我来回复

您尚未登录,请登录后再回复。点此登录或注册