亚洲国产第一站精品蜜芽_亚洲AV无码精品色午夜果冻不卡_国产香蕉九九久久精品免费_国产精品亚洲专区无码不卡

更多精彩內容,歡迎關注:

視頻號
視頻號

抖音
抖音

快手
快手

微博
微博

Python實現消消樂小游戲

文檔

Python實現消消樂小游戲

提到開心消消樂這款小游戲,相信大家都不陌生,其曾在2015年獲得過玩家最喜愛的移動單機游戲獎,受歡迎程度可見一斑,本文我們使用Python來做個簡單的消消樂小游戲。
推薦度:
導讀提到開心消消樂這款小游戲,相信大家都不陌生,其曾在2015年獲得過玩家最喜愛的移動單機游戲獎,受歡迎程度可見一斑,本文我們使用Python來做個簡單的消消樂小游戲。
實現

消消樂的構成主要包括三部分:游戲主體、計分器、計時器,下面來看一下具體實現。

先來看一下游戲所需 Python 庫。

import?os
import?sys
import?time
import?pygame
import?random

定義一些常量,比如:窗口寬高、網格行列數等,代碼如下:

WIDTH?=?400
HEIGHT?=?400
NUMGRID?=?8
GRIDSIZE?=?36
XMARGIN?=?(WIDTH?-?GRIDSIZE?*?NUMGRID)?//?2
YMARGIN?=?(HEIGHT?-?GRIDSIZE?*?NUMGRID)?//?2
ROOTDIR?=?os.getcwd()
FPS?=?30

接著創建一個主窗口,代碼如下:

pygame.init()
screen?=?pygame.display.set_mode((WIDTH,?HEIGHT))
pygame.display.set_caption('消消樂')

看一下效果:

再接著在窗口中畫一個 8 x 8 的網格,代碼如下:

screen.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
#?畫矩形?block?框
def?drawBlock(self,?block,?color=(255,?0,?0),?size=2):
	pygame.draw.rect(self.screen,?color,?block,?size)

看一下效果:

再接著在網格中隨機放入各種拼圖塊,代碼如下:

while?True:
	self.all_gems?=?[]
	self.gems_group?=?pygame.sprite.Group()
	for?x?in?range(NUMGRID):
		self.all_gems.append([])
		for?y?in?range(NUMGRID):
			gem?=?Puzzle(img_path=random.choice(self.gem_imgs),?size=(GRIDSIZE,?GRIDSIZE),?position=[XMARGIN+x*GRIDSIZE,?YMARGIN+y*GRIDSIZE-NUMGRID*GRIDSIZE],?downlen=NUMGRID*GRIDSIZE)
			self.all_gems[x].append(gem)
			self.gems_group.add(gem)
	if?self.isMatch()[0]?==?0:
		break

看一下效果:

再接著加入計分器和計時器,代碼如下:

#?顯示得分
def?drawScore(self):
	score_render?=?self.font.render('分數:'+str(self.score),?1,?(85,?65,?0))
	rect?=?score_render.get_rect()
	rect.left,?rect.top?=?(55,?15)
	self.screen.blit(score_render,?rect)
#?顯示加分
def?drawAddScore(self,?add_score):
	score_render?=?self.font.render('+'+str(add_score),?1,?(255,?100,?100))
	rect?=?score_render.get_rect()
	rect.left,?rect.top?=?(250,?250)
	self.screen.blit(score_render,?rect)
#?顯示剩余時間
def?showRemainingTime(self):
	remaining_time_render?=?self.font.render('倒計時:?%ss'?%?str(self.remaining_time),?1,?(85,?65,?0))
	rect?=?remaining_time_render.get_rect()
	rect.left,?rect.top?=?(WIDTH-190,?15)
	self.screen.blit(remaining_time_render,?rect)

看一下效果:

當設置的游戲時間用盡時,我們可以生成一些提示信息,代碼如下:

