真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

javascript棋盤,javascript棋盤隨機

javascript 五子棋 如何控制棋子落在棋盤上

首先你需要考慮棋盤的焦點實際上只是一層背景圖,比如:50x50像素一個位置的話,貼圖應(yīng)該正好錯位25x25左右,這樣的話看起來你的棋子就像在棋格交點上了

10年積累的成都網(wǎng)站設(shè)計、網(wǎng)站制作經(jīng)驗,可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認識你,你也不認識我。但先建設(shè)網(wǎng)站后付款的網(wǎng)站建設(shè)流程,更有新巴爾虎右免費網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

大概是這給意思

div id="bak1" style="top:-25px; left:-25px;position: absolute; background: url("table.png") transparent;"/div

div id="point" style="top:0px; left:0px;position: absolute;"棋子/div

如何用javascript實現(xiàn)圍棋游戲

head

meta http-equiv="Content-Type" content="text/html;charset=utf-8" /

title禪棋傳說/title

style type="text/css"

div { position: absolute; width: 23px; height: 23px; }

.B0 { background-image: url('B0.gif'); }

.B1 { background-image: url('B1.gif'); }

.B2 { background-image: url('B2.gif'); }

.B3 { background-image: url('B3.gif'); }

.B4 { background-image: url('B4.gif'); }

.B5 { background-image: url('B5.gif'); }

.B6 { background-image: url('B6.gif'); }

.B7 { background-image: url('B7.gif'); }

.B8 { background-image: url('B8.gif'); }

.BX { background-image: url('BX.gif'); }

.D0 { background-image: url('D0.gif'); }

.D1 { background-image: url('D1.gif'); }

.C0 { background-image: url('C0.gif'); }

.C1 { background-image: url('C1.gif'); }

/style

/head

body

script type="text/javascript"

//![CDATA[

Array.prototype.indexOf = function (item) //給數(shù)組擴展一個indexOf方法,用來檢索是否為"已知元素"

{

for ( var i=0; ithis.length; i++)

if (this[i] == item)

return i;

return -1;

};

var Site = //定義一個棋位類

