你们好,新手第一次写文章,请多多指教html
这里咱们运用的是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
接下来步入正题:visual-studio
你们能够边学边作,不过我固然建议你们能够以章节为单位,看会了,本身编,对你们有好处嘛。
首先导入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格(下)你们在最后能够试着改变一下数据
加下来是设置各个图形的形状:建议你们复制粘贴,没啥技术含量
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..', '.....']]
接下来我来做解释:
在定义每一个方块时,必须知道每一个类型的方块有几种“不一样”的形状。在上述代码当中,列表中嵌有了含有字符串的小列表来构成这个模板。一个所谓的模板包括了一个形状的全部的变换方式。
咱们在这里须要一个字典变量PIECES来存储全部的不一样形状的全部变化,具体代码以下:
PIECES = {'S':sShapeTemplate 'I':iShapeTemplate 'Z':zShapeTemplate 'O':oShapeTemplate 'J':jShapeTemplate 'L':lShapeTemplate 'T':tShapeTemplate}
这是重点哦,你们加油
主函数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(第二篇网址)
若是你喜欢的话,记得关注我呦