超级玛丽制作揭秘9精灵结构struct ROLE

超级玛丽C++编程揭秘源码+文档.zip 超级马里奥源码揭秘,先说一下代码风格,大家都说看不懂,这就对了。整套代码约有3000行,并不都是针对这个游戏写的。我想把代码写成一个容易扩展、容易维护、功能全面的“框架”,需要什么功能,就从这个框架中取出相应功能,如果是一个新的功能,比如新的图像显示、新的运动控制,我也能方便地实现。所以,这个游戏的代码,是在前几个游戏的基础上扩充起来的。部分函数,部分变量在这款游戏中,根本不用,但要保留,要为下一款游戏作准备。只要理解了各个类,就理解了整个框架。 立即下载

两个月过去了,还有人关注超级玛丽的制作。正如郭老师所说,我很欣慰。我的代码中,注释很少。有的网友提醒我,没有注释的情况下,时间长了,自己也看不懂了。我认为代码的评价标准是:功能正确,扩展方便,结构清晰。为了感谢大家支持,我继续讲代码。现在我是公务员,工作很忙,讲解要慢一些。

今天开始讲逻辑层:struct ROLE

这个结构用来存储两种精灵:敌人(各种小怪)和子弹(攻击方式)。敌人包括两种蘑菇兵和两种火圈。子弹包括火球和旋风。游戏中,精灵的结构很简单:
struct ROLE
{
 int x;//横坐标
 int y;//纵坐标
 int w;//图片宽度
 int h;//图片高度
 int id;//精灵id
 int iframe;//图片当前帧
 int iframemax;//图片最大帧数

 //移动部分
 int xleft;//水平运动的左界限 
 int xright;//水平运动的右界限
 int movex;//水平运动的速度

 //人物属性
 int health;//精灵的生命值

 int show; //精灵是否显示
};

游戏中的子弹处理非常简单,包括存储、生成、销毁。
子弹的存储:所有的子弹存储在一个数组中,如下:
 struct ROLE FireArray[MAX_MAP_OBJECT];

其实,所有的动态元素都有从生成到销毁的过程。看一下子弹是怎样产生的。

首先,玩家按下z键:发出子弹,调用函数:

int GAMEMAP::KeyProc(int iKey)

  case KEY_Z: //FIRE
   if(iBeginFire)
    break;
   iTimeFire=0;
   iBeginFire=1;  

break;

这段代码的意思是:如果正在发子弹,代码结束。否则,设置iBeginFire为1,表示开始发子弹。

子弹是在哪里发出的呢?

思路:用一个函数不停地检测iBeginFire,如果它为1,则生成一个子弹。函数如下:

int GAMEMAP::CheckAni(int itimeclip)

