我的创作128纪念日

机缘

起初我写博客是为了记录自己的学习过程,现在也是如此

  1. 实战项目中的经验分享
  2. 日常学习过程中的记录
  3. 通过文章进行技术交流
  4. 通过文章加深学习和复习

收获

在创作过程中

  1. 获得了400多位粉丝的关注感谢大家的支持
  2. 阅读数量也达到了3w+
  3. 在博客上认识仲秋大佬,感谢大佬对我的指导,我也会向大佬学习的

日常

  1. 创作已经是你生活的一部分了

在这里插入图片描述


成就

对俄罗斯方块这个游戏认识十分深刻:
python代码实现过
C/C++也实现过
下面是 :
俄罗斯方块详细教学流程

以及代码完整版
在这里插入图片描述

import pygame, sys
import random# 物块的形状是二维数组
all_block = [[[0, 0], [0, 1], [0, 2], [0, 3], ],  # 一个物体4个方块组成      长方形[[0, 0], [0, 1], [1, 0], [1, 1], ],  # 7个列表表示7种形状      正方形[[0, 0], [1, 0], [0, 1], [0, 2], ],  # 7字型[[0, 0], [0, 1], [0, -1], [0, -2], ],  # 倒7字型[[0, 0], [0, 1], [1, 1], [1, 2], ],  # Z字型[[0, 0], [0, -1], [1, -1], [1, -2], ],  # 倒z字型[[0, 0], [0, 1], [0, -1], [1, 0]],  # T字型
]backgroud = [[0 for column in range(0, 10)] for row in range(0, 23)]  # 创造列表集
backgroud[0] = [1 for colum in range(0, 10)]  # 把0层修改为[1*10]# 设置全局变量
# select_block = list(random.choice(all_block))  # 从7个形状中随机选择一种
initial_position = [21, 5]
times = 0  # 计时
score = [0]  # 得分  系统出错gameover = []  # 游戏结束press = False  # 按键加速
# 初始化
pygame.init()
screen = pygame.display.set_mode((400, 800))  # 设置窗口大小
select_block = list(random.choice(all_block))def block_down():global select_block  # 将global改为全局变量y, x = initial_position  # initial_position = [21, 5]y -= 1  # 表示相距的间隔for row, column in select_block:  # 调节方块下落的位置row += ycolumn += xif backgroud[row][column]:  # 注意breakelse:initial_position.clear()  # 刷新对初始位置进行更新initial_position.extend([y, x])  # [x,y]定义:[一个列表集,第一个值表示1行row,第二个值表示columnreturny, x = initial_positionfor row, column in select_block:row += y  # 对当前选择的方块column += xbackgroud[row][column] = 1  # 这个是是将背景网格中指定位置的值修改为1complete_row = []  # 用来存储静态的block就是完成一行后,将静态block存储在数组中# 然后通过删除数组元素达到消除方块的效果# 下面代码用于处理和检测背景网格中是不是有完整的行for row in range(1, 21):  # 通过循环遍历背景网格中的每一行if 0 not in backgroud[row]:  # 条件判断是否存在值为0的元素,如果不存在,则表示该行是完整的。complete_row.append(row)  # 如果一行是完整的将其行号row添加到complete_row中for row in complete_row:  # 再次循环对每一行进行遍历backgroud.pop(row)  # 将完整的行移除backgroud.append(list(0 for _ in range(0, 10)))  # 注意 移除行后在网格底部添加一个新行就是为让网格大小保持不变score[0] += len(complete_row)  # 计算消除行数并记录pygame.display.set_caption('你现在的分数是 ' + str(score[0]) + '分')  # 显示消除行数显示标题中# text = font.render("Score: " + str(score[0]), True, (0, 0, 0))initial_position.clear()  # 清空 initial_position列表中的元素select_block = list(random.choice(all_block))  # 随机选择一个方块initial_position.extend(select_block)  # 将选中的方块赋值给initial_position,initial_position里面存储着随机选择的方块initial_position.clear()  # 当动态的block变成静态block清楚initial_position中存储的上个方块的信息然后为重新加载方块做准备initial_position.extend([20, 5])  # 将[20,5]添加到initial_position中[20,5]代表下落的初始坐标y, x = initial_positionfor row, column in select_block:  # 用于确定方块的偏移量row += ycolumn += xif backgroud[row][column] == 1:  # 判断静态block对应位置是否为1如果是说明当前方块于背景中已有方块重叠gameover.append(1)# 这段代码的逻辑是遍历选中的方块中的每个位置,将其与背景中对应位置的值进行比较,如果发生碰撞,则将游戏结束的标志(值为 1)# TODO: 
# 详细解释
# 首先,通过 `for row, column in select_block:` 遍历 `select_block` 列表中的每个元素,其中每个元素都是一个包含方块位置信息的列表,例如 `[row, column]`。
#
# 然后,将 `row` 和 `column` 分别加上变量 `y` 和 `x` 的值。这里的 `y` 和 `x` 可能表示方块在背景中的偏移量,用于确定方块的实际位置。
#
# 接下来,通过 `if backgroud[row][column] == 1:` 条件语句判断背景中对应位置的值是否为 1。如果是,说明当前方块与背景中已有的方块重叠,即发生碰撞。
#
# 如果发生碰撞,将值为 1 的元素添加到 `gameover` 列表中,以表示游戏结束。
#
# 综上所述,这段代码的逻辑是遍历选中的方块中的每个位置,将其与背景中对应位置的值进行比较,如果发生碰撞,则将游戏结束的标志(值为 1)添加到 `gameover` 列表中。def draw_block():y, x = initial_positionfor row, column in select_block:row += ycolumn += xpygame.draw.rect(screen, (255, 165, 0), (column * 40, 800 - row * 40, 38, 38))for row in range(1, 21):for column in range(0, 10):if backgroud[row][column] == 1:pygame.draw.rect(screen, (0, 0, 255), (column * 40, 800 - row * 40, 38, 38))def rotate():y, x = initial_position# select_block = list(random.choice(all_block))rotating_position = [(-colum, row) for row, colum in select_block]  # 计算方块旋转后的位置for row, colum in rotating_position:row += ycolum += xif colum < 0 or colum > 9 or backgroud[row][colum]:breakelse:select_block.clear()select_block.extend(rotating_position)def move(d):y, x = initial_position# select_block = list(random.choice(all_block))x += dfor row, colum in select_block:row += ycolum += xif colum < 0 or colum > 9 or backgroud[row][colum]:breakelse:initial_position.clear()initial_position.extend([y, x])while True:screen.fill((255, 255, 255))for event in pygame.event.get():if event.type == pygame.QUIT:sys.exit()if event.type == pygame.KEYDOWN:if event.key == pygame.K_DOWN:press = Falseif event.type == pygame.KEYDOWN:if event.key == pygame.K_UP:rotate()  # 代码无法向下加速的原因是在处理pygame.KEYUP事件时,判断按键是否为向下键时使用了错误的语句。if event.type == pygame.KEYDOWN:if event.key == pygame.K_RIGHT:  # 具体来说,在代码中,当检测到键盘按键释放事件(pygame.KEYUP)时,# 判断按键是否为向下键时应该使用event.key# 而不是event.type。move(1)  # 因此,将event.type改为event.key即可解决这个问题if event.type == pygame.KEYDOWN:if event.key == pygame.K_LEFT:move(-1)if event.type == pygame.KEYUP:if event.key == pygame.K_DOWN:press = Falseif times % 60 == 0:block_down()times += 1if press:times += 10if gameover:sys.exit()draw_block()pygame.time.Clock().tick(400)# 创建字体对象font = pygame.font.Font(None, 36)# 创建显示文本text = font.render("Score: " + str(score[0]), True, (0, 0, 0))# 创建显示区域然后显示screen.blit(text, (10, 10))# 刷新pygame.display.update()pygame.display.flip()# 俄罗斯方块基本类
# 方块
# 旋转
# 移动
# 物块
# 形状
# 碰撞检测
# 绘制

