我不得不承认,我不是植物大战僵尸的骨灰玩家,所以,如果你发现这个系列的教程有什么地方错误的,请告诉我。

定义游戏的主要结构

植物大战僵给了我们很好的视觉和感觉上的享受。你得保护你的房子以免被吃脑的僵尸入侵,这相当的吸引人。总的来说,杀死僵尸是很有趣的。但是这视觉上的东西和游戏玩法无关,我们可以用屠夫大战管子工,鸽子大战骆驼,圆形大战方块来代替。

在这个系列的教程中,我们用圆形来代替植物,用方块来代替僵尸,伟大的圆形将会阻止邪恶的方块进入我们的基地。游戏区域可以被简化为一个区块游戏。

设想一下这种局面:

然后尽量把它想象成这样:

我们所拥有的是一个位于(2,2)的植物,它会尽力阻止走在第二行(从第0行开始,下同)的僵尸,并且另一个僵尸正在沿着第三行接近我们的基地,还有一个正从第四列落下的阳光。不可能有另外一个植物位于(2,2),并且不可能出现一个僵尸走在第二行与第三行之间。

创建游戏区域

正如你在上图看到的那样,这个游戏的区域是一个5行9列的矩阵。因此,第一件要做的事就是定义一个数组。我设想你的fla文件有一个文档类为Main。下面是Main.as的内容:

package {import flash.display.Sprite;public class Main extends Sprite {private var gameField:Array;public function Main():void {setupField();}private function setupField():void {gameField=new Array();for (var i:uint=0; i<5; i++) {gameField[i]=new Array();for (var j:uint=0; j<9; j++) {gameField[i][j]=0;}}}}
}

这样,gameField数组就是一个5*9的矩阵了。

画出游戏区域

下面的代码对于测试来说足够了,至少我们会画出一个游戏区域来。

drawField函数所做的事情都能够在setupField函数里实现,但是我想让他们分离,我得让一个函数只处理一件事。唯一有趣的一行代码是第25行的是在#007D00和#00AE00之间生成随机颜色。

这就是我们的游戏区域了。如果你想要让区块体面点。请。。。自便。

捕获阳光

阳光是植物大战僵尸里的货币。他们从天上掉下来,落到某一区块上。捡起这些阳光,你才能购买植物。

我用到了timer事件使得每五秒落下一束阳光,如果你对timer还不熟悉的话,请搜索。

现在,阳光还不会从天上掉下来,而是直接出现在某一随机的区块中。此时此刻,我还不知道是否两束阳光可以同时落到同一区块中。在这个例子里,他们是可以的,但是如果原版的植物大战僵尸里不允许这样的话,请告诉我。

当一束阳光落到地上的时候,它能够被玩家捡起。一个鼠标事件侦听器处理这整个任务。下面是代码:

package {import flash.display.Sprite;import flash.utils.Timer;import flash.events.TimerEvent;import flash.events.MouseEvent;public class Main extends Sprite {private var gameField:Array;private var flowersTimer:Timer=new Timer(5000);private var sun:sunMc;private var sunContainer:Sprite=new Sprite();public function Main():void {setupField();drawField();fallingSuns();}private function fallingSuns():void {addChild(sunContainer);flowersTimer.start();flowersTimer.addEventListener(TimerEvent.TIMER, newSun);}private function newSun(e:TimerEvent):void {var sunRow:uint=Math.floor(Math.random()*5);var sunCol:uint=Math.floor(Math.random()*9);sun = new sunMc();sunContainer.addChild(sun);sun.x=52+sunRow*65;sun.y=130+sunRow*75;sun.addEventListener(MouseEvent.CLICK,sunClicked);}private function sunClicked(e:MouseEvent):void {e.currentTarget.removeEventListener(MouseEvent.CLICK,sunClicked);var sunToRemove:sunMc=e.currentTarget as sunMc;sunContainer.removeChild(sunToRemove);}private function setupField():void {gameField=new Array();for (var i:uint=0; i<5; i++) {gameField[i]=new Array();for (var j:uint=0; j<9; j++) {gameField[i][j]=0;}}}private function drawField():void {var fieldSprite:Sprite=new Sprite();var randomGreen:Number;addChild(fieldSprite);fieldSprite.graphics.lineStyle(1,0xFFFFFF);for (var i:uint=0; i<5; i++) {for (var j:uint=0; j<9; j++) {randomGreen=(125+Math.floor(Math.random()*50))*256;fieldSprite.graphics.beginFill(randomGreen);fieldSprite.graphics.drawRect(25+65*j,80+75*i,65,75);}}}}
}

下面简要概述一下用到的函数:
drawField:画出游戏区域
fallingSuns:开始制造阳光,使他们坠落
newSun:创建新的阳光
setupField:生成区块数组
sunClicked:当玩家点击阳光时调用
下面是效果:

用鼠标捡起阳光吧。

转载于:https://www.cnblogs.com/delphi2014/p/4077087.html

