超级玛丽制作揭秘3 游戏背景类MYBKSKY

基于WIN32 API实现的超级玛丽游戏 游戏中用到的类结构介绍 图像层 图像基类MYBITMAP 游戏背景MYBKSKY—>MYBITMAP 游戏图片MYANIOBJ—>MYBITMAP 魔法攻击MYANIMAGIC—>MYBITMAP 逻辑层 游戏逻辑GAMEMAP 时钟处理MYCLOCK 字体处理MYFONT 跟踪打印FILEREPORT... 阅读详情

类说明:这是一个专门处理游戏背景的类。在横版游戏或射击游戏中,都有一个背景画面,如山、天空、云、星空等等。这些图片一般只有1到2倍屏幕宽度,然后像一个卷轴一样循环移动,连成一片,感觉上像一张很长的图片。这个类就是专门处理这个背景的。在超级玛丽增强版中,主要关卡是3关,各有一张背景图片;从水管进去,有两关,都用一张全黑图片。共四张图。这四张图大小一致,纵向排列在一个位图文件中。MYBKSKY这个类,派生于MYBITMAP。由于背景图片只需要完成循环移动的效果,只需要实现一个功能,而无需关心其他任何问题(例如句柄、dc)。编码起来很简单,再次反映出面向对象的好处。

技术原理:
怎样让一张图片像卷轴一样不停移动呢?很简单,假设有一条垂直分割线,把图片分成左右两部分。先显示右边部分,再把左边部分接到图片末尾。不停移动向右移动分割线,图片就会循环地显示。

成员函数功能列表:
class MYBKSKY:public MYBITMAP
{
public:
 MYBKSKY();
 ~MYBKSKY();

 //show
 //功能 显示一个背景.
 //入参 无
 void DrawRoll(); //循环补空
 //功能 显示一个背景,并缩放图片
 //入参 横纵方向缩放比例
 void DrawRollStretch(int x,int y);
 //功能 指定显示某一个背景,并缩放图片,游戏中用的就是这个函数
 //入参 横纵方向缩放比例 背景图片ID(纵向第几个)
 void DrawRollStretch(int x,int y,int id);
 //功能 设置图片位置
 //入参 新的横纵坐标
 void MoveTo(int x,int y);
 //功能 循环移动分割线
 //入参 分割线移动的距离
 void MoveRoll(int x);

 //data
 //分割线横坐标
 int xseparate;
};

函数具体实现都很简单,例如:
void MYBKSKY::DrawRollStretch(int x,int y, int id)
{
 //选入句柄
 SelectObject(hdcsrc,hBm);
 
 //将分割线右边部分显示在当前位置
 StretchBlt(hdcdest,
  xpos,ypos, //当前位置
  (width-xseparate)*x,height*y,  //缩放比例
  hdcsrc,
  xseparate,id*height, //右边部分的坐标
  width-xseparate,height, //右边部分的宽高
  SRCCOPY);
 
 //将分割线左边部分接在图片末尾
 StretchBlt(hdcdest,xpos+(width-xseparate)*x,ypos,
  xseparate*x,height*y,
  hdcsrc,0,id*height,
  xseparate,height,
  SRCCOPY); 
}

使用举例:
定义 MYBKSKY bmSky;
初始化
mario01/mario01.cpp(234): bmSky.Init(hInstance,IDB_BITMAP_MAP_SKY,1,4);
mario01/mario01.cpp(235): bmSky.SetDevice(hscreen,hmem,GAMEW*32*MAX_PAGE,GAMEH*32);
mario01/mario01.cpp(236): bmSky.SetPos(BM_USER,0,0);
游戏过程中显示
mario01/mario01.cpp(366):    bmSky.DrawRollStretch(2,2,gamemap.mapinfo.iBackBmp);
每隔一定时间,移动分割线
mario01/mario01.cpp(428):     bmSky.MoveRoll(SKY_SPEED);//云彩移动

以下两处与玩家角色有关:
当玩家切换到一张新地图时,刷新背景图片的坐标
mario01/gamemap.cpp(314):  bmSky.SetPos(BM_USER,viewx,0);
当玩家向右移动时,刷新背景图片的坐标
mario01/gamemap.cpp(473): bmSky.SetPos(BM_USER,viewx,0);

至此,游戏背景图片的功能就做完了。

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

