没电脑=不能写代码?为什么我一个高中生能在手机上码 1万多行 C++,造了一个 GUI 库和一款肉鸽游戏?

作者:Gamexyrs日期:10/2/2025

当所有人都在说手机编程不可能,当别人在电脑上用 VS 欻欻欻敲代码时,我用 MT 管理器敲屏幕编代码,用 C4Droid编译打包程序。做了自己的界面库,做了自己的游戏。这篇文章主要介绍了我是怎么单凭手机一步步走过来的,也想为跟我相似的人提供一些方法。

支持开源:所有代码已在 Github 开源,可在文章末尾链接查看。


一、为什么要用手机编程?

"何不食肉糜?"如果有电脑,我相信我绝对会用电脑的。

从小,我就知道家里并不富裕,甚至连给我交学费都要精打细算,肯定也是不会同意买电脑的。我唯一拥有的,就是一台手机,就连我写下这篇文章时用的还是 4 年前买的手机。

当时身边的人拿起手机就是吃鸡、王者、MC,玩的很嗨。不出意外,我当然也喜欢玩游戏。小学时是我疯狂的时候,甚至打吃鸡都打到王牌 14 星,几乎是拿到手机就要开一盘,玩手机都能玩饱------感觉不到饥饿感------的那种程度。

玩游戏玩多了,真的会累。上到初中,周末回到家打开手机,感觉已经厌倦游戏了。是因为累了吗?不,是因为感觉游戏已经玩到都没意思。整天在市场刷有什么好玩的新品,但没有一个可以吊起我的胃口的。从此刻开始,做一款我喜欢的游戏的想法,扎根在我的心中。

到了初一的暑假,我开始在 B 站上看黑马程序员的视频自学 C++。为什么是 C++? 我确实纠结过,但人们都说 C++ 是最难的语言,当时正处叛逆期的我反骨极了,就不信邪。于是我花了一周左右的时间在黑马程序员看完了大部分教程,找到了 C4Droid 编译器进行实操。感觉,也没想象中那么难嘛,小小指针,手下败将。

初二,经历了一年多的战斗,学了很多新知识,C++20 及之前的都或多或少有学习过,我感觉我的 C++ 水平直线上升。

由于初二时天天看着一个黑框框,还在黑框框上手搓了一个养花浇水的游戏,初三的我就想着进军图形化界面了!


二、为什么要新造"轮子"?

在手机上,我试过我能找到的图形库,SDL、SDL2FLTKallegroQt 等等,他们要不然是只提供基础图形、是老古董;要不然就是体积庞大,在手机上编写起来就是一件十分难受的事。

于是我依靠以类为特色的 SFML 自研 SFUI,主旨就是:手机端编程容易使用的轻量级 2D 界面库。

在从初三到高二的过程中,我一边用 SFUI 写程序,一边更新。亲身用过才知道,自己的库还有什么痛点,还有什么需要改进的,比如文本框自动换行,辅助对齐界面等等代码糖。别人没写,我想用的,那我就自己写出来!虽说它只是我小小一人所写之物,存在很多的不足,各个方面都不如已经完善的图形库,但是我不断修 Bug,不断优化和加新功能,现在的 SFUI 也已经能快速应付常规软件需求了,即使是在手机编程上。

我试过许多 IDE,包括 CIDE、Cxxdroid、C4Droid,它们各有优缺点。

- CIDE:界面美。但要会员且编译器所用 C++ 版本低,无法导出安装包;

- Cxxdroid:Clang 编译器快,有运行时崩溃溯源。但无法导出安装包;

- C4Droid:GCC 编译器,C++ 版本高,可以导出安装包。不稳定,经常无响应。

因此在多次艰难的抉择后,我决定 C4Droid 主要用做编译,Cxxdroid 主要用做崩溃调试。


三、我是怎么制作游戏的?

一步步地从最初的一个想法构筑起自己的游戏,真的是想到什么做什么。中途会碰到许多困难,一个个学习、突破,直到实现自己想要的效果才满意。在初中一周一放的周末,高中两周一放的周末,我一回到家就开始 coding,越码越有成就感。

1. 对抗 Against

我在手机上做 DuckCross 最开始应该跟初学者都一样吧?秉承着"能跑就行"的原则,每帧都把所有的场景和怪物逻辑遍历一遍,场景、敌人、交互一堆 for(auto& i: vector),怪物的消失和生成直接让 60FPS 抖动到 25FPS。

不只性能问题,还有"帧率相关运动"(帧率越高人物移动越快)、Segmentation Fault、莫名其妙的崩溃等等。这让我不再执着于能跑就行的原则,我开始着眼于优化我的程序。

2. 优化 Optimize3

经过我的摸索,

✓ 对于多次遍历,我想到可以做热点标记,遍历过一次标记好他的属性,下次要用时直接检查标记;

