手把手制做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

若是你喜欢的话,记得关注我呦

相关文章
相关标签/搜索