回 帖 发 新 帖 刷新版面

主题:求用QB做的贪吃蛇程序(详细过程)

我找来找去就是没有用QB做的贪吃蛇程序,求求大家了![em1][em2][em6][em18][em10][em53][em21]

回复列表 (共23个回复)

11 楼

不是在论坛里找,而是在存档旧帖里找,现在谁还写贪吃蛇了

12 楼

请问旧帖在哪?????????????

13 楼

是授人以鱼不如授人以渔。。。

14 楼

你以为冷石不知道这句话吗?哈哈哈哈

15 楼

好象我没怎么玩过贪吃蛇,于是找网上的一些玩了一下,对照这些实例程序,我想了一下,觉得要实现的话也并不太简单啊,呵呵。

16 楼

如果需要边框,先初始化边框,(随便用个什么图形圈一圈就是了,以后要美观的时候再改就是了)
再想想用什么来做蛇,(随便用个什么图形吧)
然后用什么来标记蛇,大多数人会用数组,如果是我会用字符串.

先想一想布局用什么来处理,
怎样检测下一个点是否合法,
  是不是蛇身? - 落败结束
  是不是墙壁? - 落败结束
  是不是食物? - 如果有食物的话,怎样吃,吃完后是不是加长蛇头.
  以上都不是:   把蛇尾清除,放到蛇头去.(怎样实现?)
  是否有键缓冲: - 上下左右?  - 用什么来标志方向? 修改方向.
                  暂停?结束?从头开始?
  是否需要设置速度越来越快?
                  
我倒是有兴趣做做,但又怕大家说我喂鱼.

17 楼

做一个框架出来嘛,呵呵。

18 楼

MOZ你不用做了,你做的一定相当出色,我们大家都知道了

19 楼

准确的程序还是没有耶!

20 楼

CONST snakespeed = 150, maxlenth = 200
DECLARE SUB food ()
DECLARE SUB judge ()
DECLARE SUB changearry ()
DECLARE SUB movesnake (x$)
DECLARE SUB showsnake ()
DECLARE SUB initiate ()
SCREEN 12
TYPE snaketype
x AS INTEGER
y AS INTEGER
isbody AS INTEGER
END TYPE
DIM SHARED snake(maxlenth) AS snaketype, snakelenth, foodx, foody, havefood
LINE (0, 0)-(639, 460), 3, B
CALL initiate
DO
  CALL showsnake
  DO
    LOCATE 1, 1
    PRINT "."
    xx$ = INKEY$
    i = i + 1
  LOOP UNTIL xx$ <> "" OR i > snakespeed
  i = 0
  IF xx$ <> "" THEN x$ = xx$
  IF x$ = "t" THEN
    END
  END IF
  CALL movesnake(x$)
  CALL judge
  CALL food
  IF snakelenth = maxlenth THEN
    CLS
    LOCATE 10, 30
    PRINT "GOOD JOB!"
    LOCATE 12, 30
    PRINT "CONGRATULATIONS!!!"
    END
  END IF
LOOP

SUB changearry
FOR i = maxlenth TO 2 STEP -1
  snake(i).x = snake(i - 1).x
  snake(i).y = snake(i - 1).y
NEXT i
END SUB

SUB food
RANDOMIZE TIMER
IF havefood = 0 THEN
foodx = INT(RND * 63) + 1: foody = INT(RND * 45) + 1
havefood = 1
END IF
IF snake(1).x = foodx AND snake(1).y = foody THEN
  havefood = 0
  snakelenth = snakelenth + 1
  snake(snakelenth).isbody = 1
END IF
CIRCLE (foodx * 10, foody * 10), 4, 5
END SUB

SUB initiate
snakelenth = 3
snake(1).x = 10: snake(1).y = 10: snake(1).isbody = 1
snake(2).x = 9: snake(2).y = 10: snake(2).isbody = 1
snake(3).x = 8: snake(3).y = 10: snake(3).isbody = 1
END SUB

SUB judge
IF snake(1).x = 0 OR snake(1).y = 0 OR snake(1).x = 64 OR snake(1).y = 46 THEN
END
END IF
FOR i = 2 TO snakelenth
  IF snake(1).x = snake(i).x AND snake(1).y = snake(i).y AND snake(i).isbody = 1 THEN
    END
  END IF
NEXT i
END SUB

SUB movesnake(x$)
IF x$ = "w" THEN
  CALL changearry
  snake(1).y = snake(1).y - 1
ELSEIF x$ = "s" THEN
  CALL changearry
  snake(1).y = snake(1).y + 1
ELSEIF x$ = "a" THEN
  CALL changearry
  snake(1).x = snake(1).x - 1
ELSEIF x$ = "d" THEN
  CALL changearry
  snake(1).x = snake(1).x + 1
END IF
END SUB

SUB showsnake
FOR i = 1 TO maxlenth
  IF snake(i).isbody = 1 THEN
    CIRCLE (snake(i).x * 10, snake(i).y * 10), 4, 3
  END IF
NEXT i
CIRCLE (snake(snakelenth + 1).x * 10, snake(snakelenth + 1).y * 10), 4, 0
END SUB
 
强强编的

我来回复

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