首页 > 编程语言 >【百行代码说游戏】ActionScript3.0 小游戏 【劲舞团】源码+演示

【百行代码说游戏】ActionScript3.0 小游戏 【劲舞团】源码+演示

时间:2023-06-04 12:01:02浏览次数:56  
标签:lineTo 30 60 源码 百行 graphics var 劲舞团 public


最近学ActionScript3.0 以下为自己写的一个小游戏。尽量以最少的代码,实现功能

游戏原理:看代码注释

游戏规则:类似于【劲舞团】游戏,玩家可以按UP,DOWN,LEFT,RIGHT键来操控游戏。

打掉相应的箭头则得分,否则失手。

箭头落到底线没有被打掉,则为失手。

失手10次,游戏结束。

得分过30,升一级。难度加大。

先建一个箭头的类Baby.as 。提供四种不同造型的箭头

package  
{
	import flash.display.Sprite;
	import flash.filters.ConvolutionFilter;
	
	/**
	 * ...
	 * @author kkkloveyou
	 */
	public class Baby extends Sprite 
	{
		private var color:uint = 0xFFFFFF;
		private var direction:uint;
		private const LEFT:uint = 37;
		private const RIGHT:uint = 39;
		private const UP:uint = 38;
		private const DOWN:uint = 40;
		public  var flag:int = 0;
		
		public function Baby(direction:uint):void 
		{	
			this.direction = direction;
			switch (direction) {
				case LEFT:
				drawLeft();
				break;
				case RIGHT:
				drawRight();
				break;
				case UP:
				drawUp();
				break;
				case DOWN:
				drawDown();
				break;
				default:
				break;
				}
		}
		public  function drawRight():void {
				graphics.lineStyle(3,0xff0000);//左面
				graphics.moveTo(-60,-30);
				graphics.lineTo(-60,30);
				graphics.lineTo(30, 30);
				graphics.lineTo(30,40);
				graphics.lineTo(60, 0);
				graphics.lineTo(30,-40);
				graphics.lineTo(30, -30);
				graphics.lineTo( -60, -30);
				flag = 39;
		}
		public  function drawLeft():void {
				graphics.lineStyle(3,0x00ff00);//右面
				graphics.moveTo(60,-30);
				graphics.lineTo(60,30);
				graphics.lineTo(-30, 30);
				graphics.lineTo(-30,40);
				graphics.lineTo(-60, 0);
				graphics.lineTo(-30,-40);
				graphics.lineTo(-30, -30);
				graphics.lineTo(60, -30);
				flag = 37;
		}
		public  function drawUp():void {
				graphics.lineStyle(3,0x00ffff);//上面
				graphics.moveTo(-30,60);
				graphics.lineTo(30,60);
				graphics.lineTo(30, -30);
				graphics.lineTo(40,-30);
				graphics.lineTo(0, -60);
				graphics.lineTo(-40,-30);
				graphics.lineTo(-30, -30);
				graphics.lineTo( -30, 60);
				flag = 38;
		}		
		public  function drawDown():void {
				graphics.lineStyle(3,0x001177);//下面
				graphics.moveTo(-30,-60);
				graphics.lineTo(30,-60);
				graphics.lineTo(30, 30);
				graphics.lineTo(40,30);
				graphics.lineTo(0, 60);
				graphics.lineTo(-40,30);
				graphics.lineTo(-30, 30);
				graphics.lineTo( -30, -60);
				flag = 40;
		}
	}

}
再建一个控制类Main.as  用来控制游戏
package
{
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.KeyboardEvent;
    import flash.text.TextField;
    import flash.text.TextFormat;
    import flash.ui.Keyboard;

	public class Main extends Sprite
	{
		public var arr:Array;//储存下落箭头的数组
		public var time:uint;
		public var errorTxt:TextField;//错误显示文本
		public var trueTxt:TextField;//正确显示文本
		public var levelTxt:TextField;//等级文本
		public var meTxt:TextField;//作者文本
		public var errorCount:int = 0;//错误总计变量
		public var trueCount:int = 0;//正确总计变量
		public var levelCount:int = 1;//当前关卡等级
		public var speed:uint = 5;    //箭头移动速度

		public function Main(){
			init();
		}

		public function init():void{
			this.addEventListener(Event.ENTER_FRAME,loopHandler);
			stage.addEventListener(KeyboardEvent.KEY_DOWN,downHandler);
			arr = new Array();
			time = 0;
			errorTxt = new TextField();
			trueTxt = new TextField();
			levelTxt = new TextField();
			meTxt = new TextField();
			errorTxt.text = "失手: "+errorCount;
			trueTxt.text = "得分: " + trueCount;
			levelTxt.text = "等级: " + levelCount;
			meTxt.text = "卫哥作品";
			levelTxt.x = 50;
			levelTxt.y = 50;
			errorTxt.x = 50;
			errorTxt.y = 150;
			trueTxt.x = 50;
			trueTxt.y = 250;
			meTxt.x = 700;
			meTxt.y = 550;

			this.addChild(errorTxt);
			this.addChild(trueTxt);
			this.addChild(levelTxt);
			this.addChild(meTxt);
		}

		public function downHandler(event:KeyboardEvent):void{
			errorCount++;
			if (errorCount >= 10) {
				stage.removeEventListener(KeyboardEvent.KEY_DOWN, downHandler);
				this.removeEventListener(Event.ENTER_FRAME,loopHandler);
			}
			for(var i:Number = arr.length-1;i>=0;i--){
				//判断键盘按下的键值是否和场景里的字母符合.如果符合则消去
				var baby:Baby = arr[i] as Baby;
				if ( baby ){
					if(baby.flag == event.keyCode){
						this.removeChild(arr[i]);
						arr.splice(i,1);
						trueCount++;
						errorCount--;        
						break;
					}
				}
			}
			if (trueCount >= 30) {
				levelCount++;			//级数升级,得手清零
				speed += 3;              //级数升级,速度增大,难度增大
				trueCount = 0;        
			}
			errorTxt.text = "失手: "+errorCount;
			trueTxt.text = "得分: " + trueCount;
			levelTxt.text = "等级: " + levelCount

		}

		public function loopHandler(event:Event):void{
			time++;
			if(time>=10){
				time = 0;
			    var baby:Baby = new Baby(int(Math.random() * 4) + 37);     //随机产生箭头类型
			    baby.x = stage.stageWidth / 2;
			    baby.y = 30;
				this.addChild(baby);
				arr.unshift(baby);
			}

			for(var i:Number = arr.length-1;i>=0;i--){
				arr[i].y+=speed;                                              //箭头速度
				if(arr[i].y>=stage.stageHeight){
					this.removeChild(arr[i]);
					arr.splice(i,1);
					errorCount++;
					errorTxt.text = "失手: "+errorCount;
					break;
				}
			}
			if (errorCount >= 10) {
				stage.removeEventListener(KeyboardEvent.KEY_DOWN, downHandler);
				this.removeEventListener(Event.ENTER_FRAME,loopHandler);
			}
		}
	}
}