while?True:
	for?event?in?pygame.event.get():
		if?event.type?==?pygame.QUIT:
			pygame.quit()
			sys.exit()
		if?event.type?==?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?=?font.render(text,?1,?(85,?65,?0))
		rect?=?text_render.get_rect()
		if?idx?==?0:
			rect.left,?rect.top?=?(100,?y)
		elif?idx?==?1:
			rect.left,?rect.top?=?(100,?y)
		y?+=?60
		screen.blit(text_render,?rect)
	pygame.display.update()

看一下效果:

說完了游戲圖形化界面相關的部分,我們再看一下游戲的主要處理邏輯。

我們通過鼠標來操縱拼圖塊,因此程序需要檢查有無拼圖塊被選中,代碼實現如下:

def?checkSelected(self,?position):
	for?x?in?range(NUMGRID):
		for?y?in?range(NUMGRID):
			if?self.getGemByPos(x,?y).rect.collidepoint(*position):
				return?[x,?y]
	return?None

我們需要將鼠標連續選擇的拼圖塊進行位置交換,代碼實現如下:

def?swapGem(self,?gem1_pos,?gem2_pos):
	margin?=?gem1_pos[0]?-?gem2_pos[0]?+?gem1_pos[1]?-?gem2_pos[1]
	if?abs(margin)?!=?1:
		return?False
	gem1?=?self.getGemByPos(*gem1_pos)
	gem2?=?self.getGemByPos(*gem2_pos)
	if?gem1_pos[0]?-?gem2_pos[0]?==?1:
		gem1.direction?=?'left'
		gem2.direction?=?'right'
	elif?gem1_pos[0]?-?gem2_pos[0]?==?-1:
		gem2.direction?=?'left'
		gem1.direction?=?'right'
	elif?gem1_pos[1]?-?gem2_pos[1]?==?1:
		gem1.direction?=?'up'
		gem2.direction?=?'down'
	elif?gem1_pos[1]?-?gem2_pos[1]?==?-1:
		gem2.direction?=?'up'
		gem1.direction?=?'down'
	gem1.target_x?=?gem2.rect.left
	gem1.target_y?=?gem2.rect.top
	gem1.fixed?=?False
	gem2.target_x?=?gem1.rect.left
	gem2.target_y?=?gem1.rect.top
	gem2.fixed?=?False
	self.all_gems[gem2_pos[0]][gem2_pos[1]]?=?gem1
	self.all_gems[gem1_pos[0]][gem1_pos[1]]?=?gem2
	return?True

每一次交換拼圖塊時,我們需要判斷是否有連續一樣的三個及以上拼圖塊,代碼實現如下:

def?isMatch(self):
	for?x?in?range(NUMGRID):
		for?y?in?range(NUMGRID):
			if?x?+?2?

當出現三個及以上拼圖塊時,需要將這些拼圖塊消除,代碼實現如下:

def?removeMatched(self,?res_match):
	if?res_match[0]?>?0:
		self.generateNewGems(res_match)
		self.score?+=?self.reward
		return?self.reward
	return?0

將匹配的拼圖塊消除之后,我們還需要隨機生成新的拼圖塊,代碼實現如下:

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

之后反復執行這個過程,直至耗盡游戲時間,游戲結束。

最后,我們動態看一下游戲效果。

總結

本文我們使用 Python 實現了一個簡單的消消樂游戲,有興趣的可以對游戲做進一步擴展,比如增加關卡等。

到此這篇關于Python實現消消樂小游戲的文章就介紹到這了,希望大家以后多多支持好二三四!

文檔

Python實現消消樂小游戲

