基于python的俄罗斯方块

注:这是本人基于pygame模块写的一个贪吃蛇,主要针对于新手练习。

项目地址:suyihang15/Tetris_game: 基于python的俄罗斯方块

下载地址:https://github.com/suyihang15/Tetris_game/releases/download/1.0.0/tetris_game.exe

俄罗斯方块(Tetris_game)

基于 Python 和 Pygame 实现的经典俄罗斯方块游戏,遵循现代俄罗斯方块标准规则。

功能特性

标准规则

7 种标准方块**:I、O、T、S、Z、J、L,每种方块有独立的颜色

SRS 旋转系统**(Super Rotation System):每种方块拥有 4 个旋转状态

SRS 踢墙系统**(Wall Kick):旋转时若位置被阻挡,自动尝试偏移位置,支持 I 方块和 JLSTZ 方块的两套踢墙表

高级机制

Ghost Piece(投影预览)**:显示方块落到底部时的预估位置

Lock Delay(锁定延迟)**:方块着地后有短暂时间可继续操作,避免误放

锁定移动上限**:着地后最多可移动/旋转 15 次,超过则强制锁定

DAS / ARR 按键重复**:按住左右键时,延迟 170ms 后以 50ms 间隔连续移动,手感流畅

Hard Drop(硬降)**:空格键一键落到底部,并获得双倍距离分数

Soft Drop(软降)**:按住下键加速下落,每下落一格 +1 分

游戏功能

分数与等级系统(每消除 10 行升一级,最高下落间隔 50ms)

等级加成消除分数(1 行~4 行:100/300/500/800 × 等级)

下一方块预览面板

暂停 / 重新开始功能

游戏结束画面

操作方式

| ← → | 左右移动方块 |

| ↑ | 旋转方块 |

| ↓ | 加速下落 |

| 空格 | 直接落到底部 |

| P | 暂停 / 继续 |

| R | 重新开始(游戏结束后) |

运行环境

Python 3.6+

Pygame

安装依赖后运行:

pip install pygame

python tetris.py

整体架构

项目为单文件实现,包含一个 `Tetris` 类,通过 Pygame 管理游戏循环、渲染和输入。

核心数据结构

棋盘 `board`******:20 行 × 10 列的二维数组,存储每个格子的占用状态

方块形状 `SHAPES`******:字典结构,每个方块名对应 4 个旋转状态(每个状态为 4 个坐标的列表)

踢墙表 `KICK_JLSTZ` / `KICK_I`******:SRS 标准定义的旋转偏移量,按旋转方向索引

方块颜色

| 方块 | 颜色 | 色值 |

|——|——|——|

| I | 青色 | (0, 240, 240) |

| O | 黄色 | (240, 240, 0) |

| T | 紫色 | (160, 0, 240) |

| S | 绿色 | (0, 240, 0) |

| Z | 红色 | (240, 0, 0) |

| J | 蓝色 | (0, 0, 240) |

| L | 橙色 | (240, 160, 0) |

渲染系统

棋盘格子 30px × 30px,右侧 200px 信息面板

窗口分辨率:500 × 600

方块高光效果:内层填充亮色、外层边框,模拟立体感

Ghost Piece 以半透明线条边框呈现

半透明遮罩覆盖暂停和游戏结束画面

游戏循环

每帧执行:

1. `handle_events()` — 处理键盘事件

2. `update(dt)` — 更新按键重复、方块下落计时、锁定延迟

3. `draw()` — 渲染棋盘、方块、Ghost Piece、UI 面板

运行帧率固定为 60 FPS。

文件说明

/

├── tetris.py    # 游戏主程序

└── README.md    # 本说明文档

总结:希望能帮助入门的人学习。

网心云部署教程

注:用闲置的带宽跑pcdn赚钱本身属于灰色地带,运营商是打这种行为的,如果要部署,请自行考虑风险,所造成的为风险本人概不承担。

1、什么是pcdn

本质是一些内容提供的运营商为了降低服务器的压力,所需要的,当我们访问如网站这些时,我们实际是需要访问运营商的服务器,当我们访问后,在自己的电脑上会缓存一些数据,跑了PCDN,那么,当有你附近的人想访问相同的内容,就不用访问运营商的服务器了,可以在你的电脑上找到这些数据,这样就可以使其服务器的压力减小一点,但是,这会导致为你提供网络的运营商的压力激增,所以其是打击这种行为的,本质上是处于灰色地带。