解读经典游戏《超级玛丽》编程原理与源码分析 在游戏开发的世界中,《超级玛丽》不仅仅是一款游戏,它代表了一个时代的创新和精神。1985年,任天堂发行了这款游戏,它通过简单的操作、丰富的关卡设计以及令人耳目一新的图形和音效,开启了家用游戏机的黄金时代。《超级玛丽》是游戏编程领域内的一块里程碑,对后来的游戏制作产生了深远的影响。在游戏开发领域,游戏引擎提供了一套完整的开发框架,它包含了渲染、物理、音频、输入处理等基本功能。游戏引擎通常允许开发者使用其内置功能,也可以根据需要进行自定义扩展。 阅读详情

相关推荐

超级玛丽游戏动作素材切图(包含高清和FC像素原版)

超级玛丽游戏第一关动作背景切图,包含高清和FC像素原版,其中FC像素原版是贴图集,就是多个动作在一张图中的。高清版是单独的切图,都可以用于Cocos2D和SpriteKit,自己学SK找了很久都没有找到合适的,这两个是最合适的切图了。推荐高清版效果不错。

超级玛丽-游戏里的设计模式

策略模式策略模式模式定义超级玛丽:策略模式实现技能切换 策略模式 分析项目变化与不变部分,提取变化部分,抽象成接口+实现;(抽象是共性,接口是特性)。 模式定义 策略模式定义了算法簇,分别封装起来,让它们之间可以互相替换,此模式的变化独立于算法的使用者: c++里的sort排序函数,就是一个典型的策略模式,它排序的时候,需要我们传给它一个排序规则。 超级玛丽: 再比如超级玛丽这个游戏,在这里,小管道工就是一个封装类: 管道工拥有的行为: 1. 人物的描述 2. 移动 3. 攻击 因为游戏里面,这

qq_19864679的博客 793

python实现超级玛丽游戏

主要为大家详细介绍了python实现超级玛丽游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

基于JAVA的超级玛丽设计与实现

本课题在大学生自主创业的大背景下,利用Java语言重新设计开发了“超级玛丽”游戏,基本实现了旧版游戏的所有功能。目前该版本游戏已经发布在学校的公共论坛上,已被许多同学下载并试玩,反响较好,但是仍暴露了一些问题,如人物形象设计过于单调等,这些问题的优化将会在下一个版本中得到实现。经典游戏“超级玛丽”因其本身所具有的娱乐性与教育意义而被人们广泛接受,在广大的青少年玩家中享有极高的知名度。本文在对整个游戏的各种需求及可行性分析的基础上,详细论述了游戏的设计过程与实现方案。4.7.2 Mario图类 11。

QQ21503882的博客 592

S7-1200PLC 与温控仪表Modbus RTU通信

硬件:cpu 1214C 目的:通过Modbus RTU协议,实现对温控仪表的控制 软件:Portal V14SP1

weixin_43922025的博客 3万+

国产PHY芯片YT8512H替代LAN8742A的实战指南(STM32F407平台)

本文详细介绍了在STM32F407平台上,使用国产PHY芯片YT8512H替代LAN8742A的完整实战过程。文章深入剖析了硬件设计中的关键信号连接差异(如CRS_DV与RXDV复用)、时钟布线要点,并提供了软件驱动修改、PHY配置及调试排错的系统指南,旨在帮助工程师高效完成国产化替代,规避常见陷阱。

defi6farmer的博客 854

C++ 超级玛丽制作揭秘(包含完整源文件与文档)

首先,我说说对C++的最直观的感受吧!熟悉了.net 智能提示,开始一开始发现C++根本没有提示了。后来google了一下,下载了一个visual assist 这个插件,比vs自动提示强多了。 然后,就是习惯了在.net中,把所有的声明和方法实现写在同一文件中。可是C++不是这么回事。 他一个声明在头文件中,实现 在源文件中,说实在话,一开始并怎么习惯。后来渐渐就习惯了。然后,写C++的文件就是...

6625

su03t语音模块烧录识别不出问题解决方法

su03t语音sdk烧录无法识别问题

weixin_49387645的博客 6389

超级玛丽

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

lipu13314601878的专栏 3087

基于python获取网易云热门歌单及封面

先看一下图片背后的代码 非常好,里面歌单名字,id,以及封面图片都有了.在复制url的时候注意把/#删掉,要不然爬不了. import requests from lxml import etree url='https://music.163.com/discover/playlist' head={ 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Ch

ziyuan12345678的博客 536

