方格拼图游戏2(javascript以类的形式实现)+增加批量移动

今天又在原来的基础上,增加了新的功能:当空白方格A 与 鼠标点击的方格
B在同一行,或者同一列,而且当他们不是紧挨着的情况,自动将B到A间的方格们,顺次移动填补空白方格。


var game ={
wid_num:3,
cotainerid:"game_cotainer",
init:function(_num){
console.log(‘init‘);
game.wid_num = _num || 3;
console.log( game.wid_num );
var max_num = Math.pow( game.wid_num ,2);
var arr=[];

var i = 0;
while(i < max_num)
{
arr[i] = ++i;
}

game.redraw(arr);
},
rand:function(_num){
console.log(‘rand‘);
game.wid_num= _num;
console.log(game.wid_num);
var max_num = Math.pow( game.wid_num ,2);
var arr=[];

var i = 0;
while(i < max_num)
{
arr[i] = ++i;
}
var ran_arr=[];
// 随机生成后 数组第一个元素必为1
ran_arr[0]=1;
arr.splice(0,1);

var j = 0;
var arr_l = arr.length;
var tmp ;

while(arr_l)
{
tmp = Math.ceil(arr_l * Math.random() );
ran_arr.push(arr[tmp-1]);
arr.splice(tmp-1,1);
arr_l = arr.length;
}

game.redraw(ran_arr);

},
redraw:function(arr){
console.log(‘redraw‘);
var htm_container="" ;
var m,n;
for (m=0;m<=game.wid_num; m++)
{
htm_container += "<tr>";
for(n=0;n<game.wid_num;n++)
{

if(m ==0 && n == 0)
{
htm_container += ‘<td class="canmove blank" value="-1" ></td>‘;
}
else if(m == 0 && n != 0)
{
htm_container +=‘<td class="fixed"> </td>‘;
}
else if(m != 0)
{
htm_container += (‘<td class="canmove active" value="‘ + ( (m-1)* game.wid_num +n) + ‘">‘ + ( ( (m-1)*game.wid_num +n)+1 )+ ‘ </td>‘ );
}
}
htm_container += "</tr>";
}

if ( htm_container != undefined || htm_container != "" ){
htm_container = ‘<table>‘ + htm_container + ‘</table>‘;
}

if(htm_container != undefined || htm_container != "")
{
$("#"+game.cotainerid).html(htm_container);
arr.forEach(function(item,index){
$($("td.active")[index]).text(item);
});
}

},
move:function(event){
var const_wid_num = game.wid_num ;
var cur_obj = $(this);
var cur_val = cur_obj.attr("value");

var cur_txt = cur_obj.text();

//if she is next to the blank one or special one , then exchange the text of them
var cur_a = Math.floor( parseInt(cur_val) / const_wid_num );
var cur_b = parseInt(cur_val) % const_wid_num;

var bla_obj = $($("td.blank")[0]);
var bla_val = bla_obj.attr("value");

var bla_a = Math.floor( parseInt(bla_val) / const_wid_num );
var bla_b = parseInt(bla_val) % const_wid_num;

var i =0;

if(cur_val == 0 && bla_val == -1 )
{
game.exchange(bla_obj,cur_obj);

}
else if(bla_val == -1 && cur_val != 0 && cur_b == 0 ){
var nextobj = $($(‘td[value="0"]‘)[0]);
game.exchange(bla_obj,nextobj);
bla_obj = nextobj;
var nextval = parseInt( nextobj.attr("value") ) + game.wid_num;
nextobj = $($(‘td[value=‘ + nextval + ‘]‘)[0]);
while(nextval <= cur_val ){
game.exchange(bla_obj,nextobj);
bla_obj = nextobj;
nextval = parseInt( nextobj.attr("value") ) + game.wid_num;
nextobj = $($(‘td[value=‘ + nextval + ‘]‘)[0]);
}

}
else if(cur_val == -1 && bla_val == 0)
{
game.exchange(bla_obj,cur_obj);

}else if( cur_val == -1 && bla_b == 0 && bla_val != 0 ){

//var nextobj = blankobj;
var nextval = parseInt( bla_obj.attr("value") ) - game.wid_num;
var nextobj = $($(‘td[value=‘ + nextval + ‘]‘)[0]);
while(nextval >= cur_val){
game.exchange(bla_obj,nextobj);
bla_obj = nextobj;
nextval = parseInt( nextobj.attr("value") ) - game.wid_num;
nextobj = $($(‘td[value=‘ + nextval + ‘]‘)[0]);
}

if(cur_val == -1){
nextobj = $($(‘td[value="-1"]‘)[0]);
game.exchange(bla_obj,nextobj);
}
}
else if(cur_a == bla_a && cur_b > bla_b ){
var nextval = parseInt( bla_obj.attr("value") ) + 1 ;
var nextobj = $($(‘td[value=‘ + nextval + ‘]‘)[0]);
while(nextval <= cur_val){
game.exchange(bla_obj,nextobj);
bla_obj = nextobj;
nextval = parseInt( nextobj.attr("value") ) + 1;
nextobj = $($(‘td[value=‘ + nextval + ‘]‘)[0]);
}

}
else if(cur_a == bla_a && cur_b < bla_b ){
var nextval = parseInt( bla_obj.attr("value") ) - 1 ;
var nextobj = $($(‘td[value=‘ + nextval + ‘]‘)[0]);
while(nextval >= cur_val){
game.exchange(bla_obj,nextobj);
bla_obj = nextobj;
nextval = parseInt( nextobj.attr("value") ) - 1;
nextobj = $($(‘td[value=‘ + nextval + ‘]‘)[0]);
}

}
else if( cur_b == bla_b && cur_a < bla_a ){
var nextval = parseInt( bla_obj.attr("value") ) - game.wid_num ;
var nextobj = $($(‘td[value=‘ + nextval + ‘]‘)[0]);
while(nextval >= cur_val){
game.exchange(bla_obj,nextobj);
bla_obj = nextobj;
nextval = parseInt( nextobj.attr("value") ) - game.wid_num;
nextobj = $($(‘td[value=‘ + nextval + ‘]‘)[0]);
}

}
else if( cur_b == bla_b && cur_a > bla_a ){
var nextval = parseInt( bla_obj.attr("value") ) + game.wid_num ;
var nextobj = $($(‘td[value=‘ + nextval + ‘]‘)[0]);
while(nextval <= cur_val){
game.exchange(bla_obj,nextobj);
bla_obj = nextobj;
nextval = parseInt( nextobj.attr("value") ) + game.wid_num;
nextobj = $($(‘td[value=‘ + nextval + ‘]‘)[0]);
}

}
else if( (cur_a == bla_a && cur_b == (bla_b + 1) ) || //空白在
(cur_a == bla_a && cur_b == (bla_b - 1) ) ||
(cur_b == bla_b && cur_a == (bla_a + 1) ) ||
(cur_b == bla_b && cur_a == (bla_a - 1) ) )
{
game.exchange(bla_obj,cur_obj);
/*
cur_obj.removeClass("active");
cur_obj.addClass("blank");
bla_obj.removeClass("blank");
bla_obj.addClass("active");

cur_obj.text("");
bla_obj.text(cur_txt);
*/
}

if(cur_val == -1)
{
game.success();
}
},
exchange:function(blankobj, nextobj ){

var nexttxt = nextobj.text();
nextobj.removeClass("active");
nextobj.addClass("blank");
blankobj.removeClass("blank");
blankobj.addClass("active");

nextobj.text("");
blankobj.text(nexttxt);
},
success:function(){

$("td.canmove").not($("td.blank")).each(function(index, domobj){

var val = parseInt($(domobj).attr("value"));
var txt = parseInt( $(domobj).text() );
b_cor = val == txt -1 ;

return b_cor;

});

if ( true == b_cor)
{
alert("congratulation!!!!");
}
}
};