希望大家能有所收获


憧憬

成为一名大佬,然后养成一个好习惯,学完C++基础语法后便进军Java
因为现在C++语法并不完善,Java在商务领域很完善 还有副业 手机软件开发
而且面向对象的语法会让我更舒服点

在这里插入图片描述

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

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

相关文章

成都软件产业优势明显

是的&#xff0c;成都非常适合软件产业的发展。以下是一些原因&#xff1a; 人才储备丰富&#xff1a;成都拥有众多高等院校和科研机构&#xff0c;为软件产业提供了丰富的人才储备。这些机构培养了大量的软件人才&#xff0c;为成都软件产业的发展提供了有力支持。政策支持&a…

Java实现康复中心管理系统 JAVA+Vue+SpringBoot+MySQL

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 普通用户模块2.2 护工模块2.3 管理员模块 三、系统展示四、核心代码4.1 查询康复护理4.2 新增康复训练4.3 查询房间4.4 查询来访4.5 新增用药 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的康复中…

Intellij IDEA各种调试+开发中常见bug

Intellij IDEA中使用好Debug&#xff0c;主要包括如下内容&#xff1a; 一、Debug开篇 ①、以Debug模式启动服务&#xff0c;左边的一个按钮则是以Run模式启动。在开发中&#xff0c;我一般会直接启动Debug模式&#xff0c;方便随时调试代码。 ②、断点&#xff1a;在左边行…

