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

java实现超级玛丽游戏(附完整源码) 阅读详情

 类说明:这个类负责游戏中的图片显示。菜单背景、通关和游戏结束的提示图片,由MYBITMAP处理(大小一致的静态图片)。游戏背景由MYBKSKY处理。其余图片,也就是游戏过程中的所有图片,都是MYANIOBJ处理。

技术原理:游戏中的图片大小不一致,具体在超级玛丽中,可以分成两类:矩形图片和不规则图片。在位图文件中,都是纵向排列各个图片,横向排列各帧。用两个数组存储各个图片的宽和高。为了方便显示某一个图片,用一个数组存储各个图片的纵坐标(即位图文件中左上角的位置)。使用时,由逻辑层指定“哪个图片”的“哪一帧”,显示在“什么位置”。这样图片的显示功能就实现了。

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

 //init list
 //功能 初始化宽度数组 高度数组 纵坐标数组 是否有黑白图
 //入参 宽度数组地址 高度数组地址 图片数量 是否有黑白图(0 没有, 1 有)
 //(图片纵坐标信息由函数计算得出)
 void InitAniList(int *pw,int *ph,int inum,int ismask);

 //功能 初始化一些特殊的位图,例如各图片大小一致,或者有其他规律
 //入参 初始化方式 参数1 参数2
 //(留作以后扩展, 目的是为了省去宽高数组的麻烦)
 void InitAniList(int style,int a,int b);

 //show
 //功能 显示图片(不规则图片)
 //入参 横纵坐标(要显示的位置) 图片id(纵向第几个), 图片帧(横向第几个)
 void DrawItem(int x,int y,int id,int iframe);
 //功能 显示图片(矩形图片)
 //入参 横纵坐标(要显示的位置) 图片id(纵向第几个), 图片帧(横向第几个)
 void DrawItemNoMask(int x,int y,int id,int iframe);
 //功能 指定宽度, 显示图片的一部分(矩形图片)
 //入参 横纵坐标(要显示的位置) 图片id(纵向第几个), 显示宽度 图片帧(横向第几个)
 void DrawItemNoMaskWidth(int x,int y,int id,int w,int iframe);
 //功能 播放一个动画 即循环显示各帧
 //入参 横纵坐标(要显示的位置) 图片id(纵向第几个)
 void PlayItem(int x,int y,int id);

 //宽度数组 最多支持20个图片
 int wlist[20];
 //高度数组 最多支持20个图片
 int hlist[20];
 //纵坐标数组 最多支持20个图片
 int ylist[20];

 //动画播放时的当前帧
 int iframeplay;
};

函数实现上也很简单。构造函数中,所有成员数据清零;初始化时,将各图片的高度累加,即得到各图片的纵坐标。显示图片的方法如前所述。
使用举例:
游戏图片分成三类:地图物品、地图背景物体、精灵(即所有不规则图片)
MYANIOBJ bmMap;
MYANIOBJ bmMapBkObj;
MYANIOBJ bmAniObj;
初始化宽高信息
程序中定义一个二维数组,例如:
int mapani[2][10]={
{32,32,64,32,32,52,64,32,64,32},
{32,32,64,32,32,25,64,32,64,32},
};
第一维mapani[0]存储10个图片的宽度,第二维mapani[1]存储10个图片的高度,初始化时,将mapani[0],mapani[1]传给初始化函数即可。

