你小子!过年了,写了一个拼图小游戏来拼掘金兔年礼盒,来玩玩不?

简介: 你小子!过年了,写了一个拼图小游戏来拼掘金兔年礼盒,来玩玩不?

image.png


快过年了,本篇文章是带着欢快的气氛写的,祝大家新年快乐呀!


所以该篇文章会不太严谨,希望大家勿喷。

本篇所使用的软件版本:

切片软件: photoshop cs3

brython所依赖的js为:

cdn.jsdelivr.net/npm/brython…

cdn.jsdelivr.net/npm/brython…



有了上述的铺垫,才好引出本篇文章的主旨: 使用brython写一个【掘金兔年春节礼盒】拼图小游戏,来祝愿大家2023 前兔(途)似锦、宏兔(图)大展

image.png


码上掘金项目如下:

image.png


本篇文章知识点如下:

  • photoshop切片操作
  • 静态页面编写
  • 引入brython来完成小游戏互动




利用photoshop进行切片


这个photoshop切片也是现学的,所以不会介绍的很深入,勿喷,勿喷。

首先我们想利用photoshop进行切片,我们得下载图片至本地才行,好在本篇案例使用的掘金兔年礼盒图片,可以在【福利兑换】中找到,而后使用【图片另存为】到本地即可。


掘金福利兑换参考URL: juejin.cn/user/center…

image.png


下载图片后,我们使用photoshop打开,选中本地的图片即可。

image.png

photoshop打开图片后,使用工具栏的【切片工具】进行切片即可。


image.png


在图层上右键选择 【划分切片】

image.png


由于我们只想要将图片分为大小均匀的9个图片,所以在划分切片中,水平 和 垂直 都修改为3,这样的话,就可以划出9个字图片了。

image.png


在使用切片划分后,我们需要将其保存为web格式,点击【文件】【储存为Web和设备所用格式】。


image.png

由于保存的类型默认为GIF,我们需要先将其格式修改为JPEG,而后再点击【存储】。

image.png


我们保存在本地,会得到一个html文件和images目录,而我们切好的图片就是我们需要的9张图

image.png

至此,我们切片就完成了。

我们可以将图片上传至自己的服务器,若没有服务器的话,那么可以新建一篇掘金文章(不用发表都可以),将图片拖进去,于是乎我们就得到了相关的链接。

image.png



前端静态页面的编写


要想做一个拼图小游戏,不能一上来就直接写后端逻辑代码,这样写到最后可能会失败,而是应该新建一个静态模型或者称之为前端静态页面,来向用户展示,这个小游戏应该是怎么样的。


我们想做的游戏样子大概如下:

image.png

我们可以先将模型给建好,而后再想办法让拼图模块能够和玩家进行交互就好了。

我们可以分析一下,标题、拼图页面 和 效果图 可以用哪些html标签来完成,那汇总表格大致如下:

类型 标签
小游戏标题 h1
用户操作拼图的界面 table+img
效果图 img

有了上述列表,我们代码可以编写如下:


由于掘金生成的图片链接URL非常长,所以就使用img+数字来代替URL链接了。

<div id="app">
    <h1>你小子!会拼掘金兔年礼盒不?</h1>
    <table>
        <tr>
            <td></td>
            <td><img src="img2" width="160px" height="160px"></td>
            <td><img src="img3" width="160px" height="160px"></td>
        </tr>
        <tr>
            <td><img src="img4" width="160px" height="160px"></td>
            <td><img src="img5" width="160px" height="160px"></td>
            <td><img src="img6" width="160px" height="160px"></td>
        </tr>
        <tr>
            <td><img src="img7" width="160px" height="160px"></td>
            <td><img src="img8" width="160px" height="160px"></td>
            <td><img src="img9" width="160px" height="160px"></td>
        </tr>
    </table>
    <h5>效果图</h5>
    <img src="https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/59eb9d261a9f487a9674a2bc9049bea7~tplv-k3u1fbpfcp-no-mark:0:0:0:0.image?" width=200 heith=200>
</div>

在结合CSS我们可以得到的效果如下:

image.png



具体代码可以参考码上掘金:


image.png



引入brython来实现小游戏互动


很多小伙伴可能没听说过brython,简单的来概括一下就是python 提供了一个可以操作html DOM的库,而这个工具就叫brython,也可称之为: 浏览器运行的python


