admin管理员组

文章数量:1566221

2024年7月25日发(作者:)

App Inventor随机九宫格拼图的实现

1 基本概念

1.1 App Inventor

App Inventor原是Google实验室的一个子计划,是一个完全在线开

发的Android编程环境,使用积木式堆叠法完成Android程序。

App Inventor主要特点有:不需太多编程基础;积木式拼接程序;网

络作业;语法错误少;调试容易;支持乐高机器人;文件体积大;发布繁

琐。

1.2 九宫格拼图

九宫格拼图是一款益智类游戏,将一副完整图片等分成3行3列,形

成九个大小相同的格子,每个格子显示完整图片的1/9,9个格子形成一

副完整图片。游戏开始前,传统做法是将右下角的格子内容腾空出来,作

为移动其他格子内容的空间,其余8个格子则按乱序出现,玩家利用这个

空格子移动被点击的相邻拼图图块,最终恢复完整图片。

2 App Inventor随机九宫格拼图实现方案

2.1 传统九宫格拼图存在的问题

传统九宫格拼图的实现都是利用右下角的格子作为空格子,游戏前后

空格子都是出现在右下角,游戏比较固化。

2.2 随机九宫格拼图实现目的

随机生成空格子位置和其他拼图模块位置,游戏前后保持空格子位置

不变,使得游戏更为有趣、多样化。

2.3 随机九宫格拼图实现

第 1 页

(1)全局变量的定义

SPos=3,记录随机生成的空格子位置(取值范围1~9);Temp=1,保

存生成的随机数(取值范围1~9);SX=100、SY=100,保存默认空格子X

坐标、Y坐标;PList,保存随机生成的8个不重复序号;Text="",对应

的图片资源;Dis=0,两点间的距离;CTCon=1、CTPos=1保存清单中需要

与随机空格子交换的内容和位置;VarX=0、VarY=0,保存被点击图块格子

的X、Y坐标。

(2)根据随机生成的序号清单(如241783695),定义一个名为mText

的方法将对应编号构成一个实际完整的图片名称来初始化9张图片资源。

String mText(int num){

Text="pic"+select list item(PList,num)+".png"; return Text; }

(3)定义一个名为InitImage的方法根据图片名称初始化与序号清

单对应的图块。如序号清单为241783695,那么ImageSprite1对应图片是

,ImageSprite2对应图片是,如此类推。

void InitImage(){

for(int i=1;i<=9;i++){ e=mText(i); } }

(4)定义一个名为setSpace的方法设置空格子。

void setSpace(int var){ e=""; }

(5)定义一个名为SXY的方法计算和保存随机空格子的位置。

void SXY(){ SX=(SPos-1)%3*50; SY=floor((SPos-1)/3)*50; }

(6)定义一个名为d的方法计算图块与空格子的距离。

int d(int x,int y){ Dis=sqrt((x?SX)*(x?SX)+(y?SY)*

第 2 页

(y?SY)); }

(7)单击开始按钮,先将九张50*50的图块按顺序依次摆放;然后

清空PList,随机生成空格子位置和PList序列清单;接着将序号清单中

内容与随机空格子位置相同的内容与空格子位置的内容交换(如序号清单

241783695,随机空格子位置为5,将位置5对应的内容8与内容5交换,

序列清单变为241753698,随机空格子位置与内容相同,游戏前后空格子

位置不变);最后初始化图块和空格子,记录空格子坐标。事件:

,事件处理:

if(not(is list empty?(PList))){

for(int i=1;i<=length of list(PList);i++){

remove list item(PList,1); } }

SPos=random integer(1,9);

While(length of list(PList)!=9){

Temp=random integer(1,9);

if(not(is in list?(Temp,PList))){

add items to list(Temp,PList); } }

CTCon=select list item(PList,SPos);

if(SPos!=CTCon){

CTPos=position in list(SPos,PList);

replace list item(PList,SPos,SPos);

replace list item(PList,CTPos,CTCon); }

InitialImage(); setSpace(SPos); SXY();

第 3 页

(8)点击图块,判断图块与空格子是否相邻,若是,交换空格子和

被点击图块的位置。

for(int i=1;i<=9;i++){

if(d(ImageSpritei.X,ImageSpritei.Y)==50){

VarX=ImageSpritei.X; VarY=ImageSpritei.Y;

(SX,SY);

SX=VarX; SY=VarY; } }

(9)至此方案完成,运行效果如图1。点击开始按钮,运行效果如图

2。

图1 运行

图2 开始

3 结束语

本文对传统九宫格拼图进行改进,使用App Inventor开发随机九宫

格拼图游戏,实现空格子随机出现的目的,实践结果表明算法有效可行。

希望以上资料对你有所帮助,附励志名言3条::

1、世事忙忙如水流,休将名利挂心头。粗茶淡饭随缘过,富贵荣华莫强

求。

2、“我欲”是贫穷的标志。事能常足,心常惬,人到无求品自高。

3、人生至恶是善谈人过;人生至愚恶闻己过。

第 4 页

本文标签: 空格位置拼图图块内容