Python 星星消除游戏:使用 Pygame Zero 实现简单的消除游戏
import random
import turtle
import pgzrun as pr
import datetime
import time
import copy
screen = turtle.Screen()
TILE_SIZE = 50
WIDTH = (10 * TILE_SIZE)
HEIGHT = (10 * TILE_SIZE)
TITLE = '消灭星星'
stars = []
for i in range(10):
row = []
for j in range(10):
x = random.randint(1, 6)
row.append(x)
stars.append(row)
Tiles = []
def updateTiles():
Tiles.clear()
for i in range(10):
for j in range(10):
tile = Actor('star'+str(stars[i][j]))
tile.left = j * TILE_SIZE
tile.top = i * TILE_SIZE
Tiles.append(tile)
updateTiles()
def draw():
screen.clear()
for tile in Tiles:
tile.draw()
for i in range(10):
for j in range(10):
screen.draw.text(
str(stars[i][j]), (j*TILE_SIZE, i*TILE_SIZE), fontsize=35, color='white')
def on_mouse_down(pos, button):
ic = int(pos[1]/TILE_SIZE)
jc = int(pos[0]/TILE_SIZE)
con = {(ic, jc)}
for k in range(20):
tempSet = copy.deepcopy(con)
for each in tempSet:
i = each[0]
j = each[1]
clid = stars[i][j]
if i > 0 and stars[i-1][j] == clid:
con.add((i-1, j))
if i < 9 and stars[i+1][j] == clid:
con.add((i+1, j))
if j > 0 and stars[i][j-1] == clid:
con.add((i, j-1))
if j < 9 and stars[i][j+1] == clid:
con.add((i, j+1))
tempSet.clear()
for each in con:
stars[each[0]][each[1]] = 0
updateTiles()
draw()
pr.run()
代码说明:
-
导入必要的库:
random用于生成随机数。turtle用于创建游戏窗口。pgzrun是 Pygame Zero 库,用于简化游戏开发。datetime用于获取当前时间。time用于控制游戏速度。copy用于复制数据结构。
-
设置游戏参数:
TILE_SIZE: 每个方块的大小。WIDTH,HEIGHT: 游戏窗口的宽高。TITLE: 游戏窗口的标题。
-
生成星星矩阵:
stars数组用于存储游戏中的星星,每个元素表示一种颜色的星星。- 使用
random.randint(1, 6)生成 1 到 6 之间的随机数,代表不同的星星颜色。
-
创建游戏界面:
updateTiles()函数用于根据星星矩阵创建游戏界面中的方块。draw()函数用于绘制游戏界面,包括星星方块和星星的数字。
-
点击事件处理:
on_mouse_down()函数用于处理鼠标点击事件。- 点击方块后,会查找与点击方块相连的同色方块,并将其消除。
con集合用于存储需要消除的方块坐标。tempSet用于临时存储方块坐标,避免重复计算。
如何运行代码:
- 确保你已经安装了
pgzrun库。 - 将代码保存为
.py文件(例如star_game.py)。 - 在命令行中运行
pgzrun star_game.py。
游戏玩法:
- 点击一个星星,如果与它相连的星星是同色的,则它们会被消除。
- 消除的星星会消失,并可能导致其他星星组合消除。
- 游戏目标:消除尽可能多的星星。
改进方向:
- 添加分数系统和游戏结束条件。
- 增加游戏难度,例如增加星星的种类或改变星星消除的规则。
- 添加背景音乐和音效。
- 使用图形图像代替数字,使游戏界面更加美观。
原文地址: https://www.cveoy.top/t/topic/pPyp 著作权归作者所有。请勿转载和采集!