怎样使用Pyglet库给推箱子游戏画关卡地图

这篇具有很好参考价值的文章主要介绍了怎样使用Pyglet库给推箱子游戏画关卡地图。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

pyglet库

画图事件

按键事件

程序扩展

关卡地图


pyglet库

是一个跨平台的Python多媒体库,提供了一个简单易用的接口来创建窗口、加载图像和视频、播放音频、处理用户输入事件以及进行2D图形绘制。特别适合用于游戏开发、视听应用以及其它需要高效图形渲染和音频播放的项目。基础内容请参阅《初步探索Pyglet库:打造轻量级多媒体与游戏开发利器》(链接:)。

怎样使用Pyglet库给推箱子游戏画关卡地图,Python,游戏,python

画图事件

@window.event
def on_draw():
    window.clear()

按键事件

@window.event
def on_key_press(symbol, modifiers):
    if symbol == key.LEFT:
        ......

用这两个事件就能控制在屏幕上作画,完整代码如下:

import pyglet
from pyglet.window import key

WIDTH, HEIGHT = 900, 600
SKYBLUE = (176, 196, 222, 255)
window = pyglet.window.Window(WIDTH, HEIGHT)
pyglet.gl.glClearColor(*map(lambda x:x/255, SKYBLUE))

body = pyglet.resource.image('person.png')

x, y = 7, 5
maps = [(x*60, y*60)]

@window.event
def on_draw():
    window.clear()
    for x, y in maps:
        body.blit(x, y)

@window.event
def on_key_press(symbol, modifiers):
    x, y = maps[-1]
    if symbol in (key.A, key.LEFT):
        cur = (x-60, y)
    elif symbol in (key.D, key.RIGHT):
        cur = (x+60, y)
    elif symbol in (key.W, key.UP):
        cur = (x, y+60)
    elif symbol in (key.S, key.DOWN):
        cur = (x, y-60)
    maps.append(cur)

pyglet.app.run()


此时,没有对边界作限制,图画可以移到界面之外。边界控制如下:

if 0 <= cur[0] < WIDTH and 0 <= cur[1] < HEIGHT:

怎样使用Pyglet库给推箱子游戏画关卡地图,Python,游戏,python

再加一个图片,形成像贪吃蛇一样在屏幕上游动,但加了界限已出不了屏幕了: 

import pyglet
from pyglet.window import key

WIDTH, HEIGHT = 900, 600
SKYBLUE = (176, 196, 222, 255)
window = pyglet.window.Window(WIDTH, HEIGHT)
pyglet.gl.glClearColor(*map(lambda x:x/255, SKYBLUE))

wall = pyglet.resource.image('wall.png')
body = pyglet.resource.image('person.png')

x, y = 7, 5
maps = [(x*60, y*60)]

@window.event
def on_draw():
    window.clear()
    for x, y in maps:
        wall.blit(x, y)
    body.blit(x, y)

@window.event
def on_key_press(symbol, modifiers):
    x, y = maps[-1]
    if symbol in (key.A, key.LEFT):
        cur = (x-60, y)
    elif symbol in (key.D, key.RIGHT):
        cur = (x+60, y)
    elif symbol in (key.W, key.UP):
        cur = (x, y+60)
    elif symbol in (key.S, key.DOWN):
        cur = (x, y-60)
    if 0 <= cur[0] < WIDTH and 0 <= cur[1] < HEIGHT:
        maps.append(cur)

pyglet.app.run()

程序扩展

上面代码基本功能已实现,现在再增加一个label标签,一个红色圆圈。

分别用来显示提示消息,表示当前坐标位置:

label = pyglet.text.Label('hello word', font_size=16, x=20, y=20)

circle = pyglet.shapes.Circle(0, 0, r, color=RED)

怎样使用Pyglet库给推箱子游戏画关卡地图,Python,游戏,python

假定推箱子游戏的地图分别由’blink','wall','floor','box0','person','target','box1'组成,在画地图时按需要不断切换就能制作游戏关卡的地图了:

怎样使用Pyglet库给推箱子游戏画关卡地图,Python,游戏,python

完整代码如下:

import pyglet
from pyglet.window import key

WIDTH, HEIGHT = 900, 600
SKYBLUE = (176, 196, 222, 255)
RED = (255, 0, 0, 255)
window = pyglet.window.Window(WIDTH, HEIGHT)
pyglet.gl.glClearColor(*map(lambda x:x/255, SKYBLUE))

Images = 'blink','wall','floor','box0','person','target','box1'
Object = [pyglet.resource.image(f'{img}.png') for img in Images]