2、部署compose

1
2
3
4
5
6
7
8
9
10
11
12
13
version: "3"
services:
wxedge:
container_name: wxedge
restart: always
privileged: true
network_mode: host
tmpfs: /run,/tmp
ports:
- 18888:18888
volumes:
- ./:/storage:rw
image: images-cluster.xycloud.com/wxedge/wxedge:latest

部署好后访问IP:18888

手机上下载一个网心云app绑定账号就可以了,他本身还需安装几天,如果想有收入请稳定挂几天,不然可能没有收益,

总结:跑PCDN本身还是有风险的,本文只是个教程,没有教唆的意向,风险请自行评估。

手机投屏到电脑(SCRCPY)

注:这主要原理还是是通过abd连接,其连接效果很流畅,可通过网络和usb连接

项目地址:Genymobile/scrcpy: Display and control your Android device

下载地址:https://github.com/Genymobile/scrcpy/releases/download/v4.0/scrcpy-win64-v4.0.zip

1、准备工作

(1)打开手机的开发者模式(一般狂点手机版本号八次)开启adb调试。

(2)下载并解压上面的文件

2、连接

(1)插好数据线可以直接点击解压的scrcpy.exe可执行文件就行了或者在下载文件的cmd里输入

.\scrcpy.exe−d.\scrcpy.exe -d

(2)网络连接,前提在同一局域网下,在命令行里输入

.\scrcpy.exe−−tcpip.\scrcpy.exe –tcpip

就是网络连接

总结:整体效果还不错,对于想做调试的人很不错。

Docker汉化

注:本文章主要介绍第三方的汉化版

项目地址:asxez/DockerDesktop-CN: Docker汉化 Docker中文版 Docker汉化包 DockerDesktop汉化 Docker Windows Docker MAC

1、前期准备

(1)下载好docker(记得查看安装的版本)

(2)下载上面的汉化包解压后复制app.asar

2、开始汉化(注意弄之前请退出并做好汉化版的备份,不然可能会出现一些问题)

打开应用所在目录

C:\Program Files\Docker\Docker\frontend\resources

默认安装在c盘就在这个位置就可以找到

然后替换掉这里的文件,重启就可以看到汉化后的docker了,但是注意要下载对应的版本,不然可能会闪退打不开等问题。

3、汉化效果

大致就是这样。

如何用python调用API

注:请自行申请一个api,本教程主要是针对于api的调用怎么写

项目地址:suyihang15/AI_gui: 基于python的ai图形简单的化界面

前期准备

pip install openai(安装第三方库)

tkinter(可选,主要是用于写一个UI的)好处就是不用再安装第三方库了,坏处就是ui不好看

调用代码示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43

import os
from openai import OpenAI

# 初始化 DeepSeek 客户端
# - api_key: 从环境变量读取 API 密钥(更安全,避免硬编码)
# - base_url: DeepSeek API 的服务端点地址
client = OpenAI(
api_key=os.environ.get('DEEPSEEK_API_KEY'),
base_url="https://api.deepseek.com"
)

# 发送聊天请求
response = client.chat.completions.create(
# 模型名称:使用 DeepSeek V4 Pro 版本
model="deepseek-v4-pro",

# 对话消息列表
messages=[
{"role": "system", "content": "You are a helpful assistant"}, # 系统提示词,设定助手角色
{"role": "user", "content": "Hello"}, # 用户消息
],

# 是否使用流式输出
# - False: 等待完整响应后一次性返回
# - True: 逐字/逐块实时输出(适合聊天界面)
stream=False,

# 推理深度控制
# 可选值: "low", "medium", "high"
# 越高的推理深度,思考越充分,但耗时更长
reasoning_effort="high",

# 额外请求体参数
# 这里启用 DeepSeek 的"深度思考"模式
# 模型会在内部生成更详细的推理过程
extra_body={"thinking": {"type": "enabled"}}
)

# 输出助手的回复内容
# response.choices[0] - 第一个(通常也是唯一的)回复选项
# .message.content - 提取消息的文本内容
print(response.choices[0].message.content)

