超级玛丽制作揭秘7字体管理 类MYFONT

【Claude Code · VibeCoding】13|实战演示:水果消消乐 VibeCoding 用「水果消消乐」走一遍 VibeCoding:提示、生成、试玩、改需求、再生成。 阅读详情

类说明:游戏当然少不了文字。在超级玛丽中,文字内容是比较少的,分两类:游戏菜单中的文字,游戏过程中的文字。
菜单中的文字包括:
 "制作: programking 2008年8月",
 "操作:   Z:子弹   X:跳   方向键移动  W:默认窗口大小",
 "地图文件错误,请修正错误后重新启动程序。",
 "(上下键选择菜单,回车键确认)",
 "开始游戏",
 "操作说明",
 "博客: http://blog.youkuaiyun.com/programking",
 "(回车键返回主菜单)"
这几个字符串存储在一个指针数组中(全局变量),通关数组下标使用各个字符串。
游戏中的文字只有两个:’LIFE’,’WORLD’。
其他的文字其实都是位图,例如“通关”、“gameover”以及碰到金币后的“+10”。这些都是位图图片,在pic文件夹里一看便知。

成员函数功能列表:
class MYFONT
{
public:
 //构造函数,初始化”字体表”,即5个字体句柄构成的数组,字体大小依次递增.
 MYFONT();
 ~MYFONT();

 //功能 设置显示文字的dc
 //入参 显示文字的dc句柄
 void SetDevice(HDC h);
 //功能 设置当前显示的字体
 //入参 字体表下标
 void SelectFont(int i);
 //功能 设置当前字体为默认字体
 //入参 无
 void SelectOldFont();
 //功能 在指定坐标显示字符串
 //入参 横纵坐标 字符串指针
 void ShowText(int x,int y,char *p);
 //功能 设置文字背景颜色,文字颜色
 //入参 文字背景颜色 文字颜色
 void SetColor(COLORREF cbk, COLORREF ctext);
 //功能 设置文字背景颜色,文字颜色
 //入参 文字背景颜色 文字颜色
 void SelectColor(COLORREF cbk, COLORREF ctext);

 //显示文字的dc
 HDC hdc;
 //字体表,包含5个字体句柄,字体大小依次是0,10,20,30,40
 HFONT hf[5];
 //默认字体
 HFONT oldhf;
 //color
 COLORREF c1;//字体背景色
 COLORREF c2;//字体颜色
};
技术原理:要在屏幕上显示一个字符串,分以下几步:将字体句柄选入dc,设置文字背景色,设置文字颜色,最后用TextOut完成显示。这个类就是将整个过程封装了一下。显示dc,背景色,文字颜色,字体句柄都对应各个成员数据。函数具体实现很简单,一看便知。

使用举例:
定义
mario01/mario01.cpp(89):MYFONT myfont;
初始化设置显示dc
mario01/mario01.cpp(258): myfont.SetDevice(hscreen);
地图文件错误:设置颜色,设置字体,显示提示文字
mario01/mario01.cpp(327):    myfont.SelectColor(TC_WHITE,TC_BLACK);
mario01/mario01.cpp(328):    myfont.SelectFont(0);
mario01/mario01.cpp(329):    myfont.ShowText(150,290,pPreText[3]);
游戏开始菜单:设置字体,设置颜色,显示三行菜单文字
mario01/mario01.cpp(336):    myfont.SelectFont(0);
mario01/mario01.cpp(337):    myfont.SelectColor(TC_BLACK, TC_YELLOW_0);
mario01/mario01.cpp(338):    myfont.ShowText(150,260,pPreText[4]);
mario01/mario01.cpp(339):    myfont.ShowText(150,290,pPreText[5]);
mario01/mario01.cpp(340):    myfont.ShowText(150,320,pPreText[6]);
游戏操作说明菜单:设置字体,设置颜色,显示四行说明文字
mario01/mario01.cpp(348):    myfont.SelectFont(0);
mario01/mario01.cpp(349):    myfont.SelectColor(TC_BLACK, TC_YELLOW_0);
mario01/mario01.cpp(350):    myfont.ShowText(150,230,pPreText[8]);
mario01/mario01.cpp(351):    myfont.ShowText(50,260,pPreText[1]);
mario01/mario01.cpp(352):    myfont.ShowText(50,290,pPreText[0]);
mario01/mario01.cpp(353):    myfont.ShowText(50,320,pPreText[7]);

