手把手制作Python小游戏:俄罗斯方块1

bVbEgvZ

大家好,新手第一次写文章,请多多指教

A.准备工作:

这里我们运用的是Pygame库,因为Python没有内置,所以需要下载

如果没有pygame,可以到官网下载

pygame官网,单击右边即可:pygame下载地址链接

加下来就可以导入试一试了,这里作者我运用的是

visual-studio-code 因为它有个很方便作者很喜欢的地方:可以自动保存

请这样设置:bVbDRud

打开之后单击 文件(F)

在此菜单里再单击 自动保存 即可

运行程序需要:右键,单击 在终端运行python文件

如何下载VS Code 呢 单击右边链接:官网

之后在:bVbDRu1

分别搜索:

1.搜索 Chinese 下载第一个插件插件(中文,简体)

2.搜索 python 下载第一个即可(需要注意的是,建议大家在添加此插件时先下载好Python,作者就是这样)

3.强烈建议大家更新至最新版,这样点击右上角的绿三角行就可以直接运行程序了

bVbDRBq

由于介绍VS Code 的与介绍 Pygame 的网站、论文、笔记等很多,在此我就不过多介绍了,大家可以搜一搜。

接下来步入正题:

bVbEgwB

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 第四步:编写主函数

这是重点哦,大家加油

bVbEgx7

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/259011.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/259011.shtml
英文地址,请注明出处:http://en.pswp.cn/news/259011.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于Git使用的一些心得

2019独角兽企业重金招聘Python工程师标准>>> 本篇稍微记录下Git使用的一些心得。 对Git的使用,应该是从搭建自己的博客开始的。当时看到开源中国推荐的一篇基于码云hexo搭建自己博客的文章。所以就花了一天时间鼓捣了下博客。 顺带整理下目前能看到我写的…

Dlib机器学习库安装

昨天使用了一下dlib的人脸检测功能,效果出奇的好。下面给出dlib整个的安装过程和使用指导。 下载安装 我们可以从dlib的官网下载最新的版本,我的是dlib18.18.然后我们需要使用cmake编译dlib库和examples示例。 当然前提是你要按照好cmake和opencv。 …

struts2上传

今天在使用struts2上传的过程中无意发现,struts2上传一个文件大小为0字节的文本竟然会报错FileNotFoundException,尝试了好久也没找到答案,最后只能判断文件的大小后上传,至于文件字节为0的怎么处理就看各位了 struts2上传java源码 1 package com.jzgx.web.action;2 3 import j…

BitSet之为什么用long保存信息

BitSet内部使用long[] words来保存位信息。咋看之下并不理解原因&#xff0c;在解读set(int bitIndex)之后似乎有了一些领悟。 public void set(int bitIndex) { if (bitIndex < 0) throw new IndexOutOfBoundsException("bitIndex < 0: " bitIndex); //用来计…

ipv4地址是几位二进制数_几张思维导图,让你清楚的知道ip地址怎么回事?

网络工程中&#xff0c;ip地址是必须要了解的内容&#xff0c;今天我们用几张思维导图来给大家详细讲解IP地址。一、什么是IP地址在生活中我们使用具有上网功能的电子设备都有IP地址&#xff0c;就跟每个人都有自己的名字一样。IP地址分为IPV4 IPV6&#xff0c;我们所说的的IP地…

《关系营销2.0——社交网络时代的营销之道》一检查拼写和语法

本节书摘来异步社区《关系营销2.0——社交网络时代的营销之道》一书中的第2章&#xff0c;作者&#xff1a; 【美】Mari Smith 译者&#xff1a; 张猛 , 于宏 , 赵俐 责编&#xff1a; 陈冀康, 更多章节内容可以访问云栖社区“异步社区”公众号查看。 检查拼写和语法 关系营销2…

dlib人脸检测功能介绍

本文主要介绍三个点&#xff1a; 1. 如何单独建立一个工程&#xff0c;使用dlib的人脸检测功能。 2. 提高人脸检测率的两个方法 3. 加速人脸检测的方法 下面围绕这几个点展开叙述。 建人脸检测工程 1 . 首先我们先使用上期说的examples里的人脸检测。 我们只要将face_de…

ios网络开发 网络状态检查

http://www.cnblogs.com/hanjun/archive/2012/12/01/2797622.html 网络连接中用到的类&#xff1a; 一.Reachability 1.添加 Reachability 的.h和.m文件&#xff0c;再添加SystemConfiguration.framework。 2.Reachability中定义了三种网络状态&#xff1a; typedef Num{ NotR…

delphi xe4 ini文件不能读取的解决方法

今天发现用inifiles下 tinifile.readstring方法突然不能读数据了&#xff0c;结果把ini文件格式由utf-8改成unicode后就能正常读取了。转载于:https://www.cnblogs.com/liqiao/p/3503985.html

