1 Star 0 Fork 0

cc/pgzero_project

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
puzzle.py 2.59 KB
一键复制 编辑 原始数据 按行查看 历史
cc 提交于 2022-03-16 16:08 +08:00 . 优化游戏的运行
import pgzrun
from pgzero.actor import Actor
from pgzero.screen import Screen
from pgzero.loaders import sounds
import random
import sys
from time import time
# 类型标注
screen:Screen
SIZE = 200;
WIDTH = SIZE*3;
HEIGHT = SIZE*3;
pul_actors = [];
# 游戏结束标志位
finished = False;
# 完成拼图,填充最后一张图片
end_pul = Actor('2022hu_8');
end_pul.left = 2 * SIZE;
end_pul.top = 2 * SIZE;
# 添加时间概念
start = time();
end = None;
for i in range(8):
pl = Actor("2022hu_"+str(i)+".png");
# 增加索引标识位置,gameOver判定
pl.index = i;
pul_actors.append(pl);
# 洗牌
random.shuffle(pul_actors);
for i in range(len(pul_actors)):
# 巧妙的获取列数和行数
pul_actors[i].left = i % 3 * SIZE;
pul_actors[i].top = i // 3 * SIZE;
def draw():
screen.fill((255,255,255));
for pul in pul_actors:
pul.draw();
# 拼图完成
if finished:
end_pul.draw();
screen.draw.text("拼图完成",center=(WIDTH//2,HEIGHT//2),fontsize=50,color="green",fontname="simhei")
screen.draw.text(f"完成时间{round(end,2)}秒",center=(WIDTH//2,HEIGHT//2+100),fontsize=40,color="green",fontname="simhei")
else :
screen.draw.text(f'时间:{round(time()-start)}s',center=(WIDTH//2,20),fontsize=40,color="green",fontname="simhei");
# 抽离函数
def get_pul(grid_x, grid_y):
for pul in pul_actors:
# 当前位置和所有的图片位置对比
if grid_x == pul.x // SIZE and grid_y == pul.y // SIZE:
return pul;
return None;
def gameFinished():
global finished;
global end;
for i in range(8):
pul = get_pul(i%3,i//3);
if pul == None or pul.index != i:
return;
finished = True;
sounds.gameover.play();
end = (time() - start);
# 事件处理
def on_mouse_down(pos):
# 游戏结束了就不能再移动了
if not finished:
# 行和列
grid_x = pos[0] // SIZE;
grid_y = pos[1] // SIZE;
# 当前是哪一张图片,
thispul = get_pul(grid_x, grid_y);
# 图片四个方向,上有空位
if grid_y > 0 and get_pul(grid_x, grid_y - 1) == None:
thispul.y -= SIZE;
return;
elif grid_y < 2 and get_pul(grid_x, grid_y+1) == None:
thispul.y += SIZE;
return;
elif grid_x > 0 and get_pul(grid_x-1, grid_y) == None:
thispul.x -= SIZE;
return;
elif grid_x < 2 and get_pul(grid_x+1, grid_y) == None:
thispul.x += SIZE;
return;
def update():
if not finished:
gameFinished();
pgzrun.go();
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/caicaistudy/pgzero_project.git
git@gitee.com:caicaistudy/pgzero_project.git
caicaistudy
pgzero_project
pgzero_project
master

搜索帮助