{

Create: function(x, y) //棋位類的構(gòu)造函數(shù)

{

var me = document.createElement("div"); //建一個div對象,將其擴展并封裝成棋位。

document.body.appendChild(me); //附加到DOM樹,實現(xiàn)棋位的呈現(xiàn)。

me.x = x; //記錄棋位的X坐標

me.y = y; //記錄棋位的Y坐標

me.style.left = x * 23 + "px"; //設(shè)置棋位水平方向的絕對位置

me.style.top = y * 23 + "px"; //設(shè)置棋位垂直方向的絕對位置

// var s = ((x-9)%9?0:(x-9)/9)+1+(((y-9)%9?0:(y-9)/9)+1)*3; //計算背景式樣,這個算法有冗余,簡化為下面的算法.

var s = parseInt((x-9)/9)+1+(parseInt((y-9)/9)+1)*3; //計算背景式樣

// me._backStyle = "B" + ((s==4(x/3)%2==1(y/3)%2==1) ? "X" : s);

me._backStyle = "B" + (((x/3)%2==1(y/3)%2==1) ? "X" : s);

me.Fill = this.Fill; //關(guān)聯(lián)一個填充棋位的方法。

me.Tight = this.Tight; //關(guān)聯(lián)計算緊氣方法。

me.Kill = this.Kill; //關(guān)聯(lián)計算死子方法。

me.onclick = this.Play; //綁定onclick事件到Play方法。

me.Fill(); //初始填充空子。

return me; //返回棋位對象,其實是一個封裝了的div對象。

},

Fill: function(dot, going) //填充棋子的方法,going~~是否"當前步".

{

if ( dot == undefined )

this.className = this._backStyle //無子,就設(shè)置為背景式樣。

else

this.className = (going ? "C" : "D") + dot; //有子,區(qū)別對待"當前步"

this.dot = dot; //保存棋子狀態(tài)

},

Play: function() //行棋方法,由onclick事件觸發(fā)

{

if ( this.dot == undefined ) //落子點必須為無子狀態(tài),否則不處理.

{

var deads = this.Kill(current^1); //計算可以殺死的子,current為當前顏色,則current^1為對方顏色

if (deads.length == 1 this == rob) return; //確認的打劫狀態(tài)后,直接拒絕;如果此步落子可以提不止一子,則不是打劫

for(var i=0; ideads.length; i++)

deads[i].Fill(); //按照死子列清空,one by one

if(i==1)

rob = deads[0] //如果此步只提了一個子,記錄被提位置為打劫位置.

else if (i0 || !this.Tight(current)) //這里有一個影響代碼效率的判斷,對于能產(chǎn)生提子的操做,不需要再判斷是否"緊氣禁入";此外,如果要引入"變窮為禁"的規(guī)則,這里需要改變算法

rob = null //清打劫位,這個條件是判斷,如果能夠提多子,或者不是禁止著手,則解除"打劫"狀態(tài)

else return; //這里對應(yīng)的返回,應(yīng)該是只有無氣禁入點的情況.

sound.play(); //落子有聲!

var step = Tracks[Tracks.length-1];

if(step) step.site.Fill(step.site.dot); //更新此前一"步"的子的位圖

this.Fill(current, true); //填入當前"步"的子

Tracks.push( new Step(this, deads) );

current ^= 1; //用1來異或,正好反轉(zhuǎn)黑白棋子。

var disline = document.getElementById('list');

disline.value += ((current ? '黑:': '白:')+Tracks[Tracks.length-1].site.x+' '+Tracks[Tracks.length-1].site.y+'\n');

disline.scrollTop = disline.scrollHeight;

};

},

Tight: function (dot) //計算緊氣的塊,此時如果dot==undefined,則對應(yīng)提子的遍歷,this指向當前點.

{

var life = this.dot == undefined ? this : undefined; //life為"氣"的定義;當前位無子則算一口氣,對應(yīng)落子的遍歷,當前位置必然無子.

dot = dot == undefined ? this.dot : dot; //這個邏輯是對應(yīng)提子的遍歷

if (dot == undefined) return undefined;

var block = this.dot == undefined ? [] : [this]; //定義的"塊",在提子的遍歷中,發(fā)現(xiàn)子就放入塊,再判斷有多少"氣".

var i = this.dot == undefined ? 0 : 1;

var site = this;

while (true)

{

for(var dx=-1;dx=1;dx++) for(var dy=-1;dy=1;dy++) if(!dx^!dy)

{

link = GetSite(site.x + dx, site.y + dy);

if (link) //判斷目標位置的上下左右,有位則繼續(xù),"無位"對應(yīng)棋盤以外的區(qū)域.

if (link.dot != undefined) //有子,則判斷是否為同色,連"塊"

{

if (link.dot == dot block.indexOf(link) 0 )

block.push(link); //此一段為"塊"的遍歷,條件是找四周的同色子,找到后判斷是否為新"知道","新"則放入"塊"

}

else if (!life) //無子,則更新"氣"

life = link

else if (life != link)

return undefined; //在提子的遍歷中,如果發(fā)現(xiàn)有兩"氣"了,則無須再算

};

if ( i = block.length) break; //"塊"的遍歷結(jié)束條件為,列表的最后一個對象沒有產(chǎn)生新的相鄰子.

site = block[i];

i ++;

};

return block; //返回只有一口氣的塊,在提子的遍歷中,這對應(yīng)了可能被提掉的子列,再去判斷是否為"打劫"

},

Kill: function(dot) //計算殺死的子,目前this指向落子點,dot指向需要判斷的死子顏色.

{

var deads = []; //定義死子列

for(var dx=-1;dx=1;dx++) for(var dy=-1;dy=1;dy++) if(!dx^!dy) //異或,有且只有一個為真,可對應(yīng)到相鄰子.

{

var site = GetSite(this.x + dx, this.y + dy);

if (site (site.dot == dot))

{

var block = site.Tight(); //分別對上下左右進行遍歷,查找被緊氣的"塊",然后合并成為"死子列"

if (block) deads = deads.concat(block); //concat 合并操作,此操作并未識別"同項",僅以圍棋規(guī)則判斷,對"打劫沒有影響".

//如果需要準確的提子數(shù)目統(tǒng)計,這里的算法需要更新.

};

};

return deads; //返回可以提子的死子塊

}

}; //棋位類 Site