小秋SLAM入门实战ubuntu所有文章汇总

ubuntu 终端如何停止快速打印的输出以及恢复命令 ubuntu 终端如何快速打开当前路径下的图形化窗口界面? killall -9用途用法 ps -xu | grep这个命令的用途 linux 下 top命令显示的是内存是堆内存吗? zip分割和合并 关闭除当前 GNOME 终端窗口以外的所有其他 GNOME 终端窗口 如何在安装系统后设置短密码 【如何使用getrusage获取消耗的CPU时间和进程使用的最大物理内存】 【webots安装使用教程】 Linux系统下查看当前运行的进程和线程的几种方法

小秋 AI SLAM 入门实战教程 1404

超级玛丽制作揭秘4图片显示 类MYANIOBJ

 类说明:这个类负责游戏中的图片显示。菜单背景、通关和游戏结束的提示图片,由MYBITMAP处理(大小一致的静态图片)。游戏背景由MYBKSKY处理。其余图片,也就是游戏过程中的所有图片,都是MYANIOBJ处理。技术原理:游戏中的图片大小不一致,具体在超级玛丽中,可以分成两类:矩形图片和不规则图片。在位图文件中,都是纵向排列各个图片,横向排列各帧。用两个数组存储各个图片的宽和高。为了方便显示

programking的快乐生活 1830

Windows密码忘了怎么办?一分钟看懂Windows密码底层机制:无需重装系统也能无痕找回登录密码

忘记Windows开机密码,不一定非得重装系统!本文手把手教你通过提取NTLM Hash值实现“无痕找回密码”,无需PE、无需清除密码,对系统零修改 🛡️ 搭配mimikatz与在线解密平台,小白也能快速上手,了解Windows密码底层机制 🔐

XiaoqiangClub的博客 123

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

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

qq_38474647的博客 443

解决RabbitMq登录时报出Not management user(Login failed)错误以及rabbitmqctl(RabbitMq)新增用户和用户角色权限

解决RabbitMq登录时报出Not management user(Login failed)错误以及rabbitmqctl(RabbitMq)查看用户权限、新增用户和用户角色权限。

念兮为美 7479

OpenWRT使用4G/5G无线网卡模块上网

将4G/5G开发板插入设备,终端输入lsusb或lspci,看设备是否识别到4G/5G模块。

1万+

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

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

weixin_30732825的博客 100

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

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

游戏中用到的类结构介绍图像层图像基类MYBITMAP游戏背景MYBKSKY—>MYBITMAP游戏图片MYANIOBJ—>MYBITMAP魔法攻击MYANIMAGIC—>MYBITMAP逻辑层游戏逻辑GAMEMAP时钟处理MYCLOCK字体处理MYFONT跟踪打印FILEREPORT玩家控制MYROLE—>MYBITMAP结构和表精灵结构ROLE物品结构MapObject地...

weixin_39583162的博客 106

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

游戏编程入门(21):使用滚动背景更改远景

假设我们为游戏玩家提供一个很大的背景地图,这个背景地图是不可能在显示器上完全显示出来的,它只显示一部分。我们不是让角色在一个静态背景上到处移动,而通常是在滚动背景,并且同时保持主角在屏幕上居中。本文扩充了游戏引擎,使其支持滚动背景。 本文内容包括: 哪些游戏类型适合使用滚动背景 滚动背景的工作原理 如何向游戏引擎添加对滚动背景的支持 如何使用滚动背景开发冒险模拟游戏 什么是滚动背景

学愈进而愈惘 4041

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

超级玛丽详细设计

课题名称:超级玛丽小游戏开发 一、课程设计的目的: 1、通过本次课程设计,加深对数据结构这么课程的中基础理论的理解以及能够对一些常用数据结构的熟练应用,理论与实践相结合,达到学以致用的目的。 2、通过小组形式一起开发,从中培养团结、合作、沟通、理解的精神。 二、选择的课题:超级玛丽小游戏开发 三、应用...

weixin_30435261的博客 1481

Python实现超级玛丽游戏系列教程04背景滚动及摄像机(Camera)原理

配套视频教程 配套视频教程 项目代码 项目代码 背景滚动 摄像机原理

douyh的专栏 401
上一篇: 新的工作开始
下一篇: 超级玛丽制作揭秘4图片显示 类MYANIOBJ
programking
博客等级 码龄23年 450粉丝 140原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值