带UI的代码示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
"""
DeepSeek 聊天助手 - Tkinter 版
一个简洁美观的 AI 对话桌面应用
"""

import tkinter as tk
from tkinter import scrolledtext, messagebox
import threading
from openai import OpenAI
import os

# ==================== 配置区域 ====================
API_KEY = "sk-你的密钥" # 在这里填入你的 DeepSeek API Key
# =================================================

class DeepSeekApp:
"""主应用类"""

def __init__(self, root):
self.root = root
self.root.title("DeepSeek · 智能助手")
self.root.geometry("620x720")
self.root.minsize(500, 600)
self.root.configure(bg='#f5f7fa')

# 初始化 API 客户端
self.client = OpenAI(
api_key=API_KEY,
base_url="https://api.deepseek.com"
)

# 对话记忆
self.messages = [
{"role": "system", "content": "你是 DeepSeek,一个友好的智能助手。"}
]

# 构建界面
self._build_ui()

# 绑定快捷键
self.input_text.bind('<Return>', lambda e: self.send())

# 显示欢迎语
self._show_welcome()

# ==================== 界面构建 ====================

def _build_ui(self):
"""搭建所有界面组件"""
# 顶部栏
header = tk.Frame(self.root, bg='#2c3e50', height=70)
header.pack(fill='x')
header.pack_propagate(False)

tk.Label(header, text="🤖 DeepSeek", font=('微软雅黑', 20, 'bold'),
fg='white', bg='#2c3e50').pack(expand=True)
tk.Label(header, text="深度思考 · 智能对话", font=('微软雅黑', 10),
fg='#bdc3c7', bg='#2c3e50').pack()

# 聊天区域
self.chat_area = scrolledtext.ScrolledText(
self.root, wrap='word', font=('微软雅黑', 11),
bg='white', fg='#2c3e50', padx=15, pady=12,
state='disabled', relief='flat'
)
self.chat_area.pack(padx=15, pady=(15, 10), fill='both', expand=True)

# 配置消息样式
self.chat_area.tag_config('user', foreground='#3498db', font=('微软雅黑', 11, 'bold'))
self.chat_area.tag_config('ai', foreground='#27ae60', font=('微软雅黑', 11))
self.chat_area.tag_config('system', foreground='#e67e22', font=('微软雅黑', 10, 'italic'))

# 底部输入区
bottom = tk.Frame(self.root, bg='#f5f7fa')
bottom.pack(padx=15, pady=(0, 15), fill='x')

self.input_text = tk.Text(bottom, height=4, font=('微软雅黑', 11),
wrap='word', padx=12, pady=10,
relief='groove', borderwidth=1)
self.input_text.pack(fill='x', pady=(0, 10))

# 按钮栏
btn_frame = tk.Frame(bottom, bg='#f5f7fa')
btn_frame.pack(fill='x')

tk.Button(btn_frame, text="📤 发送", command=self.send,
bg='#3498db', fg='white', font=('微软雅黑', 10, 'bold'),
padx=20, pady=6, relief='flat', cursor='hand2').pack(side='right', padx=(10, 0))

tk.Button(btn_frame, text="🗑 清空", command=self.clear,
bg='#95a5a6', fg='white', font=('微软雅黑', 10),
padx=20, pady=6, relief='flat', cursor='hand2').pack(side='right')

# 状态栏
self.status = tk.Label(self.root, text="✅ 就绪", font=('微软雅黑', 9),
bg='#ecf0f1', fg='#7f8c8d', anchor='w', padx=15)
self.status.pack(fill='x', side='bottom')

def _show_welcome(self):
"""欢迎消息"""
welcome = "✨ 欢迎使用 DeepSeek 智能助手!\n\n💡 提示:\n• 支持多轮对话,AI 会记住上下文\n• 按回车键快速发送\n\n开始聊天吧~"
self._append_message(welcome, 'system')

def _append_message(self, text, role):
"""在聊天框显示消息"""
self.chat_area.config(state='normal')
prefix = "👤 你:" if role == 'user' else "🤖 DeepSeek:" if role == 'ai' else "💡 提示:"
tag = 'user' if role == 'user' else 'ai' if role == 'ai' else 'system'

self.chat_area.insert('end', f"{prefix}\n", tag)
self.chat_area.insert('end', f"{text}\n\n")
self.chat_area.see('end')
self.chat_area.config(state='disabled')