这个类的使用就这些。这个类只是负责菜单文字的显示,那么,游戏中的LIFE,WORLD的提示,是在哪里完成的呢?函数如下:
void GAMEMAP::ShowInfo(HDC h)
{
 char temp[50]={0};

 SetTextColor(h, TC_WHITE);
 SetBkColor(h, TC_BLACK);

 sprintf(temp, "LIFE  : %d",iLife);
 TextOut(h, 220,100,temp,strlen(temp));

 sprintf(temp, "WORLD : %d",iMatch+1);
 TextOut(h, 220,130,temp,strlen(temp));
}
这个函数很简单。要说明的是,它并没有设置字体,因为在显示菜单的时候已经设置过了。
至此,所有文字的处理全部实现。

附:
超级玛丽第一版源码链接:http://download.youkuaiyun.com/source/497676
超级玛丽增强版源码链接:http://download.youkuaiyun.com/source/584350

 

超级玛丽全部素材(图片音乐字体) 之前那个资源的分越来越高了,我现在重新传一个新的 红白机的超级玛丽全部素材,包括所有图片(地图瓦片、人物、怪物、特效等,已全部对齐)、音乐、音效 立即下载

相关推荐

Go-zero微服务实战:从零搭建电商用户系统(含完整代码示例)

本文详细介绍了如何使用go-zero框架从零搭建电商用户系统,包含完整的微服务架构设计、核心功能实现代码示例以及性能优化策略。通过分层架构设计、JWT认证、分布式锁等关键技术,实现高并发、高可用的用户系统,适用于电商平台开发。

weixin_29275257的博客 256

UE4中文汉字字体制作

1. 资源浏览器中右键,选择User Interface->font创建字体蓝图:MyFont。 2. 双击MyFont,打开字体编辑器,进行修改。在Detail面板,找到Font Cache Type,切换为Offline模式。弹出的对话框直接点yes就行,稍后出现字库选择面板,此处选择字体:仿宋,字号:48号,点击确认。 3. 在Detail面板中chars输入需要使用的中文汉字,并勾选Alp

kasteluo的专栏 1万+

Basilisk vs. STK:开源航天仿真工具在Windows上的实战体验与生态对比

本文对比了开源航天仿真工具Basilisk与商业软件STK在Windows平台上的实战体验与生态差异。从技术架构、安装配置、使用成本、功能覆盖、社区生态到适用场景,全面分析了二者的优劣势,为航天工程师和研究人员提供选型参考。Basilisk在性能和扩展性上表现突出,而STK在可视化与专业模块上更具优势。

weixin_30632089的博客 588

Ue4 三维文字,汉字,中文乱码

最近在ue4中用C++实现三维文本,就是TextRender,实现本身不难,就是参照官网《创建使用定时器Actor》那一节。链接如下: 创建使用定时器Actor 过程中遇到两个坑,好几天才过去。 一、汉子字体的制作。过程乍一看挺麻烦,其实跟着做两遍就轻车熟路了。网上多数给的是一下这种方法: 资源浏览器中右键,选择User Interface->font创建字体蓝图:MyFont。 ...

qq_28105601的博客 5279

ROS基础(一)——命令行代码(以小乌龟程序为例)

ROS学习(一)——命令行代码(以小乌龟程序为例)1 基础命令行语句1.1 roscore1.2 rqt_graph(显示系统计算图)1.3 rosnode(显示所有节点相关信息)1.4 rostopic(和话题相关)2 服务类型指令rosservice同时存在两只海龟3 指令记录 1 基础命令行语句 从大二四旋翼无人机编队后就没再接触过ROS了,最近由于科研任务需要重新捡起来,打算系统学一下!学习过程参考古月居老师的视频,有兴趣的同学可以去[BliBli]学习。 学习平台:Ubuntu 18.04 硬件

北理自动化小白 6266

第一次面试经历:集创北方数字IC前端面试(崩)总结

时间:2020年8月11日上午10点 公司:集创北方,做LED、LCD、OLED、AMOLED等显示器芯片的公司,应该主要是做显示驱动、图像处理、电源管理等这一块。 岗位:数字IC前端设计 城市:北京 形式:线上面试。感觉我俩是两个社畜,他说摄像头开不开都可以,我说那语音OK吗他说OK,于是直接语音问答。 项目经历:基于FPGA的车牌识别 & 先导存储器集成工艺开发(课题组) & 基于FPGA的贪吃蛇小游戏 反正是凉凉的,这时候准备还不足,前面都在复习项目没怎么刷过题。 过程如下: 自我介绍

coin的博客 6678

字符组成的超级玛丽

  #include<iostream> int main() { using std::cout; cout<< " ********\n" << " ************\n" << " ####....#.\n"

一只大鸽子的博客 2291

超级玛丽

MARIO CODE INSIDE超级玛丽制作揭秘制作 programking  博客 http://blog.youkuaiyun.com/programking  目  录 一、       超级玛丽制作揭秘1工程开始... 2二、       超级玛丽制作揭秘2图片基类MYBITMAP. 4三、       超级玛丽制作揭秘3游戏背景 类MYBKSKY. 7四、 

