实验四Python综合实践
《Python程序设计》综合实践报告
——Flappy Bird游戏开发与华为云排行榜集成
第一章 项目概述
1.1 项目名称
Flappy Bird游戏开发与华为云排行榜集成
1.2 项目背景
本实践基于经典Flappy Bird游戏,使用Python Pygame框架进行开发,并深度集成华为云服务,实现游戏分数的云端存储和全球实时排行榜功能。
1.3 开发环境
| 项目 | 配置 |
|---|---|
| 开发语言 | Python 3.8 |
| 游戏框架 | Pygame 2.0 |
| 云服务器 | 华为云 ECS(1核1GB) |
| 数据库 | MySQL 8.0 |
| Web框架 | Flask |
| HTTP请求 | Requests |
| 操作系统 | Windows 11 / Ubuntu 20.04 |
1.4 课程知识应用总览
| 课程章节 | 知识点 | 在本项目中的应用 |
|---|---|---|
| 第1章 初识Python | Python简介、特点 | 选择Python作为开发语言 |
| 第2章 Python语法 | 基础语法、数据类型 | 游戏代码整体结构 |
| 第3章 流程控制语句 | if、for、while循环 | 游戏主循环、碰撞检测 |
| 第4章 序列 | 列表、元组 | 存储小鸟状态、陨石列表 |
| 第5章 字符串 | 字符串处理 | 玩家名编辑、API请求 |
| 第6章 函数 | 函数定义与调用 | 游戏各个功能模块 |
| 第7章 面向对象 | 类与对象 | Bird、Pipeline、Meteor等类 |
| 第8章 模块 | import导入 | pygame、requests等模块 |
| 第9章 异常处理 | try-except | API请求异常捕获 |
| 第10章 文件操作 | 文件读写 | 本地最高分保存 |
| 第11章 数据库操作 | SQL语句 | MySQL数据存储 |
| 第12章 GUI编程 | Pygame | 游戏图形界面 |
| 第13章 Pygame游戏编程 | 精灵、碰撞检测、动画 | 完整游戏实现 |
| 第14章 网络爬虫 | requests库 | 华为云API调用 |
| 第15章 Web编程 | Flask框架 | API服务开发 |
| 第16章 Web框架 | 路由、JSON | RESTful API |
| 第17章 Socket编程 | HTTP协议 | 游戏与云端通信 |
1.5 各章节知识点代码示例
第2章 基础语法
score = 100 # 整数
player_name = "Player" # 字符串
speed = 2.5 # 浮点数
is_dead = False # 布尔值
第3章 流程控制
while True: # 游戏主循环
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
if bird.birdY > HEIGHT:
game_over()
第4章 序列
self.meteors = [] # 列表存储陨石
points = [(cx, cy-10), (cx+15, cy)] # 元组存储坐标
第5章 字符串
player_name += "123" # 字符串拼接
url = f"{API}/api/upload" # f-string格式化
display_text = f"得分: {score}" # 显示格式化
第6章 函数
def upload_score_to_cloud(username, score):
try:
response = requests.post(...)
return True
except:
return False
第7章 面向对象
class Bird:
def __init__(self):
self.x = 100
self.y = HEIGHT // 2
self.hat_mode = False
def jump(self):
self.jumpSpeed = 8
def activate_hat(self):
self.hat_mode = True
self.hat_timer = 600 # 10秒无敌
第8章 模块导入
import pygame
import sys
import random
import requests
from flask import Flask
第9章 异常处理
try:
response = requests.get(url, timeout=3)
except requests.exceptions.Timeout:
print("请求超时")
except Exception as e:
print(f"错误: {e}")
第10章 文件操作
def get_high_score():
try:
with open("highscore.txt", "r") as f:
return int(f.read())
except:
return 0
def save_high_score(score):
with open("highscore.txt", "w") as f:
f.write(str(score))
第11章 数据库操作
cursor.execute("""
SELECT u.username, u.country, MAX(s.score) as best_score
FROM scores s
JOIN users u ON s.user_id = u.user_id
GROUP BY u.user_id
ORDER BY best_score DESC
LIMIT 50
""")
第12-13章 GUI与Pygame游戏编程
pygame.init()
screen = pygame.display.set_mode((400, 650))
if bird_rect.colliderect(pipe_rect):
game_over()
self.anim_counter += 1
if self.anim_counter > 10:
self.status = 1 - self.status
第14章 网络爬虫
def upload_score_to_cloud(username, score, mode):
response = requests.post(
f"{CLOUD_API}/api/upload",
json={"username": username, "score": score, "mode": mode},
timeout=3
)
return response.json()
def get_cloud_ranking(limit=10):
response = requests.get(f"{CLOUD_API}/api/ranking", timeout=3)
data = response.json()
return data.get("data", [])[:limit]
第15-16章 Web编程
from flask import Flask, jsonify, request
app = Flask(__name__)
@app.route('/api/ranking')
def get_ranking():
ranking = db.get_global_ranking()
return jsonify({'success': True, 'data': ranking})
@app.route('/api/upload', methods=['POST'])
def upload_score():
data = request.json
result = db.upload_score(data['username'], data['score'])
return jsonify(result)
第二章 需求分析
2.1 功能需求
| 编号 | 功能模块 | 需求描述 | 优先级 |
|---|---|---|---|
| F1 | 游戏核心玩法 | 实现小鸟飞行、重力下落、管道碰撞检测 | 高 |
| F2 | 经典模式 | 传统玩法,穿越管道得分 | 高 |
| F3 | 雷电模式 | 金色管道+雨天+随机雷电攻击特效 | 中 |
| F4 | 陨石模式 | 躲避陨石,连击系统,难度随分数递增 | 中 |
| F5 | 无敌帽子 | 按X键开启10秒无敌状态,免疫所有伤害 | 中 |
| F6 | 加速特效 | Shift键开启速度加成 | 低 |
| F7 | 全球排行榜 | 游戏结束时上传分数并展示Top 5 | 高 |
| F8 | 玩家名编辑 | 支持自定义玩家名 | 中 |
| F9 | 本地最高分 | 本地文件保存历史最高分 | 低 |
| F10 | 华为云集成 | 使用代金券购买ECS,部署数据库和API | 高 |
2.2 非功能需求
| 需求 | 指标 |
|---|---|
| 游戏流畅度 | 60帧/秒 |
| API响应时间 | ≤3秒 |
| 系统可用性 | 7×24小时 |
| 并发支持 | 支持多用户同时上传分数 |
2.3 用户需求分析
- 普通玩家:体验三种游戏模式,挑战高分
- 竞技玩家:参与全球排行榜竞争
- 课程学生:学习云服务部署和API开发
第三章 系统设计
3.1 系统总体架构
┌─────────────────────────────────────────────────────────────┐
│ 客户端(PC) │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Flappy Bird 游戏 (Pygame) │ │
│ │ ┌────────┐ ┌────────┐ ┌────────┐ ┌──────────────┐ │ │
│ │ │经典模式│ │雷电模式│ │陨石模式│ │无敌/加速特效 │ │ │
│ │ └───┬────┘ └───┬────┘ └───┬────┘ └──────┬───────┘ │ │
│ └──────┼──────────┼──────────┼──────────────┼─────────┘ │
│ │ │ │ │ │
│ └──────────┴────┬─────┴──────────────┘ │
│ │ HTTP请求 │
└─────────────────────────┼───────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ 华为云服务器 │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Flask API 服务 (端口 5000) │ │
│ │ ┌───────────────┐ ┌───────────────┐ │ │
│ │ │ /api/upload │ │ /api/ranking │ │ │
│ │ │ POST上传分数 │ │ GET获取排行榜 │ │ │
│ │ └───────┬───────┘ └───────┬───────┘ │ │
│ └──────────┼──────────────────────┼───────────────────┘ │
│ │ │ │
│ ▼ ▼ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ MySQL 数据库 │ │
│ │ ┌─────────────────┐ ┌─────────────────┐ │ │
│ │ │ users 表 │ │ scores 表 │ │ │
│ │ │ - user_id (PK) │◄───│ - user_id (FK) │ │ │
│ │ │ - username │ │ - score │ │ │
│ │ │ - country │ │ - mode │ │ │
│ │ │ - created_at │ │ - play_time │ │ │
│ │ └─────────────────┘ └─────────────────┘ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Python HTTP 服务 (端口 8080) │ │
│ │ ranking.html 排行榜可视化网页 │ │
│ └─────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
3.2 数据库设计
3.2.1 用户表 (users)
| 字段 | 类型 | 约束 | 说明 |
|---|---|---|---|
| user_id | INT | PRIMARY KEY AUTO_INCREMENT | 用户唯一标识 |
| username | VARCHAR(50) | NOT NULL UNIQUE | 玩家名称 |
| country | VARCHAR(50) | DEFAULT '中国' | 国家/地区 |
| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | 注册时间 |
3.2.2 分数表 (scores)
| 字段 | 类型 | 约束 | 说明 |
|---|---|---|---|
| score_id | INT | PRIMARY KEY AUTO_INCREMENT | 分数记录ID |
| user_id | INT | FOREIGN KEY | 关联用户ID |
| score | INT | NOT NULL | 得分 |
| mode | VARCHAR(20) | DEFAULT 'classic' | 游戏模式 |
| play_time | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | 游戏时间 |
索引设计: idx_score对score字段降序索引,优化排行榜查询
3.3 API接口设计
| 接口 | 方法 | 功能 | 请求格式 | 响应格式 |
|---|---|---|---|---|
| /api/ranking | GET | 获取全球排行榜 | 无 | JSON |
| /api/upload | POST | 上传游戏分数 | JSON | JSON |
| / | GET | API健康检查 | 无 | JSON |
请求示例:
POST /api/upload
{"username": "Player", "score": 100, "mode": "classic"}
响应示例:
{"success": true, "message": "分数已上传!"}
第四章 核心功能实现
4.1 三种游戏模式实现
# 经典模式
def draw_game_classic():
up, down = pipe.draw(screen, False)
bird.draw(screen)
bird.update()
# 雷电模式(金色管道+雨天+闪电)
def draw_game_thunder():
up, down = pipe.draw(screen, True)
rain_mgr.draw(screen)
lightning.draw(screen)
bird.draw(screen)
# 陨石模式(躲避陨石+连击)
def draw_game_meteor():
meteor_mgr.update()
meteor_mgr.draw(screen)
bird.draw(screen)
4.2 游戏大厅界面实现
def draw_lobby(pos):
name_rect = pygame.Rect(WIDTH//2 - 60, 280, 150, 45)
if editing_name:
pygame.draw.rect(screen, WHITE, name_rect)
name_surface = font_input.render(player_name + "|", True, BLACK)
else:
pygame.draw.rect(screen, HUAWEI_BLUE, name_rect, 2)
name_surface = font_mid.render(player_name, True, YELLOW)
classic_btn.draw(screen, font_button)
thunder_btn.draw(screen, font_button)
meteor_btn.draw(screen, font_button)
第五章 华为云部署的曲折探索
5.1 第一阶段:走错路——选择云数据库
尝试1:Flexus云数据库RDS 价格:¥200/月,¥300代金券只够用1.5个月
尝试2:GaussDB 价格:¥5.55/小时 = ¥4000/月,¥300代金券只够用2小时!
❌ 教训:买云服务前必须看清楚计费方式!
5.2 第二阶段:正确选择——购买ECS
最终选择:s6.small.1 (1核1GB),¥0.17/小时,¥300可用约60天
| 配置项 | 选择 |
|---|---|
| 计费模式 | 按需计费 |
| 规格 | s6.small.1 (1核1GB) |
| 镜像 | Ubuntu 20.04 |
| 系统盘 | 40GB |
| 带宽 | 1Mbit/s |
5.3 第三阶段:购买过程中的问题
问题1:账号欠费无法购买 显示:您的账号已欠费,无法正常购买 解决:充值¥1.01还清欠费
问题2:虚拟私有云不会填 解决:选择 vpc-default → 自动出现 subnet-default
问题3:登录凭证不会选 解决:从"密钥对"改为"密码"方式
5.4 第四阶段:环境部署过程
步骤1:SSH连接服务器
ssh root@124.70.105.142
步骤2:安装MySQL
apt update
apt install mysql-server -y
步骤3:安装Python环境
apt install python3 python3-pip -y
pip3 install flask flask-cors pymysql requests
步骤4:创建数据库
CREATE DATABASE flappy_bird;
USE flappy_bird;
CREATE TABLE users (
user_id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) NOT NULL UNIQUE,
country VARCHAR(50) DEFAULT '中国',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE scores (
score_id INT PRIMARY KEY AUTO_INCREMENT,
user_id INT NOT NULL,
score INT NOT NULL,
mode VARCHAR(20) DEFAULT 'classic',
play_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(user_id)
);
CREATE INDEX idx_score ON scores(score DESC);
步骤5:编写API服务 由于nano编辑时Python缩进总出错,改用cat命令一次性写入成功。
步骤6:开放端口
| 端口 | 用途 | 问题与解决 |
|---|---|---|
| 22 | SSH连接 | 默认已开放 |
| 5000 | API服务 | 端口格式填错(写了TCP,5000,),改为5000 |
| 8080 | 网页服务 | 同样问题,改为8080 |
5.5 第五阶段:排行榜网页部署
cd /root
nohup python3 -m http.server 8080 > web.log 2>&1 &
创建桌面快捷方式 rank.bat:
@echo off
start http://124.70.105.142:8080/ranking.html
5.6 部署问题总结
| 问题 | 原因 | 解决方案 | 耗时 |
|---|---|---|---|
| 账号欠费 | 欠费¥1.01 | 充值还清 | 5分钟 |
| 选错GaussDB | 不了解计费 | 改用ECS自建 | 30分钟 |
| 虚拟私有云不会填 | 界面不熟悉 | 选择vpc-default | 10分钟 |
| 登录凭证选错 | 默认密钥对 | 改成密码方式 | 5分钟 |
| 端口格式填错 | 写了TCP,5000 | 改成5000 | 10分钟 |
| 端口打不开 | 未添加安全组规则 | 添加入方向规则 | 15分钟 |
| API代码缩进错误 | 手动编辑出错 | 用cat命令写入 | 20分钟 |
5.7 最终部署成果
| 服务 | 地址 | 状态 |
|---|---|---|
| ECS云服务器 | 124.70.105.142 | ✅ 运行中 |
| API服务 | http://124.70.105.142:5000 | ✅ 正常 |
| 排行榜网页 | http://124.70.105.142:8080/ranking.html | ✅ 正常 |
| rank.bat | 桌面快捷方式 | ✅ 一键打开 |
第六章 运行结果
6.1 API测试结果
curl http://124.70.105.142:5000/
# 返回: {"message":"Flappy Bird API Running!","status":"ok"}
curl http://124.70.105.142:5000/api/ranking
# 返回: {"success":true,"data":[{"rank":1,"username":"Player","score":17}]}
6.2 排行榜网页
打开 http://124.70.105.142:8080/ranking.html 显示:
| 排名 | 玩家 | 国家 | 最高分 |
|---|---|---|---|
| 🥇 第1名 | Player | 中国 | 17分 |
| 🥈 第2名 | jack | 中国 | 3分 |
| 🥉 第3名 | john | 中国 | 2分 |
6.3 游戏运行结果
| 模式 | 运行状态 | 说明 |
|---|---|---|
| 经典模式 | ✅ 正常 | 绿色管道,传统玩法 |
| 雷电模式 | ✅ 正常 | 金色管道、雨天、闪电预警 |
| 陨石模式 | ✅ 正常 | 陨石降落、连击计数 |
| 无敌帽子 | ✅ 正常 | 按X键,10秒无敌,显示倒计时 |
| 加速特效 | ✅ 正常 | 按Shift键,速度翻倍 |
6.4 游戏界面说明
游戏大厅: 蓝色框显示玩家名点击可编辑,三个模式按钮,华为云连接状态显示
游戏结束界面: 显示本次得分、玩家名、全球排行榜Top 5
第七章 功能清单
| 序号 | 功能 | 实现状态 | 对应知识点 |
|---|---|---|---|
| 1 | 经典模式 | ✅ | Pygame游戏编程 |
| 2 | 雷电模式 | ✅ | 类与对象、事件处理 |
| 3 | 陨石模式 | ✅ | 列表操作、随机数 |
| 4 | 无敌帽子(X键) | ✅ | 键盘事件、计时器 |
| 5 | 加速特效(Shift键) | ✅ | 速度控制 |
| 6 | 全球排行榜 | ✅ | 网络请求、JSON解析 |
| 7 | 华为云API集成 | ✅ | Web编程、数据库操作 |
| 8 | 玩家名编辑 | ✅ | 字符串处理、鼠标事件 |
| 9 | 本地最高分 | ✅ | 文件操作 |
| 10 | 网页排行榜 | ✅ | HTML/CSS/JavaScript |
功能总数:10个(超过要求的5个)
第八章 课程总结与感想
8.1 全课知识回顾
| 课程阶段 | 学习内容 | 掌握程度 | 本项目应用 |
|---|---|---|---|
| 第1-2章 | Python基础语法 | 熟练掌握 | 游戏整体代码结构 |
| 第3-6章 | 流程控制、序列、函数 | 熟练掌握 | 游戏主循环、模块化设计 |
| 第7章 | 面向对象编程 | 熟练掌握 | Bird、Pipeline等类设计 |
| 第8-10章 | 模块、异常、文件 | 熟练掌握 | 导入库、异常捕获、保存最高分 |
| 第11章 | 数据库操作 | 掌握 | MySQL存储分数 |
| 第12-13章 | GUI、Pygame编程 | 深入应用 | 完整游戏实现 |
| 第14章 | 网络爬虫 | 掌握 | 华为云API调用 |
| 第15-16章 | Web编程 | 深入应用 | API服务开发 |
| 第17章 | Socket编程 | 了解 | HTTP通信 |
8.2 实践中的困难与解决
| 问题 | 原因 | 解决方案 | 耗时 |
|---|---|---|---|
| 账号欠费 | 欠费¥1.01 | 充值还清 | 5分钟 |
| 选错GaussDB | 不了解计费 | 改用ECS自建 | 30分钟 |
| 虚拟私有云不会填 | 界面不熟悉 | 选择vpc-default | 10分钟 |
| 登录凭证选错 | 默认密钥对 | 改成密码方式 | 5分钟 |
| 端口格式填错 | 写了TCP,5000 | 改成5000 | 10分钟 |
| 端口打不开 | 未添加安全组规则 | 添加入方向规则 | 15分钟 |
| API代码缩进错误 | 手动编辑出错 | 用cat命令写入 | 20分钟 |
8.3 实践收获
- Python综合应用能力:将课程所学知识完整应用到实际项目中
- 云服务部署能力:学会了使用华为云ECS部署Web服务
- 问题解决能力:遇到问题时能独立分析并解决
- 全栈开发意识:从游戏前端到云端后端,完整理解应用开发流程
- 代金券使用经验:了解了华为云代金券的正确使用方法
8.4 课程建议
一学期的课下来,我提几个不成熟的小建议:
一是课堂随机提问能不能改成举手回答?不是不想回答问题,是突然被点到真的会大脑空白,明明会的也说不出。改成举手的话,想回答的同学有更多机会,老师也不用担心冷场。
二是课程刚开始的时候,能不能给我们看看往届优秀作业的“满分模板”?让我们知道好的项目长什么样,心里有个谱,知道自己努力的方向。
三是课后可以多分享一些实战项目的素材和常用库的文档,像requests、BeautifulSoup、flask这些,光靠课上讲感觉不够,课后自己折腾的时候有份好文档能救命。
最后,感谢王老师一学期的悉心教导。您的课堂轻松幽默,“蛋炒饭”和“盖浇饭”的比喻我会记一辈子。这门课是我大学期间最充实的课程之一,没有“之一”可能也可以争一争。
下学期我打算继续学Python,可能往数据分析或者Web开发方向走。不管走哪条路,这学期打下的基础都会是最宝贵的财富。希望以后自己也能炒出一盘让老师满意的“蛋炒饭”。
8.5 总结
本次综合实践让我将课堂所学知识真正应用到实际项目中。从Python游戏开发,到华为云服务器购买,再到数据库部署、API开发、网页展示,我体验了完整的软件开发流程。特别是华为云部署环节遇到的各种问题,让我深刻理解了云服务的正确使用方法。
看着自己的分数出现在全球排行榜上,那种成就感是无可替代的。这次实践不仅提升了我的技术能力,更锻炼了解决问题的能力。通过这个项目,我对Python程序设计有了更深刻的理解,对未来的职业发展充满信心。
课程总结与感想 ### 我的Python学习之路
这学期跟着王老师学Python,回想起来,真的感觉幸运又充实,幸运的是遇见了幽默风趣而又有真本事硬技术的王老师,充实是因为跟着王老师学到了很多编程知识。说实话,学期初我对于python是很抵触害怕的,到现在居然能自己鼓捣出一个能玩的游戏,还能把分数传上云端,这种感觉,真的是无语言表了(实则词语匮乏哈哈哈)。刚开课那会儿,我对Python的印象就停留在“听说很简单”这几个字上。王老师用“蛋炒饭”和“盖浇饭”比喻Python和C语言的区别,我一下子就记住了。Python就像蛋炒饭,写完就能炒(运行),不用提前“焖饭”(编译);C语言像盖浇饭,得先把饭蒸好(编译),再浇上菜。这个比喻太形象了,以至于我现在看到Python就会想到蛋炒饭。第2章的基础语法,我跟着老师敲代码,看着程序能正常运行,那种感觉挺奇妙的。原来让电脑听话也不难嘛。变量就像饭盒里的格子,各种数据分类放好;运算符就是炒菜时加的盐和糖,不多不少刚刚好。第3章的流程控制,是我第一次觉得编程有点意思。if-elif-else就像做选择题,“如果盐放少了就加盐,否则如果糖放少了就加糖,否则出锅”。for和while循环就像是重复翻炒,直到食材熟透。老师课堂上带我们做的猜数字游戏,我用单步调试偷偷看到了答案数字,那种感觉就像提前知道了菜谱里的秘密配方——原来调试器还能这么玩!第4章的序列,我学的有点头大。列表、元组、字典、集合,刚开始分不清谁是谁。列表像购物清单,可以随便改;元组像刻在石头上的字,不能动;字典像通讯录,一个名字对应一个号码;集合像调料盒,里面的调料都不重复。后来慢慢理解了:列表用[],元组用(),字典用{}带冒号,集合用{}不带冒号。王老师说“元组是不可变的列表”,我突然就通了。第5章字符串切片是我觉得最神奇的,[::-1]一行代码就能把字符串倒过来,这要是在C语言里得写好几行。第7章面向对象,是我学习的一个坎。类是什么?对象是什么?老师说“类是菜谱,对象是根据菜谱炒出来的蛋炒饭”,我一下就懂了。菜谱(类)定义了怎么做,但真正能吃的是炒出来的饭(对象)。封装就是把炒菜过程藏在后厨,客人只管吃;继承就是在蛋炒饭的基础上开发海鲜炒饭、腊肉炒饭,不用重新发明轮子;多态就是不管什么炒饭,端上桌都能吃。说实话,刚开始写类的时候,我觉得有点多此一举。但项目做大了才发现,把小鸟、管道、陨石都封装成类,代码清晰多了,改一个地方其他地方自动跟着变,舒服!第9章的异常处理,让我学会了给程序穿上防弹衣。以前我写的代码,一出错就崩溃,红字满屏跑,心态也跟着崩。try-except就像是炒菜时的备菜——万一盐放多了,加点糖救一下;万一糊锅了,赶紧关火重来。虽然王老师说这是提升代码健壮性,但说实话,try-except写多了真的有点窒息,感觉像在给代码穿三层防弹衣。文件操作倒是挺实用。以前写的程序一关就没了,现在能存到硬盘里,下次打开还在。这就像做好的蛋炒饭放进冰箱,明天热一下还能吃。(我这样理解对吧王老师)课程后期接触了网络爬虫和Web编程,说实话这块我学的有点懵。用requests库去网上抓数据,就像去别人家厨房借调料,得讲规矩(遵守robots协议)。Socket编程更是让我头疼,和同学做实验的时候,客户端死活收不到服务端的消息,折腾了一晚上。但当两个程序终于成功通信的那一刻,那种感觉就像第一次成功做出蛋炒饭——虽然卖相一般,但能吃!最后的综合实践,我做了一个Flappy Bird游戏,还接了华为云排行榜。从分析、设计到编码、调试,再到部署上线,完整走了一遍。游戏里有经典模式、雷电模式、陨石模式,还能按X键开无敌帽子、按Shift键加速。当我把分数传到云端,在网页上看到自己的排名时,那种成就感,就像是炒出了一盘色香味俱全的蛋炒饭,还拍了照发朋友圈。

浙公网安备 33010602011771号