python实现简单贪吃蛇小游戏

 更新时间:2022年06月08日 11:52:04   作者:側耳听偑  
这篇文章主要为大家详细介绍了python实现简单贪吃蛇小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了python实现简单贪吃蛇的具体代码,供大家参考,具体内容如下

1. 导入游戏库

import pgzrun
import random

2.游戏初始化

# 窗口大小
WIDTH = 600
HEIGHT = 480
# 贪吃蛇
bodys = [ [100,100],[80,100], [60,100], [40,100], [20,100]]
head = [100,100]
d = 'right'
# 食物
food = [290,290]
# 得分
score=0

3.游戏窗口绘制

def draw():
#清空屏幕
screen.clear()
# 绘制网格
for i in range(1,24):
screen.draw.line((0,i*20),(600,i*20),'gray')
for i in range(1,30):
screen.draw.line((i*20,0),(i*20,480),'gray')
#绘制蛇
for body in bodys:
rect = Rect(body,(20,20))
screen.draw.filled_rect(rect,(0,0,255))
inner = [body[0]+2,body[1]+2]
rect = Rect(inner, (15, 15),center='center')
screen.draw.filled_rect(rect, (0, 0, 180))
# 绘制头
rect = Rect(head, (20, 20))
screen.draw.filled_rect(rect, (0, 200,0))
inner = [head[0] + 2, head[1] + 2]
rect = Rect(inner, (15, 15))
screen.draw.filled_rect(rect, (0, 255, 12))
# 绘制食物
screen.draw.filled_circle(food,10, '#ffddee')
# 绘制得分
screen.draw.text('score:'+str(score),(20, 20), color="orange",fontsize=30)

4.蛇的移动功能

def run():
global food,d,head,bodys,score
# 新增一个格子的身体
if d=='right':
head[0] += 20
elif d=='left':
head[0] -= 20
elif d=='up':
head[1] -= 20
else:
head[1] += 20
bodys.insert(0,list(head))
if head[0] == food[0]-10 and head[1] == food[1] - 10:
food = [random.randint(1,30)*20-10,random.randint(1,20)*20-10]
score+=1
if score>3:
clock.unschedule(run)
clock.schedule_interval(run, 0.1)
else:
bodys.pop()
# 撞墙后重新开始
if head[0]<0 or head[0]>580 or head[1]<0 or head[1]>480 or head in
bodys[1:]:
# 蛇回到初始位置
bodys = [[100, 100], [80, 100], [60, 100], [40, 100], [20, 100]]
head = [100, 100]
# 方向向右
d = 'right'
# 得分清零
score=0
clock.unschedule(run)
clock.schedule_interval(run, 0.3)

5.按键控制蛇的行走方向

# 按键控制蛇的行走方向
def on_key_down(key):
global d
# 改变方向
if key == keys.DOWN and d != 'up':
d = 'down'
if key == keys.UP and d != 'down':
d = 'up'
if key == keys.LEFT and d != 'right':
d = 'left'
if key == keys.RIGHT and d != 'left':
d = 'right'

6.启动游戏

# 定时设置
clock.schedule_interval(run, 0.3)
# 播放音乐
music.play('music.mp3')
# 启动游戏
pgzrun.go()

完整代码

# 1.导入库
import pgzrun
import random

# 2.初始化
# 窗口大小
WIDTH = 600
HEIGHT = 480
# 贪吃蛇
bodys = [[100, 100], [80, 100], [60, 100], [40, 100], [20, 100]]
head = [100, 100]
d = 'right'
# 食物
food = [290, 290]
# 得分
score = 0

# 3.游戏窗口绘制
def draw():
    # 清空屏幕
    screen.clear()
    # 绘制网格
    for i in range(1, 24):
        screen.draw.line((0, i * 20), (600, i * 20), 'gray')
    for i in range(1, 30):
        screen.draw.line((i * 20, 0), (i * 20, 480), 'gray')
    # 绘制蛇
    for body in bodys:
        rect = Rect(body, (20, 20))
        screen.draw.filled_rect(rect, (0, 0, 255))
        inner = [body[0] + 2, body[1] + 2]
        rect = Rect(inner, (15, 15), center='center')
        screen.draw.filled_rect(rect, (128, 0, 128)) # 紫色

    # 绘制头
    rect = Rect(head, (20, 20))
    screen.draw.filled_rect(rect, (0, 200, 0))
    inner = [head[0] + 2, head[1] + 2]
    rect = Rect(inner, (15, 15))
    screen.draw.filled_rect(rect, (0, 255, 12))
    # 绘制食物 颜色为红色
    screen.draw.filled_circle(food, 10, '#ff0000')
    # 绘制得分
    screen.draw.text('score:' + str(score), (20, 20), color="red", fontsize=30)

