【AS3代码】九宫格小游戏
文档类
package
{
import com.RectShape;
import flash.display.Sprite;
import flash.events.MouseEvent;
public class Main extends Sprite
{
//方块的排列数组
private var indexshape:Array = new Array(1,2,3,4,5,6,7,8);
//记录地图某个位置是否占用了小方块的坐标数组
private var ditu:Array = new Array(new Array(3), new Array(3), new Array(3));
//记录小方块的排列位置
private var pailie:Array = new Array(
new Array(0,0), new Array(40,0), new Array(80,0),
new Array(0,40), new Array(40,40), new Array(80,40),
new Array(0,80), new Array(40,80), new Array(80,80)
);
public function Main()
{
init();
}
private function init():void
{
//绘制九宫格外框
var kuang:Sprite = new Sprite();
kuang.graphics.lineStyle(3,0xff0000);
kuang.graphics.drawRect(0,0,120,120);
kuang.graphics.endFill();
kuang.x = 100;
kuang.y = 100;
this.addChild(kuang);
//将九宫格各个位置的值都设置为1,表示还未被小方块占据,9个位置全是空的
for(var i:uint = 0; i < 3; i++)
{
for(var t:uint = 0; t < 3; t++)
{
ditu[i][t] = 1;
}
}
for(var n:uint = 1; n <= 8; n++)
{
//从indexshape数组中随机抽取一个数作为小方块的数字编号
var hao:uint = Math.floor(Math.random() * indexshape.length);
//已经抽取出来的小方块编号
var bianhao:uint = indexshape[hao];
//然后将抽取出来的编号从indexshape数组中删掉
indexshape.splice(hao,1);
//生成带数字编号的小方块
var rect:RectShape = new RectShape(bianhao);
rect.mouseChildren = false;
//从pailie数组中随机抽取一个位置,当作生成出来的小方块要放置的位置
var weizhi:uint = Math.floor(Math.random() * pailie.length);
var dui:Array = pailie[weizhi];
//然后将抽取出来的编号从pailie数组中删掉
pailie.splice(weizhi,1);
//定义小方块位置
rect.x = dui[0];
rect.y = dui[1];
rect.X = dui[0] / 40;
rect.Y = dui[1] / 40;
kuang.addChild(rect);
ditu[dui[0]/40][dui[1]/40] = 0;
//添加点击事件
rect.addEventListener(MouseEvent.CLICK, dong);
}
}
//点击小方块响应函数
private function dong(evt:MouseEvent):void
{
var zuo:uint = evt.target.X - 1;
var you:uint = evt.target.X + 1;
var shang:uint = evt.target.Y - 1;
var xia:uint = evt.target.Y + 1;
//判断当前方块的左侧是空的
if(zuo != 4294967295 && ditu[zuo][evt.target.Y] == 1)
{
ditu[evt.target.X][evt.target.Y] = 1; //移动方块后,原先的位置为空
ditu[zuo][evt.target.Y] = 0; //新的位置设不为空,表示占有
evt.target.X = zuo;
evt.target.x -= 40;
}
//判断当前方块的右侧是空的
else if(you != 3 && ditu[you][evt.target.Y] == 1)
{
ditu[evt.target.X][evt.target.Y] = 1;
ditu[you][evt.target.Y] = 0;
evt.target.X = you;
evt.target.x += 40;
}
//判断方块上侧是空的
else if(shang != 4294967295 && ditu[evt.target.X][shang] == 1)
{
ditu[evt.target.X][evt.target.Y] = 1;
ditu[evt.target.X][shang] = 0;
evt.target.Y = shang;
evt.target.y -= 40;
}
//判断方块下侧是空的
else if(xia != 3 && ditu[evt.target.X][xia] == 1)
{
ditu[evt.target.X][evt.target.Y] = 1;
ditu[evt.target.X][xia] = 0;
evt.target.Y = xia;
evt.target.y += 40;
}
}
}
{
import com.RectShape;
import flash.display.Sprite;
import flash.events.MouseEvent;
public class Main extends Sprite
{
//方块的排列数组
private var indexshape:Array = new Array(1,2,3,4,5,6,7,8);
//记录地图某个位置是否占用了小方块的坐标数组
private var ditu:Array = new Array(new Array(3), new Array(3), new Array(3));
//记录小方块的排列位置
private var pailie:Array = new Array(
new Array(0,0), new Array(40,0), new Array(80,0),
new Array(0,40), new Array(40,40), new Array(80,40),
new Array(0,80), new Array(40,80), new Array(80,80)
);
public function Main()
{
init();
}
private function init():void
{
//绘制九宫格外框
var kuang:Sprite = new Sprite();
kuang.graphics.lineStyle(3,0xff0000);
kuang.graphics.drawRect(0,0,120,120);
kuang.graphics.endFill();
kuang.x = 100;
kuang.y = 100;
this.addChild(kuang);
//将九宫格各个位置的值都设置为1,表示还未被小方块占据,9个位置全是空的
for(var i:uint = 0; i < 3; i++)
{
for(var t:uint = 0; t < 3; t++)
{
ditu[i][t] = 1;
}
}
for(var n:uint = 1; n <= 8; n++)
{
//从indexshape数组中随机抽取一个数作为小方块的数字编号
var hao:uint = Math.floor(Math.random() * indexshape.length);
//已经抽取出来的小方块编号
var bianhao:uint = indexshape[hao];
//然后将抽取出来的编号从indexshape数组中删掉
indexshape.splice(hao,1);
//生成带数字编号的小方块
var rect:RectShape = new RectShape(bianhao);
rect.mouseChildren = false;
//从pailie数组中随机抽取一个位置,当作生成出来的小方块要放置的位置
var weizhi:uint = Math.floor(Math.random() * pailie.length);
var dui:Array = pailie[weizhi];
//然后将抽取出来的编号从pailie数组中删掉
pailie.splice(weizhi,1);
//定义小方块位置
rect.x = dui[0];
rect.y = dui[1];
rect.X = dui[0] / 40;
rect.Y = dui[1] / 40;
kuang.addChild(rect);
ditu[dui[0]/40][dui[1]/40] = 0;
//添加点击事件
rect.addEventListener(MouseEvent.CLICK, dong);
}
}
//点击小方块响应函数
private function dong(evt:MouseEvent):void
{
var zuo:uint = evt.target.X - 1;
var you:uint = evt.target.X + 1;
var shang:uint = evt.target.Y - 1;
var xia:uint = evt.target.Y + 1;
//判断当前方块的左侧是空的
if(zuo != 4294967295 && ditu[zuo][evt.target.Y] == 1)
{
ditu[evt.target.X][evt.target.Y] = 1; //移动方块后,原先的位置为空
ditu[zuo][evt.target.Y] = 0; //新的位置设不为空,表示占有
evt.target.X = zuo;
evt.target.x -= 40;
}
//判断当前方块的右侧是空的
else if(you != 3 && ditu[you][evt.target.Y] == 1)
{
ditu[evt.target.X][evt.target.Y] = 1;
ditu[you][evt.target.Y] = 0;
evt.target.X = you;
evt.target.x += 40;
}
//判断方块上侧是空的
else if(shang != 4294967295 && ditu[evt.target.X][shang] == 1)
{
ditu[evt.target.X][evt.target.Y] = 1;
ditu[evt.target.X][shang] = 0;
evt.target.Y = shang;
evt.target.y -= 40;
}
//判断方块下侧是空的
else if(xia != 3 && ditu[evt.target.X][xia] == 1)
{
ditu[evt.target.X][evt.target.Y] = 1;
ditu[evt.target.X][xia] = 0;
evt.target.Y = xia;
evt.target.y += 40;
}
}
}
}
生成小方块类
package com
{
//拼图游戏
import flash.display.Sprite;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import flash.text.TextFormat;
public class RectShape extends Sprite
{
private var xzuobiao:uint; //x坐标
private var yzuobiao:uint; //y坐标
//构造函数
public function RectShape(indexs:uint)
{
init(indexs);
}
//初始化(生成带文字的小方块)
private function init(index:uint):void
{
//画一个带边框的矩形
this.graphics.beginFill(0x00ff00);
this.graphics.lineStyle(2,0x0000ff);
this.graphics.drawRect(0,0,40,40);
this.graphics.endFill();
//设置文本格式
var txt:TextFormat = new TextFormat();
txt.size = 30;
//创建文本
var num_txt:TextField = new TextField();
num_txt.selectable = false; //设置为不能被选择
num_txt.text = String(index); //text只接收string,所以强制转换下
num_txt.width = 40; //文字宽高
num_txt.height = 40;
num_txt.x = 0;
num_txt.y = 0;
num_txt.setTextFormat(txt);
num_txt.autoSize = TextFieldAutoSize.CENTER; //文字居中对齐
//文本添加到显示列表
this.addChild(num_txt);
}
//定义get和set两个方法
public function get X():uint
{
return xzuobiao;
}
public function set X(n:uint):void
{
xzuobiao = n;
}
public function get Y():uint
{
return yzuobiao;
}
public function set Y(n:uint):void
{
yzuobiao = n;
}
}
{
//拼图游戏
import flash.display.Sprite;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import flash.text.TextFormat;
public class RectShape extends Sprite
{
private var xzuobiao:uint; //x坐标
private var yzuobiao:uint; //y坐标
//构造函数
public function RectShape(indexs:uint)
{
init(indexs);
}
//初始化(生成带文字的小方块)
private function init(index:uint):void
{
//画一个带边框的矩形
this.graphics.beginFill(0x00ff00);
this.graphics.lineStyle(2,0x0000ff);
this.graphics.drawRect(0,0,40,40);
this.graphics.endFill();
//设置文本格式
var txt:TextFormat = new TextFormat();
txt.size = 30;
//创建文本
var num_txt:TextField = new TextField();
num_txt.selectable = false; //设置为不能被选择
num_txt.text = String(index); //text只接收string,所以强制转换下
num_txt.width = 40; //文字宽高
num_txt.height = 40;
num_txt.x = 0;
num_txt.y = 0;
num_txt.setTextFormat(txt);
num_txt.autoSize = TextFieldAutoSize.CENTER; //文字居中对齐
//文本添加到显示列表
this.addChild(num_txt);
}
//定义get和set两个方法
public function get X():uint
{
return xzuobiao;
}
public function set X(n:uint):void
{
xzuobiao = n;
}
public function get Y():uint
{
return yzuobiao;
}
public function set Y(n:uint):void
{
yzuobiao = n;
}
}
}