0

さて、これが私の問題です。私はjavascriptに少し慣れていないので、plzは私に耐えます。私はこの問題をどこか他の場所で見つけていません、そして実際に私は私の意欲に対応しないのは私の論理だと思います;-)

私はphpとjavascriptでメモリゲームをセットアップしています。私の問題は、clickCard関数を最初に実行すると、変数firstClickがinnerHTML値でTrueに設定され、secondClickなどが非常に細かく実行されることですが、推測が間違っていると、secondClickだけが赤になります。これは、最初の引数が静的であると信じているため(したがって、firstClickの色の値が保存されるため)、これを解決する方法を思い付くことができないためです。if else(firstClick!= 0 && firstClick!= secondClick){code}などの条件を作成するなど、さまざまなことを試しました。

私を助けることができる人はいますか?

これは私のコードです:

var firstClick = new Boolean();
firstClick.toString();

var secondClick = new Boolean();
secondClick.toString();
function clickCard(elem){               

    if(firstClick == 0){
        firstClick = document.getElementById(elem.id).innerHTML;
                    elem.style.backgroundColor = "green";   
        //alert(firstClick);
        }

    else{

        secondClick = document.getElementById(elem.id).innerHTML;
        //alert(secondClick);
        elem.style.backgroundColor = "green";


            if(firstClick == secondClick){
                alert(firstClick +" equals "+ secondClick);
                firstClick = new Boolean();
                secondClick = new Boolean();
            }

            else {
                alert(firstClick + " equals not " + secondClick);
                firstClick = new Boolean();
                secondClick = new Boolean();
                document.getElementById(elem.id).style.backgroundColor="red";
            }   
    }
}
4

3 に答える 3

1

最初の要素を実際に赤に変更するように指示しているわけではありません。最初にクリックした要素を変数に保存し、2番目の要素を設定すると同時に設定する必要があります。

注意点として、おそらくロジックを再考する必要があります。まず、ゲームコードをクロージャーに入れ、そこにボードを生成して、外部からアクセスできないようにします。これにより、ソースを見るだけで不正行為を行うことができなくなります。次に、カードがクリックされたら、その内容を変更してカードの値を表示し、カードを裏返したい場合はもう一度空白にします。

于 2013-02-06T09:53:00.760 に答える
1

コードにいくつかの問題があります。私の変更を見て、それらを理解しようとすると、それはうまくいくはずです:

  1. ブール値をで初期化するvar bool = true/false;
  2. ブール値とdom要素を混在させないでください
  3. タイルを別々の変数に保存します
  4. 実際に最初のタイルの色を「赤」に設定します

コード:

var firstClick = true;
var piece1;
var piece2;

function clickCard(elem){               

    if(firstClick){
        piece1 = document.getElementById(elem.id);
        piece1.style.backgroundColor = "green";
        firstClick = false;  
    } else {

        piece2 = document.getElementById(elem.id);
        piece2.style.backgroundColor = "green";

        if(piece1.innerHTML == piece2.innerHTML){
            alert(firstClick +" equals "+ secondClick);
        } else {
            alert(firstClick + " equals not " + secondClick);
            piece1.style.backgroundColor="red";
            piece2.style.backgroundColor="red";
        }   
        firstClick = true;
    }
}

高度な方法は、これをクロージャーに入れて、firstClickとpiece1 / 2の「内部」値を保護することですが、それは別の話です;)

于 2013-02-06T10:01:44.553 に答える
0

innerHTMLタイプの変数に値を割り当てていますBoolean。このコードからすべてが明らかというわけではありません。ブールオブジェクトは、「true」または「false」の2つの値を表します。またfirstclick.toString()、変数の文字列値を返し、firstclick他には何もしません。

これが意図したものであるかどうかを確認してください。

var Clicked = true;
var First, Second;

function clickCard(elem){               

    if(Clicked){
        First = document.getElementById(elem.id);
        elem.style.backgroundColor = "green";   
        Clicked = false;
    } else {

        Second = document.getElementById(elem.id);
        elem.style.backgroundColor = "green";

        if(First.innerHTML == Second.innerHTML){
            alert(First.innerHTML +" equals "+ Second.innerHTML);
        } else {
            alert(First.innerHTML  + " equals not " + Second.innerHTML );
            First.style.backgroundColor="red";
            Second.style.backgroundColor="red";
        }   
        First = "";Second="";
        Clicked = true;
    }
}
于 2013-02-06T09:58:08.570 に答える