具体的就不赘述了,可以参考一下这篇文章:

juejin.cn/post/715364…

那么,如何使小游戏能够和玩家进行互动呢?关键的点为,玩家操作后,需要修改前端的页面展示效果,而玩家和前端展示之间,我们可以用一种数据结构来表示,可以用图示表示如下:


image.png


所以说,玩家不直接操作前端页面,而是通过前端页面来修改其底层数据结构的数据,而后再反过来渲染给用户,从而达到互动的效果。

那么我们底层数据,可以定义如下(代码截图会较为清晰):

image.png

而渲染页面,可以用如下方法表示:

# 输出到屏幕
def toMaps():
    gameWindow.clear()
    tb.clear()
    for i in range(3):
        tr = html.TR()
        tr.ID = "tr"
        for j in range(3):
            td = html.TD()
            td.id = [i,j]
            if -1 != gameBox[i][j]:
                img = html.IMG(src=picDict[gameBox[i][j]], width=160, height=160)
                td <= img
            tr <= td
        tb <= tr
    gameWindow <= tb

如上代码是将后端数据渲染给前端,从而展示给用户,那么用户和游戏互动,是通过什么来完成的呢?


这个就要涉及鼠标事件了,相关技术可以参考文章如下:

juejin.cn/post/716702…


brython中,通过鼠标事件绑定的方式,来触发响应,代码如下:

document["tb"].bind("click", startGanmes)

而判断是否可以移动图片碎片是通过判断其四周是否有空的栏位来判断的,例如:


image.png

如上小游戏,用户点击 2、4、6、8 都可以进行图片替换,因为四周有空位,而1、3、7、9则不行。

当判断可以替换后,直接修改底层数据gameBox的值,而后再渲染会页面即可展示给用户。

那相关代码,可以查看码上掘金:

image.png



总结


如上文章,我们向做一个拼图小游戏,于是我们将这个项目拆成了几个小功能,例如:


  • 将图片拆分为等大的图片碎片
  • 游戏静态框架编写
  • 引入互动

那再查询资料后,我们得知ps可以切片来满足需求,所以我们就使用ps做的切片;而编写静态页面可以提前向用户展示效果,避免写后端的时候,越写越糊涂;最后就是引入互动,其实就是修改底层数据的值,从而来渲染前端达到的。


怎么样?brython好玩么? 快来动动你的小手指试试吧。


新年到,送祝福,祝愿大家新年快乐,恭喜发财。


山水怡情
+关注
目录
打赏
0
1
2
0
60
分享
相关文章
开源轻量级 IM 框架 MobileIMSDK 的微信小程序端已发布!
MobileIMSDK - 微信小程序端是一套基于微信原生 WebSocket 的即时通讯库:
353 0
【雾锁王国/Enshrouded】2024年阿里云服务器一键搭建雾锁王国游戏:轻松打造专属游戏世界
随着游戏行业的不断发展,玩家们对于游戏体验的要求也越来越高。为了满足玩家们的需求,阿里云提供了游戏联机服务器一键部署方案,本文将为大家分享基于阿里云服务器10秒钟完成雾锁王国游戏服务器搭建教程,让大家的游戏体验更加顺畅。
220 1
CentOS自动同步互联网服务器时间
CentOS自动同步互联网服务器时间
3969 0
CentOS自动同步互联网服务器时间
暗黑引擎 -- Shodan常用搜索语法
暗黑引擎 -- Shodan常用搜索语法
377 0
vue2.x利用Vue.prototype注册全局组件/方法
vue2.x利用Vue.prototype注册全局组件/方法
197 0
DataWorks产品使用合集之DataX的ODPSReader和Tunnel是两种不同的读取MC(原名ODPS)数据的方式吗
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
176 3
Python贪吃蛇小游戏(PyGame)
Python贪吃蛇小游戏(PyGame)
268 0
分库分表比较推荐的方案
ShardingSphere 绝对可以说是当前分库分表的首选!ShardingSphere 的功能完善,除了支持读写分离和分库分表,还提供分布式事务、数据库治理等功能。另外,ShardingSphere 的生态体系完善,社区活跃,文档完善,更新和发布比较频繁
345 0

热门文章

最新文章

AI助理
登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问

你好,我是AI助理

可以解答问题、推荐解决方案等