Python 一步一步教你用pyglet制作“彩色方块连连看”游戏
目录
彩色方块连连看
第一步
第二步
第三步
第四步
第五步
第六步
第七步
动态效果展示
小结
彩色方块连连看
本篇除了介绍怎样用pyglet制作连连看游戏,还将介绍如果使用自定义库colorlib,用它来描绘游戏中多种颜色的彩色方块。自定义库colorlib的由来,另请阅读《python 教你如何创建一个自定义库 colorlib.py》,链接:
https://hannyang.blog.csdn.net/article/details/136861675
第一步
见原文中,有一个创建随机彩色霓虹方块的代码:
import pyglet
from colorlib import randcolorTuples as ctpl
window = pyglet.window.Window(800, 600, caption='色块展示')
color = ctpl(16)
batch = pyglet.graphics.Batch()
shape = [pyglet.shapes.Rectangle(180+i%4*120, 120+i//4*100, 100, 80, color=color[i], batch=batch) for i in range(len(color))]
@window.event
def on_draw():
window.clear()
batch.draw()
def change_color(e):
for i,c in enumerate(ctpl(16)):
shape[i].color = c
pyglet.clock.schedule_interval(change_color, 0.1)
pyglet.app.run()
运行效果:
第二步
创建更多方块,方块大小由参数决定;随机色由colorlib.randcolorTuples函数产生。
from pyglet import *
from colorlib import randcolorTuples as ctpl
W, H = 800, 600
window = window.Window(W, H, caption='色块展示')
batch = graphics.Batch()
row, col, space = 8, 10, 5
width = w = (W-space)//col-space
height = h = (H-space)//row-space
x0, y0 = (W-(w+space)*col+space)//2, (H-(h+space)*row+space)//2
color = ctpl(row*col)
shape = [[1]*col for _ in range(row)]
for r,arr in enumerate(shape):
for c,num in enumerate(arr):
shape[r][c] = shapes.Rectangle(x0+c*(w+space), y0+r*(h+space), w, h, color=color[c+r*len(arr)], batch=batch)
@window.event
def on_draw():
window.clear()
batch.draw()
def change_color(e):
for i,c in enumerate(ctpl(row*col)):
shape[i//col][i%col].color = c
clock.schedule_interval(change_color, 0.1)
app.run()
第三步
取消“闪烁”,方块增加边框并改写为Box类、增加一个对应存放方块状态的列表Array。
from pyglet import *
from colorlib import *
ctpl = randcolorTuples
W, H = 800, 600
window = window.Window(W, H, caption='色块展示')
gl.glClearColor(*Color('lightblue3').decimal)
batch = graphics.Batch()
row, col, space = 8, 10, 5
width = w = (W-space)//col-space
height = h = (H-space)//row-space
x0, y0 = (W-(w+space)*col+space)//2, (H-(h+space)*row+space)//2
color = ctpl(row*col)
Array = [[1]*col for _ in range(row)] # 用于控制方块的状态
class Box:
def __init__(self, x, y, w, h, color, batch=batch):
self.rect = shapes.Rectangle(x, y, w, h, color=color, batch=batch)
self.box = shapes.Box(x, y, w, h, color=(255,255,255), thickness=3, batch=batch)
def visible(self, visible=True):
self.box.batch = self.rect.batch = batch if visible else None
Array[0][0] = Array[2][2] = Array[5][7] = 0 # 设置三个方块消失
for r,arr in enumerate(Boxes:=[_[:] for _ in Array]):
for c,_ in enumerate(arr):
Boxes[r][c] = Box(x0+c*(w+space), y0+r*(h+space), w, h, color[c+r*len(arr)])
Boxes[r][c].visible(Array[r][c])
@window.event
def on_draw():
window.clear()
batch.draw()
app.run()
运行效果:
注:顺带测试一下在for...in...语句enumerate()函数中使用海象操作符:=。
for r,arr in enumerate(Boxes:=[_[:] for _ in Array]):
第四步
限制生产颜色时,每种颜色只能出现4次,即2组连连看。
COLOR = []
while len(COLOR)
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!