✓ 对于怪物的删除和生成,我想到可以做一个对象池,把怪物直接重置数据复用,不用再新建对象;

✓ 对于场景的加载,我想到可以区域加载,人物走到哪里就哪一块加载;

✓ 对于内存错误,我学会了 mutex 之后让程序更加安全,崩溃频率迅速下降。

我把整个工程的文件结构进行大调整,人物、场景、技能、控制分工明确,为编写带来了便利。当然,三年间所做的优化可远不只这些......这里不过多赘述。

当 200 个怪物同屏,FPS 仍高达 120FPS 的那一刻我才明白:在手机上,性能优化是游戏制作者的必经之路,反观某些游戏几乎没有优化,卡顿至极,难道不是违背了游戏制作的初衷------让玩家开心,让制作者也开心?

3. 装饰 Decorate

"人靠衣装马靠鞍",游戏能玩还不够,玩得舒服也很重要。虽然我美术不行,没法把界面做得那么精致,没法把人物做得那么细致。但每个人物和控件也是我一个个在手机上用dotpict画出来的像素画。在游戏中我也加入了音乐和音效,当然是我在网上找的,我可不会制作音乐。

然后有同学跟我说要存档功能,我在学习之后发现这个功能确实很重要,便开始学习使用 RapidJson,我选择它是因为我听说这是最快的 Json 库,这不是与性能优化不谋而合?不到一周,存档读档功能便顺利落地。

很多很多功能逐步落地:Boss 战、主动技能、分数结算、暂停面板......以及一系列的动画动效。

4. 打包 Release

每一次小版本做好后,我都会打包发给同学们试玩。自己的感觉是主观的,还要看看别人是怎么看的。但 C4Droid 自动打包后出来的 apk 内部一团糟,没有引用的库也会存在,霸占我的 apk 空间,让我看着很不爽,apk 体积可真不是越大越好。因此我又学会了徒手改 classes.dex 文件 smali 代码的能力,把 apk 体积压缩一点是一点。


四、我的理想?

如果未来可以,我会坚持 SFUI,坚持做游戏,6 月交卷后一周内补完 SFUI 的"5 分钟上手"教程。我相信我可以照亮跟我一样的人------真心热衷于编程的人。我们都是有创造力的人,想要创造属于自己的东西。我目前还是高三学生,高考是眼前绕不开的关卡,成绩也并不突出,已经没有多余时间维护和更新了。不知道大家看完我的经历会有什么感想,这就是 17 岁的我能想到的、最具体也最长远的计划。大家有没有尝试过手机编程呢?评论区留给你们:无论是吐槽、提问还是建议,如果有时间,我会看到的。


[1] SFUI 已在 Github 免费开源 点击查看

[2] DuckCross 已在 Github 免费开源发布 点击查看点击查看


没电脑=不能写代码?为什么我一个高中生能在手机上码 1万多行 C++,造了一个 GUI 库和一款肉鸽游戏?》 是转载文章,点击查看原文


相关推荐


Redis 内存淘汰策略 LRU 和传统 LRU 差异
程序员小29/30/2025

最近没被用过的,下次也大概率用不上。举个例子:你电脑桌面上放着常用的软件图标(微信、IDE),这些是最近常用的;而几个月没打开过的压缩工具,会被你拖到文件夹里。这就是 LRU 的思路:保留最近使用的,淘汰最近最少使用的。❝假设缓存容量只有 3,依次存入 A、B、C,此时缓存是 [A,B,C];若此时访问 A(A 变成最近使用),缓存顺序变为 [B,C,A]若再存入D(缓存满了),需要淘汰最近最少使用的 B,最终缓存是 [C,A,D]LFU的全称是。


【大数据毕设项目】基于大数据的茅台股票市场风险评估与可视化分析平台毕设源码\Hadoop+Spark茅台股票数据分析与预测平台
大数据毕设指导师9/30/2025

本文介绍了基于大数据的贵州茅台股票数据分析系统开发项目。项目利用Python、Spark、Hadoop等技术,构建了一个集成化的股票分析平台,包含价格趋势分析、技术指标分析、成交量分析等功能模块。系统通过数据挖掘和机器学习技术,为投资者提供全面、实时的市场分析,支持可视化展示。文章详细说明了项目背景、技术方案、核心内容及关键代码实现,展示了成交量趋势分析和价格区间分布的可视化效果。该项目为金融投资决策提供了科学依据,具有重要的实践价值。


Mock数据与真实API的无缝切换:联调阶段的核心技术
_5792025/10/2

