2010-11-18 40 views
0

我已經件陣列中映射出和它打印就好PHP移動檢查件2

$board = array(
      array('1','rs','1','rs','1','rs','1','rs'), 
      array('rs','1','rs','1','rs','1','rs','1'), 
      array('1','rs','1','rs','1','rs','1','rs'), 
      array('rs','bs','rs','bs','rs','bs','rs','bs'), 
      array('bs','rs','bs','rs','bs','rs','bs','rs'), 
      array('2','bs','2','bs','2','bs','2','bs'), 
      array('bs','2','bs','2','bs','2','bs','2'), 
      array('2','bs','2','bs','2','bs','2','bs') 
      ); 

1 =黑片
2 =紅色件
RS =紅色正方形
BS =黑色正方形

此代碼解析播放機的輸入:例如,從F2到(0,0)座標

function parseSquareFrom($square) { 
    if (strlen($square) != 2) { 
     return FALSE; 
    } 

    $coords = array(ord('A') - ord($square[0]), $square[1] - 1); 

    // Perform bounds-checking. 
    if ($coords[0] < 0 || $coords[0] > 7 || $coords[1] < 0 || $coords[1] > 7) { 
     return FALSE; 
    } 

    return $coords; 
} 

我已經重複了同樣的功能的輸入(到玩家想要移動的一塊

我的問題是下一個代碼與功能移到高於一個有效方式

$board[$coords1[0]-1][$coords1[1]+1] = $board[$coords[0]][$coords[1]]; 
    $board[$coords[0]][$coords[1]] = 0; 

    //eating action 
    $board[$coords1[0]][$coords1[1]] = 0; 
    $board[$coords1[0]-2][$coords1[1]+2] = $board[$coords[0]][$coords[1]]; 

$way = ($_POST['way'] === 'up')? 1:-1; 

$way = ($_POST['way'] === 'down')? -1:+1; 



    //if player is 'up' then the value of $way is 1 so 
     $board[$x+(-1*$way)][$y+(1*$way)] = $board[$coords[0]][$coords[1]]; // position 2,2 becomes 1,3 
    //if player is not 'up' then the value of $way is -1 so 
     $board[$x+(-1*$way)][$y+(1*$way)] = $board[$coords[0]][$coords[1]]; // position 2,2 becomes 3,1 

我計劃有一個功能來更新屏幕上的平鋪運動,因此當棋子移動到下一個方塊時它會突出顯示棋子

這是使用序列化到文件來保存開始位置,移動,國王和皇后職位

+0

一樣好。您通過點擊分數下方的箭頭和答案左側的箭頭接受答案。你只能做一個答案。您也可以通過點擊答案旁邊的向上箭頭爲您認爲有用的答案投票。 – 2010-11-19 00:12:29

+0

好吧,我同意我沒有了投票人對這一點我很抱歉,但我已經多次表示感謝,我向大家道歉我激怒了這個問題 – hgbso 2010-11-19 00:32:28

+0

如何將我更新板時,有運動 – hgbso 2010-11-19 19:16:16

回答

1

我要去假設$coords就像是對這個問題的第一部分提出了$_POST變量。如果是這樣的話,你的代碼的第一部分是正確的:

$board[$coords1[0]-1][$coords1[1]+1] = $board[$coords[0]][$coords[1]]; 
$board[$coords[0]][$coords[1]] = 0; 

這對角移動一塊一步了,就在板。 另一方面,第二部分跳過了實際的「吃飯」行爲。除非用戶指定的位置是敵人所在的位置。在這種情況下,你的代碼會起作用。


至於綁定檢查你做什麼,你是不是防彈因爲在吃的舉動增加2,而一塊毗鄰邊界將導致你的代碼試圖將一塊地方出來的板。所以你可以根據移動來檢查邊界,所以如果移動是標準的對角線移動,你應該檢查結束位置是否在限制範圍內,而不是起始位置,因爲你以前假設棋子位於正確的位置。

+0

是$ _ POST會從變量$ square將用戶輸入到From表單到該函數 – hgbso 2010-11-19 00:00:49

+0

用戶的觀點你的意思是$ way變量,它查看哪個玩家從上到下移動以及哪個玩家從下到上移動是的,我會嘗試執行該代碼後,我得到這個工作 – hgbso 2010-11-19 00:03:02

+0

@ hgbso:是的,我的意思是我建議的'$ way'變量,我很高興你正在考慮它。 – 2010-11-19 00:04:03

1

我覺得你有幾個問題

$board[$coords1[0]-1][$coords1[1]+1] = $board[$coords[0]][$coords[1]]; 

如果$ COORDS [1] == 7(這似乎被允許),那麼$ COORDS [1] +1 == 8這是出界。更不用說我們稍後看到的座標+/- 2。

你可能不希望「BS」 /「RS」在你的存儲,所有這一切可以推斷。

$getSquareColor = function($x,$y){return ($x+$y)/2 == 1 ? 'red' : 'black';} //or better yet, const or enum 


function getSquareColor($x, $y) //alternatively 
{ 
    if (($x+$y) % 2 == 0) return 'black'; 
    else return 'red'; 
} 

PS - 如果你把這些美元符號的功能就是在約定的JavaScript

+0

'bs','rs'是黑色和紅色方塊映射到另一個陣列的板陣列的圖像值,這些陣列稱爲塊,就像黑色和紅色塊一樣,或者有另一種方式創建一個有紅色和黑色方格圖案的棋盤顯示器 – hgbso 2010-11-19 00:11:04

+0

我明白了這對圖像來說很方便,但它使得錄製動作變得更加複雜一些。我想你可以去任何一個方向。你的客戶端是否得到數組,或者你是通過PHP渲染所有東西,然後發送圖像?給客戶端的陣列會讓你不允許用戶選擇無效的移動而不發送請求,所以這很好 – 2010-11-19 00:20:49

+0

即時通訊嘗試使用序列化來保存文本文件中的位置 – hgbso 2010-11-19 00:22:43