如何在 Microsoft Azure 上部署和管理 Elastic Stack

作者&#xff1a;来自 Elastic Osman Ishaq Elastic 用户可以从 Azure 门户中查找、部署和管理 Elasticsearch。 此集成提供了简化的入门体验&#xff0c;所有这些都使用你已知的 Azure 门户和工具&#xff0c;因此你可以轻松部署 Elastic&#xff0c;而无需注册外部服务或配置…

NuxtJs安装Sass后出现ERROR:Cannot find module ‘webpack/lib/RuleSet‘

最近了解NuxtJs时&#xff0c;发现问题比较多&#xff0c;对于初学者来说是件比较头痛的事。这次是安装sass预处理器&#xff0c;通过命令安装后&#xff0c;出现了ERROR&#xff1a;Cannot find module webpack/lib/RuleSet 错误&#xff0c;于是根据之前经验&#xff0c;对版…

Python统计分析——参数估计

参考资料&#xff1a;用python动手学统计学 所谓参数就是总体分布的参数。 1、导入库 # 导入用于数值计算的库 import numpy as np import pandas as pd import scipy as sp from scipy import stats # 导入用于绘图的库 from matplotlib import pyplot as plt import seabor…

vue前端+nodejs后端通信-简单demo

本文记录vue前端nodejs后端通讯最简单的方法&#xff0c;供广大网友最快速进入全栈开发。 技术架构 前端 vue axios 后端 nodejs express 一、前端部分-搭建VUE 项目 vue create Vnodenpm run serve 启动&#xff1b; 具体操作步骤&#xff0c;请自行百度&#xff0c;这里没…

minitouch王者荣耀按键百分比

minitouch王者荣耀按键百分比 3 技能英雄 原图 2376 x 1104 xy说明x百分比y百分比23761104总分辨率160444金币0.0673400673400670.402173913043478296440物品10.1245791245791250.398550724637681296566物品20.1245791245791250.51268115942029470864摇杆0.1978114478114480…

51单片机之LED灯模块篇

御风以翔 破浪以飏 &#x1f3a5;个人主页 &#x1f525;个人专栏 目录 点亮一盏LED灯 LED的组成原理 LED的硬件模型 点亮一盏LED灯的程序设计 LED灯闪烁 LED流水灯 独立按键控制LED灯亮灭 独立按键的组成原理 独立按键的硬件模型 独立按键控制LED灯状态 按键的抖动 独立按键…

机器学习本科课程 实验3 决策树处理分类任务

实验3.1 决策树处理分类任务 使用sklearn.tree.DecisionTreeClassifier完成肿瘤分类&#xff08;breast-cancer&#xff09;计算最大深度为10时&#xff0c;十折交叉验证的精度(accuracy)&#xff0c;查准率(precision)&#xff0c;查全率(recall)&#xff0c;F1值绘制最大深度…

Haas 开发板连接阿里云上传温湿度和电池电压