在现代软件开发中,尤其是在多系统、多平台的应用环境下,如何高效地进行数据集成和接口联调一直是一个挑战。随着开发流程的不断优化,Mock数据和真实API的无缝切换成为了开发和测试过程中的一个关键环节。本文将详细探讨如何实现Mock数据与真实API的无缝切换,并分享在联调阶段的核心技术及最佳实践。??Mock数据与真实API的背景概述在开发初期,API的设计和实现往往会滞后于前端界面的开发。此时,为了保证前端开发能够顺利进行,开发人员通常会使用Mock数据来模拟真实API的响应。这种方法可以帮助开发


vue2到vue3快速上手入门
cz橙2025/10/2

vue3 需要会vue2,该文档笔记基于黑马的课,进阶快速入门vue3 vue3 官方文档:https://v3.cn.vuejs.org/ main.js改变 import { createApp } from 'vue' import App from './App.vue' const app = createApp(App) app.mount('#app') /* 挂载app到id为app的元素上 */ 不需要new Vue(),直接createApp(App) App.


介绍一种新的向量存储格式:DiskBBQ
Elastic 中国社区官方博客2025/10/3

作者:来自 Elastic Benjamin Trent, John Wagster 及 Ignacio Vera Sequeiros 介绍 DiskBBQ,一种 HNSW 的替代方案,并探讨何时以及为何使用它。 测试 Elastic 的领先开箱即用能力。深入我们的示例笔记本,开始免费的云试用,或立即在本地机器上尝试 Elastic。 DiskBBQ 是 Inverted Vector File (IVF) 索引的进化版。它是 Hierarchical Navigable Sm


UNIX下C语言编程与实践5-C 语言编译器 cc(gcc/xlc)核心参数解析:-I、-L、-D 的使用场景与实例
迎風吹頭髮2025/10/4

一、引言:为什么需要关注 cc 编译器参数? 在 UNIX 环境下,C 语言编译器(如 gcc、xlc,统一简称 cc)是开发的核心工具。当项目规模超过单个文件、依赖第三方库或需要条件编译时,仅靠默认编译命令(如 cc main.c -o main)会频繁遇到「头文件找不到」「库链接失败」「宏定义未生效」等问题。 本文聚焦 cc 编译器中最核心的三个参数:-I(加载头文件路径)、-L(加载库文件路径)、-D(宏定义),结合实际项目案例解析其作用、使用场景及常见问题,同时拓展其他实用参数,帮助


DrissionPage爬取汽车之家:(车名 + 颜色 + 车辆型号/续航里程)
python全栈蛇行者2025/10/5

DrissionPage爬取汽车之家 效果展示 项目概述与背景 在当今大数据时代,网络数据采集已成为获取信息的重要手段。本教程将全面详细介绍如何使用Python的DrissionPage库结合其他工具爬取汽车之家网站(https://www.autohome.com.cn/price/levelid_1)的汽车数据。汽车之家作为国内领先的汽车资讯平台,包含了丰富的汽车信息数据,这些数据对于汽车市场分析、竞品研究、价格监控等具有重要价值。 本项目旨在通过自动化技术手段,高效地采集汽


【玩泰山派】4、制作ubuntu镜像-(5)总结制作ubuntu22.04镜像+5.10内核流程
风为你而吹2025/10/7

文章目录 前言rk镜像概念rk镜像构成生成sd卡镜像 制作根文件系统流程概述文件概述执行流程执行./mk-base-debian.sh执行mk-buster-rootfs.sh执行./mk-image.sh 总结 使用docker容器基于鲁班猫的仓库制作泰山派的ubuntu22.04根文件系统前言流程制作docker镜像启动docker容器进入容器进入容器后执行step1.准备step2.构建基础 Ubuntu 系统。step3.添加 rk overlay 层,并打包ubuntu


前端必看!12个JS神级简写技巧,代码效率直接飙升80%,告别加班!
刘大华2025/10/8

前言 哈喽大家好,我是大华。 在日常开发中,我们经常会遇到一些重复、冗长的代码。写起来费劲,读起来费神,维护起来更是头疼。而且代码越复杂,性能可能越受影响。 那有没有办法让代码更简洁、清晰又高效呢? JavaScript提供了许多现代语法特性,合理使用这些简写技巧,不仅能大幅减少代码量,还能提升可读性和执行效率。 很多资深前端都在用,这篇文章整理了 12 个最实用的 JS 简写技巧,并结合实际场景进行优化和补充,帮助你写出更优雅的代码。 1. 短路运算符:替代简单的 if 判断 以前我们这样写


AI辅助制作宣传视频
Enabler_Rx2025/10/10

首先写好文字稿子,然后用google gemini模型生成音频。可以选择很多种人声,我选择了language English(US)和callirrhoe的发声,模型文生音频链接: https://cloud.google.com/text-to-speech?hl=zh-CN 然后下载音频文件 使用Microsoft Clipchamp打开音频文件,插入图像内容,可以调节音频速度,加入字幕等 然后导出生成文件 完成!

首页编辑器站点地图

Copyright © 2025 聚合阅读

License: CC BY-SA 4.0