html实现拼图游戏,html、css、js实现拼图游戏
为了进一步熟悉html、css、js,做个一个小游戏加深对相关知识的理解。界面略显粗糙。
目录
环境:
相关文件:
游戏效果:
如何得到特定像素的图片
步骤:
1.pic.html文件
2.pic.css文件
3.pic.js文件
环境:
Visual Studio Code
相关文件:
pic.html、pic.css、pic.js、600.jpg(该图片大小为600px * 600px)、200.jpg
游戏效果:
如何得到特定像素的图片
使用windows自带的“画图”对图片进行大小调整
步骤:
1.编写pic.html文件设计大体框架
2.编写pic.css文件对pic.html文件进行渲染
3.编写pic.js文件实现相关的功能函数
1.pic.html文件
编写html文件设计大体框架
拼图游戏
总用时:
开始
重来
2.pic.css文件
编写css文件对html文件进行渲染
*{
padding: 0;
margin: 0;
border: 0;
}
body{
width: 100%;
height: 100%;
}
/*大的框架设置像素,宽600px,高800px,边框2px,居中显示*/
#Frame{
position: relative;
width: 600px;
height: 700px;
margin: 0 auto;
margin-top: 0px;
}
#gameFrame{
position: relative;
width: 600px;
height: 600px;
display: inline-block;
background-color: azure;
}
#gameFrame div{
background-image: url(600.jpg); /*图片设置为同一张图*/
background-repeat: no-repeat;
position: absolute;
width:199px; /*为了使图片之间有小空隙,所以大小小于200px*/
height: 199px;
background-color: aquamarine;
box-shadow: 1px 1px 2px white;
text-align: center;
font-size: 200px;
color: rgba(255, 255, 255, 0);
line-height: 200px;
cursor: pointer;
-webkit-transition: all 0.3s;
-moz-transition: all 0.3s;
-ms-transition: all 0.3s;
-o-transition: all 0.3s;
transition: all 0.3s;
}
/*控制框*/
#controlFrame{
position: relative;
width: 300px;
height: 100px;
display: inline-block;
}
/*图片*/
#picture{
position: relative;
background-image: url(200.jpg);
float:right;
width: 100px;
height: 100px;
}
/*让元素rowspan重来和开始变成块状*/
#start{
display: inline-block;
background-color: aqua;
text-align: center;
color: brown;
cursor: pointer;
}
#reset{
display: inline-block;
background-color: aqua;
text-align: center;
color: brown;
cursor: pointer;
}
#block1{
left: 0px;
background-position: -0px 0px; /*通过设置该属性取得图片不同位置的图片*/
}
#block2{
left: 200px;
background-position: -200px 0px;
}
#block3{
left: 400px;
background-position: -400px 0px;
}
#block4{
top: 200px;
left: 0px;
background-position: 0px -200px;
}
#block5{
top: 200px;
left: 200px;
background-position: -200px -200px;
}
#block6{
top: 200px;
left: 400px;
background-position: -400px -200px;
}
#block7{
top: 400px;
left: 0px;
background-position: 0px -400px;
}
#block8{
top: 400px;
left: 200px;
background-position: -200px -400px;
}
渲染的目的是设置各个div块的位置、背景颜色和大小。
为了使block方块之间有小间隙,所以block方块大小为199px * 199px,小于200px * 200px,
在设置游戏块(gameFrame div)block的背景图片时,将block的背景图都设置为同一张图片。
通过设置background-position取得图片的不同部分。
3.pic.js文件
编写js实现相关的功能函数
var time = 0; //计时时间
var pause = true; //暂停标志 pause为ture,游戏暂停.
var setTimer; //定时函数,用于显示游戏计时
var Block = new Array(10); //Block是游戏框gameFrame 9等分后的区域;里面记录着存放的方块
//区域内方块初始化
Block[0] = 0; //元素0不用
Block[1] = 1; //表示区域1放着方块1;
Block[2] = 2;
Block[3] = 3;
Block[4] = 4;
Block[5] = 5;
Block[6] = 6;
Block[7] = 7;
Block[8] = 8;
Block[9] = 0; //这里表示区域没有方块
var BlockCanTo = new Array( //这是游戏框gameFrame 9等分后的各个区域可移动的位置
[0], //第一个元素不用
[2,4], //区域1可以移动到区域2和区域4
[1,3,5],
[2,6],
[1,5,7],
[2,4,6,8],
[3,5,9],
[4,8],
[5,7,9],
[6,8]
);
//游戏框gameFrame 9等分后的区域左上角的坐标
var BlockPostion = new Array(
[0], //元素0不用
[0,0], //区域1左上角的坐标
[200,0],
[400,0],
[0,200],
[200,200],
[400,200],
[0,400],
[200,400],
[400,400]
);
function timer(){ //显示时间的函数
time +=1;
var min = parseInt(time /60);
var sec = time%60;
document.getElementById("timer").innerHTML = min + "分" + sec + "秒";
//显示时间
}
function start(){ //开始函数
if(pause){ //pause为true,此时游戏为暂停状态,文本显示为""开始"
document.getElementById("start").innerHTML= "暂停"; //将文本显示为"暂停""
set_timer = setInterval(timer,1000);//开始计时
}else{
document.getElementById("start").innerHTML = "开始";
clearInterval(setTimer); //游戏暂停,计时器停止计时
}
pause = !pause;
}
function randomBlock(){ //方块打乱
for(var i = 9; i > 1; i--){
var temp = parseInt(Math.random()* (i - 1) + 1);
//区域i和区域 1~(i-1)中的一个进行方块交换
if(Block[i] !=0){ //将区域i中的方块放到区域temp
document.getElementById("block" + Block[i]).style.left = Block_postion[temp][0] + "px";
document.getElementById("block" + Block[i]).style.top = Block_postion[temp][1] + "px";
}
if(Block[temp]!=0){ //将区域temp中的方块放到区域i
document.getElementById("block" + Block[temp]).style.left = Block_postion[i][0] + "px";
document.getElementById("block" + Block[temp]).style.top = Block_postion[i][1] + "px";
}
//区域temp和区域i的方块交换
var t = Block[temp];
Block[temp] = Block[i];
Block[i] = t;
}
if(!ifRight())
randomBlock();
}
function ifRight(){ //判断拼图是否可还原
//可以通过计算这个排列的逆序数个数加空格位置的行列号,最终得到的数的奇偶性判断,偶数可还原
var count = 0;
var m,n;
for(var i = 1; i <= 8; i++){
var a = Block[i];
if(a == 0){
m = parseInt((i - 1) / 3) + 1;
n = parseInt((i - 1) % 3) + 1;
}
for(var j = i + 1; j <= 9; j ++){
if(Block[j] < a)
count ++;
}
}
count += m;
count += n;
return count % 2 == 0;
}
function move(id){ //方块id移动
var i;
for(i = 1;i <= 9; i++){ //看看方块id放在哪个区域内
if(Block[i] == id)
break;
}
var nextPostion = NextPosition(i); //找到不放方块的区域.
if(nextPostion != 0){
Block[i] = 0; //id所在区域方块清空.
Block[nextPostion] = id; //没有方块的区域放置方块id.
//将方块id移动至 没有方块的区域
document.getElementById("block" + id).style.left = Block_postion[nextPostion][0] + "px";
document.getElementById("block" + id).style.top = Block_postion[nextPostion][1] + "px";
}
//判断拼图是否完成
var finishFlag = true; //游戏是否完成标志
for(var j = 1; j <= 8; j++){
if(Block[j] != j){
finishFlag = false; //如果区域j放的不是方块j,则游戏未完成
break;
}
}
if(finishFlag){
alert("finished");
if(!pause){
start(); //暂停计时
}
}else{
if(pause)
start(); //如果游戏未完成,此时又点击,开始计时
}
}
function NextPosition(b){ // 找到 没有方块的区域
var ret = 0;
for(var i = 0; i < BlockCanTo[b].length; i++){
if(Block[BlockCanTo[b][i]] == 0){
ret = BlockCanTo[b][i];
break;
}
}
return ret;
}
function reset(){ //重新开始
time = 0;
if(pause){
start();
}
randomBlock();
}
window.onload = function(){
this.reset();
}
对于方块的打乱函数randomBlock:
游戏框gameFrame划分成9个区域,从最后一个区域开始遍历。让区域与之前的区域交换方块block。
在交换完方块后,判断方块是否可还原.如果不可还原,则继续打乱,直到方块可还原为止。
方块的移动函数move:
先找到方块所在的区域Block。区域Bolck附近没有放方块的区域,就是方块可以移动到的区域。
判断拼图是否可还原的函数ifRight:
在此3*3拼图中,若逆序数+ 没有方块的区域的行号+没有方块的区域的列号 是偶数,则可还原。
参考https://www.cnblogs.com/idche/archive/2012/04/25/2469516.html
html实现拼图游戏,html、css、js实现拼图游戏相关推荐
- html css js 实战案例_使用html+css+js实现弹球游戏
php中文网最新课程 每日17点准时技术干货分享 使用html+css+js实现弹球游戏 代码如下,复制即可使用: <head> <style type="text/css ...
- html实现页面弹球,使用html+css+js实现弹球游戏
使用html+css+js实现弹球游戏 代码如下,复制即可使用: 开始 0 暂停 提示:键盘左右箭头控制滑板
- “限时分享“ 本地80个小游戏 HTML+CSS+JS源码分享
开源项目集合 1. "限时分享" 本地80个小游戏 HTML+CSS+JS源码分享 2. "限时分享" 别错过了,最全的微信小程序源码收集分享 里面有80款小游 ...
- 使用html+css+js实现弹球游戏
使用html+css+js实现弹球游戏 使用html+css+js实现弹球游戏 效果图: 代码如下,复制即可使用: <!doctype html> <head><styl ...
- html5弹球游戏的实现,使用html+css+js实现弹球游戏
使用html+css+js实现弹球游戏 代码如下,复制即可使用: .panel{ position: relative; z-index: 0; top:0px; left: 400px; width ...
- html弹球游戏,使用html+css+js实现弹球游戏
使用html+css+js实现弹球游戏 代码如下,复制即可使用: .panel{ position: relative; z-index: 0; top:0px; left: 400px; width ...
- html 拼图游戏,HTML 和 JS 的拼图游戏
html 拼图 .picture{ border: 1px solid black; } 拼图 低 高 Js var context=document.getElementById('puzzle') ...
- 网页拼图游戏(html css js)实现
注:学习的实验楼中的 网页拼图课程 基于 HTML+CSS+JavaScript 实现网页版的拼图游戏.实现过程中将用到 HTML5,CSS3 及 JavaScript 相关知识.完成这个项目,可以进 ...
- 简单的五子棋小游戏(html+css+js)
<!DOCTYPE html> <html><head><meta charset="UTF-8"><title>五子棋 ...
- 基于 HTML+CSS+JS 的石头剪刀布游戏
最新文章
- Docker 安装MySQL以及外部访问
- Debug经验总结:优化、程序员和概率
- linux i2c adapter 增加设备_LINUX设备驱动模型分析之四 设备模块相关(DEVICE)接口分析...
- 配置DNS辅助服务器:DNS系列之四
- Java多对多关系示例
- 抛弃Excel后工资翻倍,阿里大厂的数据报表全靠它
- Shell——运行Shell脚本
- 吴恩达机器学习 2.矩阵和向量知识
- 初识HTML5(一)
- FORM LOV特性
- 谷歌翻译,一键复活脚本
- STM32单片机全自动锂电池容量电量检测放电电流电池电压ACS712
- excel文件如何解密工作表保护密码
- dnf超时空漩涡副本路线流程图_DNF超时空漩涡怎么打 队伍配置攻坚路线兵营boss攻略...
- Drools规则引擎-如果Fact对象参数为null如何处理
- windows10虚拟机下载
- 解决Unable to resolve dependency for ‘:app@debug/compileClasspath’: Could not resolve com.android.supp
- 游戏引擎架构-学习笔记
- 【转载】面对酱紫的情况,肿么办哇?
- 十年育林,百度NLP已枝繁叶茂
热门文章
- 防治颈椎病,别陷入误区
- 【canvas画图】画一个彩虹
- 闲聊机器人实例三:python实现小姜机器人(检索式chatbot_sentence_vec_by_word_词向量句向量)
- 本地时间 与 UTC 时间 相互转化
- 看懂卫星遥感数据RPC文件
- safari浏览器的一些兼容性问题总结
- 作为一名测试工程师,如何保证软件的质量?
- 1.3寸 SH1106 OLED 屏幕驱动 基于stm32
- bzoj1127 [POI2008]KUP
- 计算机图形学学习笔记(4.1)画线算法