var Board = new Array(19); //全局的Board數(shù)組,表示棋盤。

var Tracks = []; //行棋線索數(shù)組,數(shù)組元素是Step對象。

var current = 0; //當前要下的子,0表示黑子,1表示白子,交替。

var rob = null; //如果有打劫時,記錄打劫位置。

for(var x = 0 ; x 19; x++)

{

Board[x] = new Array(19);

for(var y = 0; y 19; y++)

Board[x][y] = Site.Create(x, y); //按位置創(chuàng)建棋位對象。

};

if (navigator.userAgent.indexOf(' MSIE ') -1) //為IE瀏覽器構(gòu)造聲音對象

{

var sound = document.body.appendChild(document.createElement("bgsound"));

sound.play = function(){this.src = "play.wav"};

}

else //為Firefox等其他瀏覽器構(gòu)造聲音對象

{

var sound = document.body.appendChild(document.createElement("span"));

sound.play = function(){this.innerHTML = "bgsound src='play.wav'"};

};

document.body.oncontextmenu = function() //右鍵驅(qū)動悔棋事件

{

var step = Tracks.pop();

if (step)

{

step.site.Fill();

for (var i=0; istep.deads.length; i++)

step.deads[i].Fill(current);

step = Tracks[Tracks.length-1];

if (step) step.site.Fill(current, true)

current ^= 1; //反轉(zhuǎn)黑白棋子。

};

return false; //不彈出菜單。

};

function GetSite(x, y) //從棋盤取棋位的函數(shù),越界不拋出異常。

{

if (x=0 x19 y=0 y19)

return Board[x][y];

};

function Step(site, deads) //棋步類,記錄每一步棋的狀態(tài)

{

this.site = site; //記錄棋步的位置

this.deads = deads; //記錄被當前棋步殺死的棋子集合

};

function PrintWay() //行棋路線

{

var str='', coler='';

for (var i=0;i Tracks.length;i++)

{

step = Tracks[i];

coler = (i%2) ? "白" : "黑";

str=str+"第"+(i+1)+"步"+coler+"方 X"+step.site.x+" Y"+step.site.y+" \n";

}

alert(str);

}

document.body.ondblclick = PrintWay;

document.onkeypress = function(event)

{

var k = (window.event ? window.event.keyCode : event.which) - 49; //按'1'可以進入自動擺棋操作,'1'=0x31=49

if(k0 || k1) return;

for(var x=0; x19; x++) for(var y=0; y19; y++) Board[x][y].Fill();

Tracks.length = 0;

current = 0;

with(goes[k]) for(var i=0; ilength;i+=3)

Board[charCodeAt(i+1)-65][charCodeAt(i)-65].Fill(charCodeAt(i+2)-48);

};

/body

/html

用javascript編寫要求輸出國際象棋棋盤

#include "stdio.h"

main()

{

int i,j;

for(i=0;i8;i++)

 {

for(j=0;j8;j++)

 if((i+j)%2==0)

printf("%c%c",219,219);

 else

printf(" ");

 printf("\n");

 }

}


分享文章:javascript棋盤,javascript棋盤隨機
當前鏈接:http://weahome.cn/article/dseocge.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部