lipu13314601878的专栏 3087

一文掌握python图形界面开发PyQt6--(一)基本操作、控件、信号与槽、常用控件、布局管理、事件处理、文件对话框

一文掌握python图形界面开发PyQt6--(一)基本操作、控件、信号与槽、常用控件、布局管理、事件处理、文件对话框

qq_38120851的博客 4046

R语言生存分析

自己整理编写的R语言常用数据分析模型的模板,原文件为Rmd格式,直接复制粘贴过来,作为个人学习笔记保存和分享。部分参考薛毅的《统计建模与R软件》和《R语言实战》生存分析是研究生存时间的分布规律,以及生存时间和相关因素之间关系的一种统计分析方法。生存分析在医学科学研究中具有广泛而重要的应用价值,它对人群寿命的研究,各种慢性疾病的现场追踪研究,临床疗效试验和动物试验等研究中随访资料的处理骑着举足轻重的作

Tiaaaaa的博客 2万+

C++ 学习之旅三——我和超级玛丽有个约会

学习了c++有一周有余了吧,感谢孙鑫老师的视频教程,让我 对C++有了基本的了解,并理解到C++与.net 的许许多多的区别,更要感谢网民为programaking的人,会为我提供了超级玛丽制作揭秘 这套宝贵的教程,让我 做做出了这个项目,对c++ 有了一个更深层次的认识。我就把我做超级玛丽这个游戏的心得,体会写成博客分享给大家把。 首先,我说说对...

weixin_34380296的博客 127

深入URP之Shader篇5: SimpleLit Shader分析(1)

本篇开始分析simple lit shader。我们通过分析unlit shader了解了URP shader的结构,以及一些基础功能。而simple lit shader包含了更多的内容。本篇开始,就不会特别仔细的逐行去分析shader文件了,只会针对pass的功能中比较有意思且之前没看到过的内容进行分析。名字为的pass,它的Tags为: 根据URP的文档:说明这是一个前向渲染路径的pass,虽然URP(至少是10.8.1版本)还没有正式支持Deferred Rendering,但URP已经为它打了很多

聚焦游戏和图形引擎开发技术 1901

[源码和文档分享]基于WIN32 API实现的超级玛丽游戏

游戏中用到的类结构介绍 图像层 图像基类MYBITMAP 游戏背景MYBKSKY—>MYBITMAP 游戏图片MYANIOBJ—>MYBITMAP 魔法攻击MYANIMAGIC—>MYBITMAP 逻辑层 ...

qq_38474647的博客 443

南京邮电大学电工电子实验B实验2(传输网络的幅频和相频特性)

一、实验目的1、掌握传输网络在输入信号频率不断变化时所显现出的固有特征。2、了解电路参数对RLC串联电路选频特性的影响。3、掌握电路幅频和相频特性的测量方法。二、主要仪器设备及软件硬件:交流电源、电容、电感、电阻、波特图仪。软件:Multisim14.0三、实验原理(或设计过程)当为-3db时,对应的点为半功率输出点。

智慧工厂智能制造全面数字化解决方案(2025)-175页.pptx

智慧工厂智能制造全面数字化解决方案(2025)-175页.pptx

【Unity知识速递】第7期 Unity 6.6 深度解析:WebGPU 正式版与 WebAssembly64,Web 游戏的内存革命

如何启用 Wasm64?需要注意的是,Wasm64 需要浏览器支持 Memory64 提案,目前主流浏览器的最新版本都已支持。一句话总结: Unity 6.6 用 WebGPU 转正、Wasm64 16GB 内存和渐进式加载三连击,将 Web 游戏的体验天花板又往上推了一大截——Web 平台不再是"妥协版",正在成为真正的一等公民。Unity 6.6 新增了 WebAssembly64(Wasm64) 构建选项,这可能是本次更新中对 Web 游戏开发者影响最大的一项升级。

crystal_WJT的博客 420

基于HTML5 Canvas 的盖楼游戏【100013305】

详情介绍:https://www.yuque.com/sxbn/ks/100013305以下为默认游戏规则,也可参照下节自定义游戏参数每局游戏生命值为 3,掉落一块楼层生命值减 1,掉落 3 块后游戏结束,单局游戏无时间限制成功盖楼加 25 分,完美盖楼加 50 分,连续完美盖楼额外加 25 分,楼层掉落扣除生命值 1,单局游戏共有 3 次掉落机会栗子:第一块完美盖楼加 50 分,第二块连续完美盖楼加 75 分,第三块连续完美盖楼加 100 分,依此类推……

我给 DeepSeek 大肥鱼做了一款马里奥式闯关游戏