提到開心消消樂這款小游戲,相信大家都不陌生,其曾在2015年獲得過玩家最喜愛的移動單機游戲獎,受歡迎程度可見一斑,本文我們使用Python來做個簡單的消消樂小游戲。
推薦度:
為你推薦
資訊專欄
熱門視頻
相關推薦
分享15個超級好用得Python實用技巧 學習python的while循環嵌套 提升Python運行速度的5個小技巧 Python按鍵或值對字典進行排序 圖像檢索之基于vlfeat實現SIFT特征 python繪圖中的四個繪圖技巧 js中toString方法3個作用 描寫春天花朵的詩句 關于思念的詩句 帶馬字的詩句 牡丹花的詩句 想念的詩句 含雁的詩句 愁的詩句 珍惜時間的名言 清明節的諺語 關于清明的諺語 清明的諺語 冒泡排序算法 選擇排序算法 python實現新年倒計時實例代碼 詳解python的循環 基于Python實現PDF區域文本提取工具 Python數據分析處理(三)--運動員信息的分組與聚合 Python實現城市公交網絡分析與可視化 Python 垃圾回收機制詳解 關于樹的詩句 緬懷親人的詩句 春暖花開的詩句 家國情懷的詩句 含有星字的詩句 用來贊美老師的詩句 看破紅塵的經典詩句 長江的詩句 關于傳統節日的詩句 三月桃花的詩句 夕陽的詩句 紀念烈士的詩句 西湖的詩句 贊美虎的詩句
Top 亚洲国产第一站精品蜜芽_亚洲AV无码精品色午夜果冻不卡_国产香蕉九九久久精品免费_国产精品亚洲专区无码不卡
<sup id="m40ya"></sup>
  • 
    
  • <kbd id="m40ya"></kbd>
    <samp id="m40ya"></samp>
    <ul id="m40ya"></ul>
  • 久久久在线视频| 欧美日韩在线免费| 伊人激情综合| 欧美午夜激情小视频| 久久精品二区三区| 久久亚洲精品中文字幕冲田杏梨| 亚洲理伦在线| 亚洲国产高清一区| 国产日韩一区二区三区在线播放 | 欧美自拍偷拍午夜视频| 99ri日韩精品视频| 亚洲精品1234| 亚洲国产精品va在线观看黑人| 国产精品毛片高清在线完整版| 欧美日韩国产精品一卡| 欧美不卡在线| 麻豆精品在线视频| 久久躁狠狠躁夜夜爽| 久久精品视频导航| 久久av资源网站| 欧美一区二区免费| 久久成人这里只有精品| 久久黄色网页| 美女在线一区二区| 免费在线播放第一区高清av| 免费在线成人| 欧美黄色网络| 欧美日韩精品免费观看视频| 国产婷婷色综合av蜜臀av| 国产精品日韩精品欧美精品| 国产精品色午夜在线观看| 国产精品入口尤物| 国产一区二区精品| 在线观看成人小视频| 亚洲高清电影| 99热免费精品| 亚洲欧美综合国产精品一区| 久久精品99| 欧美成在线视频| 国产精品国产精品国产专区不蜜| 国产精品专区第二| 国产在线不卡视频| 亚洲人成亚洲人成在线观看| 99亚洲视频| 欧美中日韩免费视频| 女仆av观看一区| 欧美亚洲不卡| 在线观看福利一区| 亚洲一级免费视频| 久久人人爽人人| 欧美午夜精品久久久久久久| 国产一区二区主播在线| 日韩视频免费| 久久久久国产精品www| 欧美精品在线免费播放| 国产精品一国产精品k频道56| 国内精品久久久久影院优| 日韩午夜av在线| 久久精品99| 欧美日韩精品在线观看| 国语自产偷拍精品视频偷| 99re国产精品| 亚洲午夜一区二区| 日韩视频在线播放| 欧美影院在线| 欧美日韩精品一区视频| 国内不卡一区二区三区| 一区二区三区视频观看| 久久免费国产精品1| 欧美视频一区二区三区四区| 亚洲国产精品www| 欧美一区二区免费视频| 欧美色大人视频| 亚洲全部视频| 蜜桃av噜噜一区二区三区| 国产欧美日韩免费| 在线亚洲欧美视频| 欧美成人一区二免费视频软件| 国产农村妇女毛片精品久久麻豆| 99re热这里只有精品视频| 久久精品免费| 国产一区二区0| 在线视频欧美日韩| 欧美日韩不卡| 亚洲第一页中文字幕| 欧美专区一区二区三区| 国产精品大片免费观看| aa级大片欧美| 欧美日本乱大交xxxxx| 亚洲经典视频在线观看| 蜜桃视频一区| 亚洲第一精品电影| 久久久欧美精品| 在线日本高清免费不卡| 一本在线高清不卡dvd| 欧美视频一区二区三区| 99天天综合性| 国产精品久久二区二区| 亚洲欧美日韩精品久久亚洲区| 欧美黑人在线播放| 亚洲精品一区在线观看| 欧美日韩综合视频| 亚洲一级片在线看| 国产欧美日韩三区| 久久青青草综合| 亚洲人体大胆视频| 国产精品a久久久久| 一区二区三区四区五区精品| 国产精品久久久久久超碰 | 国产一级精品aaaaa看| 久久激情网站| 亚洲国产天堂久久综合网| 欧美成人国产va精品日本一级| 亚洲免费高清视频| 国产精品欧美久久| 久久这里只精品最新地址| 亚洲日本va午夜在线影院| 欧美小视频在线观看| 久久激情五月激情| 日韩亚洲综合在线| 国产日韩欧美精品| 欧美 日韩 国产一区二区在线视频 | 亚洲黄色在线视频| 欧美丝袜一区二区三区| 亚欧成人在线| 亚洲欧洲精品一区二区三区不卡| 欧美网站大全在线观看| 久久精品一区二区三区不卡| 欧美日本免费一区二区三区| 午夜精品视频在线观看| 亚洲欧洲一区二区三区在线观看| 欧美天堂在线观看| 欧美a级在线| 香蕉成人啪国产精品视频综合网| 亚洲激情中文1区| 国产一区二区三区高清| 欧美日本亚洲| 久久午夜av| 午夜精品久久久久久99热| 亚洲人成亚洲人成在线观看图片 | 性色一区二区| 亚洲狼人综合| 亚洲国产精品va在看黑人| 国产欧美视频一区二区三区| 欧美日韩国产精品一区| 免费在线亚洲欧美| 久久福利一区| 篠田优中文在线播放第一区| 日韩天天综合| 最新日韩av| 亚洲第一免费播放区| 国产亚洲综合精品| 国产乱码精品一区二区三区五月婷| 欧美日韩国产精品一区二区亚洲| 葵司免费一区二区三区四区五区| 欧美一级在线播放| 亚洲在线观看免费视频| 在线一区免费观看| 9人人澡人人爽人人精品| 亚洲美女av在线播放| 亚洲日韩欧美视频一区| …久久精品99久久香蕉国产 | 久久综合久久久| 久久久亚洲综合| 久久一区视频| 欧美jizz19hd性欧美| 裸体女人亚洲精品一区| 蜜臀av性久久久久蜜臀aⅴ四虎| 久久久亚洲精品一区二区三区| 久久经典综合| 久久嫩草精品久久久精品| 久久久久久一区| 免费欧美日韩国产三级电影| 麻豆av福利av久久av| 久久亚洲国产成人| 免费看成人av| 欧美日韩国产小视频| 国产精品久久久一区麻豆最新章节 | 亚洲视频一区在线| 一区二区欧美在线| 亚洲自拍偷拍麻豆| 亚洲综合色自拍一区| 欧美在线一二三| 免费欧美日韩国产三级电影| 欧美日韩久久| 国产一区二区三区黄视频| 今天的高清视频免费播放成人| 亚洲国产精品va在线看黑人| 日韩亚洲欧美一区| 午夜精品视频在线观看| 久久久久久网| 欧美日韩一区二区免费视频| 国产精品一区在线播放| 今天的高清视频免费播放成人| 91久久精品国产91久久性色| 亚洲一区二区动漫| 久久综合中文| 国产乱码精品| 最新中文字幕亚洲| 午夜视频一区二区|