python pygame实现贪食蛇
文章目录步骤2、创建snake.py然后运行即可操作方式解读很简单的一个例子开启小游戏制作大门。步骤1、安装依赖pip install pygame2、创建snake.py然后运行即可代码importpygameimporttimeimportrandom# --- 1. 初始化 Pygame ---pygame.init()# --- 2. 定义颜色 (RGB 格式) ---WHITE(255,255,255)YELLOW(255,255,102)BLACK(0,0,0)RED(213,50,80)GREEN(0,255,0)BLUE(50,153,213)# --- 3. 设置屏幕尺寸 ---dis_width600dis_height400dispygame.display.set_mode((dis_width,dis_height))pygame.display.set_caption(Pygame 贪吃蛇案例)# --- 4. 游戏时钟 (控制帧率) ---clockpygame.time.Clock()# --- 5. 定义蛇的参数 ---snake_block10# 蛇身每一格的大小snake_speed15# 游戏速度# --- 6. 设置字体 ---# 尝试使用系统默认字体如果失败则使用备用字体font_stylepygame.font.SysFont(bahnschrift,25)score_fontpygame.font.SysFont(comicsansms,35)defyour_score(score):显示当前分数valuescore_font.render(分数: str(score),True,YELLOW)dis.blit(value,[0,0])defour_snake(snake_block,snake_list):绘制蛇身forxinsnake_list:pygame.draw.rect(dis,GREEN,[x[0],x[1],snake_block,snake_block])defmessage(msg,color):显示游戏结束信息mesgfont_style.render(msg,True,color)# 将文字居中显示text_rectmesg.get_rect(center(dis_width/2,dis_height/2))dis.blit(mesg,text_rect)defgameLoop():游戏主循环game_overFalsegame_closeFalse# 蛇的初始位置 (屏幕中心)x1dis_width/2y1dis_height/2x1_change0y1_change0snake_List[]Length_of_snake1# 随机生成第一个食物位置foodxround(random.randrange(0,dis_width-snake_block)/10.0)*10.0foodyround(random.randrange(0,dis_height-snake_block)/10.0)*10.0whilenotgame_over:# --- 游戏结束界面循环 ---whilegame_closeTrue:dis.fill(BLACK)message(游戏结束! 按Q-退出 或 C-重玩,RED)your_score(Length_of_snake-1)pygame.display.update()foreventinpygame.event.get():ifevent.typepygame.KEYDOWN:ifevent.keypygame.K_q:game_overTruegame_closeFalseifevent.keypygame.K_c:gameLoop()# --- 事件监听 (按键控制) ---foreventinpygame.event.get():ifevent.typepygame.QUIT:game_overTrueifevent.typepygame.KEYDOWN:ifevent.keypygame.K_LEFT:x1_change-snake_block y1_change0elifevent.keypygame.K_RIGHT:x1_changesnake_block y1_change0elifevent.keypygame.K_UP:y1_change-snake_block x1_change0elifevent.keypygame.K_DOWN:y1_changesnake_block x1_change0# --- 边界检测 ---ifx1dis_widthorx10ory1dis_heightory10:game_closeTrue# 更新位置x1x1_change y1y1_change dis.fill(BLACK)# 背景色# --- 绘制食物 ---pygame.draw.rect(dis,RED,[foodx,foody,snake_block,snake_block])# --- 蛇身逻辑 ---snake_Head[]snake_Head.append(x1)snake_Head.append(y1)snake_List.append(snake_Head)iflen(snake_List)Length_of_snake:delsnake_List[0]# --- 自身碰撞检测 (吃到自己) ---forxinsnake_List[:-1]:ifxsnake_Head:game_closeTrueour_snake(snake_block,snake_List)your_score(Length_of_snake-1)pygame.display.update()# --- 吃食物检测 ---ifx1foodxandy1foody:foodxround(random.randrange(0,dis_width-snake_block)/10.0)*10.0foodyround(random.randrange(0,dis_height-snake_block)/10.0)*10.0Length_of_snake1clock.tick(snake_speed)pygame.quit()quit()# 启动游戏if__name____main__:gameLoop()操作方式按方向键即可运行起来。如果game over了按q键即可退出(如果q无效看是否是英文模式)。解读1、初始化与设置pygame.init()必须首先调用用于初始化所有 Pygame 模块。snake_block 10定义了蛇身和食物的大小。snake_speed 15控制游戏循环的速度数值越大蛇跑得越快。2、游戏主循环 (gameLoop)这是游戏的心脏。只要 game_over 为 False循环就会一直运行。clock.tick(snake_speed)这行代码限制了循环每秒运行的次数从而控制游戏速度。3、事件监听通过 pygame.event.get() 获取用户的操作。我们监听 pygame.KEYDOWN 事件来判断用户按下了哪个方向键并改变蛇的坐标变化量 (x1_change, y1_change)。4、蛇的移动原理蛇其实是一个坐标列表 (snake_List)。每一帧我们计算蛇头的新坐标将其加入列表末尾。如果蛇没有吃到食物我们就删除列表的第一个元素蛇尾这样蛇看起来就在移动。如果吃到了食物就不删除蛇尾蛇的长度自然就增加了。5、碰撞检测撞墙判断蛇头的坐标是否超出了屏幕的长宽。撞自己遍历蛇身列表看蛇头坐标是否与身体任何一部分重合。吃食物判断蛇头坐标是否与食物坐标完全一致。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2488384.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!