前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >龙年到,一起来玩龙年小游戏吧

龙年到,一起来玩龙年小游戏吧

作者头像
鳄鱼儿
发布2024-05-21 16:39:44
1180
发布2024-05-21 16:39:44
举报

前言

每到春节期间,游戏里总是充满过节气氛,今年是龙年,咱也来凑个热闹,那就整一个龙年拼图小游戏吧。

完成拼图后,希望带来欢乐的同时也能给大家带来好运,龙年行大运!

游戏介绍

拼图游戏是一种古老而又经典的游戏,它在全世界范围内都备受欢迎。随着科技的发展和智能手机的普及,拼图游戏也逐渐走进了人们的生活。

拼图游戏最早可以追溯到18世纪,当时它是一种由木块拼成的游戏,主要是为了培养儿童的观察力和动手能力。20世纪初,拼图游戏逐渐开始使用纸板和卡片,这使得制作和销售变得更加容易。拼图游戏也叫九宫格游戏,所以是游戏中图片会被切割成9等分,所说的纸板、卡片都是由一整张完整的图片切割而来。

到现在,我们只需要有照片就可以将图片的电子切割,从而实现图片的分割与拼接。

今年24年是龙年,那必须整起龙年的拼图游戏。以下是游戏效果图:

在右侧图片区域选择龙的图片,之后点击九宫格中图片就可以移动图片。

功能实现

分割图片并初始化九宫格的大盒子,即img和div的宽高,并初始化九个格子的宽高。

代码语言:javascript
复制
function initImg(){  
        var $imgs=$(".box img");
        $imgs.attr("src",my$imgs[imgIndex]);
        var imgWidth=$imgs.eq(0).width();
        var imgHeight=$imgs.eq(0).height();			 
        boxHeight=Math.ceil(540*imgHeight/imgWidth);
        $imgs.width(boxWidth);   // 每个img中的图片缩放到大盒子的宽高一样
        $imgs.height(boxHeight);

        $(".box").width(boxWidth+2);   //缩放大盒子的宽度和高度
        $(".box").height(boxHeight+2);

        var divHeight=Math.ceil(boxHeight/3);  //计算出每个小格子的宽高
        var divWidth=Math.ceil(boxWidth/3);

        $divs.height(divHeight);   //缩放每个格子的宽高
        $divs.width(divWidth);

        initGrid(divWidth,divHeight);   //初始化格子系统,记录每个格子的位置

        $.each($imgs,function(i,v){		//每个格子中显示图片的某一部分		
                $(this).css({"top":-grids[i].top+"px","left":-grids[i].left+"px"});

        });

}

计算出每个格子的左上角位置和当前位置放的小图片div的序号,最后一个格子是空白的,即没有div,序号为-1

代码语言:javascript
复制
function initGrid(width,height){
        for(var i=0;i<9;i++){		
                if(i==8){
                        grids[i]={"top":parseInt(i/3)*height,"left":i%3*width,"div":-1};
                }else{
                        grids[i]={"top":parseInt(i/3)*height,"left":i%3*width,"div":i};
                }
        }
}

游戏交互逻辑,这里是通过点击实现,即当我们点击一个图片时,则开始游戏计时,并将它移动到它相邻的空格上

代码语言:javascript
复制
$divs.click(function(){  
			
        if(!isstart){   //游戏是否已经开始计时,如果没有开始,就开始计时				
                isstart=true;
                timer=setInterval(showTime,1000);
        }

        var divi=$divs.index($(this));	//获取当前点击的div序号		
        var grid=-1;
        for(g in grids){     //通过div序号获取到点击的格子序号
                if(grids[g].div==divi){
                        grid=g;
                }				
        }					 

        switch(grid){  //通过格子序号,获取格子能移动到的相邻的格子
                case '0':
                        move(0,[1,3]);					 
                        break;
                case '1':
                        move(1,[0,2,4]);					 
                        break;
                case '2':
                        move(2,[1,5]);					 
                        break;
                case '3':
                        move(3,[0,4,6]);					 
                        break;
                case '4':
                        move(4,[1,3,5,7]);					 
                        break;
                case '5':
                        move(5,[2,4,8]);					 
                        break;						
                case '6':
                        move(6,[3,7]);					 
                        break;		
                case '7':
                        move(7,[4,6,8]);					 
                        break;	
                case '8':
                        move(8,[5,7]);					 
                        break;				
        }			
});

移动图片小格子,这里需要注意,并不是所有的图片都可以移动,只有处在空白格四周的图片才能被移动,以下代码实现的就是这个逻辑,即判断目标格子是否为空,如果是空的,才将原格子中的图片移动到目标格子。

代码语言:javascript
复制
function move(fromIndex,toIndex){ 
        for(var i in toIndex){
                var index=toIndex[i];
                if(grids[index].div<0){
                        var divIndex=grids[fromIndex].div;								
                        $divs.eq(divIndex).animate({"left":grids[index].left+"px","top":grids[index].top},500);
                        grids[fromIndex].div=-1;
                        grids[index].div=divIndex;
                        isWin();
                }				
        }			
}

判断是否完成拼图,完成拼图则提示游戏赢了,并显示游戏用时

代码语言:javascript
复制
function isWin(){
        var win=true;
        for(var i=0;i<8;i++){
                if(grids[i].div!=i){
                        win=false;
                        break;
                }
        }
        if(win){
                clearInterval(timer);
                $divs.hide();
                $divs.eq(0).width(boxWidth);
                $divs.eq(0).height(boxHeight);
                $divs.eq(0).show(500,function(){$showTimeP.text("你成功了,用时"+time+"秒");});				
        }

} 

游戏赢啦

最后希望大家在龙年行大运,和和美美!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-05-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 游戏介绍
  • 功能实现
  • 游戏赢啦
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档