方格拼图游戏2(javascript以类的形式实现)+增加批量移动

时间: 2024-10-12 07:24:52

方格拼图游戏2(javascript以类的形式实现)+增加批量移动的相关文章

Java_Class 16方格拼图游戏

public class Main { public static void main(String[] args) { // TODO Auto-generated method stub GameFrame frame = new GameFrame(); frame.setTitle("Game"); } } import java.awt.*; import java.awt.event.*; import java.util.Random; import javax.swin

JavaScript写一个拼图游戏

拼图游戏的代码400行, 有点多了, 在线DEMO的地址是:打开: 因为使用canvas,所以某些浏览器是不支持的: you know: 为什么要用canvas(⊙o⊙)?  因为图片是一整张jpg或者png, 我们要用把图片导入到canvas画布, 然后再调用上下文context的getImageData方法, 把图片处理成小图, 这些小图就作为拼图的基本单位: 如何判断游戏是否结束, 或者说如何判断用户拼成的大图是正确的? 我们就要在刚刚生成的小图上面添加自定义属性, 后期在小图被移动后再一

类似拼图游戏设计

客户端设计 1.如何绘制? 分上下两层,下层为最终图片,上层尺寸和下层一致,并将上层分割为 m 行 n 列的方格. 2.方格位置如何设定? m 行 n 列的方格,设定左上角坐标为(0,0),那么最右下角坐标为( (m-1) , (n-1) ). 3.如何定义方格对象,及方格拥有什么方法和属性? 方格Pane有4个属性: locationX,locationY,PaneState,visitor. (locationX,locationY)组成方格位置信息: PaneState包含3种状态,VIS

程序设计 之 C#实现《拼图游戏》 (下) 原理篇

前言:在 http://www.cnblogs.com/labixiaohei/p/6698887.html 程序设计 之 C#实现<拼图游戏>(上),上传了各模块代码,而在本文中将详细剖析原理,使读者更容易理解并学习,程序有诸多问题,欢迎指出,共同学习成长! 正文: 拼图是一个非常经典的游戏,基本每个人都知道他的玩法,他的开始,运行,结束.那么,当我们想要做拼图的时候如何入手呢?答案是:从现实出发,去描述需求(尽量描述为文档),当我们拥有了全面的需求,就能够提供可靠的策略,从而在代码中实现,

拼图游戏-从基础到应用玩转手势变化。

小方块相关的类 主界面的布局 打开图片选择图片 拼图的各个小方块的形成过程 小方块的点击事件和手势判断过程 游戏开始打乱方块以及游戏结束时弹出Toast提示的方法 相信大家在小的时候都玩过拼图游戏,现如今,手机普及,能在手机上玩的游戏越来越多,于是乎,重温小时候,编写这个简易拼图游戏,而且也能进一步加深android的一些基础知识. 老规矩,先是效果图~: 这里我把为了演示效果,把图片打乱的很少,在代码里可以更改. 首先,有个默认的图片,可以用来拼图,也可以选择你喜欢的图片进行拼图,拼图的过程会

一款html拼图游戏详解

本文是爱编程原创翻译,转载请看清文末的转载要求,谢谢合作! 游戏介绍 这篇文章是献给web游戏开发者用简单的开发工具开发一款游戏.此文介绍了用html.css.javascript只需简单和几个步骤开发一款2d游戏.在这里,我要呈现给大家如何创建一款拼图游戏,在这个游戏中你可以拖动小图块来拼成完整的大图. 点击这里查看游戏效果. 游戏规则 游戏规则非常简单,你只要拖动被切碎的图片块来组成完整的大图.需要用正确的方法才能最终拼成完整的图片.在游戏中拖动小图片的次数将被统计下来.所以.应该尽量用最少

Vue.js实现拼图游戏

Vue.js实现拼图游戏 之前写过一篇<基于Vue.js的表格分页组件>的文章,主要介绍了Vue组件的编写方法,有兴趣的可以访问这里进行阅读:http://www.cnblogs.com/luozhihao/p/5516065.html 前言 为了进一步让大家了解Vue.js的神奇魅力,了解Vue.js的一种以数据为驱动的理念,本文主要利用Vue实现了一个数字拼图游戏,其原理并不是很复杂,效果图如下: demo展示地址为:https://luozhihao.github.io/vue-puzz

拼图游戏(数码还原游戏)算法的研究

将问题一般化,在M*N的方格里有M*N-1个不同元素和一个空元素,只有空元素可以与上下左右相邻的元素交换位置.M*N方格中M*N-1个元素和一个空元素的位置确定一个图形.拼图游戏的问题是:一个图形经过一连串的交换能否得到另一个图形,如何得到.从交换方式的可逆性看出这种关系满足等价三性质,如果图形A通过交换变成图形B我们则称它们是等价的.把M*N-1个元素用1至M*N-1编号,空元素编号0.然后展成一个排列.每个图形对应一个排列.确定了展开方式,图形和排列是一一对应的.这里用到的展开方式是行优先的

拼图游戏(数码还原游戏)的实现

一.游戏规则 首先,这里的拼图游戏是滑块拼图,类似于华容道,游戏者通过移动拼图块将拼图还原为初始形状.关于拼图,常见的有3x3,4x4,多的以至于有16x16不等.一般块数越多拼图越复杂. 这里对游戏规则进行较严格的定义: 1. 游戏初始化时,将图形分为nxn个正方形块,随机摆放在原图形位置.一般以原图形右下角的一块为空白块,已进行移动.这里初始化时,也令新图形的右下角为空. 2. 游戏中,拼图的移动只能向空白块移动.从移动方向来说,有两种情况,分别是横移与纵移. 3. 游戏的胜利条件是将打乱的