导语:
哈喽,哈喽~小编想问到底为什么消消乐游戏这么好玩?是精致的画面还是有趣的音效,让我们心
情不好的时候玩,等车玩,睡前也玩。而且每一关必须是三星...
小编今天就用python,分享一个消消乐三星秘籍 ,打不过就加入,自己用代码,码一个消消乐小游戏
正文:
消消乐的构成主要包括三部分:游戏主体、计分器、计时器,下面来看一下具体实现。
先来看一下游戏所需 Python 库。
1 impormt os
2 impormt sys
3 impormt time
4 impormt pygame
5 impormt random
定义一些常量,比如:窗口宽高、网格行列数等,代码如下:
1 WIDTH - 400
2 HEIGHT = 460
3 NUMGRID = 8
4 GRIDSIZE - 36
5 XMARGIN = (WIDTH - GRIDSIZE * NUMGRID) 11 2
6 YMARGIN - (HEIGHT - GRIDSIZE * NUMGRID) 1f 2
7 ROOTDIR = os . get cwd()
8 FPS = 30
接着创建一个主窗口,代码如下:
1 pygame. init()
2 screen = pygame . display.set_ mode( ( WIDTH, HEIGHT) )
3 руgаmе . dіѕрlау.ѕеt_ сарtіоn( '消消乐')
看一下效果:
再接着在窗口中画一个 8 x 8 的网格,代码如下:
1 screen. fill((255, 255, 220))
2 #游戏界面的网格绘制
3 def dr awGrids(self):
4 for x in range(NUMGRID):
5 for y in range(NUMGRID) :
6 rect= pygame . Rect( (XMARGIN+x*GRIDSIZE ,
7 YMARGIN+y *GRIDSIZE, GRIDSIZE, GRIDSIZE) )
8 self . dr awBlock(rect, color=(255, 165, Ѳ), size=1
9 #画矩形block框
10 def dr awBlock(self, block, color=(255, 0, 0), size=2):
11 pygame . draw.rect(self.screen, color, block, size)
看一下效果:
再接着在网格中随机放入各种拼图块,代码如下:
1 while True:
2 self.all_ gems = []
3 self ·gems_ group = pygame.sprite.Group()
4 for x in range(NUMGRID) :
5 self .all_ gems . append( [])
6 for y in range(NUMGRID) :
7 gem =
8 Puzzle( img_ path=random . choice(self.gem_ imgs), size-(GRIDSIZE, GRIDSIZE),
9 position= [XMARGIN+x*GRIDSIZE, YMARGIN+ y*GRIDSIZE -NUMGRID*GRIDSIZE ] ,
10 down len=NUMGRID *GRIDSIZE )
11 self .all_ gems [x] .append(gem)
12 self gems_ group.add(gem)
13 if self .isMatch()[e] == e:
14 break
看一下效果:
再接着加入计分器和计时器,代码如下:
看一下效果:
当设置的游戏时间用尽时,我们可以生成一些提示信息,代码如下:
看一下效果:
说完了游戏图形化界面相关的部分,我们再看一下游戏的主要处理逻辑。
我们通过鼠标来操纵拼图块,因此程序需要检查有无拼图块被选中,代码实现如下:
我们需要将鼠标连续选择的拼图块进行位置交换,代码实现如下:
每一次交换拼图块时,我们需要判断是否有连续一样的三个及以上拼图块,代码实现如下:
def isMatch(self):
for x in range(NUMGRID):
for y in range(NUMGRID):
if x + 2 < NUMGRID:
if self.getGemByPos(x, y).type == self.getGemByPos(x+1, y).type == self.getGemByPos(x+2, y).type:
return [1, x, y]
if y + 2 < NUMGRID:
if self.getGemByPos(x, y).type == self.getGemByPos(x, y+1).type == self.getGemByPos(x, y+2).type:
return [2, x, y]
return [0, x, y]
当出现三个及以上拼图块时,需要将这些拼图块消除,代码实现如下:
将匹配的拼图块消除之后,我们还需要随机生成新的拼图块,代码实现如下:
def generateNewGems(self, res_match):
if res_match[0] == 1:
start = res_match[2]
while start > -2:
for each in [res_match[1], res_match[1]+1, res_match[1]+2]:
gem = self.getGemByPos(*[each, start])
if start == res_match[2]:
self.gems_group.remove(gem)
self.all_gems[each][start] = None
elif start >= 0:
gem.target_y += GRIDSIZE
gem.fixed = False
gem.direction = 'down'
self.all_gems[each][start+1] = gem
else:
gem = Puzzle(img_path=random.choice(self.gem_imgs), size=(GRIDSIZE, GRIDSIZE), position=[XMARGIN+each*GRIDSIZE, YMARGIN-GRIDSIZE], downlen=GRIDSIZE)
self.gems_group.add(gem)
self.all_gems[each][start+1] = gem
start -= 1
elif res_match[0] == 2:
start = res_match[2]
while start > -4:
if start == res_match[2]:
for each in range(0, 3):
gem = self.getGemByPos(*[res_match[1], start+each])
self.gems_group.remove(gem)
self.all_gems[res_match[1]][start+each] = None
elif start >= 0:
gem = self.getGemByPos(*[res_match[1], start])
gem.target_y += GRIDSIZE * 3
gem.fixed = False
gem.direction = 'down'
self.all_gems[res_match[1]][start+3] = gem
else:
gem = Puzzle(img_path=random.choice(self.gem_imgs), size=(GRIDSIZE, GRIDSIZE), position=[XMARGIN+res_match[1]*GRIDSIZE, YMARGIN+start*GRIDSIZE], downlen=GRIDSIZE*3)
self.gems_group.add(gem)
self.all_gems[res_match[1]][start+3] = gem
start -= 1
之后反复执行这个过程,直至耗尽游戏时间,游戏结束。
最后,我们动态看一下游戏效果。
结尾:
自己码的消消乐,简单又容易上手。有手就行的三星⭐⭐⭐
大家喜欢的记得点点赞,需要完整的项目源码的可以私信我即可哟!