w, r, x, y = 60, 8, 7, 5
obj = 2
maps = [[x*w, y*w, obj]]
curxy = maps[0]

circle = pyglet.shapes.Circle(0, 0, r, color=RED)
label = pyglet.text.Label(f'请按0-6选择图例,当前图例为:{Images[obj]}', font_size=16, x=20, y=20)
                
@window.event
def on_draw():
    window.clear()
    for x, y, obj in maps:
        Object[obj].blit(x, y)
    circle.draw()
    circle.x, circle.y = (i+w/2 for i in (x,y))
    label.draw()
    
@window.event
def on_key_press(symbol, modifiers):
    global obj,curxy
    x, y, _ = maps[-1]
    if symbol in range(48,55):
        obj = symbol-48
        label.text = f'请按0-6选择图例,当前图例为:{Images[obj]}'
    elif symbol in (key.A, key.LEFT):
        curxy = x-w, y, obj
    elif symbol in (key.D, key.RIGHT):
        curxy = x+w, y, obj
    elif symbol in (key.W, key.UP):
        curxy = x, y+w, obj
    elif symbol in (key.S, key.DOWN):
        curxy = x, y-w, obj
    if 0 <= curxy[0] < WIDTH and 60 <= curxy[1] < HEIGHT:
        maps.append(list(curxy))

pyglet.app.run()

关卡地图

再来尝试画一个难度大一点关卡: 

怎样使用Pyglet库给推箱子游戏画关卡地图,Python,游戏,python

此时,我们得到的地图列表为:

[[420, 300, 2], [360, 300, 2], [300, 300, 2], [240, 300, 2], [180, 300, 2], [180, 300, 2], [180, 240, 1], [180, 180, 1], [180, 120, 1], [240, 120, 1], [300, 120, 1], [360, 120, 1], [420, 120, 1], [480, 120, 1], [540, 120, 1], [600, 120, 1], [660, 120, 1], [660, 180, 1], [660, 180, 1], [600, 180, 2], [540, 180, 2], [480, 180, 2], [420, 180, 2], [360, 180, 2], [300, 180, 2], [300, 180, 2], [240, 180, 4], [240, 180, 4], [240, 240, 3], [300, 240, 3], [360, 240, 3], [420, 240, 3], [480, 240, 3], [540, 240, 3], [600, 240, 3], [600, 240, 3], [660, 240, 2], [660, 240, 2], [660, 300, 1], [660, 240, 1], [660, 300, 1], [660, 300, 1], [660, 300, 1], [600, 300, 5], [540, 300, 5], [480, 300, 5], [480, 300, 5], [420, 300, 1], [420, 300, 1], [360, 300, 5], [300, 300, 5], [240, 300, 5], [240, 360, 5], [300, 360, 5], [360, 360, 5], [420, 360, 5], [480, 360, 5], [540, 360, 5], [600, 360, 5], [600, 360, 5], [660, 360, 1], [660, 420, 1], [660, 480, 1], [660, 540, 1], [600, 540, 1], [540, 540, 1], [480, 540, 1], [420, 540, 1], [360, 540, 1], [300, 540, 1], [240, 540, 1], [180, 540, 1], [120, 540, 1], [180, 540, 1], [180, 480, 1], [180, 420, 1], [180, 360, 1], [180, 300, 1], [180, 360, 1], [180, 420, 1], [180, 480, 1], [180, 540, 1], [180, 540, 1], [120, 540, 0], [180, 540, 0], [180, 540, 0], [180, 540, 0], [240, 540, 1], [180, 540, 1], [180, 480, 1], [180, 480, 1], [240, 480, 2], [300, 480, 2], [360, 480, 2], [420, 480, 2], [480, 480, 2], [540, 480, 2], [600, 480, 2], [600, 480, 2], [600, 420, 3], [540, 420, 3], [480, 420, 3], [480, 420, 3], [420, 420, 2], [420, 420, 2], [360, 420, 3], [300, 420, 3], [240, 420, 3], [240, 420, 3], [240, 420, 3], [240, 420, 3], [240, 420, 3], [240, 420, 3], [240, 420, 3], [240, 420, 3], [240, 420, 3], [240, 420, 3], [240, 420, 3], [240, 420, 3], [240, 420, 3], [240, 420, 3], [240, 420, 3], [240, 420, 3], [240, 420, 3], [240, 420, 3], [240, 420, 3], [240, 420, 3], [240, 420, 3], [240, 420, 3], [240, 420, 3], [240, 420, 3], [240, 420, 3], [240, 420, 3]]

通过指定要求洗数,得到想要的关卡地图,供推箱子游戏调用:

