手把手制作Python小游戏:俄罗斯方块1
大家好,新手第一次写文章,请多多指教
A.准备工作:
这里我们运用的是Pygame库,因为Python没有内置,所以需要下载
如果没有pygame,可以到官网下载
pygame官网,单击右边即可:pygame下载地址链接
加下来就可以导入试一试了,这里作者我运用的是
visual-studio-code 因为它有个很方便作者很喜欢的地方:可以自动保存
请这样设置:
打开之后单击 文件(F)
在此菜单里再单击 自动保存 即可
运行程序需要:右键,单击 在终端运行python文件
如何下载VS Code 呢 单击右边链接:官网
之后在:
分别搜索:
1.搜索 Chinese 下载第一个插件插件(中文,简体)
2.搜索 python 下载第一个即可(需要注意的是,建议大家在添加此插件时先下载好Python,作者就是这样)
3.强烈建议大家更新至最新版,这样点击右上角的绿三角行就可以直接运行程序了
由于介绍VS Code 的与介绍 Pygame 的网站、论文、笔记等很多,在此我就不过多介绍了,大家可以搜一搜。
接下来步入正题:
B.1制作俄罗斯方块的第一步:
大家可以边学边做,不过我当然建议大家可以以章节为单位,看会了,自己编,对大家有好处嘛。
首先导入pygame库
import pygame
之后可以先运行一次。看一看有没有报错,如果没有,代表库安装正确,否则务必要检查一下是否安装了、安装正确了吗等问题。
没问题的话,就开始制作俄罗斯方块小游戏吧:
首先导入一些需要用到的库(除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 第四步:编写主函数
这是重点哦,大家加油
主函数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() 会显示游戏失败,游戏循环会再次开始,然后进行下一次游戏。
接下来的内容,均在第二篇
如果你喜欢的话,记得关注我呦