一个简单的贪吃蛇程序,供大家参考,具体内容如下
如图显示
导入海龟绘图库
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