[[1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 2, 2, 2, 2, 2, 2, 2, 1], [1, 3, 3, 3, 2, 3, 3, 3, 1], [1, 5, 5, 5, 5, 5, 5, 5, 1], [1, 5, 5, 5, 1, 5, 5, 5, 1], [1, 3, 3, 3, 3, 3, 3, 3, 1], [1, 4, 2, 2, 2, 2, 2, 2, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1]]


本文完文章来源地址https://www.toymoban.com/news/detail-835573.html

到了这里,关于怎样使用Pyglet库给推箱子游戏画关卡地图的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python小游戏——推箱子代码开源

    ♥️ 作者:小刘在这里 ♥️ 每天分享云计算网络运维课堂笔记,努力不一定有回报,但一定会有收获加油!一起努力,共赴美好人生! ♥️ 夕阳下,是最美的,绽放,愿所有的美好,再疫情结束后如约而至。 目录 一.效果呈现  二.主代码 三.cfg 四.README \\\'\\\'\\\'配置文件\\\'\\\'\\\' imp

    2024年02月02日
    浏览(42)
  • java版本实现推箱子小游戏

    推方块 游戏简介: 由 ↑,↓,←,→键来控制方向,点击空格键表示重玩当前关卡。 核心代码部分 :就是如何处理人的移动和人和箱子一起时的移动,这里需要对人要走的下一步和人推着箱子一起走的下一步进行判断分析,如果没有被阻挡就可以继续走下一步。(有兴趣

    2024年02月11日
    浏览(50)
  • Unity游戏源码分享-3d机器人推箱子游戏

    Unity游戏源码分享-3d机器人推箱子游戏 一个非常意思的3D游戏    工程地址:https://download.csdn.net/download/Highning0007/88098014

    2024年02月15日
    浏览(50)
  • python小游戏 推箱子小游戏设计与实现

    🔥 Hi,各位同学好呀,这里是L学长! 🥇今天向大家分享一个今年(2022)最新完成的毕业设计项目作品 python小游戏毕设 推箱子小游戏设计与实现 (源码) 🥇 学长根据实现的难度和等级对项目进行评分(最低0分,满分5分) 难度系数:3分 工作量:3分 创新点:4分 游戏简介: 经典

    2024年02月08日
    浏览(72)
  • C/C++项目实战-推箱子小游戏

    2024年02月08日
    浏览(50)
  • 【HTML小游戏】推箱子网页版(附完整源码)

    最近刚刚更新完了HTML,CSS的万字总结 ,有很多人已经学习完了文章,感觉反馈还不错,今天,用HTML,CSS,JS的知识编写了一个童年经典游戏 - 推箱子,供学习参考。 游戏主界面展示: 游戏界面展示: 经典的推箱子是一个非常古老游戏,甚至是80,90年代的回忆,目的是在训

    2024年02月04日
    浏览(49)
  • python毕设分享 python推箱子小游戏

    🔥 Hi,各位同学好呀,这里是L学长! 🥇今天向大家分享一个今年(2022)最新完成的毕业设计项目作品 python小游戏毕设 推箱子小游戏设计与实现 (源码) 🥇 学长根据实现的难度和等级对项目进行评分(最低0分,满分5分) 难度系数:3分 工作量:3分 创新点:4分 项目获取: htt

    2024年02月05日
    浏览(38)
  • python项目分享 推箱子小游戏设计与实现 (源码)

    🔥 Hi,各位同学好呀,这里是L学长! 🥇今天向大家分享一个今年(2022)最新完成的毕业设计项目作品 python小游戏毕设 推箱子小游戏设计与实现 (源码) 🥇 学长根据实现的难度和等级对项目进行评分(最低0分,满分5分) 难度系数:3分 工作量:3分 创新点:4分 项目获取: htt

    2024年01月23日
    浏览(51)
  • 毕业设计 单片机推箱子游戏(AT89C51)

    一、电路设计 此电路由AT89C51最小系统、LCD12864显示模块、74LS08芯片和四个独立按键组成。 LCD12864显示模块 带中文字库的128X64 是一种具有4 位/8 位并行、2 线或3 线串行多种接口方式,内部含有国标一级、二级简体 中文字库的点阵图形液晶显示模块;其显示分辨率为128×64, 内置

    2024年02月21日
    浏览(69)
  • 走迷宫之推箱子

    在上一篇文章当中我介绍了一个走迷宫的写法,但是那个迷宫没什么可玩性和趣味性,所以我打算在迷宫的基础上加上一个推箱子,使之有更好的操作空间,从而增强了游戏的可玩性和趣味性。 迷宫的组成要素无非就是:墙、路、入口、出口,根据这些要素我们可以设置一个

    2024年01月17日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包