# 4.蛇的移动功能
def run():
    global food, d, head, bodys, score
    # 新增一个格子的身体
    if d == 'right':
        head[0] += 20
    elif d == 'left':
        head[0] -= 20
    elif d == 'up':
        head[1] -= 20
    else:
        head[1] += 20
    bodys.insert(0, list(head))
    if head[0] == food[0] - 10 and head[1] == food[1] - 10:
        food = [random.randint(1, 30) * 20 - 10, random.randint(1, 20) * 20 - 10]
        score += 1
        if score > 10:
            clock.unschedule(run)
            clock.schedule_interval(run, 0.1)
    else:
        bodys.pop()
    # 撞墙后重新开始
    if head[0] < 0 or head[0] > 580 or head[1] < 0 or head[1] > 480 or head in bodys[1:]:
        # 蛇回到初始位置
        bodys = [[100, 100], [80, 100], [60, 100], [40, 100], [20, 100]]
        head = [100, 100]
        # 方向向右
        d = 'right'
        # 得分清零
        score = 0
        clock.unschedule(run)
        clock.schedule_interval(run, 0.3)


# 按键控制蛇的行走方向
def on_key_down(key):
    global d
    # 改变方向
    if key == keys.DOWN and d != 'up':
        d = 'down'
    if key == keys.UP and d != 'down':
        d = 'up'
    if key == keys.LEFT and d != 'right':
        d = 'left'
    if key == keys.RIGHT and d != 'left':
        d = 'right'

# 6.启动游戏
# 定时设置
clock.schedule_interval(run, 0.3)
# 播放音乐
music.play('music.mp3')
# 启动游戏
pgzrun.go()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • python保留小数位的三种实现方法

    python保留小数位的三种实现方法

    本文给大家分享python保留小数位的三种方法,代码简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-01-01
  • Python中类似于jquery的pyquery库用法分析

    Python中类似于jquery的pyquery库用法分析

    这篇文章主要介绍了Python中类似于jquery的pyquery库用法,结合实例形式分析了pyquery库的概念、原理、使用方法及操作技巧,需要的朋友可以参考下
    2019-12-12
  • python实现装饰器、描述符

    python实现装饰器、描述符

    本篇文章通过代码实例给大家分享了python实现装饰器、描述符模拟代码的过程,对戏需要的读者可以参考下。
    2018-02-02
  • 基于Python实现牛牛套圈小游戏的示例代码

    基于Python实现牛牛套圈小游戏的示例代码

    “幸运牛牛套圈圈”套住欢乐,圈住幸福,等你来挑战!这篇文章小编主要为大家介绍一款基于Python实现牛牛套圈小游戏,感兴趣的小伙伴可以了解一下
    2023-02-02
  • 520使用Python实现“我爱你”表白

    520使用Python实现“我爱你”表白

    这篇文章主要介绍了520使用Python实现“我爱你”表白,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • Python类方法__init__和__del__构造、析构过程分析

    Python类方法__init__和__del__构造、析构过程分析

    这篇文章主要介绍了Python类方法__init__和__del__构造、析构过程分析,本文分析了什么时候构造、什么时候析构、成员变量如何处理、Python中的共享成员函数如何访问等问题,需要的朋友可以参考下
    2015-03-03
  • Django1.11配合uni-app发起微信支付的实现

    Django1.11配合uni-app发起微信支付的实现

    这篇文章主要介绍了Django1.11配合uni-app发起微信支付的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • Python Flask利用SocketIO库实现图表的绘制

    Python Flask利用SocketIO库实现图表的绘制

    这篇文章主要为大家详细介绍了Python Flask框架如何利用SocketIO库实现图表的绘制,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起了解一下
    2022-12-12
  • Python+matplotlib+numpy绘制精美的条形统计图

    Python+matplotlib+numpy绘制精美的条形统计图

    这篇文章主要介绍了Python+matplotlib+numpy绘制精美的条形统计图,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • Python关于时间序列calendar模块的深入讲解

    Python关于时间序列calendar模块的深入讲解

    calendar,是与日历相关的模块。calendar模块文件里定义了很多类型,主要有Calendar,TextCalendar以及HTMLCalendar类型。其中,Calendar是TextCalendar与HTMLCalendar的基类
    2021-11-11

最新评论