1. 地图物品的显示:
定义
mario01/mario01.cpp(82):MYANIOBJ bmMap;
初始化
这一步加载位图
mario01/mario01.cpp(238): bmMap.Init(hInstance,IDB_BITMAP_MAP,1,1);
这一步初始化DC
mario01/mario01.cpp(239): bmMap.SetDevice(hscreen,hmem,GAMEW*32*MAX_PAGE,GAMEH*32);
这一步设置宽高信息, 图片为矩形
mario01/mario01.cpp(240): bmMap.InitAniList(mapsolid[0],mapsolid[1], sizeof(mapsolid[0])/sizeof(int),0);
对象作为参数传给逻辑层, 显示地图物品
mario01/mario01.cpp(368):    gamemap.Show(bmMap);
2. 血条的显示:
打怪时,屏幕上方要显示血条。由于同样是矩形图片,也一并放在了地图物品的位图中。
变量声明
mario01/gamemap.cpp(11):extern MYANIOBJ bmMap;
显示血条背景,指定图片宽度:最大生命值*单位生命值对应血条宽度
mario01/gamemap.cpp(522):  bmMap.DrawItemNoMaskWidth(xstart-1, ATTACK_TO_Y-1,ID_MAP_HEALTH_BK,
显示怪物血条,指定图片宽度:当前生命值*单位生命值对应血条宽度
mario01/gamemap.cpp(525):  bmMap.DrawItemNoMaskWidth(xstart, ATTACK_TO_Y,ID_MAP_HEALTH,

3. 地图背景物体的显示
背景物体包括草、河流、树木、目的地标志。这些物体都不参与任何逻辑处理,只需要显示到屏幕上。图片放在一个位图文件中,都是不规则形状。
定义
mario01.cpp(83):MYANIOBJ bmMapBkObj;
初始化并加载位图
mario01/mario01.cpp(242): bmMapBkObj.Init(hInstance,IDB_BITMAP_MAP_BK,1,1);
设置dc
mario01/mario01.cpp(243): bmMapBkObj.SetDevice(hscreen,hmem,GAMEW*32*MAX_PAGE,GAMEH*32);
设置各图片宽高信息
mario01/mario01.cpp(244): bmMapBkObj.InitAniList(mapanibk[0],mapanibk[1],sizeof(mapanibk[0])/sizeof(int),1);
对象作为参数传给逻辑层, 显示地图背景物体
mario01/mario01.cpp(367):    gamemap.ShowBkObj(bmMapBkObj);
4. 精灵的显示
精灵包括:蘑菇(玩家,敌人1,敌人2),子弹、旋风、爆炸效果、金币、撞击金币后的得分、攻击武器(那个从魂斗罗里抠来的东东)、火圈1、火圈2、箭头(用于开始菜单选择)。
定义
mario01.cpp(84):MYANIOBJ bmAniObj;
初始化加载位图
mario01/mario01.cpp(246): bmAniObj.Init(hInstance,IDB_BITMAP_ANI,1,1);
设置dc
mario01/mario01.cpp(247): bmAniObj.SetDevice(hscreen,hmem,GAMEW*32*MAX_PAGE,GAMEH*32);
设置宽高信息
mario01/mario01.cpp(248): bmAniObj.InitAniList(mapani[0],mapani[1],sizeof(mapani[0])/sizeof(int),1);
菜单显示(即菜单文字左边的箭头)
mario01/mario01.cpp(341):    gamemap.ShowMenu(bmAniObj);
对象作为参数传给逻辑层, 显示各个精灵
mario01/mario01.cpp(369):    gamemap.ShowAniObj(bmAniObj);

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

经典游戏超级玛丽Android再现 经典游戏超级玛丽Android再现,回忆童年时光,感慨万千,游戏一变再变,从游戏机到黑白电脑到彩色电脑,到功能机,再到智能机,同学们一起来回忆吧!!!!! 立即下载

相关推荐

Java小游戏:超级玛丽源代码.rar

Java超级玛丽源代码,带背景音效,学习java编写游戏时可好好参考下,如果要运行看效果,需要在JAVA虚拟机情况下,运行编译生成的Mario.jar文件。

马里奥游戏 java

游戏代码分享

m0_53602804的博客 3688

Java超级玛丽游戏源码.zip

超级玛丽”游戏是一个经典的游戏,它因操作简单、娱乐性强而广受欢迎。本游戏中通过总结和分析JAVA游戏的开发流程和代码功能的设计,采用面向对象的设计模式,对游戏中的所有物体赋予对象的概念和属性。开发了一款超级玛丽游戏,该游戏主要分为窗体类、场景类、马里奥类、敌人类、障碍物类等几个类。在主程序运行的线程中,用户控制的超级玛丽随方向键的操作而移动,并且可以实现马里奥游戏中的一些基本功能,例如踩死敌人或者顶掉砖块。本游戏采用双缓存技术,解决了游戏过程中的闪屏问题。通过本游戏的开发,达到学习Java技术和熟悉软件开发流程的目的 本系统拥有的角色如下: (1)马里奥 (2)障碍物 (3)敌人 功能需求分析: 本系统主要是完成超级玛丽游戏的基本操作。本系统需要满足以下几点要求: (1) 在开始界面按空格键进入游戏。 (2) 利用方向键来控制马里奥的运动。 (3) 碰撞检测: A.马里奥在运动的过程中如果碰到障碍物则停止运动,在移动到悬崖上方是会掉下去,并失去一条生命。 B.对于有些敌人,如果马里奥跳到敌人头顶上,则敌人消失,否则马里奥失去一条生命。 (4)马里奥顶到金币会增加分数,当马里奥失去3条生命时游戏结束。

基于java的超级玛丽游戏系统设计与实现(项目报告+答辩PPT+源代码+部署视频)

近年来,Java作为一种新的编程语言,以其简单性、可移植性和平台无关性等优点,得到了广泛地应用。J2SE称为Java标准版或Java标准平台。J2SE提供了标准的SDK开发平台。利用该平台可以开发Java桌面应用程序和低端的服务器应用程序,也可以开发Java Applet程序。“超级玛丽”游戏是一个经典的游戏,它因操作简单、娱乐性强而广受欢迎。本游戏中通过总结和分析JAVA游戏的开发流程和代码功能的设计,采用面向对象的设计模式,对游戏中的所有物体赋予对象的概念和属性。开发了一款超级玛丽游戏,该游戏主要分为窗

woaimx_1314的博客 3384

Super Mario超级玛丽JAVA版

Super Mario超级玛丽JAVA版

JAVA 实现《超级玛丽》游戏-全部源码

# 主要设计 1、游戏背景的设计 2、地图的显示 3、台阶的显示 4、游戏物品的显示 5、超级玛丽的设计,左右移动能力、跳动能力 6、小怪的设计,包含出现的地点、杀伤功能、跳动能力 7、游戏的分数系统设计 8、地图变动功能 9、射击功能 10、游戏采用多线程技术 11、背景音乐设计 需要技术指导,写项目程序,等更多服务请私信联系博主

java超级玛丽代码_java版超级玛丽源代码

【实例简介】这是java版的超级玛丽,内有源代码。也有许多不足之处,拿来与大家分享一下。【实例截图】【核心代码】Mario`-- Mario|-- bin| |-- 1.gif| |-- 10.gif| |-- 2.gif| |-- 3.gif| |-- 4.gif| |-- 5.gif| |-- 6.gif| |-- 7.gif| |-- 8.gif| |...

weixin_42594427的博客 2789

【Cadence 17.4实战】----- 基于MySQL与ODBC的企业级CIS数据库配置全攻略

本文详细介绍了如何在Cadence 17.4中配置基于MySQL与ODBC的企业级CIS数据库,提升硬件设计团队的元器件管理效率。通过实战案例和避坑指南,帮助读者掌握数据库部署、ODBC驱动配置及CIS参数映射等关键技巧,实现设计数据的实时同步与高效管理。

weixin_30591551的博客 327

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

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

6625

【实战解析】SAP EWM与PP深度集成:从后台配置到前台物料流转的全链路设计

本文深入解析SAP EWM与PP深度集成的全链路设计,涵盖后台配置与前台物料流转的实战应用。通过两种集成模式(DPI与API)的选择策略、十二个关键后台配置步骤详解,以及PMR生成、PSA补货等前台演示,帮助企业实现生产计划与物料供应的高效协同,显著提升生产效率和库存周转率。

weixin_30723433的博客 421

【Lammps】MS将cif通过msi2lmp.exe转为data文件

在Materials Studio中打开cif文件,在Modules工具行选择Forcite>calculation>Energy中选用cvff力场,点击more,不要运行run,在more中取消勾选calculate automatically,点击calculate,然后叉掉后在file>export导出car文件,同步生成了mdf文件。对于MS中没有的立场,选择之后点calculate会报错,右键选择label,然后根据Forcite选择原子,会发现有力场的有标号,没有力场的MS没有对选择标号。

zhangguoliang624的博客 3673

超级玛丽制作揭秘1

两个版本的超级玛丽下载量已达到5000,谢谢大家支持。谁无法下载,请告诉我邮箱,我直接发。现在普遍反映两个问题,一没有帮助文档,二代码注释太少。今天起,我揭秘制作过程,保证讲解到每一行代码,每一个变量。代码我已经发布了,可见做这样一个游戏并不难。今天讲准备工作,也就是所需要的开发工具。代码编写调试:VC 6.0,美术工具:Windows自带的画图(开始-程序-附件-画图)。这是最简陋的开发工具

programking的快乐生活 2340

用AI科研绘图全新升级!借助谷歌新发布模型Nano Banana pro实测一键绘制机制图与技术路线图,直接告别文字乱码与低画质

之前有同仁反馈,用Nano Banana画科研插图的时候,要么文字部分容易乱码,要么抓不住关键内容,画出来的效果反复修改后,还是达不到理想的效果。终于在Gemini 3发布没几天,万众期待的大香蕉模型也成功升级到了Pro版本,官方名称叫“Gemini 3 Pro Image”,实际上也就是我们说的Nano Banana 2。这次的Nano Banana Pro模型,不仅可以直出4K高清图,还能自定义比例,推理能力和中文文字的稳定性也得到了提升。

智能AI让学术科研更容易 1887

超级玛丽制作揭秘17地图物品

 自从游戏机发明以来,地图是什么样的呢?打蜜蜂,吃豆,地图是一个矩形,玩家在这个矩形框内活动。后来,地图得到扩展,可以纵向移动,比如打飞机;可以横向移动,比如超级玛丽、魂斗罗等等横板过关游戏。再后来,横向纵向都可以移动,后来又有45度地图,3D技术后终于实现了高度拟真的虚拟世界。超级玛丽的地图可以看成是一个二维的格子。每个格子的大小是32x32像素。游戏窗口大小为12个格子高,16个格子宽。游戏地

programking的快乐生活 1710

DTI-ALPS 指标计算(附代码),评估脑类淋巴系统功能

DTI-ALPS 指标计算(附代码),评估脑类淋巴系统功能

xxx 1048

DMC-E 系列总线控制卡----雷赛板卡介绍(十七)

低的速度平稳地接近目标位置,降低运动部件对接触点的冲击。设置插补目标位置,插补方向,以确定插补动作。圆形区域限位,即运动仅在用户设定的圆形范围内进行,超出这个范围,运动会依据设定。首先,用户需要绑定两个轴进而确定该功能所处的坐标系。仅支持平面圆形限位,不支持空间圆形限位。径,可以确定该区域在坐标系中的位置。)运动开始前,用户应当将旋转轴调整到与插补曲线的起点位置相切的角度;可以配合椭圆插补或圆弧插补运动,实现跟随轴的旋转运动角度与曲线当前。外,其它运动形式若开始运动时在限位区域外,则禁止运动;

A_nanda的博客 651

超级玛丽制作揭秘5魔法攻击 类MYANIMAGIC

 类说明:玩家有两种攻击方式:普通攻击(子弹),魔法攻击(旋风)。这个类是专门处理旋风的。我最初的想法是用一些特殊的bitblt方法制造特效,例如或、与、异或。试了几次,都失败了。最后只能用“先与后或”的老方法。这个类可看成MYANIOBJ的一个简化版,只支持不规则图片的显示。成员函数功能列表:class MYANIMAGIC:public MYBITMAP{public: MYANIMAGI

programking的快乐生活 1039

华为OD机试 - 魔法收积木 - 二进制(Java 新系统 200分)

华为OD机试 新系统 题库疯狂收录中,刷题。

学Java,找哪吒 442

超级玛丽

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

lipu13314601878的专栏 3087

强化学习(Reinforcement Learning)与动态系统控制方法

一个具体的 RBC 的例子是自动驾驶汽车中的交通规则。在训练过程中,代理通过与环境交互获取奖励信号,并学习如何在某个状态下采取最佳的行动,以最大化长期的累积奖励。在化工过程中,通过对生产过程中的温度、压力、流量等参数的控制来实现产品的质量和产量的提高。需要注意的是,以上代码只是一个简单的示例,实际的 MPC 系统可能会更加复杂,并包含更多的模型预测和控制算法来实现更复杂的控制任务。需要注意的是,以上代码只是一个简单的示例,实际的自动驾驶汽车系统可能会更加复杂,并包含更多的规则和条件来确保安全行驶。

AI天才研究院 4062

64位ghost V11.5.0.2113

64位ghost V11.5.0.2113

超级玛丽制作揭秘10子弹的显示和帧的刷新

 感谢大家的支持,这些代码有很大优化的余地,有些代码甚至笨拙。我尽量讲清楚我写时的思路。今天讲子弹的显示和动画帧的刷新,这个思路,可以应用的其他精灵上。上次讲所有的子弹存储到一个数组里。用一个游标(数组下标)表示新生产的子弹存储的位置。设数组为a,长度为n。游戏开始,一个子弹存储在a0,然后是a1,a2,...,a(n-1).然后游标又回到0,继续从a0位置存储.数组长度30,保存屏幕上所有的子弹

programking的快乐生活 1177

批量获取并导出照片GPS经纬度坐标信息

批量获取并导出照片GPS经纬度坐标1、本软件为博自行开发,经过测试发布,可以读取单张照片GPS经纬度坐标数据,可在软件中查看,通常是WGS84地理坐标系。2、也可以批量获取图片GPS经纬度坐标,并批量导出,坐标一般为WGS84坐标。3、具体的实用方法非常简单,批量导出后的GPS经纬度坐标信息内容中包含图片名称等信息,可以方便工作和日常使用。

超级玛丽制作揭秘13小怪和火圈,模板

 小怪的显示问题. 蘑菇兵和火圈处于同一个数组,很简单.函数:void GAMEMAP::ShowAniObj(MYANIOBJ & bmobj)代码: //显示敌人 for(i=0;i {  if (MapEnemyArray[i].show)  {   bmobj.DrawItem(MapEnemyArray[i].x,MapEnemyArray[i].y,    MapEnemyArray[

programking的快乐生活 1194

毕业设计pytorch基于卷积神经网络的面部表情识别项目源代码+模型数据+论文

毕业设计pytorch基于卷积神经网络的面部表情识别项目源代码+模型数据+论文,个人经导师指导并认可通过的毕业设计项目,评审分98分,项目中的源码都是经过本地编译过可运行的,都经过严格调试,确保可以运行!主要针对计算机相关专业的正在做毕业设计的学生和需要项目实战练习的学习者,资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、使用需求,如果有需要的话可以放心下载使用。毕业设计pytorch基于卷积神经网络的面部表情识别项目源代码+模型数据+论文毕业设计pytorch基于卷积神经网络的面部表情识别项目源代码+模型数据+论文毕业设计pytorch基于卷积神经网络的面部表情识别项目源代码+模型数据+论文毕业设计pytorch基于卷积神经网络的面部表情识别项目源代码+模型数据+论文毕业设计pytorch基于卷积神经网络的面部表情识别项目源代码+模型数据+论文毕业设计pytorch基于卷积神经网络的面部表情识别项目源代码+模型数据+论文毕业设计pytorch基于卷积神经网络的面部表情识别项目源代码+模型数据+论文毕业设计pytorch基于卷积神经网络的面部表情识别项目源代码+模

【更新至2024年】上市公司ESG评级评分数据合集(十一份数据:华证年度、华证季度、Wind、商道融绿、富时罗素、彭博、润灵环球、MSCI、cnrds、盟浪、上市公司社会责任报告)

【更新至2024年】上市公司ESG评级评分数据合集(十份数据:华证年度、华证季度、Wind、商道融绿、富时罗素、彭博、润灵环球、MSCI、cnrds、盟浪、上市公司社会责任报告)一、2009-2024年上市公司华证esg评级、评分年度数据(含细分项)二、2009-2025年第一季度上市公司华证esg评级、评分季度数据(含细分项)三、2015-2024年上市公司商道融绿esg评级数据四、2018-2024年上市公司Wind ESG评分数据(含细分项)五、2018-2024年上市公司富时罗素ESG评分数据六、2008-2024年A股上市公司彭博ESG评级评分含细分项数据七、2014-2023年上市公司盟浪ESG评级数据八、2019-2023年上市公司润灵环球ESG评级评分数据(含细分项)九、2017-2023年A股上市公司MSCI ESG评级面板数据十、2007-2024年cnrds上市公司ESG评级评分数据十一、2006-2024年上市公司社会责任报告文本数据(txt格式)

超级玛丽制作揭秘14爆炸效果,金币

 大家的支持就是我的动力。子弹每次攻击到效果,都会显示一个爆炸效果。只涉及图片显示,它的结构很简单。如下:struct MapObject{ int x; int y; int w; int h; int id; int iframe; int iframemax;//最大帧数 int show; //是否显示};存储问题。爆炸效果仍然使用数组加游标的方法,如下: struct MapObje

programking的快乐生活 1413

超级玛丽制作揭秘26菜单控制 窗口缩放

 菜单控制:开始菜单只有两项:0项“开始游戏”,1项“操作说明”菜单编号用iMenu表示。初始化:函数:void GAMEMAP::Init()代码:iMenu=0;菜单显示:菜单文字显示:函数:WndProc代码:在WM_PAINT绘制消息中:   case GAME_PRE:    gamemap.viewx=0;  //设置视图坐标    bmPre.Stretch(2,2,0); 

programking的快乐生活 1276

超级玛丽制作揭秘12旋风攻击,小怪,火圈

书接上回。前面介绍了子弹的生成、显示、运动、碰撞、消失的过程。这个过程可以推广到其他精灵上。今天讲旋风、蘑菇兵、火圈。作为魔法攻击方式的旋风,和子弹大同小异。旋风的存储与子弹同存储在一个数组中,如下:struct ROLE FireArray[MAX_MAP_OBJECT];使用时,用id区分。旋风生成函数:int GAMEMAP::CheckAni(int itimeclip)代码部分: //发

programking的快乐生活 1428
上一篇: 超级玛丽制作揭秘3 游戏背景类MYBKSKY
下一篇: 超级玛丽制作揭秘5魔法攻击 类MYANIMAGIC
programking
博客等级 码龄23年 450粉丝 140原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值