【百行代码说游戏】ActionScript3.0 小游戏 【劲舞团】源码+演示_小游戏

项目演示地址:http://up.qqhello.com/qzone/73e11069e924b6d6df5198f9440a2403.swf

标签:lineTo,30,60,源码,百行,graphics,var,劲舞团,public
From: https://blog.51cto.com/u_9427273/6410342

相关文章

  • Linux进程间通信源码分析
    概览这篇文章从内核源码的角度整理一下Linux的进程间通信机制。众所周知,Linux操作系统的通信机制有以下几种:信号管道(分为匿名管道和有名管道)信号量共享内存消息队列Socket本文主要内容包括其中前五个。其中信号量、共享内存、消息队列在Linux中有两套API,实现方式大不......
  • Request类源码分析、序列化组件介绍、序列化类的基本使用、常用字段类和参数、反序列
    目录一、Request类源码分析二、序列化组件介绍三、序列化类的基本使用查询所有和查询单条四、常用字段类和参数(了解)常用字段类字段参数(校验数据来用的)五、反序列化之校验六、反序列化之保存七、APIVIew+序列化类+Response写的五个接口代码八、序列化高级用法之source(了解)九、......
  • 使用vscode sftp插件快速上传源码文件
    1.首先安装vscode插件2.使用ctrl+shift+p或者view-commandpalette打开命令面板,输入sftp并按enter键,出现编辑配置文件界面3.输入对应的主机名,密码,或者密钥文件即可{"name":"47.100.101.152","host":"47.100.101.152","protocol":"sftp",......
  • LRU缓存与LinkedHashMap源码
    今天再刷LeetCode时,遇到了第146题LRU缓存。题目如下:请你设计并实现一个满足LRU(最近最少使用)缓存约束的数据结构。实现LRUCache类:LRUCache(intcapacity)以正整数作为容量capacity初始化LRU缓存intget(intkey)如果关键字key存在于缓存中,则返回关键字的值,否......
  • (五)Spring源码解析:ApplicationContext源码解析
    一、概述1.1>整体概览在前面的内容中,我们针对BeanFactory进行了深度的分析。那么,下面我们将针对BeanFactory的功能扩展类ApplicationContext进行深度的分析。ApplicationConext与BeanFactory的功能相似,都是用于向IOC中加载Bean的。由于ApplicationConext的功能是大于BeanFactory的......
  • 大件货运系统源码,技术架构:spring boot、mybatis、redis、vue、element-ui
    网络货运平台源码网络货运平台的功能网络货运是指利用互联网平台,通过物流配送的方式进行商品销售和物流运输的一种新型商业模式。这种模式将传统的货运模式与互联网技术相结合,通过网络平台进行交易、物流配送和结算等一系列流程,从而实现货物的快速、高效、便捷地运输。技术架构:spr......
  • JAVA的springboot+vue医疗预约服务管理信息系统,医院预约管理系统,附源码+数据库+论文+P
    1、项目介绍会员制医疗预约服务管理信息系统是针对会员制医疗预约服务管理方面必不可少的一个部分。在会员制医疗预约服务管理的整个过程中,会员制医疗预约服务管理系统担负着最重要的角色。为满足如今日益复杂的管理需求,各类的管理系统也在不断改进。本课题所设计的是会员制医疗......
  • LOOK!两步控制直播APP源码平台的稳定
    随着网络时代的发展,直播慢慢深入到我们日常生活中来,直播不仅仅成为人们休闲娱乐的方式,他也变成了人们工作、学习等一些方式,这就使直播APP源码平台的人数的巨大,这也增加了运营商的烦恼,当直播APP源码平台的直播间中观看用户到达一定限度时,如何能保证直播的稳定进行?当然,这也就是我们今......
  • LOOK!两步控制直播APP源码平台的稳定
     随着网络时代的发展,直播慢慢深入到我们日常生活中来,直播不仅仅成为人们休闲娱乐的方式,他也变成了人们工作、学习等一些方式,这就使直播APP源码平台的人数的巨大,这也增加了运营商的烦恼,当直播APP源码平台的直播间中观看用户到达一定限度时,如何能保证直播的稳定进行?当然,这也就是我......
  • 系统ubuntu20.04-ROS2源码安装humble
    系统要求HumbleHawksbill目前基于Debian的目标平台是Tier1:UbuntuLinux-Jammy(22.04)64-bitTier3:UbuntuLinux-Focal(20.04)64-bitDebianLinux-Bullseye(11)64-bit其他具有不同支持级别的Linux平台包括:ArchLinux,seealternateinstructionsFedoraLinux,s......