brython | 笨办法写个连连看-3.地图制作

简介: brython | 笨办法写个连连看-3.地图制作

生成的地图如何保证成双成对


【连连看】作为一种棋牌游戏,连连看棋盘属性值都是成双成对出现的,以此来保证棋盘上所有的棋子都能够相连。所以说,制作连连看的第一步是如何生成成对的棋子。


在项目中,棋盘长和宽都设置为一样,且必须是偶数,这样做的目的是可以生成棋子池,而后再制作地图的时候,再从池子中随机拿出一个来放到地图上,这样的话,最后生成的地图上的棋子都是成对出现的。


比如,我们有一个10*10的棋盘,由于想让棋子可以从最外层勾选,所以最外层是空的,所以池子生成8*8就可以了。

image.png


如上用python来写的话,可以这样来编写:

count = 10
maps = []
tempList = []
for i in range(count - 2):
    for j in range(count - 2):
        tempList.append(j)
    maps.append(tempList)
    tempList = []

若我们输出maps的话,我们可以得到这样的信息:


image.png

这样的话,就能够保住即将生成的地图是成双成对出现的了。



连连看棋盘制作

上述保住了棋子是成双成对出现的了,但是在项目中,连连看最外层是空的,中间才是棋子,效果图示如下:

image.png


python中,我们可以使用随机函数randint来对现有池子进行随机,而后再将池子中的棋子放到棋盘上即可,最外层可以使用-1来标识,代码可以编写如下:

from random import randint
count = 10
maps = []
tempList = []
# 棋子池
for i in range(count - 2):
  for j in range(count - 2):
    tempList.append(j)
# 从棋子中取出随机值
for i in range(count):
  tempMap = []
  for j in range(count):
    if i == 0 or i == (count - 1) or j == 0 or j == (count - 1):
      tempMap.append(-1)
    else:
      ids = randint(0, len(tempList) - 1)
      tempMap.append(tempList[ids])
      del tempList[ids]
  maps.append(tempMap)

代码运行后,输出maps结果如下:

image.png

渲染到地图上

上述其实我们已经制作好一个连连看地图了,但是都是存在python的列表中,数据还没有渲染给前端页面,那么要如何渲染呢?这就需要brython了,通过上述可以看到,连连看棋盘效果是这样的:

image.png



但是到目前为止,我们的效果是这样的:

image.png


2者如何相关联呢?在项目中,我们使用了一个列表来存储emoji索引,比如,需要的emoji8个,所以我们定义一个数组,值为各种emoji

emojiList = ["🏝️", "🐭", "🐷", "🐲", "🐶", "🍒", "🐳","🐯"]


在渲染到页面上的时候,用maps的值作为emoji的下标就可以了,代码编写如下:

from browser import html
from browser import document
maps = [] # 上述生成的列表
emojiList = ["🏝️", "🐭", "🐷", "🐲", "🐶", "🍒", "🐳","🐯"]
tb = html.TABLE(id="tb")
tb.clear()
for i in range(len(maps)):
    tr = html.TR()
    for j in range(len(maps)):
        td = html.TD()
        if -1 == maps[i][j]:
            td.className = "blank"
        if -1 != maps[i][j]:
          ss = html.BUTTON(emojiList[maps[i][j]])
          ss.className = "pressbtn"
          ss.id = [i, j]
          td <= ss
        tr <= td
    tb <= tr
document <= tb


上述代码,为了有点击效果,所以增加了按钮来放到td中,为了更好的展示效果,所以我们给值为-1的格子定义的classblank,其余的均为pressbtn

结合一些css样式等,整个效果也已经放到了【码上掘金】中,链接如下:

code.juejin.cn/pen/7170673…



总结


在连连看中,制作地图非常简单,由于brython操作table已经在之前有所赘述,所以这里直接拿来用了,没有过多的解释,若想看brython如何操作table不妨翻翻之前的文章。所谓的地图制作,在项目中是直接使用list来生成地图,而后渲染给页面仅此而已,拨开了一层纸,就觉得好像也不是很难了对吧。


快动动你的小手指来试试吧。



相关文章
|
定位技术 开发工具 开发者
为了让外卖小哥在地图里开上火箭🚀我用FLutter自定义了地图
花了五天时间,用Flutter自定义地图是什么体验?外卖小哥都开上火箭了?什么?我被女朋友赶出家门啦?欢迎观看被女友赶出家门之开火箭送外卖篇~
|
2月前
Threejs制作窗户透亮效果
这篇文章讲解了如何在Three.js中制作窗户的透亮效果,包括设置透明材质和光照以实现逼真的窗户渲染效果的技术细节。
50 1
|
2月前
Threejs制作海面效果
这篇文章详细介绍了利用Three.js制作逼真海面效果的过程,包括设置Water材质、调整光照及实现波动动画的步骤。
35 0
Threejs制作海面效果
|
6月前
|
图形学
【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版5(附带项目源码)
【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版5(附带项目源码)
52 0
|
6月前
|
图形学
【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版10(附带项目源码)
【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版10(附带项目源码)
72 0
|
6月前
|
存储 图形学
【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版11(附带项目源码)
【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版11(附带项目源码)
94 0
|
7月前
|
定位技术
Pyglet综合应用|推箱子游戏地图编辑器之图片跟随鼠标
Pyglet综合应用|推箱子游戏地图编辑器之图片跟随鼠标
61 0
|
7月前
|
图形学
如何在微信小游戏制作工具中做出好看的粒子效果?
如何在微信小游戏制作工具中做出好看的粒子效果?
110 1
|
图形学
Unity小游戏——迷你拼图
Unity小游戏——迷你拼图
255 1
|
算法 图形学
Unity小游戏——武士击杀小怪兽(无限滚动的背景)
Unity小游戏——武士击杀小怪兽(无限滚动的背景)