拼图游戏的设计与实现

功能要求:
使用HTML5画布技术制作一款拼图小游戏,要求将图像划分为3*3的9块方块并打乱排序,用户可以移动方块拼成完整图片。

实现效果图

一、界面设计

1.整体布局设计
1)使用<div>划分区域
2)CSS外部样式表:pintu.css

2.游戏布局设计
1)游戏计时
2)游戏画布
3)重新开始按钮

二、实现游戏逻辑

1.准备工作
1)声明画布对象:ctx
2)图片预加载:pintu.jpg

//声明拼图的图片素材来源
var img = new Image();
img.src = "image/pintu.jpg";
//当图片加载完毕时
img.onload = function() {//游戏相关代码
}

2.初始化拼图
1)需要将素材图片分割成3行3列的9个小方块,并打乱顺序放置在画布上。
2)为了在游戏过程中便于查找当前的区域该显示图片中的哪一个方块,首先为原图片上的9个小方块区域进行编号。

3)自定义名称的generateNum()方法用于打乱拼图顺序。

 //打乱拼图的位置function generateNum() {//循环50次进行拼图打乱for (var i = 0; i < 50; i++) {//随机抽取其中一个数据//再随机抽取其中一个数据//对调它们的位置}}

4)自定义名称的drawCanvas()方法用于在画布上绘制乱序后的图片。

//绘制图片
function drawCanvas() {//清空画布//使用双重for循环绘制3x3的拼图if (num[i][j] != 22) {//获取数值的十位数,即第几行//获取数组的个位数,即第几列//在画布的相关位置上绘图//for循环结束
}

5)绘制完成的拼图效果。

3.通过鼠标点击移动拼图
1)onmousedown事件

 //监听鼠标点击事件c.onmousedown = function(e) {//获取画布边界//获取鼠标在画布上的坐标位置(x,y)//将x和y换算成几行几列//如果当前点击的不是空白区域if (num[row][col] != 22) {//移动点击的方块//重新绘制画布}
}

4. 游戏计时功能的实现
1)自定义函数getCurrentTime()用于进行游戏计时;
2)在JavaScript中使用setInterval()方法每隔1秒钟调用getCurrentTime()方法一次,以实现更新效果。

三、游戏成功与重新开始

1.游戏成功判定与显示效果的实现

1)自定义函数checkWin()用于进行游戏成功判断。
2)如果成功则使用clearInterval()方法清除计时器。然后在画布上绘制完整图片,并使用fillText()方法绘制出“游戏成功”的文字图样。

2.重新开始功能的实现
1)为“重新开始”按钮提供点击事件οnclick=“restartGame()”。
2)声明restartGame()方法,用于重新开始游戏,包括三个部分:
      计时器重启clearInterval(timer)
      重新打乱拼图顺序generateNum()
      重新绘制画布内容drawCanvas()

四、部分代码

<!DOCTYPE HTML>
<html><head><meta charset="utf-8"><title>HTML5画布综合项目之拼图游戏</title><link rel="stylesheet" href="css/pintu.css"></head><body><div id="container"><!--页面标题--><h3>HTML5画布综合项目之拼图游戏</h3><!--水平线--><hr /><!--游戏内容--><!--游戏时间-->        <div id="timeBox">共计时间:<span id="time">00:00:00</span></div><!--游戏画布--><canvas id="myCanvas" width="300" height="300" style="border:1px solid">对不起,您的浏览器不支持HTML5画布API。</canvas><!--游戏按钮--><div><button onclick="restartGame()">重新开始</button></div>  </div><script>//获取画布对象var c = document.getElementById('myCanvas');//获取2D的context对象var ctx = c.getContext('2d');//声明拼图的图片素材来源var img = new Image();img.src = "image/pintu.jpg";//当图片加载完毕时img.onload = function() {//打乱拼图的位置generateNum();//在画布上绘制拼图drawCanvas();}      //定义初始方块位置var num = [[00, 01, 02], [10, 11, 12], [20, 21, 22]];//打乱拼图的位置function generateNum() {//循环50次进行拼图打乱for (var i = 0; i < 50; i++) {//随机抽取其中一个数据var i1 = Math.round(Math.random() * 2);var j1 = Math.round(Math.random() * 2);//再随机抽取其中一个数据var i2 = Math.round(Math.random() * 2);var j2 = Math.round(Math.random() * 2);//对调它们的位置var temp = num[i1][j1];num[i1][j1] = num[i2][j2];num[i2][j2] = temp;}}//定义拼图小方块的边长var w = 100;//绘制拼图function drawCanvas() {//清空画布ctx.clearRect(0, 0, 300, 300);//使用双重for循环绘制3x3的拼图for (var i = 0; i < 3; i++) {for (var j = 0; j < 3; j++) {if (num[i][j] != 22) {//获取数值的十位数,即第几行var row = parseInt(num[i][j] / 10);//获取数组的个位数,即第几列var col = num[i][j] % 10;//在画布的相关位置上绘图ctx.drawImage(img, col * w, row * w, w, w, j * w, i * w, w, w);}}}}

备注:完整代码请下载附件

https://download.csdn.net/download/YQEMMMM/13016507

