`
haierboos
  • 浏览: 467194 次
文章分类
社区版块
存档分类
最新评论

HTML5 App实战(6):拼图游戏

阅读更多

最近喜欢上玩拼图游戏,仔细想了一下,发现用“画app吧”开发拼图游戏其实非常简单。这里还是以FirefoxOS为例开发一个美女拼图游戏,“画app吧”是HTML5 app开发工具,所以这个拼图游戏是可以在所有支持HTML5的手机上运行(当然要手机配置要好点才行)的。有前面几篇文章作为基础,从今天开始的文章里,生成界面的部分就不再详细说明,有任何疑问请在文章后面留言。

1.用支持HTML5的浏览器(Chrome/Firefox/Safari/IE9+)打开http://www.drawapp8.com/appedit.php。

1

选择”新建“创建一个新的app,缺省情况下的设备是iphone5(或者其它设备)。

2.现在我们把设备切换成FirefoxOS的手机。双击设备打开设备的属性对话框,在设备列表中选择firefoxOS的手机。

2

3.选择“确定”之后,我们就可以看到iphone5变成了FirefoxOS手机了。我们不需要上面的toolbar,把它删除掉。

3

4.在窗口中放入三个按钮用来选择游戏的难度,难度决定要把原始图片分成的块数。

main

5.再向模拟器中插入一个窗口(菜单"插入"->"窗口"),用来选择图片。窗口上面是一个图片控件,中间是一个缩略图控件,下面是两个按钮(如下图)。在缩略图控件的属性对话框中填入准备好的图片的URL。我把图片放在csdn code上的,因为csdn code不支持外链,所以还是通过getimage.php作为代理访问。

image chooser

thumb-view-prop

6.再向模拟器中插入一个窗口,用作拼图的主界面。窗口上面是一个工具条,下面是一个网格控件。在网格控件的属性对话框中设置可拖动。再向网格控件中放入一个图片控件。

puzzle

grid_prop

9.再向模拟器中插入一个对话框,用作在拼图过程中,玩家预览原图。在对话框的属性中,设置禁用动画。

preview

preview_prop

9.再向模拟器中插入一个对话框,用作拼图完成时提醒用户。

done

10.现在开始写代码:

主窗口按钮的点击事件:设置难度系数然后打开图片选择窗口。三个按钮的代码类似,只是难度系数不同。

window.gameDifficult = 3;
this.openWindow("win_image_chooser", function (retCode) {console.log("window closed.");}, false);

图片选择窗口上的thumbview的点击事件:设置图片控件的图片。

var src = this.getCurrentImageSrc();
var image = this.getWindow().findChildByName("ui-image", true);
image.setImageSrc(src);

图片选择窗口上的"Back"按钮的点击事件(自动产生代码):关闭当前窗口。

var retCode = 0;
this.closeWindow(retCode);

图片选择窗口上的"Go"按钮的点击事件:保存当前的选择的图片,然后打开拼图窗口。

var image = this.getWindow().findChildByName("ui-image", true);
window.gameImage = image.getHtmlImage();

this.openWindow("win_image_puzzle", 
    function (retCode) {console.log("window closed.");}, false);

拼图窗口上的"Back"按钮的点击事件(自动产生代码):关闭当前窗口。

var retCode = 0;
this.closeWindow(retCode);

拼图窗口上的"Preview"按钮的点击事件(自动产生代码):打开preview对话框。

this.openWindow("win_image_preview", 
	function (retCode) {console.log("window closed.");}, false);

拼图窗口的onOpen事件:生成随机图片块。

var grid = this.getWindow().findChildByName("ui-grid", true);

var rows = window.gameDifficult;
var cols = window.gameDifficult;

grid.setRows(rows);
grid.setCols(cols);

var n = rows * cols;
var m = n - grid.children.length;

for(var i = 0; i < m; i++) {
    grid.addChild(grid.dupTemplateChild());
}
grid.children.length = n;

grid.reset =  function() {
    var w = grid.w;
	var h = grid.h;
	var image = window.gameImage;
	var imageW = image.width;
	var imageH = image.height;

	if(w/imageW > h/imageH) {
		imageH = imageW * h/w;
	}
	else {
		imageW = imageH * w/h;
	}

	var itemW = Math.floor(imageW/cols);
	var itemH = Math.floor(imageH/rows);

	var randArr = makeUniqRandArray(0, n-1);
	for(var i = 0; i < n; i++) {
		var iter = grid.children[i];
		iter.setImageSrc(image.src);

		var randNumber = randArr[i];
		var r = Math.floor(randNumber/cols);
		var c = Math.floor(randNumber%cols);
		var x = c * itemW;
		var y = r * itemH;

		iter.index = randNumber;
		iter.setBorderStyle("Blue", 1);	
		iter.setImageSrcRect(x, y, itemW, itemH);
		iter.setClickedStyle(UIImage.CLICKED_STYLE_RECT_BORDER, 3);
	}

	grid.relayout();
}

grid.reset();

拼图窗口上网格的onChildDragged事件:移动图片块,如果完成打开提醒对话框。

if(targetChildIndex < 0 || sourceChildIndex >= this.children.length || targetChildIndex >= this.children.length) {
    return;
}

var temp = this.children[sourceChildIndex];
this.children[sourceChildIndex] = this.children[targetChildIndex];
this.children[targetChildIndex] = temp;

for(var i = 0; i < this.children.length; i++) {
    var iter = this.children[i];
	if(iter.index != i) {
		return;
	}
}

//全部完成

var grid = this;
var win = this.getWindow();

this.openWindow("win_done", 
function (retCode) {
	if(retCode) {
		grid.reset();
	}
	else {
		setTimeout(function() {
			win.closeWindow(0);
		}, 1000);
	}	
}, false);

Preview对话框的onOpen事件:显示图片。

var image = this.getWindow().findChildByName("ui-image", true);
image.setImageSrc(window.gameImage.src);

Preview对话框上图片的点击事件:关闭当前窗口。

var image = this.getWindow().findChildByName("ui-image", true);
image.setImageSrc(null);

var retCode = 0;
this.closeWindow(retCode);

拼图完成提醒对话框上的"Back"按钮的点击事件(自动产生代码):关闭当前窗口。

var retCode = 0;
this.closeWindow(retCode);

拼图完成提醒对话框上的"Replay"按钮的点击事件(自动产生代码):关闭当前窗口,返回1。

var retCode = 1;
this.closeWindow(retCode);

好了,基本功能完成了。

11.我们通过菜单"文件“/”在设备上预览“生成一个URL,在实际的设备上看看效果如何。

12.最后当然是生成安装包了,菜单“云编译”/"编译FirefoxOS安装包"。

这里有我们做好的,你可以直接参考:

在线编辑

在线运行

分享到:
评论

相关推荐

    基于Android的拼图游戏APP源码,Android拼图游戏APP源码,Android小游戏源码

    在本项目中,我们讨论的是一个基于Android平台的拼图游戏APP的源代码。这个APP是一个小型游戏,专为Android设备设计,旨在提供娱乐和认知训练。通过分析和理解这个源码,我们可以学习到Android应用开发中的多个核心...

    小白的Python入门教程实战篇:网站+iOS App源码.zip

    小白的Python入门教程实战篇:网站+iOS App源码 小白的Python入门教程实战篇:网站+iOS App源码 小白的Python入门教程实战篇:网站+iOS App源码 小白的Python入门教程实战篇:网站+iOS App源码 小白的Python入门教程...

    基于Python的入门教程实战篇:网站+iOS App源码.zip

    基于Python的入门教程实战篇:网站+iOS App源码.zip 基于Python的入门教程实战篇:网站+iOS App源码.zip 基于Python的入门教程实战篇:网站+iOS App源码.zip 基于Python的入门教程实战篇:网站+iOS App源码.zip 基于...

    uni-app 实战项目 法务咨询系统

    【uni-app实战项目:法务咨询系统】 uni-app是一个基于Vue.js开发的多端框架,它允许开发者编写一次代码,可以发布到iOS、Android、Web(H5)、以及各种小程序(微信/支付宝/百度/QQ/头条/抖音/快手/360/小米/华为/...

    基于App Inventor的九宫格拼图游戏设计与实现.pdf

    本文将详细介绍如何利用App Inventor设计并实现一款具有创新性的九宫格拼图游戏,该游戏通过动态随机生成路径和空格位置,打破了传统拼图游戏的固有模式,提升了游戏的多样性和挑战性。 一、App Inventor软件概述 ...

    《Android Studio开发实战:从零基础到App上线 》读书笔记模板x.pptx

    " Android Studio开发实战:从零基础到App上线读书笔记模板 " 本书是一部Android开发的实战教程,由浅入深、由基础到高级,带领读者一步一步走进App开发的神奇世界。全书共分为16章,前8章是基础部分,主要讲解...

    html5 拼图游戏

    6. **多媒体支持**:HTML5增加了对音频和视频的原生支持,虽然在拼图游戏中不直接涉及,但若游戏包含背景音乐或音效,可以方便地通过`&lt;audio&gt;`标签来实现。 7. **离线缓存**:HTML5的App Cache或Service Worker技术...

    Android Studio开发实战:从零基础到App上线

    《Android Studio开发实战:从零基础到App上线》是一本旨在帮助初学者全面掌握Android应用开发的实战指南。书中的内容涵盖了从环境搭建、基本概念理解到实际项目开发的全过程,旨在让读者能够从无到有,独立完成一个...

    HTML5 APP项目开发实战_记事本应用_编程案例解析实例详解课程教程.pdf

    HTML5 APP项目开发实战,尤其是针对记事本应用的开发,是移动开发领域的一个常见案例。这个项目旨在教你如何利用jQuery Mobile和HTML5的localStorage对象来构建一款实用的移动应用。jQuery Mobile是一个强大的UI框架...

    精通引动APP测试实战:技术、工具和案例

    精通引动APP测试实战:技术、工具和案例

    Android实战内容:TestApp

    在Android开发领域,TestApp是一个典型的实战项目名称,它涵盖了Android应用从设计到实现的各个环节。这个项目可能是为了教授开发者如何构建一个完整的Android应用程序,强调实践操作和测试的重要性。在这个项目中,...

    拼图游戏APP的设计与实现.pdf

    《拼图游戏APP的设计与实现》 本文主要探讨了如何使用App Inventor这一开源免费的编程工具,设计并实现一款适用于Android平台的拼图游戏APP。App Inventor以其图形化的编程方式,使得开发者无需深入理解复杂的编程...

    Android实战内容:TestApp2

    【Android实战内容:TestApp2】项目解析与学习指南 在Android开发中,实战项目是提升技能的关键途径。"TestApp2"是一个典型的Android应用程序,它涵盖了从基础到进阶的多个技术点,旨在帮助开发者深入理解Android ...

    Electron桌面app实战

    首先,我们来看“Electron桌面app实战”这个主题。实战意味着我们将不仅仅是理论学习,而是通过实际操作来了解Electron的工作原理和开发流程。这包括设置开发环境,理解Electron的基本结构,以及如何利用Node.js和...

    小白的Python入门教程实战篇:网站+iOS App源码

    这个"小白的Python入门教程实战篇:网站+iOS App源码"很可能是一个面向初学者的教程资源,旨在帮助新手通过实践理解Python的基本概念和技能,同时涵盖网站开发和iOS应用的源码分析。 1. Python基础知识: Python以...

    uni-app实战社区交友类app开发&带视频教程

    uni-app实战社区交友类app开发&带视频教程提取方式是百度网盘分享地址

    uni-app实战在线教育类app开发-视频教程网盘链接提取码下载.txt

    本季度基于uni-app实战开发在线教育类app和小程序,课程包括:图文,音频,视频,电子书、会员、直播、问答、考试、拼团秒杀、优惠券。一次开发,同时搞定Android、iOS、微信小程序、H5端。非常适合具有...

    Html 5 App 界面模板(HTML5模板)

    HTML5 App界面模板是基于这些新特性的设计,旨在为移动应用或现代Web应用提供流畅、互动且响应式的用户界面。 1. **离线存储(Offline Storage)** HTML5引入了离线存储机制,如Application Cache,允许开发者将...

    uni-app实战微信app开发&带射频教程

    uni-app实战微信app开发&带射频教程提取方式是百度网盘分享地址

Global site tag (gtag.js) - Google Analytics