Flash游戏开发实战(一)相关推荐

  1. Swift游戏开发实战教程(大学霸内部资料)

    Swift游戏开发实战教程(大学霸内部资料) 试读下载地址:http://pan.baidu.com/s/1sj7DvQH 介绍:本教程是国内第一本Swift游戏开发专向资料. 本教程详细讲解记忆配对 ...

  2. iOS cocos2d 2游戏开发实战(第3版)---你的第一个游戏!

    2019独角兽企业重金招聘Python工程师标准>>> 随着苹果公司不断地创新与发展,新的iPhone 5.iPad 4以及iPad mini产品相继问世,包括iOS与Xcode在内 ...

  3. 《cocos2d-x手机游戏开发实战》直播课程第一期介绍

    史上最牛的cocos2d-x课程 <cocos2d-x手机游戏开发实战>直播课程第一期 史上最牛的优惠活动: 报名关东升老师iOS会员送cocos2d-x直播课程,而且终身会员价格只要19 ...

  4. HTML5 Canvas游戏开发实战 PDF扫描版

    HTML5 Canvas游戏开发实战主要讲解使用HTML5 Canvas来开发和设计各类常见游戏的思路和技巧,在介绍HTML5 Canvas相关特性的同时,还通过游戏开发实例深入剖析了其内在原理,让读 ...

  5. 《HTML5 Canvas游戏开发实战》——2.1 绘制基本图形

    本节书摘来自华章计算机<HTML5 Canvas游戏开发实战>一书中的第2章,第2.1节,作者:张路斌著, 更多章节内容可以访问云栖社区"华章计算机"公众号查看. 2. ...

  6. 从踩坑到填坑|淘宝Web 3D应用与游戏开发实战

    导读:本文是淘宝前端技术专家--徐乾伟(烧鹅)分享的淘宝 Web 3D 应用与游戏开发实战,这个话题在业界被谈及得比较少.今天将会从移动.3D.游戏三种交叉的话题来和大家探讨.接下来和小编一起从初试 ...

  7. 微信小游戏开发实战教程13-随机生成形状功能的实现

    微信小游戏开发实战系列的第13篇. 本节内容包括:通过使用列表来实现可以设置权重的随机功能,以及游戏中的随机生成形状功能的具体实现. 如果你没有任何的游戏开发经验,欢迎阅读我的"人人都能做游 ...

  8. 微信小游戏开发实战教程15-关卡编辑器的制作以及关卡分享功能的实现

    微信小游戏开发实战系列的第15篇. 本节主要内容有游戏中的关卡编辑器的实现思路以及如何利用分享功能将自己制作的关卡与好友分享. 如果你没有任何的游戏开发经验,欢迎阅读我的"人人都能做游戏&q ...

  9. 《Unity 5.x游戏开发实战》一1.9 添加一个水平面

    本节书摘来异步社区<Unity 5.x游戏开发实战>一书中的第1章,第1.9节,作者: Alan Thorn 译者: 李华峰 责编: 胡俊英,更多章节内容可以访问云栖社区"异步社 ...

最新文章

  1. Cheat Engine教程关卡密码
  2. 2字节取值范围_5G NR 下行同步SSB(2)—PSS和SSS的用途
  3. python抽卡游戏_【python爬虫】原神公测预抽卡活动自动化抽卡脚本(一小时免登陆)...
  4. Swift 的变化:从 2.2 到 3.0 会带来什么
  5. AD批量修改电阻封装记得按CTRL+A
  6. 如何在 Mac 上的“地图”中自定地图视图?
  7. [UWP]了解模板化控件(8):ItemsControl
  8. 基于udp的服务器消息转发(群发)
  9. Pytorch(一) —— 相关库和函数
  10. 手机总是显示服务器太忙,手机总提示服务器太忙请稍后重试
  11. 编程计算: 1!+3!+5!+...+(2n-1)!,要求阶乘计算调用fun函数实现, 数据输入及打印结果在主函数实现。阶乘计算fun函数原型为: long fun(int m); CQUPT题库
  12. 用php写后端怎么使用模板_用PHP保守秘密
  13. 这样解决浏览器不兼容问题
  14. ERP和MES、QAS以及APS在制造企业信息化的了解
  15. 什么是permit-inside功能
  16. 理科生应该这样写情书
  17. android 获取定位省份,android 获取当前定位信息
  18. 服务器双机热备软件是什么?有什么作用?有哪些?
  19. DLP投影机投影技术之成像原理与工作流程
  20. 2022最新Web方面相关面试题解析(已拿Offer)

热门文章

  1. mysql5.7解压版错误_mysql 5.7 解压版 安装net start mysql 发生系统错误 2
  2. java string rt_如何使jvm加载我的java.lang.String而不是rt.jar中的那个
  3. opencv 滤镜效果php,OpenCV实现马赛克和毛玻璃滤镜效果
  4. leetcode184. 部门工资最高的员工(SQL) 连接+嵌套查询
  5. redis——Java整合
  6. 我对STL的一些看法(一)初步认识STL
  7. 算法(4)-leetcode-explore-learn-数据结构-数组2
  8. 三目运算符_C语言知识点:运算符的优先级和结合性
  9. 在线学习新编程 技巧全攻略
  10. 面试问题汇总 精选 分析 解答 职业规划 part 4