python编的俄罗斯方块游戏_手把手制作Python小游戏:俄罗斯方块(一)
手把手制作Python小游戲:俄羅斯方塊1
大家好,新手第一次寫(xiě)文章,請(qǐng)多多指教
A.準(zhǔn)備工作:
這里我們運(yùn)用的是Pygame庫(kù),因?yàn)镻ython沒(méi)有內(nèi)置,所以需要下載
如果沒(méi)有pygame,可以到官網(wǎng)下載
pygame官網(wǎng),單擊右邊即可:pygame下載地址鏈接
加下來(lái)就可以導(dǎo)入試一試了,這里作者我運(yùn)用的是
visual-studio-code 因?yàn)樗袀€(gè)很方便作者很喜歡的地方:可以自動(dòng)保存
請(qǐng)這樣設(shè)置:
打開(kāi)之后單擊 文件(F)
在此菜單里再單擊 自動(dòng)保存 即可
運(yùn)行程序需要:右鍵,單擊 在終端運(yùn)行python文件
如何下載VS Code 呢 單擊右邊鏈接:官網(wǎng)
之后在:
分別搜索:
1.搜索 Chinese 下載第一個(gè)插件插件(中文,簡(jiǎn)體)
2.搜索 python 下載第一個(gè)即可(需要注意的是,建議大家在添加此插件時(shí)先下載好Python,作者就是這樣)
3.強(qiáng)烈建議大家更新至最新版,這樣點(diǎn)擊右上角的綠三角行就可以直接運(yùn)行程序了
由于介紹VS Code 的與介紹 Pygame 的網(wǎng)站、論文、筆記等很多,在此我就不過(guò)多介紹了,大家可以搜一搜。
接下來(lái)步入正題:
B.1制作俄羅斯方塊的第一步:
大家可以邊學(xué)邊做,不過(guò)我當(dāng)然建議大家可以以章節(jié)為單位,看會(huì)了,自己編,對(duì)大家有好處嘛。
首先導(dǎo)入pygame庫(kù)
import pygame
之后可以先運(yùn)行一次。看一看有沒(méi)有報(bào)錯(cuò),如果沒(méi)有,代表庫(kù)安裝正確,否則務(wù)必要檢查一下是否安裝了、安裝正確了嗎等問(wèn)題。
沒(méi)問(wèn)題的話,就開(kāi)始制作俄羅斯方塊小游戲吧:
首先導(dǎo)入一些需要用到的庫(kù)(除Pygame,其他都已經(jīng)內(nèi)置好了)
import pygame #此庫(kù)未內(nèi)置
import random #此庫(kù)已內(nèi)置
import sys #此庫(kù)已內(nèi)置
import time #此庫(kù)已內(nèi)置
from pygame.locals import * # *代表所有
接下來(lái)我們來(lái)定義一些變量,在后面會(huì)用得上,在此就不過(guò)多解釋啦
初始化
FPS = 25
WINDOWWIDTH = 640
WINDOWHEIGTH = 480
BOXSIZE = 20
BOARDWIDTH = 10
BOARDHEIDTH = 20
BLANK = "."
MOVESIDEWAYSFREQ = 0.15
MOVEDOWNFREQ = 0.1
XMARGIN = int((WINDOWWIDTH - (BOARDWIDTH * BOXSIZE))/2)
TOPMARGIN = WINDOWHEIGHT - (BOARDHEIGHT * BOXSIZE) - 5
# 下面是設(shè)置一些顏色的RGB
WHITE = (255, 255, 255)
GRAY = (185, 185, 185)
BLACK = (0, 0, 0)
RED = (155, 0, 0)
LIGHTRED = (175, 20, 20)
GREEN = (0, 155, 0)
LIGHTBLUE = (20, 20, 175)
BLUE = (0, 0, 155)
YELLOW = (155, 155, 0)
LIGHTYELLOW = (175, 175, 20)
BORDERCOLOR = BLUE
BGCOLOR = BLACK
TEXTCOLOR = WHITE
TEXTSHADOWCOLOR = GRAY
COLORS = (GLUE, RED, GREEN, YELLOW)
LIGHTCOLORS = (LIGHTGLUE, LIGHTRED, LIGHTGREEN, LIGHTYELLOW)
assert lec(COLORS) == len(LIGHTCOLORS)#每一種顏色必須有對(duì)應(yīng)的亮色
TEMPLATEWIDTH = 5
TEMPLATEHEIGHT = 5
第一部分第一段的代碼到這里結(jié)束啦,大家可以自己寫(xiě)一寫(xiě),或者干脆復(fù)制粘貼。
我來(lái)解析其中的一部分:
1.在上述代碼中,BOXSIZE,BOARDWIDTH,BOARDHEIGH的功能是:建立游戲與屏幕像素點(diǎn)之間的關(guān)系。
2.
MOVESIDEWAYSFREQ = 0.15
MOVEDOWNFREQ = 0.1
通過(guò)上述兩個(gè)變量,每當(dāng)玩家按下鍵盤(pán)中的左移鍵/右移鍵/下移鍵,下降的方塊也會(huì)相應(yīng)的向左/右/下移動(dòng)一個(gè)方塊。而且玩家可以一直按住令其一直移動(dòng)。
第一個(gè)是指每0.15s移動(dòng)1格(左/右),第二個(gè)是指每0.1s移動(dòng)1格(下)大家在最后可以試著改變一下數(shù)據(jù)
B.2 第二步:設(shè)置形狀
加下來(lái)是設(shè)置各個(gè)圖形的形狀:建議大家復(fù)制粘貼,沒(méi)啥技術(shù)含量
sShapeTemplate = [['.....',
'.....',
'..OO.',
'.OO..',
'.....']
['.....',
'..O..',
'..OO.',
'...O.',
'.....']]
iShapeTemplate = [['..O..',
'..O..',
'..O..',
'..O..',
'.....']
['.....',
'.....',
'OOOO.',
'.....',
'.....']]
zShapeTemplate = [['.....',
'.....',
'.OO..',
'..OO.',
'.....']
['.....',
'..O..',
'.OO..',
'.O...',
'.....']]
oShapeTemplate = [['.....',
'.....',
'.OO..',
'.OO..',
'.....']]
jShapeTemplate = [['.....',
'.O...',
'.OOO.',
'.....',
'.....'],
['.....',
'..OO.',
'..O..',
'..O..',
'.....'],
['.....',
'.....',
'.OOO.',
'...O.',
'.....'],
['.....',
'..O..',
'..O..',
'.OO..',
'.....']]
lShapeTemplate = [['.....',
'...O.',
'.OOO.',
'.....',
'.....'],
['.....',
'..O..',
'..O..',
'..OO.',
'.....'],
['.....',
'.....',
'.OOO.',
'.O...',
'.....'],
['.....',
'.OO..',
'..O..',
'..O..',
'..O..']]
tShapeTemplate = [['.....',
'..O..',
'.OOO.',
'.....',
'.....'],
['.....',
'..O..',
'..OO.',
'..O..',
'.....'],
['.....',
'.....',
'.OOO.',
'..O..',
'.....'],
['.....',
'..O..',
'.OO..',
'..O..',
'.....']]
接下來(lái)我來(lái)作解釋:
在定義每個(gè)方塊時(shí),必須知道每個(gè)類(lèi)型的方塊有幾種“不同”的形狀。在上述代碼當(dāng)中,列表中嵌有了含有字符串的小列表來(lái)構(gòu)成這個(gè)模板。一個(gè)所謂的模板包括了一個(gè)形狀的所有的變換方式。
B.3 第三步:創(chuàng)建"形狀字典"
我們?cè)谶@里需要一個(gè)字典變量PIECES來(lái)存儲(chǔ)所有的不同形狀的所有變化,具體代碼如下:
PIECES = {'S':sShapeTemplate
'I':iShapeTemplate
'Z':zShapeTemplate
'O':oShapeTemplate
'J':jShapeTemplate
'L':lShapeTemplate
'T':tShapeTemplate}
B.4 第四步:編寫(xiě)主函數(shù)
這是重點(diǎn)哦,大家加油
主函數(shù)main()的作用是創(chuàng)建一些全局變量,并在游戲開(kāi)始前顯示一個(gè)開(kāi)始畫(huà)面,代碼如下:
def main():
global FPSCLOCK, DISPLAYSURF, BASICFONT, BIGFONT
pygame.init()
FPSCLOCK = pygame.time.Clock()
DISPLAYSURF = pygame.display.set_mode((WINDOWWIDTH,WINDOWHEIGHT))
BASICFONT = pygame.font.Font("freesansbold.ttf",18)
BIGFONT = pygame.font.Font("freesansbold.ttf",100)
pygame.display.set_caption("Tetromino")
#showTextScreen("Tetromino")
while True: #Game Loop
#if random.randint(0,1) == 0:
#pygame.mixer.music.looad("tetrisb.mid")
#else:
#pygame.mixer.music.looad("tetrisc.mid")
#pygame.mixer.music.play(-1, 0.0)
runGame()
#pygame.mixer.music.stop()
showTextScreen("Game Over !")
上述代碼中的 runGame() 函數(shù)是核心,在循環(huán)中首先隨機(jī)決定播放那個(gè)音樂(lè)。之后調(diào)用 runGame() 函數(shù)運(yùn)行游戲。當(dāng)游戲失敗時(shí),runGame() 函數(shù)就會(huì)返回 main() 函數(shù),這時(shí)會(huì)停止背景音樂(lè)并顯示游戲失敗的畫(huà)面。當(dāng)玩家按下一個(gè)鍵時(shí),函數(shù) showTextScreen() 會(huì)顯示游戲失敗,游戲循環(huán)會(huì)再次開(kāi)始,然后進(jìn)行下一次游戲。
接下來(lái)的內(nèi)容,均在第二篇
如果你喜歡的話,記得關(guān)注我呦
總結(jié)
以上是生活随笔為你收集整理的python编的俄罗斯方块游戏_手把手制作Python小游戏:俄罗斯方块(一)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java condition_死磕Jav
- 下一篇: python怎样打开加密的文件_如何在P