当全网都在把大肥鱼做成直播虚拟主播的时候,我决定给她做一款横版闯关游戏。

2301_79028807的博客 892

参考资料-安規設計訓練教材.zip

参考资料-安規設計訓練教材.zip

节日小游戏活动快速落地与高效转化技巧

比如,把平时验证过的消消乐、大转盘、接红包等经典玩法作为底子,只需要针对特定的节日(像春节、中秋)或者门店庆典,快速替换一套应景的UI素材和文案,再植入专属的节日福利。这种“旧瓶装新酒”的方式,能把开发周期压缩到极致,确保活动能踩着流量的爆发点准时上线。特别是对于实体门店,游戏通关后的奖励最好能直接引导到线下核销,比如“满100减20”的优惠券,这样能把线上的流量精准地拽进店里,形成实实在在的成交。这种基于熟人关系的推荐,比硬广有效得多,能迅速在朋友圈和社群里铺开,实现低成本的流量获取。

Hxzyxkf2016的博客 183

Claude Code做Unity项目移植(三): 使用SKILL进行自动化Git提交

本文介绍基于ClaudeCodeSkill的Unity自动化Git提交助手——unity-git-commit,通过四大模块实现提交前的智能检查与安全修复:1)校验Git仓库状态;2)验证Unity项目文件(如排除Library/Temp,确保.meta文件完整);3)依据可配置的C#命名规范自动识别并安全修复命名问题(避免序列化、反射等高危场景误改);4)生成精准提交注释,但强制人工确认。全程仅本地commit,不自动推送或破坏性操作,保障安全。核心思想为“机械化工作交AI,关键决策留人工”,显著提升提交

Aman1984的博客 643

Windows远程桌面实现之二十:实现 moonlight 游戏串流协议之(一)

本文介绍在xdisp_virt中集成Moonlight游戏串流协议的实现过程。基于开源项目Sunshine逆向的GameStream协议,作者从零研究并自研实现Moonlight服务端网络通信部分,涵盖mDNS设备发现、nvhttp/nvhttps加密通信、nvrtsp协议交互及三类UDP数据通道(视频、音频、控制)。重点解决多客户端并发问题,采用串行处理机制确保连接一致性。通过自定义证书验证与密钥管理,完成配对与安全通信,最终实现低延迟、高性能的游戏串流体验,显著优于WebRTC浏览器方案。

fanxiushu的专栏 166

二进制木马免杀-游戏嵌套与图标替换

二进制木马免杀-游戏嵌套与图标替换

2503_94637398的博客 236

Unity UGUI布局组件(LayoutGroup、ContentSizeFitter、LayoutElement)详解

UGUI 自动布局是一套的 C# 排版系统,和 Transform 原生锚点完全隔离;整套布局;最终输出只有对 RectTransform 的sizeDelta的赋值。

m0_63330263的博客 263

mark 黑塞《玻璃球游戏》

【最近在读黑塞的《玻璃球游戏》-“ai预言“ - 优快云 App】

2502_94306440的博客 192

Cocos Creator3.8.8 + Xcode27.2 编译运行失败

Cocos Creator3.8构建IOS工程后,使用最新的Xcode27.2版本进行真机调试,遇到C++标准库冲突,如is_floating_point、is_arithmetic和is_signed失败,以及webp对齐失败等问题。

HYNN12的博客 376

给 AI 一台贴图工厂:TexGen 程序化贴图引擎与 MCP 架构实践

但它很快就撞墙——一张贴图往往是多层叠加的:底色 + 噪波 + 砖缝 + 暗角 + 高光。所以 TexGen 的核心抽象是图层栈 + JSON 指令表codeTgSpec├── 几何: shape(8 种) + center / size / radius / rotation / cornerRadius├── 绘制: fill(7 种) + color / edgeColor / 渐变 + pattern + warp└── 合成: blend(11 种) + opacity / blur。

邹杭特的博客 369

【Unity基础】Unity输入与Time.deltaTime的使用原则

本文从 mousePositionDelta 与 GetAxis 出发,分析了Time.deltaTime的使用原则

Tealc 363

(开源)游戏攻略分享系统实战指南 基于 Java + SpringBoot + uni-app + Vue + MySQL

这是一个基于 Java + SpringBoot + uni-app + Vue + MySQL 构建的完整游戏攻略分享系统,功能持续优化中...游戏攻略管理 游戏分类管理 旅游资讯管理 用户管理 管理员管理

小小码农身兼魔法师职位!除你武器~ 308
上一篇: 超级玛丽制作揭秘6时钟控制 类MYCLOCK
下一篇: 超级玛丽制作揭秘8跟踪打印 类FILEREPORT
programking
博客等级 码龄23年 450粉丝 140原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值