# ==================== 核心功能 ====================

def send(self):
"""发送消息"""
user_input = self.input_text.get('1.0', 'end-1c').strip()
if not user_input:
return

# 显示用户消息
self._append_message(user_input, 'user')
self.input_text.delete('1.0', 'end')
self.status.config(text="⏳ AI 思考中...")
self.send_btn.config(state='disabled')

# 保存到记忆
self.messages.append({"role": "user", "content": user_input})

# 开线程请求 API(避免界面卡死)
threading.Thread(target=self._get_ai_reply, daemon=True).start()

def _get_ai_reply(self):
"""调用 DeepSeek API"""
try:
response = self.client.chat.completions.create(
model="deepseek-chat", # 或 deepseek-v4-pro
messages=self.messages,
stream=False
)
reply = response.choices[0].message.content

# 更新界面(需在主线程)
self.root.after(0, lambda: self._on_reply(reply))

except Exception as e:
self.root.after(0, lambda: self._on_error(str(e)))

def _on_reply(self, reply):
"""收到回复后的处理"""
self._append_message(reply, 'ai')
self.messages.append({"role": "assistant", "content": reply})
self.status.config(text="✅ 就绪")
self.send_btn.config(state='normal')

def _on_error(self, error):
"""错误处理"""
self._append_message(f"出错了:{error}\n请检查 API Key 或网络。", 'system')
self.status.config(text="❌ 出错")
self.send_btn.config(state='normal')

def clear(self):
"""清空对话"""
if messagebox.askyesno("确认", "清空所有对话记录?"):
self.messages = [{"role": "system", "content": "你是 DeepSeek,一个友好的智能助手。"}]
self.chat_area.config(state='normal')
self.chat_area.delete('1.0', 'end')
self.chat_area.config(state='disabled')
self._show_welcome()
self.status.config(text="✅ 已清空")

@property
def send_btn(self):
return self.root.nametowidget(self.root.children['!frame3'].children['!frame'].children['!button'])

# ==================== 启动程序 ====================
if __name__ == "__main__":
root = tk.Tk()
app = DeepSeekApp(root)
root.mainloop()

利用pe修改windows电脑开机密码

注:本教程主要针对忘记电脑开机密码的教程,对于用于做任何违法的事件造成的后果本人概不负责。

1、前期准备

U盘

pe软件

一台电脑

2、操作方法

在U盘里写入pe系统,在忘记密码的电脑里进入pe系统

打开Dism++选择系统安装的盘,打开小工具,选择账户管理。

在这里清空密码就行。

注:这主要针对与本地账号,如果是微软账号,则删除不了,可以直接到微软官网修改,有的pe会有密码查看的软件,可以自习查找。

总结:这就是大致的方法。

利用pe修改windows电脑开机密码

注:本教程主要针对忘记电脑开机密码的教程,对于用于做任何违法的事件造成的后果本人概不负责。

1、前期准备

U盘

pe软件

一台电脑

2、操作方法

在U盘里写入pe系统,在忘记密码的电脑里进入pe系统

打开Dism++选择系统安装的盘,打开小工具,选择账户管理。

在这里清空密码就行。

注:这主要针对与本地账号,如果是微软账号,则删除不了,可以直接到微软官网修改,有的pe会有密码查看的软件,可以自习查找。

总结:这就是大致的方法。

CE修改器使用指南

注:本教程只适用于单机游戏,对于修改网络游戏造成的后果本人概不负责。

1、原理

当我们在打游戏时,我们的比如植物大战僵尸,当我们种植阳光时,我们的阳光值就会发生变化,CE修改器可以捕捉到这个变化的值然后,我们找出后对这个值进行修改,那么,就可以实现修改数字的目的。

2、风险

对于单机游戏一般风险是比较小的,但是不代表没有风险,因为一些厂家会有云端验证这种东西,就是其比如网游会上传到云端服务器,对其本地的存档进行一个验证,一旦检测到数据异常,就会有封号的风险,这也是一种比较常见的反作弊手段,但是,一般主要针对的是一些网游和要联网的单机游戏,这也是我们的存档可以进行云存档的原因,所以,请爱惜你自己的账号。

3、使用

