前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【玩转Python】DIY贪吃蛇游戏复盘

【玩转Python】DIY贪吃蛇游戏复盘

作者头像
潘永斌
发布2021-04-20 15:52:46
6870
发布2021-04-20 15:52:46
举报
文章被收录于专栏:看那个码农看那个码农

01

项目描述

项目描述:

贪吃蛇是一款比较经典的游戏,相信很多朋友们在自己手机上都玩过。

贪吃蛇通过“上”,“下”,“左”,“右”四个方向来控制蛇的移动,贪吃蛇每吃到一个食物,身体长度就会增长一次,当蛇撞到墙壁或者自己身体的时候,游戏就会结束。

本文基于Python,进行贪吃蛇游戏demo复盘。

02

项目配置

  • Python3.x
  • turtle库
  • freegames库
  • random库

turtle库:创建游戏窗体与键盘按键的监听工作。

freegames库:贪吃蛇的绘制工作

random库:导入随机函数进行随机坐标的生成工作

03

项目流程

在该贪吃蛇项目中,设计需要由整体到细节,

1.首先定义游戏窗体。

2.定义完游戏窗体后需要定义游戏的几个关键元素:

  • 食物
  • 移动距离

3.然后定义元素之间的关联关系:

  • 不断移动的蛇
  • 随机出现的食物
  • 蛇吃了食物后就会增长
  • 蛇碰到墙或者自己的身体,游戏就会结束

基于以上分析开始建立游戏demo

导入游戏需要使用的模块,函数与类。

代码语言:javascript
复制
from random import randrange
from freegames import vector,square
import turtle

定义游戏中蛇,食物,移动距离等元素的位置坐标。

代码语言:javascript
复制
food=vector(0,0)
snake=[vector(10,0)]
position=vector(0,-10)

定义change()函数,用于改变蛇的移动方向。

代码语言:javascript
复制
def change(x,y):
    position.x=x
    position.y=y

定义is_inside()函数,判断蛇头是否在窗体内。

代码语言:javascript
复制
def is_inside(head):
    return -200 < head.x <190 and -200 < head.y < 190

定义move()函数,用于实现蛇的移动以及判断蛇是否吃到食物。

代码语言:javascript
复制
实现蛇的移动,判断蛇是否吃到食物
def move():
    #确定蛇头的位置
    head = snake[-1].copy()
    
    #移动一步
    head.move(position)
    
    #判断蛇的头部是否在边缘或者蛇的身体中
    if not is_inside(head) or head in snake:
        
        #如果在,判断成立,绘制蛇头颜色,说明游戏结束
        square(head.x,head.y,9,'red')
        turtle.update()
        return
    
    #更新蛇的位置
    snake.append(head)
    
    #如果蛇吃到食物
    if head==food:
        
        #每吃到一次记录下的蛇的长度,同时也相当于游戏的得分

        print('Snake:',len(snake))
        
        #随机生成下一个食物元素x,y的坐标
        food.x == randrange(-15, 15) * 10
        food.y == randrange(-15, 15) * 10

    else:
        #清除蛇走过的坐标
        snake.pop(0)
    
    #清空蛇走过的位置
    turtle.clear()
    
    #循环遍历蛇的坐标
    for body in snake:
        
        #绘制黑色的蛇
        square(body.x,body.y,9,'black')
        
    #绘制绿色食物
    square(food.x,food.y,9,'green')

    turtle.update()
    
    #定时不断执行move函数,直到蛇碰到窗体边缘或者自己身体,函数中断,游戏中断
    turtle.ontimer(move,100)

创建程序入口,如设置程序的窗口大小。

使用move()函数实现蛇的移动效果,用按键监听实现控制蛇的移动方向。

代码语言:javascript
复制
if __name__ == '__main__':

    #定义窗体
    turtle.setup(420,420,370,0)
    turtle.hideturtle()
    turtle.tracer(False)

    #调用定义的函数
    move()

    #事件监听器
    turtle.listen()

    #监听键盘的“上”,“下”,“左”,“右”事件
    turtle.onkey(lambda: change(10,0),'Right')
    turtle.onkey(lambda: change(-10, 0), 'Left')
    turtle.onkey(lambda: change(0, 10), 'Up')
    turtle.onkey(lambda: change(0, -10), 'Down')
    turtle.done()

04

项目演示

本文参与?腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-03-27,如有侵权请联系?cloudcommunity@tencent.com 删除

本文分享自 看那个码农 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体同步曝光计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 01
  • 02
  • 03
  • 04
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com