一个简单的贪吃蛇程序,供大家参考,具体内容如下
如图显示
导入海龟绘图库
1
2
|
from turtle import *
from random import randrange
|
常量设置
1
2
3
4
5
|
food_x = randrange( - 20 , 20 ) * 20
food_y = randrange( - 20 , 20 ) * 20
snack = [[ 0 , 0 ], [ 20 , 0 ], [ 40 , 0 ], [ 40 , 20 ]]
dir_x = 20
dir_y = 0
|
主函数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
if __name__ = = '__main__' :
# 设置主窗口的大小和位置
# width,height,startx,starty(初始位置距离屏幕左边和右边多少,默认中间)
setup( 800 , 800 )
# 禁用海龟动画
tracer( False )
loop_view()
listen()
onkey( lambda : control( 0 , 20 ), "w" )
onkey( lambda : control( 0 , - 20 ), "s" )
onkey( lambda : control( - 20 , 0 ), "a" )
onkey( lambda : control( 20 , 0 ), "d" )
# 开始事件循环
# 调用 Tkinter 的 mainloop 函数
# 必须作为一个海龟绘图程序的结束语句
done()
|
画正方形
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
def draw_square(x, y, size, color_name):
'''
画正方形
:param x 表示在画布的x位置
:param y 表示画布的y位置
:param size 表示正方形的长度
:param color_name 表示正方形的颜色
:return
'''
# 画笔抬起,移动的时候不画线
up()
# 是海龟不可见
ht()
# 将海龟移动到这个位置
goto(x, y)
# 画笔落下 -- 移动时将画线
down()
color( "red" , color_name)
begin_fill()
forward(size)
left( 90 )
forward(size)
left( 90 )
forward(size)
left( 90 )
forward(size)
left( 90 )
end_fill()
pass
|
在画布上画食物和蛇
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
def loop_view():
'''
循环界面
'''
global food_x, food_y
if not is_zhangqiang():
return
snack.append([snack[ - 1 ][ 0 ] + dir_x, snack[ - 1 ][ 1 ] + dir_y])
if snack[ - 1 ][ 0 ] ! = food_x or snack[ - 1 ][ 1 ] ! = food_y:
snack.pop( 0 )
else :
food_x = randrange( - 20 , 20 ) * 20
food_y = randrange( - 20 , 20 ) * 20
clear()
# 画食物
draw_square(food_x, food_y, 20 , "red" )
# 画蛇
for s in range ( len (snack)):
if s = = len (snack) - 1 :
draw_square(snack[s][ 0 ], snack[s][ 1 ], 20 , "yellow" )
continue
draw_square(snack[s][ 0 ], snack[s][ 1 ], 20 , "black" )
ontimer(loop_view, 100 )
# 执行一次 TurtleScreen 刷新。在禁用追踪时使用
update()
|
控制方向
1
2
3
4
|
def control(x,y):
global dir_x, dir_y
dir_x = x
dir_y = y
|
碰撞检测
1
2
3
4
5
|
def is_zhangqiang():
if - 400 < = snack[ - 1 ][ 0 ] < = 380 and - 400 < = snack[ - 1 ][ 1 ] < = 380 :
return True
else :
return False
|
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/m0_49368195/article/details/107892089