手把手製做Python小遊戲:俄羅斯方塊(一)

手把手製做Python小遊戲:俄羅斯方塊1

c6126a15952a603394a268fea4826f39.gif

你們好,新手第一次寫文章,請多多指教html

A.準備工做:

這裏咱們運用的是Pygame庫,由於Python沒有內置,因此須要下載
若是沒有pygame,能夠到官網下載
pygame官網,單擊右邊便可:pygame下載地址連接
加下來就能夠導入試一試了,這裏做者我運用的是
visual-studio-code 由於它有個很方便做者很喜歡的地方:能夠自動保存python

請這樣設置:第一步
打開以後單擊 文件(F)
在此菜單裏再單擊 自動保存 便可
運行程序須要:右鍵,單擊 在終端運行python文件segmentfault

如何下載VS Code 呢 單擊右邊連接:官網visual-studio-code

以後在:插件市場
分別搜索:dom

1.搜索 Chinese 下載第一個插件插件(中文,簡體)
2.搜索 python 下載第一個便可(須要注意的是,建議你們在添加此插件時先下載好Python,做者就是這樣)
3.強烈建議你們更新至最新版,這樣點擊右上角的綠三角行就能夠直接運行程序了
運行三角行▲函數

因爲介紹VS Code 的與介紹 Pygame 的網站、論文、筆記等不少,在此我就不過多介紹了,你們能夠搜一搜。oop

接下來步入正題:
a26025ee6de8c3007a63ed9d3b919fd8.gifvisual-studio

B.1製做俄羅斯方塊的第一步:

你們能夠邊學邊作,不過我固然建議你們能夠以章節爲單位,看會了,本身編,對你們有好處嘛。
首先導入pygame庫網站

import pygame

以後能夠先運行一次。看一看有沒有報錯,若是沒有,表明庫安裝正確,不然務必要檢查一下是否安裝了、安裝正確了嗎等問題。spa

沒問題的話,就開始製做俄羅斯方塊小遊戲吧:
首先導入一些須要用到的庫(除Pygame,其餘都已經內置好了)

import pygame #此庫未內置
import random #此庫已內置
import sys #此庫已內置
import time #此庫已內置
from pygame.locals import *  # *表明全部

接下來咱們來定義一些變量,在後面會用得上,在此就不過多解釋啦

初始化

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
# 下面是設置一些顏色的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)#每一種顏色必須有對應的亮色
TEMPLATEWIDTH = 5
TEMPLATEHEIGHT = 5

第一部分第一段的代碼到這裏結束啦,你們能夠本身寫一寫,或者乾脆複製粘貼。
我來解析其中的一部分:
1.在上述代碼中,BOXSIZE,BOARDWIDTH,BOARDHEIGH的功能是:創建遊戲與屏幕像素點之間的關係。
2.

MOVESIDEWAYSFREQ = 0.15
MOVEDOWNFREQ = 0.1

經過上述兩個變量,每當玩家按下鍵盤中的左移鍵/右移鍵/下移鍵,降低的方塊也會相應的向左/右/下移動一個方塊。並且玩家能夠一直按住令其一直移動。
第一個是指每0.15s移動1格(左/右),第二個是指每0.1s移動1格(下)你們在最後能夠試着改變一下數據

B.2 第二步:設置形狀

加下來是設置各個圖形的形狀:建議你們複製粘貼,沒啥技術含量

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..',
                '.....']]

接下來我來做解釋:
在定義每一個方塊時,必須知道每一個類型的方塊有幾種「不一樣」的形狀。在上述代碼當中,列表中嵌有了含有字符串的小列表來構成這個模板。一個所謂的模板包括了一個形狀的全部的變換方式。

B.3 第三步:建立"形狀字典"

咱們在這裏須要一個字典變量PIECES來存儲全部的不一樣形狀的全部變化,具體代碼以下:

PIECES = {'S':sShapeTemplate
          'I':iShapeTemplate
          'Z':zShapeTemplate
          'O':oShapeTemplate
          'J':jShapeTemplate
          'L':lShapeTemplate
          'T':tShapeTemplate}

B.4 第四步:編寫主函數

這是重點哦,你們加油
77e793ab018efd2ad2e9fbce0921d007.gif
主函數main()的做用是建立一些全局變量,並在遊戲開始前顯示一個開始畫面,代碼以下:

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() 函數是核心,在循環中首先隨機決定播放那個音樂。以後調用 runGame() 函數運行遊戲。當遊戲失敗時,runGame() 函數就會返回 main() 函數,這時會中止背景音樂並顯示遊戲失敗的畫面。當玩家按下一個鍵時,函數 showTextScreen() 會顯示遊戲失敗,遊戲循環會再次開始,而後進行下一次遊戲。

詳情請看第二篇

https://segmentfault.com/a/1190000022010515(第二篇網址)
df6ddcd6b8f60c81dac43f5f73dcd512.gif

若是你喜歡的話,記得關注我呦

相關文章
相關標籤/搜索