提到开⼼消消乐这款⼩游戏,相信⼤家都不陌⽣,其曾在 2015 年获得过玩家最喜爱的移动单机游戏奖,受欢迎程度可见⼀斑,本⽂我们使⽤ Python 来做个简单的消消乐⼩游戏。
实现
消消乐的构成主要包括三部分:游戏主体、计分器、计时器,下⾯来看⼀下具体实现。
先来看⼀下游戏所需 Python 库。
1 2 3 4 5import os import sys import time import pygame import random
定义⼀些常量,⽐如:窗⼝宽⾼、⽹格⾏列数等,代码如下:
1 2 3 4 5 6 7 8WIDTH =400
HEIGHT =400
NUMGRID =8
GRIDSIZE =36
XMARGIN =(WIDTH -GRIDSIZE *NUMGRID) //2 YMARGIN =(HEIGHT -GRIDSIZE *NUMGRID) //2 ROOTDIR =os.getcwd()
FPS =30
接着创建⼀个主窗⼝,代码如下:
马桶如何移位1 2 3pygame.init()
screen =pygame.display.set_mode((WIDTH, HEIGHT)) pygame.display.set_caption('消消乐')
看⼀下效果:
再接着在窗⼝中画⼀个 8 x 8 的⽹格,代码如下:
1 2 3 4 5 6 7 8 9 10screen.fill((255, 255, 220))
# 游戏界⾯的⽹格绘制
def drawGrids(self):
for x in range(NUMGRID):
for y in range(NUMGRID):
rect =pygame.Rect((XMARGIN+x*GRIDSIZE, YMARGIN+y*GRIDSIZE, GRIDSIZE, GRIDSIZE)) self.drawBlock(rect, color=(255, 165, 0), size=1
长津湖票房破15亿# 画矩形 block 框
def drawBlock(self, block, color=(255, 0, 0), size=2):
(self.screen, color, block, size)
看⼀下效果:
再接着在⽹格中随机放⼊各种拼图块,代码如下:
1 2 3 4 5 6 7 8 9 10 11while True:
self.all_gems =[]
for x in range(NUMGRID):有什么好看的电影啊
self.all_gems.append([])
for y in range(NUMGRID):
gem =Puzzle(img_path=random._imgs), size=(GRIDSIZE, GRIDSIZE), position=[XMARGIN+x*GRIDSIZE, YMARGIN+y*GRIDSIZE-NUMGRID*GRIDSIZE], downlen=NUMGRID*GRIDSIZE)
self.all_gems[x].append(gem)
if self.isMatch()[0] ==0:
break
看⼀下效果:
再接着加⼊计分器和计时器,代码如下:我的中国心原唱
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18# 显⽰得分
def drawScore(self):
小商店score_render =der('分数:'+str(self.score), 1, (85, 65, 0))
rect =_rect()
rect.left, p =(55, 15)
self.screen.blit(score_render, rect)
# 显⽰加分
def drawAddScore(self, add_score):
score_render =der('+'+str(add_score), 1, (255, 100, 100))
rect =_rect()
rect.left, p =(250, 250)
self.screen.blit(score_render, rect)
# 显⽰剩余时间
def showRemainingTime(self):
remaining_time_render =der('倒计时: %ss'%aining_time), 1, (85, 65, 0)) rect =remaining__rect()
rect.left, p =(WIDTH-190, 15)
self.screen.blit(remaining_time_render, rect)
看⼀下效果:
当设置的游戏时间⽤尽时,我们可以⽣成⼀些提⽰信息,代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23while True:
for event in ():
pe==pygame.QUIT:
pygame.quit()
pe==pygame.KEYUP and event.key ==pygame.K_r: flag =True
if flag:
break
screen.fill((255, 255, 220))
text0 ='最终得分: %s'%score
小哨兵还原卡驱动
text1 ='按 R 键重新开始'
y =140
for idx, text in enumerate([text0, text1]):
text_render =der(text, 1, (85, 65, 0))
rect =_rect()
if idx ==0:
rect.left, p =(100, y)
elif idx ==1:
rect.left, p =(100, y)
y +=60
screen.blit(text_render, rect)
pygame.display.update()
看⼀下效果:
发布评论