主题:贪吃蛇的程序怎么编
haoleileiliying
[专家分:0] 发布于 2005-06-10 09:52:00
[em10]
回复列表 (共4个回复)
沙发
ll007 [专家分:20] 发布于 2005-06-10 16:35:00
w你把原题写出来嘛!!!!!!
板凳
li010450 [专家分:70] 发布于 2005-06-10 19:27:00
http://www.programfan.com/club/showbbs.asp?id=60778
http://www.programfan.com/club/showbbs.asp?id=49460
http://www.programfan.com/club/showbbs.asp?id=48864
3 楼
prairiewolf [专家分:290] 发布于 2005-06-25 15:38:00
你上“文曲星网站”下载一个不就行了吗
4 楼
LSQ [专家分:220] 发布于 2005-07-27 09:03:00
DECLARE SUB Food () '食物投放
DECLARE SUB headin (xx!, yy!) '画蛇头
DECLARE SUB EndOut () '擦蛇尾
DECLARE SUB delay (seconds) '时间延迟
SCREEN 12
DIM SHARED foodx AS INTEGER '记录食物坐标
DIM SHARED foody AS INTEGER
DIM SHARED snake(1 TO 2, 1 TO 5000) AS INTEGER '构造队列,用于存储坐标系列
DIM SHARED snakeh AS INTEGER
DIM SHARED snakee AS INTEGER
DIM SHARED snakelenth AS INTEGER
gamestart:
snakelenth = 0
snakeh = 1
snakee = 1
CLS
INPUT "Yow want to play witch stage(1 - 50)"; stage '用户选择游戏级别
IF stage = 0 THEN GOTO 1000
IF stage < 1 THEN stage = 1 '游戏级别合法化处理
IF stage > 50 THEN stage = 50
Grade = stage
OutGrade = 0
stage = .5 * (1 / stage)
CLS
LINE (1, 1)-(640, 480), , BF
LINE (10, 10)-(630, 470), 9, BF
DIM xx, yy
DIM SHARED way AS STRING
way = ""
xx = 60
yy = 10
CALL headin(10, 10)
CALL headin(20, 10)
CALL headin(30, 10)
CALL headin(40, 10)
CALL headin(50, 10)
CALL Food
Draws:
IF xx < 10 OR xx > 620 OR yy < 10 OR yy > 460 OR way = "stop" THEN '撞墙判断
LOCATE 1, 30
PRINT " CopyRight 2005 hguitar "
LOCATE 2, 30
PRINT "http://www.liushunqing.com ";
LOCATE 10, 1
PRINT STRING$(80, "=")
PRINT STRING$(30, " "); " Game Over "; STRING$(39, " ")
PRINT STRING$(35, " "); " Press [Esc] To Escape..."; STRING$(20, " ")
PRINT STRING$(35, " "); " Press [Enter] To Restart..."; STRING$(17, " ")
PRINT STRING$(80, " ")
PRINT STRING$(80, " ")
LOCATE 15, 40
PRINT "Your grade is:"; OutGrade
PRINT STRING$(80, "=")
DO
key$ = INKEY$
IF key$ = CHR$(27) THEN END
IF key$ = CHR$(13) THEN GOTO gamestart
LOOP
END IF
IF way <> "" THEN
IF POINT(xx + 5, yy + 5) = 0 THEN way = "stop" '撞自己判断
CALL headin(xx, yy) '画蛇头
IF xx = foodx AND yy = foody AND snakelenth <= 5000 THEN '吃蛋判断
CALL headin(xx, yy)
CALL Food '重新投放食物
CALL Food
CALL Food
CALL Food
CALL Food
CALL Food
CALL Food
OutGrade = Grade + OutGrade
CALL headin(xx, yy)
ELSEIF snakelenth > 5000 THEN
snakelenth = 5000
CALL Food '重新投放食物
CALL Food
CALL Food
CALL Food
CALL Food
CALL Food
CALL Food
OutGrade = Grade + OutGrade '计分
CALL EndOut '擦蛇尾
ELSE
CALL EndOut '擦蛇尾
END IF
END IF
Draws$ = INKEY$ '获取用户输入
IF Draws$ = CHR$(0) + CHR$(75) OR way = "r" THEN '根据用户按键选择方向
xx = xx - 10
CALL delay(stage)
ELSEIF Draws$ = CHR$(0) + CHR$(77) OR way = "l" THEN
xx = xx + 10
CALL delay(stage)
ELSEIF Draws$ = CHR$(0) + CHR$(72) OR way = "u" THEN
yy = yy - 10
CALL delay(stage)
ELSEIF Draws$ = CHR$(0) + CHR$(80) OR way = "d" THEN
yy = yy + 10
CALL delay(stage)
ELSE
CALL delay(stage)
END IF
GOTO Draws '返回,继续画蛇
1000 END
SUB delay (seconds)
delays = TIMER '利用Timer实现延时
WHILE ABS(TIMER - delays) < seconds
WEND
Draws$ = INKEY$ '获取用户输入
IF Draws$ = CHR$(27) THEN '根据用户输入选择操作方式
way = "stop"
ELSEIF Draws$ = CHR$(0) + CHR$(75) AND way <> "l" THEN
way = "r"
ELSEIF Draws$ = CHR$(0) + CHR$(77) AND way <> "r" THEN
way = "l"
ELSEIF Draws$ = CHR$(0) + CHR$(72) AND way <> "d" THEN
way = "u"
ELSEIF Draws$ = CHR$(0) + CHR$(80) AND way <> "u" THEN
way = "d"
END IF
END SUB
SUB EndOut '擦蛇尾(实质上是数据出队列的操作)
snakelenth = snakelenth - 1
IF snakelenth < 0 THEN snakelenth = 0: GOTO EndEndOut
xx = snake(1, snakee)
yy = snake(2, snakee)
snakee = (snakee + 1) MOD 5001
LINE (xx, yy)-(xx + 9, yy + 9), 9, BF
EndEndOut:
END SUB
SUB Food '食物投放过程
RANDOMIZE TIMER
ReFood:
xx = (INT(RND * 62) + 1) * 10 '随机生成食物坐标
yy = (INT(RND * 46) + 1) * 10
IF POINT(xx + 3, yy + 3) <> 9 THEN GOTO ReFood '如果不在空地上(例如蛇身上),则重新生成
LINE (xx, yy)-(xx + 9, yy + 9), , BF '画食物
foodx = xx '记录食物坐标
foody = yy
END SUB
SUB headin (xx, yy) '画蛇头,并将坐标入队列储存
snakelenth = snakelenth + 1
snake(1, snakeh) = xx
snake(2, snakeh) = yy
snakeh = (snakeh + 1) MOD 5001
LINE (xx, yy)-(xx + 9, yy + 9), 0, BF
END SUB
'加分啊,加分,我写这么多就是为了加分
我来回复