手把手制作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() 会显示游戏失败,游戏循环会再次开始,然后进行下一次游戏。

接下来的内容,均在第二篇

如果你喜欢的话,记得关注我呦

python图形小游戏代码_手把手制作Python小游戏:俄罗斯方块(一)相关推荐

  1. python编的俄罗斯方块游戏_手把手制作Python小游戏:俄罗斯方块(一)

    手把手制作Python小游戏:俄罗斯方块1 大家好,新手第一次写文章,请多多指教 A.准备工作: 这里我们运用的是Pygame库,因为Python没有内置,所以需要下载 如果没有pygame,可以到官 ...

  2. 接水果游戏代码 c语言,制作接水果游戏

    今天是儿童节,让老师教同学们做个接水果的小游戏吧. 我们新建一个项目,把小猫角色删除,然后选择一个碗的角色来接水果: 把碗移动到白色画布的下半部分,让它可以随着鼠标的移动而左右移动,但是不需要上下移动 ...

  3. python英文词云代码_手把手教你制作 中英文 词云 | python demo

     以前做词云的时候网上看的python做词云的坑都很多,耗了很多时间才高清楚wordcloud制作词云的精髓和脉络,整理如下. 相关文章 准备Mac环境下直接pip install wordclou ...

  4. python血条游戏代码_手把手Python和pygame游戏开发教程(二)

    欢迎,来自IP地址为:114.99.15.226 的朋友 前面教程第一部分已经成了小兔子的正确移动和转向,现在需要给它添加更多的动作以进行游戏的进一步开发. 让小兔子可以射箭 你的小兔子可以正确移动后 ...

  5. python图形界面设计代码_(八)Python 图形化界面设计

    3.1.文本输入和输出相关控件:文本的输入与输出控件通常包括:标签(Label).消息(Message).输入框(Entry).文本框(Text).他们除了前述共同属性外,都具有一些特征属性和功能. ...

  6. python实现人脸识别代码_手把手教你用1行代码实现人脸识别——Python Face_recogni...

    摘要: 1行代码实现人脸识别,1. 首先你需要提供一个文件夹,里面是所有你希望系统认识的人的图片.其中每个人一张图片,图片以人的名字命名.2. 接下来,你需要准备另一个文件夹,里面是你要识别的图片.3 ...

  7. python答题系统的代码_答题辅助python代码实现

    本文实例为大家分享了答题辅助python具体代码,供大家参考,具体内容如下 from screenshot import pull_screenshot import time, urllib.req ...

  8. python函数模块关键代码_从零开始学Python(六):函数,模块和类的使用

    从这章开始,我们不在使用sublime文本编译器进行编码了,主要是我们每次运行的使用还得去命令行执行pyhon ***.py命令查看结果,操作比较麻烦.推荐大家使用Pycharm(具体安装使用教程大家 ...

  9. python字体加粗代码_如何在python docx中加粗行单元格的文本?

    在python docx中,可以通过使用 Rich Text 造型.您应该为模板中需要样式化的特定字符/字符串在字符/字符串的位置提供一个上下文变量.此变量映射到 RichText 具有样式定义(在代 ...

最新文章

  1. Java正则表达式--字符集范围:并集、交集和差集
  2. ssh 用密码连接不上、查看openSSH 的版本、CentOS - 升级openSSH,修复安全漏洞
  3. Django框架(上传Excel文件并读取)
  4. 谁动了我的奶酪?--java实例初始化的顺序问题
  5. 精通java益处_你真的精通Java吗?
  6. 已知三个用不同数制表示的整数_数学一轮复习26,数列的概念及简单表示法,常用方法及具体策略...
  7. java weblogic多数据源,039 在weblogic下部署jndi的多数据源
  8. 吴恩达深度学习 —— 4.2 深层网络中的前向传播
  9. 线性表—顺序存储结构-顺序表
  10. JS设计模式初识(四)-迭代器模式
  11. [转载] python格式化字符串漏洞_从两道CTF实例看python格式化字符串漏洞
  12. layer弹窗内容显示不全的解决方法
  13. 员工转正述职答辩问什么问题_新员工转正述职答辩PPT
  14. Linux-nali解析IP归属信息
  15. wincc远程服务器配置,wincc连接远程opc服务器
  16. java 判断手机运营商_如何用java判断手机号运营商?
  17. 区块链入门教程(4)--搭建单机四节点FISCO BCOS联盟链
  18. 病毒乱花迷人眼,勿把“VX”当“全信”
  19. [进程通信] 进程间通信 之 管道
  20. Swift5代码添加约束

热门文章

  1. Java—List的用法与实例详解
  2. oracle 数据库 锁
  3. 爬虫的一些工具(二)
  4. dependencies 和 devDependencies 区别
  5. [pytorch、学习] - 5.8 网络中的网络(NiN)
  6. JavaScript --- 自定义优先级队列
  7. 阿里云大数据计算服务MaxCompute(上篇)
  8. Underscore.js 的模板功能
  9. 解决将Ubuntu下导出的requirements.txt到Centos服务器上面出现pkg-resource的版本为0.0.0...
  10. Zipkin-1.19.0学习系列1:java范例