目录 一、在阿里云上创建一个产品 二、开发环境的介绍 三、创建wifi示例 四、编写SI7006和ADC驱动 五、wifi配网 六、主要源码 七、查看实现结果 一、在阿里云上创建一个产品 登录自己的阿里云账号&#xff0c; 应该支付宝&#xff0c;淘宝账号都是可以的。 接着根据需求…

设置 相关

记录使用过程中做的设置相关事宜。方便后续查询 vscode如何自动生成html格式&#xff1a; vscode快速生成html模板 --两种方法&#xff0c;亲测有用_vscode自动生成html模板-CSDN博客 使用第二个方式。存储html格式后缀。输入&#xff01;&#xff0c;vscode自动补全。 安装…

ywtool login guard命令

一.登录防护功能介绍 登录防护功能主要检查系统日志/var/log/secure&#xff0c;查看系统有没有被暴力登录。登录防护默认是检测3分钟内登录系统失败15次(次数可修改)后,视其为有攻击性,拉黑此IP(centos7通过系统文件阻止IP,centos8/9通过防火墙阻止IP)。此脚本只针对SSH访问,…

platform tree架构下i2c应用实例(HS3003)

目录 概述 1 探究platform tree下的i2c 1.1 platform tree下的i2c驱动 1.2 查看i2c总线下的设备 1.3 使用命令读写设备寄存器 2 认识HS3003 2.1 HS3003特性 2.2 HS3003寄存器 2.2.1 温湿度数据寄存器 2.2.2 参数寄存器 2.2.3 一个参数配置Demo 2.3 温湿度值转换 2.…

在工业制造方面,如何更好地实现数字化转型?

实现工业制造的数字化转型涉及利用数字技术来增强流程、提高效率并推动创新。以下是工业制造领域更好实现数字化转型的几个关键步骤&#xff1a; 1.定义明确的目标&#xff1a; 清楚地概述您的数字化转型目标。确定需要改进的领域&#xff0c;例如运营效率、产品质量或供应链…

Camunda流程引擎数据库架构

&#x1f496;专栏简介 ✔️本专栏将从Camunda(卡蒙达) 7中的关键概念到实现中国式工作流相关功能。 ✔️文章中只包含演示核心代码及测试数据&#xff0c;完整代码可查看作者的开源项目snail-camunda ✔️请给snail-camunda 点颗星吧&#x1f618; &#x1f496;数据库架构…

回归预测 | Matlab实现OOA-CNN-LSTM-Attention鱼鹰算法优化卷积长短期记忆网络注意力多变量回归预测(SE注意力机制)

回归预测 | Matlab实现OOA-CNN-LSTM-Attention鱼鹰算法优化卷积长短期记忆网络注意力多变量回归预测&#xff08;SE注意力机制&#xff09; 目录 回归预测 | Matlab实现OOA-CNN-LSTM-Attention鱼鹰算法优化卷积长短期记忆网络注意力多变量回归预测&#xff08;SE注意力机制&…

C#通过文件头判断flv文件

目录 效果 代码 效果 代码 private void button1_Click(object sender, EventArgs e) { string path Application.StartupPath "\\test.flv"; //3byte 总是FLV&#xff08;0x46 0x4C 0x56&#xff09; byte[] Type new byte[3]; using (FileStre…

探索微服务治理:从发展到实践构建高效稳定的系统| 微服务的度量

随着软件行业的不断发展&#xff0c;微服务架构凭借其高度的灵活性、可扩展性和可维护性&#xff0c;逐渐成为企业应用的主流架构风格。然后微服务架构的复杂性也带来了一系列的挑战&#xff0c;其中之一就是如何有效地管理和治理微服务。本文灸哥给你详细介绍和服务治理相关的…

SQL 表信息 | 统计 | 脚本

介绍 统计多个 SQL Server 实例上多个数据库的表大小、最后修改时间和行数&#xff0c;可以使用以下的 SQL 查询来获取这些信息。 脚本 示例脚本&#xff1a; DECLARE Query NVARCHAR(MAX)-- 创建一个临时表用于存储结果 CREATE TABLE #TableSizes (DatabaseName NVARCHAR…