(1)启动游戏和CE修改器,点击左上角的第一个搜索,找到游戏的进程,点击打开,之后,在数值这里填入你要修改的数值,后扫描,如果知道其是多少进制的就选择好,不知道就填全部。

这里比如我要改阳光,就填入150后进行首次扫描

可以看到左边出现了很多的数值,不知道是哪个,这时我们就要进行筛选了,通过种植植物,我们把阳光变成了50,此时,我们后台的数值也会变化,我们填入50,点击再次扫描,就找到了阳光对应的数值变化,

然后点击他,我们就能在下面的表格里找到这个进程。

之后,我们再点击下面的这个值,就会弹出一个修改框,只要修改里面的数值就能修改阳光了。

这里我随便改了个值确定以后,阳光就跟着变化了。

总结:本教程就是一个很简单的例子,CE修改器可以搞的事情还有很多,这只是一个大致的操作方法,但是请不要用于修改网游等其他的任何东西,毕竟账号还是很珍贵的,请爱惜自己的账号。

CE修改器使用指南

注:本教程只适用于单机游戏,对于修改网络游戏造成的后果本人概不负责。

1、原理

当我们在打游戏时,我们的比如植物大战僵尸,当我们种植阳光时,我们的阳光值就会发生变化,CE修改器可以捕捉到这个变化的值然后,我们找出后对这个值进行修改,那么,就可以实现修改数字的目的。

2、风险

对于单机游戏一般风险是比较小的,但是不代表没有风险,因为一些厂家会有云端验证这种东西,就是其比如网游会上传到云端服务器,对其本地的存档进行一个验证,一旦检测到数据异常,就会有封号的风险,这也是一种比较常见的反作弊手段,但是,一般主要针对的是一些网游和要联网的单机游戏,这也是我们的存档可以进行云存档的原因,所以,请爱惜你自己的账号。

3、使用

(1)启动游戏和CE修改器,点击左上角的第一个搜索,找到游戏的进程,点击打开,之后,在数值这里填入你要修改的数值,后扫描,如果知道其是多少进制的就选择好,不知道就填全部。

这里比如我要改阳光,就填入150后进行首次扫描

可以看到左边出现了很多的数值,不知道是哪个,这时我们就要进行筛选了,通过种植植物,我们把阳光变成了50,此时,我们后台的数值也会变化,我们填入50,点击再次扫描,就找到了阳光对应的数值变化,

然后点击他,我们就能在下面的表格里找到这个进程。

之后,我们再点击下面的这个值,就会弹出一个修改框,只要修改里面的数值就能修改阳光了。

这里我随便改了个值确定以后,阳光就跟着变化了。

总结:本教程就是一个很简单的例子,CE修改器可以搞的事情还有很多,这只是一个大致的操作方法,但是请不要用于修改网游等其他的任何东西,毕竟账号还是很珍贵的,请爱惜自己的账号。

关于驱动

注:本文主要介绍什么是驱动及其作用

1、什么是驱动

当我们电脑上安装了显卡,网卡,声卡这些硬件以后,我们还安装了操作系统,我们的操作系统怎么去识别这些硬件呢,自然就是这些驱动了,驱动本身就是操作系统和硬件沟通的桥梁。

2、怎么打驱动

对于现在的操作系统,一般你在安装了以后,其在系统更新以后,会自动识别你电脑是的硬件(前提一般是大厂的),基本上不需要手动打驱动了,那么,在之前,安装驱动,一般是像驱动精灵,驱动大师,360驱动管家这些,你跑一次基本上就给你自动打上去了,还有一种就是自己去自己电脑的品牌官网上下载,然后手动下载对应的驱动,但是一般要下载好几个,基础的就是网卡,声卡,显卡驱动。

3、不打会有什么影响

现在其实影响很小了,在很早的时候,举一个例子,如果你电脑上不打网卡的驱动,那么,你的电脑上就算有WiFi的接收器,那么,你电脑上也连接不上WiFi,因为你的电脑上识别不了,其他的,还有比如游戏启动不了,组件缺失等下一系列问题。

4、对于现在

基本上我们现在不需要担心这些问题了,很多电脑现在出厂自带驱动了。

总结:对于现在基本不要担心了,只要不重装系统基本上就不会有打驱动的问题,可以说现在的操作系统已经方便了很多了。