拼图游戏的设计与实现相关推荐

  1. java课程设计拼图_基于Java拼图游戏的设计与实现(含录像)

    基于拼图游戏的设计与实现(含录像) 摘    要 本拼图游戏是基于J2SE平台开发的,它是一个Application,它的游戏规则和诺亚舟里的拼图游戏是一样的.这个游戏将一张大图切割成N张小图,然后在 ...

  2. Java拼图游戏总结,Java拼图游戏课程设计报告

    Java拼图游戏课程设计报告 JavaJava 程序设计与应用开发 课程设计报告程序设计与应用开发 课程设计报告 设计题目 拼图大作战 学生姓名 学生班级 学生学号 指导教师 完成时间2016 年 0 ...

  3. java拼图游戏系统总体方案_基于JAVA的拼图游戏的设计与实现(含录像)

    基于的拼图游戏的设计与实现(含录像)(任务书,开题报告,中期检查表,外文翻译,毕业论文15500字,程序代码,答辩PPT,答辩视频录像) 摘  要 在我们日常生活中,有很多的益智类游戏,如七巧板,21 ...

  4. java课程设计拼图_java拼图游戏课程设计报告

    java拼图游戏课程设计报告 砾寸椒涩藕矾糯陋捕炬洁困喘港划舟逃豺涌锤芳喜胺递龚乏埔跺摩实阿信颊立蹲稿船纽臃瘪自康嘱脖究绢术拱虑犹犀棉宜炙转鸦半甘哨疗墓暑蛊渤幽峭咀豺虫拘召饭莽畜穗篷姿钟逻捞跨瀑拿丈土 ...

  5. java拼图游戏设计文档_基于JAVA的拼图游戏的设计与实现(含录像)

    基于JAVA的拼图游戏的设计与实现(含录像)(任务书,开题报告,中期检查表,外文翻译,毕业论文15500字,程序代码,答辩PPT,答辩视频录像) 摘  要 在我们日常生活中,有很多的益智类游戏,如七巧 ...

  6. 微信小程序(游戏)----拼图游戏(设计思路)

    微信小程序(游戏)----拼图游戏(设计思路) 设计思路 1.将一张海报等分成 N*N 的矩阵 方法一:利用两个组件循环完成,view组件和image组件,view组件作为盒子规定大小--超出部分不显 ...

  7. Android拼图游戏的设计逻辑,从切图到交互动画,从关卡到倒计时,实例提高!

    Android拼图游戏的设计逻辑,从切图到交互动画,从关卡到倒计时,实例提高! 群英传的最后一章,我大致的看了一下这个例子,发现鸿洋大神也做过,就参考两个人的设计逻辑,感觉都差不多,就这样实现起来了 ...

  8. 最新计算机专业毕业设计论文选题源码演示录像下载(开题报告任务书PPT毕业答辩模板jsp352 cs拼图游戏的设计与实现

    编号: jsp352 语言+数据库: Java/Jsp+mysql 论文字数: 13552字 摘  要 随着互联网的日益普及,互联网游戏其独特的魅力吸引了广大网民的关注与参与.游戏貌似小道,却托起了巨 ...

  9. jsp352 cs拼图游戏的设计与实现

    摘  要 随着互联网的日益普及,互联网游戏其独特的魅力吸引了广大网民的关注与参与.游戏貌似小道,却托起了巨大的市场,形成了一个独立的产业.中国游戏产业快速发展,被公认为潜力无限的朝阳产业. 拼图游戏软 ...

最新文章

  1. 开发vs测试 | 每日趣闻
  2. 抬头看路,埋头干活(一)
  3. mysql查询索引数组_mysql-索引
  4. java高并发(八)不可变对象
  5. Windows Media Center .MCL文件代码执行漏洞(MS16-059)
  6. C#委托、事件学习之(二)——简单按钮委托事件
  7. Zookeeper——入门介绍(相关原理、安装启动及使用操作)
  8. php的数组操作,PHP的数组操作
  9. html5 移动端 Android和iOS手机 video自动播放
  10. 没有body怎么添加onload事件
  11. 计算机实战项目、课程设计、毕业设计之[含论文+源码等]微信小程序校园论坛|商城|电商系统+后台管理系统|前后分离VUE[包运行
  12. os+rom+android+6.0+n9005,三星S8+官方韩版安卓9固件rom系统线刷升级包:G955NKSU3DSG5
  13. 【超图+CESIUM】【基础API使用示例】45、超图|CESIUM - 点光源设置
  14. Periodic Strings (求HoHoHo字符串最小周期)
  15. 毕业一年来我的前端之路总结和谈谈大厂外包工作体验
  16. Android手机端编程实现TCPClient
  17. 关于AD前面的电压跟随器
  18. linux centos 最新版本,Linux 发行版
  19. 十个著名的思想实验-黑客帝国思想原来是(Brain in a Vat)
  20. 如何写毕业设计——外文翻译

热门文章

  1. 超级全面的 Lombok 注解介绍,学一波!
  2. UP及按照UP进行软件开发的流程
  3. 极限 lim(x^x-(sinx)^x)/(x²arctanx)
  4. WSS3.0安装后,系统资源消耗这么大
  5. CodeFirst Update-Database 出现对象'DF__**__**__**' 依赖于 列'**'。
  6. Django的 select_related 和 prefetch_related 函数对 QuerySet 查询的优化(二)
  7. UVA 1349 Optimal Bus Route Design (二分图最小权完美匹配)
  8. html文件的获取,获取html文件Java
  9. lateral函数oracle,ORACLE LATERAL-SQL-INJECTION 个人见解
  10. python在编程序网站_Python的用户登录接口编制以及实现流程图