发子弹的部分:

 //发子弹
 if(iBeginFire)
 {

    //发子弹的时间到了(连续两个子弹要间隔一定时间)
  if(0 == iTimeFire )
  {

    //设置子弹属性:  可见, 动画起始帧:第0帧
   FireArray[iFireNum].show=1;
   FireArray[iFireNum].iframe = 0;

   //子弹方向

//如果人物朝右
   if(0==rmain.idirec)
   {

//子弹向右
    FireArray[iFireNum].movex=1;
   }
   else
   {

//子弹向左
    FireArray[iFireNum].movex=-1;
   }

//区分攻击种类: 子弹,旋风

   switch(iAttack)
   {

//普通攻击: 子弹
   case ATTACK_NORMAL:

//精灵ID: 子弹
    FireArray[iFireNum].id=ID_ANI_FIRE; 

//设置子弹坐标
    FireArray[iFireNum].x=rmain.xpos;
    FireArray[iFireNum].y=rmain.ypos;

//设置子弹宽高
    FireArray[iFireNum].w=FIREW;
    FireArray[iFireNum].h=FIREH;

//设置子弹速度: 方向向量乘以移动速度
    FireArray[iFireNum].movex*=FIRE_SPEED;
    break; 
最后,移动数组的游标iFireNum.这个名字没起好, 应该写成cursor.游标表示当前往数组中存储元素的位置.

//移动数组游标
   iFireNum=(iFireNum+1)%MAX_MAP_OBJECT;

至此, 游戏中已经生成了一个子弹. 由图像层,通过子弹的id,坐标在屏幕上绘制出来.

子弹已经显示在屏幕上, 接下来, 就是让它移动, 碰撞, 销毁. 且听下会分解.

超级玛丽c语言版本 超级玛丽经典版》移植与小霸王平台的单机版本,也是大家最初接触到的经典版,完美保留所有关卡以及隐藏要素,操作上 立即下载

相关推荐

超级玛丽完整素材

红白机的超级玛丽全部素材,包括所有图片(地图瓦片、人物、怪物、特效等,已全部对齐)、音乐、音效 红白机的超级玛丽全部素材,包括所有图片(地图瓦片、人物、怪物、特效等,已全部对齐)、音乐、音效

HDU 4417 超级马里奥 数据结构+利用树状数组进行快速统计+多维统计转换

HDU 4417 超级马里奥 Time Limit:1000MS    Memory Limit:32768KB    64bit IO Format:%I64d & %I64u SubmitStatusPracticeHDU 4417 Description 马里奥是一个举世闻名的管道工,他的跳跃能力让我们钦佩。在一条长度为n的道路上,在每个整数点i的位置都有一个高度为h

fans_ac的博客 1073

经典超级玛丽

原生javaScript编写的经典小游戏:超级玛丽 , 利用二维数组搭建的关卡, 可以自行搭建后续关卡

课程设计:基于Java的超级玛丽游戏的设计与实现(素材+源码+论文+学习视频)

目录项目展示:系统模块设计:窗体类初始化类背景类马里奥类障碍物类敌人类素材+源码+论文+学习视频)下载 项目展示: 本软件是针对超级玛丽小游戏的JAVA程序,进入游戏后首先按空格键开始,利用方向键来控制的马里奥的移动,同时检测马里奥与场景中的障碍物和敌人的碰撞,并判断马里奥的可移动性和马里奥的生命值。当马里奥通过最后一个场景后游戏结束。 系统模块设计: 窗体类 该类主要用于存放游戏的场景以及其他各类,并且实现KeyListener接口,用于从键盘的按键中读取信息。该类中的一些属性主要包括了用于存放所有

qq_45928272的博客 1万+

超级玛丽图片素材(第一关所有素材都有),新人练手用

算是比较全的图片资源,可以用来练手,怪物、boss、玛丽等的图片很全 算是比较全的图片资源,可以用来练手,怪物、boss、玛丽等的图片很全

超级玛丽源码,vs2010编写

找来的,写得很不错,想和大家一起分享,互相学习,互相激励。。

7-7 超级玛丽 (10 分)

假定有n个城堡,编号为1至n,有的城堡之间有道路直接相连,有的城堡之间没有道路直接相连。马里奥现在准备从一个城堡出发前往另一个城堡,它有一个魔法棒,可以瞬时通过一条道路,即以0时间通过这条道路,但魔法棒最多只能用一次。马里奥想以最短的时间到达目的地,请编写程序为马里奥选定一条路线以及在什么地方使用魔法棒。假定所有道路为双向,保证从起点肯定能到达目的地。 输入格式: 输入第一行为4个整数n、s、t、m,分别表示城堡数(编号为1至n,n不超过10000),马里奥所在的起点s和想去的终点t,城堡间的道路数目。接

xxxibgdrgn博客 3028

c语言版超级玛丽(经典游戏)

超级玛丽,c语言超级玛丽,超级玛丽,游戏c语言超级玛丽

超级玛丽分析

程序分析 面向对象的思路 马里奥对象 敌人对象 障碍物对象 场景对象 窗体对象 图片急背景音乐 类 属性为静态static 窗体程序开发 常量类的开发 场景的开发 1.场景的属性 2.背景图片 3.int类型保存场景所在位置 顺序 4.boolen类型标识当前场景是不是为最后一个 5.每个场景包含多个障碍物 敌人 6.在每个场景中定义两个集合对象 保存被消灭的敌人和障碍物 障碍物的开发 所包含的属性 1坐标(x,y) 2显示的图片 3类型 4初始类型 方法 1重置的方法 2改变显示障碍物的图片 根据障碍物

weixin_45603004的博客 713

14自由度汽车动力学模型

多体系统分解簧上质量刚体:包含车身主体,具有6个自由度(x/y/z平移 + 俯仰/侧倾/横摆旋转)四个簧下质量刚体:每个车轮独立建模,含垂直跳动(z向)和旋转(绕z轴)自由度总自由度:6(车身) + 4×2(车轮) = 14自由度。

chao189844的博客 1197

用PyTorch手把手搭建液态神经网络(LNN):从微分方程到无人机避障实战

本文详细介绍了如何使用PyTorch搭建液态神经网络(LNN),从微分方程基础到无人机避障实战应用。LNN通过动态时序建模和微分方程实现高效计算,特别适合多传感器数据融合场景。文章包含完整的代码实现、训练技巧及性能优化方案,帮助开发者快速掌握这一前沿技术。

uber9的博客 439

超级玛丽 源码解析

首先,项目工程来自于9秒社团,项目下载地址是:http://www.9miao.com/news/6/65041 要说明的一点是,以上地址下来之后需要修改一个入口,而且引擎最好用coco2dx 2.2这样一来,在修改了这个入口之后,代码无需再任何修改就可以直接运行了。如下: bool AppDelegate::applicationDidFinishLaunching() {

u011922261的专栏 8606

【python3.7】解决报错 error: Microsoft Visual C++ 14.0 or greater is required. Get it with “Microsoft C++

解决pip安装py7zr遇到的报错问题。

水w的博客 3941

超级玛丽游戏(黑科技)

题目描述 超级玛丽是一个非常经典的游戏。请你用字符画的形式输出超级玛丽中的一个场景。 ******** ************ ####....#. #..###.....##.... ###.......###### ### ...

华天才的博客 2059

Realtek RTD1319D芯片解析:H.266与AV1双解码的机顶盒SoC

视频编解码技术是数字媒体传输的核心,H.266/VVC作为新一代标准,相比H.265提升50%压缩效率,显著降低带宽需求。其实现原理依赖于专用硬件解码器和并行处理架构,在超高清视频传输领域具有重要价值。Realtek RTD1319D作为首款商用H.266处理器,采用异构计算设计,集成四核ARM CPU和独立视频处理单元,同时支持AV1解码,兼顾市场兼容性。该SoC特别适合4K机顶盒、数字标牌等应用场景,其HDMI 2.1a接口和DVB解调器为超高清内容传输提供完整解决方案。开发时需注意散热设计和内存配置优

weixin_42591413的博客 671

DDR5中的On-Die Termination(ODT)详解:电阻值支持及其背后的秘密

DDR5支持多档ODT电阻值,范围从40Ω到480Ω,均基于240Ω标准参考电阻RZQR_{ZQ}RZQ​。不同电阻档位对应不同的信号负载和功耗需求。校准电压点关键,常用0.8×VDD进行精准调校。CA信号间ODT匹配必须严格控制,保证命令总线稳定。选择合适的ODT值是高速内存设计中不可忽视的细节。

weixin_43199439的博客 2097

超级玛丽

L2-2 超级玛丽 假定有n个城堡,编号为1至n,有的城堡之间有道路直接相连,有的城堡之间没有道路直接相连。马里奥现在准备从一个城堡出发前往另一个城堡,它有一个魔法棒,可以瞬时通过一条道路,即以0时间通过这条道路,但魔法棒最多只能用一次。马里奥想以最短的时间到达目的地,请编写程序为马里奥选定一条路线以及在什么地方使用魔法棒。假定所有道路为双向,保证从起点肯定能到达目的地。 输入格式: 输入第一行为4个整数n、s、t、m,分别表示城堡数(编号为1至n,n不超过10000),马里奥所在的起点s和想去的终点t,

m0_46252199的博客 783

3D打印机控制系统设计:基于MATLAB的3D打印机运动学建模、轨迹规划和控制

控制实现:在控制实现中,需要将轨迹规划的结果转化为实际的控制指令,控制3D打印机按照规划的轨迹进行运动。3D打印机的运动学建模:3D打印机的运动学建模是指将3D打印机的机械结构、传动系统和运动控制部件等抽象成数学模型,以便于进行控制系统的设计和分析。轨迹规划:轨迹规划是指根据3D模型的几何形状和打印机的运动学模型,计算出打印机需要执行的运动轨迹,以便于实现所需的打印效果。控制实现:控制实现是指将轨迹规划的结果转化为控制指令,控制3D打印机按照规划的轨迹进行运动。

走向CTO的路上... 2473

cocos2d-x游戏开发系列教程-超级玛丽02-代码结构

代码下载链接http://download.youkuaiyun.com/detail/yincheng01/6864893解压密码:c.itcast.cn前景回顾上一篇博文提到超级马里奥的游戏效果,大家是否已经搭建好环境,让马里奥运行起来呢?代码结构本文主要的目标是让大家粗略了解马里奥的代码结构,以方便后续的学习。appDelegate:应用程序代理CMGameMap:游戏地图类,负责游戏地图的加载和整...

weixin_30895603的博客 259

Android插件化和组件化面试题及参考答案

如何使用 Gradle 来管理 Android 项目中的模块依赖? Gradle 是一个强大的构建工具,在 Android 项目中管理模块依赖主要通过以下方式。 首先,在项目的根目录下的 build.gradle 文件中,需要配置仓库。一般会添加如 Google 的 Maven 仓库和 JCenter 等,例如在 repositories 部分添加: repositories { google() jcenter() } 对于模块依赖,在每个模块(例如 app

大模型大数据攻城狮的专栏 1185

Open3D DBSCAN聚类

DBSCAN算法做为一种有名的密度聚类算法,它是通过邻域参数(Distance,MinPts)来刻画样本分布的紧密程度。而在真正开始之前,首先要理解下面这几个概念:更为具体的内容也可参考这篇文章点云DBSCAN聚类算法。...

dayuhaitang1的博客 1795

超级玛丽详细设计

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

weixin_30435261的博客 1481

UML用户指南.(第2版).英文原版

 本书是UML方面最权威的一本著作,三位作者是面向对象方法最早的倡导者,是UML的创始人。本版涵盖了UML 2.0。书中为具体的UML特征提供了参考,描述了一个使用UML进行开发的过程,旨在让读者掌握UML的术语、规则和语言特点,以及如何有效地使用这种语言,知道如何应用UML去解决一些常见的建模问题。本书由7个部分组成,而且每章都描述了一个特定UML特征的具体用法,其中大部分按入门、术语和概念、常见建模技术、提示和技巧的方式组织。本书还为高级开发人员提供了在高级建模问题中应用UML的一条非常实用的线索。

【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

铁路轨道螺栓数据集(47张)

为铁道病害检测研究方向的学者提供尽可能的数据集资源,本数据集包括47张铁道固定螺栓的图像,如需更多相关数据集,请评论,作者会第一时间放出供学者研究。

GBT 42706.4 电子元器件 半导体器件长期贮存 第4部分:贮存.rar

GBT 42706.4 电子元器件 半导体器件长期贮存 第4部分:贮存.rar

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

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

2301_79028807的博客 892

最新的mspm0-sdk资源,版本2.10.00.04

官网最新的mspm0-sdk资源,其中包含对应mspm0g3507例程和数据手册

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

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

Hxzyxkf2016的博客 183
上一篇: 星际争霸2
下一篇: 超级玛丽制作揭秘10子弹的显示和帧的刷新
programking
博客等级 码龄23年 450粉丝 140原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值