《众妙之门——网页排版设计制胜秘诀》——3.4 展现品牌视觉的同时保持网页的可读性...

本节书摘来自异步社区《众妙之门——网页排版设计制胜秘诀》一书中的第3章&#xff0c;第3.4节&#xff0c;作者&#xff1a; 【德】Smashing Magazine 译者&#xff1a; 侯景艳 , 范辰 更多章节内容可以访问云栖社区“异步社区”公众号查看。 3.4 展现品牌视觉的同时保持网页的…

vs2013创建及使用DLL

这几天看了许多关于生成Dll的博文&#xff0c;很有感触&#xff0c;遂整理在此&#xff0c;以供自己后续参考。 VS2013创建DLL 我们使用vs2013来生成Dll&#xff0c;其实使用其他的版本也是同理如此。步骤如下&#xff1a; 单击“新建项目”&#xff0c;选择“Win32 项目”&a…

python的作用域分别有几种_python中作用域与函数嵌套

知识回顾&#xff1a; 拆解传参。 1.字典传参。使用** 2.列表传参。使用* 实际上我们在定义函数的时候&#xff0c;如果省略了星号&#xff0c;那么在调用函数的时候必须要省略星号&#xff0c;除非我们拆解后的参数个数刚好相等。 视频内容 本节知识视频教程 文字讲解开始&…

这个博客的由来

笔者从事电信行业大型商业智能系统工作多年&#xff0c;日前从事B2C电商网站类数据分析工作&#xff0c;特开设此微博&#xff0c;在发表好文同时&#xff0c;研究网站分析技术。转载于:https://www.cnblogs.com/sambazhu/p/3508633.html

《Axure RP8 网站和APP原型制作 从入门到精通》一2.7 交付

本节书摘来自异步社区《Axure RP8 网站和APP原型制作 从入门到精通》一书中的第2章&#xff0c;第2.7节&#xff0c;作者 金乌&#xff0c;更多章节内容可以访问云栖社区“异步社区”公众号查看 2.7 交付 模型一旦经过批准&#xff0c;我们就可以进入切图和优化图像环节了。我…

iOS UISegmentedControl 的使用

当用户输入不仅仅是布尔值时&#xff0c;可使用分段控件&#xff08;UISegmentedControl&#xff09;。分段控件提供一栏按钮&#xff08;有时称为按钮栏&#xff09;&#xff0c;但只能激活其中一个按钮。分段控件会导致用户在屏幕上看到的内容发生变化。它们常用于在不同类别…

js粘贴板为什么获取不到图片信息_【第1829期】复制黏贴上传图片和跨浏览器自动化测试...

前言这个操作体验倒是不错。今日早读文章由丁香园蒋璇投稿分享。蒋璇, 前端开发攻城狮, 现任职于丁香园. 英语爱好者, 测试驱动开发(TDD)&行为驱动开发(BDD)推崇者. 先专注于 https://github.com/Jiang-Xuan/tuchuang.space 项目的测试驱动开发探索正文从这开始~~在网页中上…

在C++中调用DLL中的函数

&#xfeff;转载自&#xff1a;http://blog.sina.com.cn/s/blog_53004b4901009h3b.html   应用程序使用DLL可以采用两种方式&#xff1a;一种是隐式链接&#xff0c;另一种是显式链接。在使用DLL之前首先要知道DLL中函数的结构信息。Visual C6.0&#xff08;或者更先进的版…

CentOS LVS安装配置

目录(?)[] 一般2.6.10以上内核版本都已经自带了ipvsadm,故不需要安装。 Ipvs 1.25编译 ipvsadm-1.25编译不过 去掉netlink库的依赖&#xff1a;去掉libipvs/Makefile的CFLAGS -DLIBIPVS_USE_NL&#xff0c;去掉Makefile的LIBS -lnl。需要popt库解析命令行&#xff0c;在这里…

《淘宝网开店 拍摄 修图 设计 装修 实战150招》一一2.7 横式构图和竖式构图...

本节书摘来自异步社区出版社《淘宝网开店 拍摄 修图 设计 装修 实战150招》一书中的第2章&#xff0c;第2.7节&#xff0c;作者&#xff1a; 葛存山&#xff0c;更多章节内容可以访问云栖社区“异步社区”公众号查看。 2.7 横式构图和竖式构图 横幅画面&#xff0c;即画面底边…

Node.js初接触(一)

本来还在纠结着到底要学哪一种后台语言呢&#xff0c;突然发现node.js很火&#xff0c;既然能被这么多人推崇&#xff0c;自然是有他的优势的。去百度百科看了一眼&#xff0c;或许是我理解能力太差&#xff0c;并没有了解到很多关于node.js的东西&#xff0c;大概就是知道了No…