小怪的显示问题.
蘑菇兵和火圈处于同一个数组,很简单.
函数:void GAMEMAP::ShowAniObj(MYANIOBJ & bmobj)
代码:
 //显示敌人
 for(i=0;i<MAX_MAP_OBJECT;i++)
 {
  if (MapEnemyArray[i].show)
  {
   bmobj.DrawItem(MapEnemyArray[i].x,MapEnemyArray[i].y,
    MapEnemyArray[i].id,MapEnemyArray[i].iframe); 
  }
 }
同样,如同图片处理所讲,显示一个图片,只需要坐标,id,帧.

帧刷新和小怪运动.
函数:void GAMEMAP::ChangeFrame(int itimeclip)
代码:
 //移动时间:每隔一段时间ENEMY_SPEED,移动一下
 if(0 == itimeclip% ENEMY_SPEED)
 {
  for(i=0;i<MAX_MAP_OBJECT;i++)
  {
   //如果小怪可见
   if(MapEnemyArray[i].show)
   {
    //帧刷新
    MapEnemyArray[i].iframe=(MapEnemyArray[i].iframe+1)%MapEnemyArray[i].iframemax;
    
    switch(MapEnemyArray[i].id)
    {
    case ID_ANI_ENEMY_NORMAL:
    case ID_ANI_ENEMY_SWORD:
     //蘑菇兵移动(士兵,刺客)
     MapEnemyArray[i].x+=MapEnemyArray[i].movex;
     
     //控制敌人移动:向左移动到左边界后,移动速度movex改为向右。移动到右边界后,改为向左。
     if(MapEnemyArray[i].movex<0)
     {
      if(MapEnemyArray[i].x<=MapEnemyArray[i].xleft)
      {
       MapEnemyArray[i].movex=ENEMY_STEP_X;      
      }
     }
     else
     {
      if(MapEnemyArray[i].x>=MapEnemyArray[i].xright)
      {
       MapEnemyArray[i].movex=-ENEMY_STEP_X;    
      }
     }
     break;
    }
至此,所有小怪不停移动。(火圈的movex为0,不会移动)

碰撞检测和消失。
在前面的子弹、旋风的碰撞处理中已讲过。碰撞后,生命值减少,减为0后,消失。

火圈.
火圈会产生新的蘑菇兵,怎样实现的呢?思路:不断地检测火圈是否出现在屏幕中,出现后,生成蘑菇兵。
函数:int GAMEMAP::CheckAni(int itimeclip)
代码部分:
 //如果在显示范围之内,则设置显示属性
 for(i=0;i<MAX_MAP_OBJECT;i++)
 {
  //判断是否在屏幕范围内
  if ( IN_AREA(MapEnemyArray[i].x, viewx, VIEWW) )
  {
   //如果有生命值,设置为可见
   if(MapEnemyArray[i].health)
   {
    MapEnemyArray[i].show=1;

switch(MapEnemyArray[i].id)
    {
    //普通级火圈
    case ID_ANI_BOSS_HOUSE:
     //每隔一段时间, 产生新的敌人
     if(itimeclip == TIME_CREATE_ENEMY)
     {
      MapEnemyArray[iMapEnemyCursor]=gl_enemy_normal;
      MapEnemyArray[iMapEnemyCursor].x=MapEnemyArray[i].x;
      MapEnemyArray[iMapEnemyCursor].y=MapEnemyArray[i].y+32;

//移动游标
      iMapEnemyCursor=(iMapEnemyCursor+1)%BOSS_CURSOR;     
     }
     break;
     //下面是战斗级火圈,处理相似
    }
   }
  }
  else
  {
   //不在显示范围内,设置为不可见
   MapEnemyArray[i].show=0;
  }  
 }
这样,火圈就不断地产生蘑菇兵.

再说一下模板.
这里的模板不是c++的模板.据说template技术已发展到艺术的境界.游戏中用到的和template无关,而是全局变量.如下:
//普通蘑菇兵
struct ROLE gl_enemy_normal=
{
 0,
 0,
 32,
 32,
 ID_ANI_ENEMY_NORMAL,
 0,
 2,
 0,
 0,
 -ENEMY_STEP_X,//speed
 1,
 1
};
当火圈不断产生新的蘑菇兵时,直接把这个小怪模板放到数组中,再修改一下坐标即可.(对于蘑菇刺客,还要修改id和生命值)
游戏的主要逻辑完成.此外,还有金币,爆炸效果等其他动态元素,它们是怎么实现的?且听下回分解。
附:
超级玛丽第一版源码链接:http://download.csdn.net/source/497676
超级玛丽增强版源码链接:http://download.csdn.net/source/584350

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

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

    书接上回.前面介绍了子弹的生成.显示.运动.碰撞.消失的过程.这个过程可以推广到其他精灵上.今天讲旋风.蘑菇兵.火圈. 作为魔法攻击方式的旋风,和子弹大同小异. 旋风的存储与子弹同存储在一个数组中,如 ...

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

    类说明:玩家有两种攻击方式:普通攻击(子弹),魔法攻击(旋风).这个类是专门处理旋风的.我最初的想法是用一些特殊的bitblt方法制造特效,例如或.与.异或.试了几次,都失败了.最后只能用" ...

  3. QQ空间Qzone龙年春节彩蛋“会喷火的龙”制作揭秘

    by Rizen 一.背景 今年春节Qzone做的春节活动是让用户许三个新年愿望(发表空间说说的方式),然后自己去拉好友来"赞"自己发的愿望,当每一个愿望积累"赞&quo ...

  4. 【Cocos Creator 实战 1 】跑酷_马戏团_跳火圈

    仿照参考下面链接教程所作 https://blog.csdn.net/potato47/article/details/51295889 [游戏简要] 1打开游戏角色默认播放run动画 2点击屏幕角色 ...

  5. html5 canvas粒子火圈动画js特效

    下载地址 一款基于html5 canvas制作的粒子火圈动画特效,粒子火圈旋转着并火光四溅的动画效果. dd:

  6. 125KHz 100cm ID 读卡电路_智能卡制作频率13.25MHZ与125KHZ的区别

    经常我们在制作智能卡的时候会遇见频率这个词,今天有个客户想知道智能卡响应频率13.25MHZ与125KHZ的区别.其实这也是大部分客户想知道的东西,今天我就讲一下智能卡制作频率13.25MHZ与125 ...

  7. 央视揭秘“微商传销”:通过朋友圈炫富发展下线

    央视揭秘"微商传销":通过朋友圈炫富发展下线 2016-02-22 08:12:00   现代快报 原标题:央视揭秘"微商传销" 通过朋友圈炫富发展下线 一份工 ...

  8. (链表解决)13个人围成一圈,从第一个人开始顺序报号1,2,3,凡报到3的人,退出圈子,找出最后留在圈子里的人的序号。

    题目 13个人围成一圈,从第一个人开始顺序报号1,2,3,凡报到3的人,退出圈子.找出最后留在圈子里的人的序号. 代码 #include <stdio.h> #define n 13 ty ...

  9. 【视频教程】帝国CMS制作网站系列教程13—全站全文搜索及模板

    作为一个程序员,搭建一个自己的博客网站是件非常容易的事情,但是作为很多非程序员非计算机专业的学习者来讲,可能就需要花点时间进行学习,而如果你想通过自学来学习怎么制作一个属于自己的网站的话,那这套帝国C ...

最新文章

  1. html作业三,3.15作业
  2. word转换成pdf java代码_java代码实现word转换成pdf
  3. LeetCode 1910. 删除一个字符串中所有出现的给定子字符串
  4. phalapi-进阶篇1(Api,Domain,和Model)
  5. 开放式系统编程技术_使用开放式硬件构建更好的辅助技术
  6. LINUX用C检查文件的大小的代码
  7. http长轮询短轮询
  8. cocos2dx lua代码和图片资源加密和解密
  9. Draft:IPv6 Neighbor Discovery Multicast Address Listener Registration翻译
  10. 关于我用iVX沉浸式体验了一把0代码创建电影院购票小程序这件事
  11. 【有利可图网】PS教程:设计制作一颗超逼真的精致透明玻璃球!
  12. dell win10忘记密码怎么办
  13. 台式机安装Windows11正式版(跳过TPM)
  14. 即时通讯环信IM的集成使用
  15. 字符格式(gbk utf8等)
  16. 苹果AI秀——Core ML强势来袭
  17. ChatGPT真的像媒体宣传的那样“四平八稳”吗?
  18. 电脑任务栏桌面图标透明紊乱解决方法
  19. Oracle EBS R12 AP应付模块 查询发票付款信息SQL
  20. 一元线性回归模型及其Python案例

热门文章

  1. 永中“闹鬼”,天理不容
  2. 零基础程序员想要学好.Net,跟着这7个步骤学习就可以了
  3. call的用法及底层实现
  4. SpringMVC框架面试专题(初级-中级)-第六节
  5. bash: vue: command not found 或则 ‘vue‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。
  6. Linux环境下交叉编译mosquitto及其依赖
  7. 服务器2012r2系统安装管理员,尽管受委派的管理员必须启用 Windows Server 2012 R2 中的更改权限设置 Acl cmdlet 无法正常工作...
  8. 利用RIS远程安装Windows系统
  9. 解决Excel使用透视表的那些困扰,透视表增删改、新增比值字段、填充、拆分多表、非重复计数
  10. 公司,Oracle SQL 查询练习