Python编写的俄罗斯方块小游戏
文章目录
- 游戏页面
- 实现代码
游戏页面
左右键移动方块位置,上键切换方块形态。

实现代码
import pygame
import random# 初始化 Pygame
pygame.init()# 定义颜色
colors = [(0, 0, 0), # 黑色(255, 0, 0), # 红色(0, 255, 0), # 绿色(0, 0, 255), # 蓝色(255, 255, 0), # 黄色(255, 0, 255), # 紫色(0, 255, 255) # 青色
]# 俄罗斯方块形状
shapes = [[[1, 1, 1, 1]],[[1, 1],[1, 1]],[[0, 1, 1],[1, 1, 0]],[[1, 1, 0],[0, 1, 1]],[[1, 1, 1],[0, 1, 0]],[[1, 1, 1],[1, 0, 0]],[[1, 1, 1],[0, 0, 1]]
]# 设置游戏屏幕
screen_width = 300
screen_height = 600
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption('俄罗斯方块')# 游戏网格
grid = [[0 for _ in range(10)] for _ in range(20)]# 初始化时钟
clock = pygame.time.Clock()# 定义方块类
class Shape:def __init__(self):self.shape = random.choice(shapes)self.color = random.randint(1, len(colors) - 1)self.x = 3self.y = 0def rotate(self):self.shape = [list(row) for row in zip(*self.shape[::-1])]def draw(self):for i, row in enumerate(self.shape):for j, val in enumerate(row):if val:pygame.draw.rect(screen, colors[self.color], (self.x * 30 + j * 30, self.y * 30 + i * 30, 30, 30))def check_collision(shape):for i, row in enumerate(shape.shape):for j, val in enumerate(row):if val:if shape.x + j < 0 or shape.x + j >= 10 or shape.y + i >= 20 or grid[shape.y + i][shape.x + j]:return Truereturn Falsedef merge_shape(shape):for i, row in enumerate(shape.shape):for j, val in enumerate(row):if val:grid[shape.y + i][shape.x + j] = shape.colordef remove_full_lines():global gridgrid = [row for row in grid if not all(row)]while len(grid) < 20:grid.insert(0, [0 for _ in range(10)])def draw_grid():for y in range(20):for x in range(10):pygame.draw.rect(screen, colors[grid[y][x]], (x * 30, y * 30, 30, 30))def main():running = Truecurrent_shape = Shape()fall_time = 0while running:screen.fill((0, 0, 0))draw_grid()current_shape.draw()for event in pygame.event.get():if event.type == pygame.QUIT:running = Falseif event.type == pygame.KEYDOWN:if event.key == pygame.K_LEFT:current_shape.x -= 1if check_collision(current_shape):current_shape.x += 1if event.key == pygame.K_RIGHT:current_shape.x += 1if check_collision(current_shape):current_shape.x -= 1if event.key == pygame.K_DOWN:current_shape.y += 1if check_collision(current_shape):current_shape.y -= 1if event.key == pygame.K_UP:current_shape.rotate()if check_collision(current_shape):current_shape.rotate()current_shape.rotate()current_shape.rotate()fall_time += clock.get_rawtime()clock.tick()if fall_time / 1000 >= 0.5:fall_time = 0current_shape.y += 1if check_collision(current_shape):current_shape.y -= 1merge_shape(current_shape)remove_full_lines()current_shape = Shape()if check_collision(current_shape):running = Falsepygame.display.update()pygame.quit()if __name__ == "__main__":main()
相关文章:
Python编写的俄罗斯方块小游戏
文章目录 游戏页面实现代码 游戏页面 左右键移动方块位置,上键切换方块形态。 实现代码 import pygame import random# 初始化 Pygame pygame.init()# 定义颜色 colors [(0, 0, 0), # 黑色(255, 0, 0), # 红色(0, 255, 0), # 绿色(0, 0, 255), # 蓝色(255,…...
前端直连小票打印机,前端静默打印,js静默打印解决方案
最近公司开发了一个vue3收银系统,需要使用小票打印机打印小票,但是又不想结账的时候弹出打印预览,找了很多方案,解决不了js打印弹出的打印预览窗口! 没办法,自己写了一个winform版本的静默打印软件…...
python批量读取Excel数据写入word
from docx import Document from docx.shared import Pt from docx.enum.table import WD_TABLE_ALIGNMENT, WD_ROW_HEIGHT_RULE import os import pandas as pd from docx import Document from docx.oxml.ns import qn from docx.shared import Pt # ... 其他代码 ... work…...
Unity 常用取整方法
向下取整:Mathf.FloorToInt() 向上取整:Math.Ceiling 截断取整:(int) 四舍五入:Mathf.RoundToInt e.NewValues.value.ToString(“F0”) 百分比: int i 400; int j 200; string p ((double)i…...
Apache Seata Mac下的Seata Demo环境搭建
本文来自 Apache Seata官方文档,欢迎访问官网,查看更多深度文章。 本文来自 Apache Seata官方文档,欢迎访问官网,查看更多深度文章。 Mac下的Seata Demo环境搭建(AT模式) 前言 最近因为工作需要…...
记录|C#安装+HslCommunication安装
记录线索 前言一、C#安装1.社区版下载2.VS2022界面设置 二、HslCommunication安装1.前提2.安装3.相关文件【重点】 更新记录 前言 初心是为了下次到新的电脑上安装VS2022做C#上机位项目时能快速安装成功。 一、C#安装 1.社区版下载 Step1. 直接点击VS2022,跳转下…...
Android 12系统源码_设备设置(一)Settings介绍
前言 Settings 类是一个用于访问和管理设备设置的关键类,而作为系统开发人员,经常需要用这个类来做一些系统设备设置,而Settings里面存在着好几个处理不同领域的设备设置类,那么如何才能结合自己的业务场景正确选择使用这些设备设…...
如何查看GD32 Keil和IAR工程的map文件
我们在设计调试程序时,往往需要知道一个函数或一个变量它在MCU中具体所在的地址以及所占用的空间大小,这时候就需要查看map文件。 那么什么是map文件呢?map文件是编译器编译工程后生成的一个文件,文件会有很多信息,比…...
1Panel安装命令脚本大全,多Linux操作系统版本
1Panel安装命令脚本大全,包括RedHat、CentOS、Ubuntu、Debian和openEuler等linux操作系统,码笔记整理1Panel安装命令脚本清单: RedHat/CentOS安装命令: curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh…...
校园电动车安全监控和调度系统-计算机毕业设计源码13028
摘要 校园电动车安全监控和调度系统是为了确保校园内电动车的安全和高效运行而设计的。该系统通过安装在电动车上的监控设备,实时监测电动车的运行状态,包括速度、位置、电池电量等,一旦发现异常情况,系统会立即发出警报并通知相关…...
【LLM之Agent】ReAct论文阅读笔记
研究背景 论文介绍了 “ReAct” 范式,该范式旨在融合推理和行动的功能,通过让大型语言模型(LLMs)生成既包括言语推理轨迹又包括行动序列的输出,解决多种语言推理和决策任务。这种方法允许模型在与外部环境(…...
LeetCode 125. 验证回文串
更多题解尽在 https://sugar.matrixlab.dev/algorithm 每日更新。 组队打卡,更多解法等你一起来参与哦! LeetCode 125. 验证回文串,难度简单。 双指针 解题思路: 遍历字符串,将所有大写字符转换为小写字符、并移除所…...
IT审计必看!对比旧版,CISA考试改版升级亮点和重点内容是什么?
官方通知,今年8月1日,CISA新版考纲正式上线,旧版在7月23日后就无法约考了。 艾威培训邀请了国内知名的IT审计CISA授课老师吴老师来为大家详细讲解CISA新版考纲的变化 目前第28th版教材只有英文版,中文版尚未发布。我们艾威经验丰…...
充电宝哪个牌子公认质量好?哪家充电宝好用?4款口碑好充电宝
在如今这个电子设备不离手的时代,充电宝成为了我们生活中的必备品。然而,面对市场上琳琅满目的充电宝品牌和型号,选择一款质量可靠、性能出色的充电宝并非易事。大家都在问:充电宝哪个牌子公认质量好?哪家充电宝好用&a…...
Python实现图像添加水印的方法
1. 简介 在日常图像处理中,为图片添加水印是一项常见任务。有多种方法和工具可供选择,而今天我们将专注于使用Python语言结合PIL库批量添加水印。 需要注意的是,所选用的图片格式不应为JPG或JPEG,因为这两种格式的图片不支持透明…...
MemFire Cloud: 一种全新定义后端即服务的解决方案
在这个快节奏的互联网时代,开发者们最希望的就是能够省时省力地完成项目,快速上线。然而,搭建服务、开发接口API、处理各种后端问题,往往让人头疼不已。别担心,现在有了MemFire Cloud,一款为懒人开发者量身…...
职业教育软件测试实验实训室建设应用案例
在信息化高速发展的今天,软件测试作为保障软件质量的关键环节,其重要性日益凸显。为满足职业教育对软件测试人才的培养需求,提高学生的实践能力和职业素养,唯众倾力打造了一款先进的软件测试实验实训室,并成功应用于多…...
如何判断一个js对象为数组类型
如何判断一个js对象为数组类型? 能想到的最常见的intanceof是吗?开始是这么认为,但是不是哈,看下面的解释,也没有太明白,暂且记住吧 综上,判断js对象为数组的两种方式 Array.isArray([]) // trueObject.prototype.toString.call([]) ‘[object Array]’ //true...
Nacos2.X 配置中心源码分析:客户端如何拉取配置、服务端配置发布客户端监听机制
文章目录 Nacos配置中心源码总流程图NacosClient源码分析获取配置注册监听器 NacosServer源码分析配置dump配置发布 Nacos配置中心源码 总流程图 Nacos2.1.0源码分析在线流程图 源码的版本为2.1.0 ,并在配置了下面两个启动参数,一个表示单机启动&#…...
phpstudy框架,window平台,如何开端口给局域网访问?
Windows平台上使用phpstudy框架开端口给同事访问,主要涉及到几个步骤:查看并确认本机IP地址、配置phpstudy及网站项目、开放防火墙端口以及确保同事能够通过局域网访问。以下是详细的步骤说明: 1. 查看并确认本机IP地址 首先,需…...
emWin GUIBuilder按钮样式修改问题解决方案
1. 问题现象与背景解析在Keil MDK开发环境中使用emWin的GUIBuilder工具时,许多开发者会遇到一个典型问题:创建按钮(Button)等控件后无法修改其外观设计。具体表现为:在GUI设计界面选中按钮控件,尝试调整颜色…...
Quantum ESPRESSO 终极快速入门指南:5天轻松掌握电子结构计算
Quantum ESPRESSO 终极快速入门指南:5天轻松掌握电子结构计算 【免费下载链接】q-e Mirror of the Quantum ESPRESSO repository. Please do not post Issues or pull requests here. Use gitlab.com/QEF/q-e instead. 项目地址: https://gitcode.com/gh_mirrors/…...
OpCore-Simplify:三步搞定OpenCore EFI配置的终极解决方案
OpCore-Simplify:三步搞定OpenCore EFI配置的终极解决方案 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 还在为复杂的OpenCore EFI配置而…...
用动态主题建模挖掘科学文献中的真实研究趋势
1. 项目概述:用主题建模“听懂”科学文献的集体心跳 你有没有翻过arXiv上每天新增的上千篇机器学习论文,却越看越迷糊——到底哪类研究正在真正升温?不是靠刷标题、不是靠猜作者名气,而是让成千上万篇论文自己“开口说话”&#x…...
Midjourney颗粒质感调控全链路拆解(RAW模式下PSD分层修复实录+颗粒频谱分析图谱)
更多请点击: https://intelliparadigm.com 第一章:Midjourney颗粒质感调控全链路拆解(RAW模式下PSD分层修复实录颗粒频谱分析图谱) 在 RAW 模式下启用 Midjourney v6.1 的 --raw 参数可绕过默认后处理管线,保留原始噪…...
如何快速掌握专业字体设计:开源Bebas Neue字体完全指南
如何快速掌握专业字体设计:开源Bebas Neue字体完全指南 【免费下载链接】Bebas-Neue Bebas Neue font 项目地址: https://gitcode.com/gh_mirrors/be/Bebas-Neue 你是否曾经在设计项目中被字体选择困扰?面对那些要么过于普通缺乏个性,…...
微信小程序逆向工程深度突破:wxappUnpacker实战解密与架构解析
微信小程序逆向工程深度突破:wxappUnpacker实战解密与架构解析 【免费下载链接】wxappUnpacker forked from https://github.com/qwerty472123/wxappUnpacker 项目地址: https://gitcode.com/gh_mirrors/wxappu/wxappUnpacker 在移动应用开发领域,…...
机器人任务级迭代学习控制技术解析与应用
1. 任务级迭代学习控制技术解析在机器人操控领域,可变形物体的动态控制一直是个棘手难题。想象一下让机器人系鞋带或者叠衣服的场景——这些对人类来说轻而易举的动作,对机器人而言却需要处理近乎无限的自由度变化。传统方法通常需要精确的物理建模或海量…...
RAID5故障抢救实战:从物理诊断到文件系统修复
1. 这不是数据丢失预警,而是RAID5信任危机的现场直播“硬盘灯全灭了,但系统还在跑——这比蓝屏更让人手抖。”这是我凌晨三点蹲在机房冷柜前的第一反应。当时负责维护的是一套运行了4年多的CentOS 7文件服务器,6块4TB企业级SATA盘组成的RAID5…...
如何在5分钟内掌握Windows上最强大的屏幕标注工具ppInk
如何在5分钟内掌握Windows上最强大的屏幕标注工具ppInk 【免费下载链接】ppInk Fork from Gink 项目地址: https://gitcode.com/gh_mirrors/pp/ppInk 你是否曾在演示、教学或远程协作中,需要在屏幕上快速标注重点,却发现工具要么太复杂࿰…...
