簡単な記憶ゲームを書きました。16枚のカード(画像ボタン)の1つをクリックすると、それが裏返され、果物(バナナの写真など)が表示されます。別のカードをクリックすると、裏返され、果物が表示されます。次に、画像が一致した場合、1〜2秒後に、これら2つのタイルが空白に置き換えられます(つまり、ボードから削除されます)。これは、すべてが削除されるまで発生します。また、果物の名前は口頭で読み上げられます。上記のすべてが完全に機能し、最初のカードが裏返され、画像が表示されます。ただし、2番目のカードをクリックすると、果物が表示されることはありません。正しい果物の名前が話されており、最初のカードのクリックと同様のコードを2番目のカードのクリックに使用しました。私がどこで失敗したかわかりますか?
以下の私のコードの重要なセクションは、以下のように表示されます:「// 2つの画像が選択されました!それらは一致しますか?」
最初の画像をクリックすると更新されます。ただし、最初の果物がクリックされた= 2番目の果物がクリックされたかどうかに関係なく、空白のタイルは画像を表示するために「回転」されません。
コード:....続き
gridview.setOnItemClickListener(new OnItemClickListener()
{
public void onItemClick(AdapterView<?> parent, View v, int position, long id)
{
int fruitselected = (int)FruitToChooseFromImages.get(position);
// start
if (position == firstfruitselpos && imagesSelectedThusFar == 1 || fruitselected == R.drawable.blank)
{
// (if blank icon clicked) then DO NOTHING
}
else
{ // a valid fruit has been selected, so firstly, say the fruit's name
int soundtoplaynow = getrightsound(position, fruitselected);
SoundManager.playSound(soundtoplaynow, 1);
// next
if (imagesSelectedThusFar == 0)
{
imagesSelectedThusFar = 1;
firstfruitselected = fruitselected; firstfruitselpos = position;
FruitToDisplayImages.set(position, fruitselected);
MyGridviewAdapter1.notifyDataChanged();
gridview.invalidateViews();
}
else // so two images have been selected! do they match?
{
imagesSelectedThusFar = 0; // has reached 2, so reset to zero
secondfruitselected = fruitselected; secondfruitselpos = position;
FruitToDisplayImages.set(position, fruitselected);
MyGridviewAdapter1.notifyDataChanged();
gridview.invalidateViews();
try{ Thread.sleep(1500); }catch(InterruptedException e){ }
if (firstfruitselected == secondfruitselected) //yes they match
{
SoundManager.playSound(50, 1);// play happy sound
//switch fruit image to blank and display blank at position clicked **
FruitToDisplayImages.set(position, R.drawable.blank);
FruitToChooseFromImages.set(position, R.drawable.blank);
FruitToDisplayImages.set(firstfruitselpos, R.drawable.blank);
FruitToChooseFromImages.set(firstfruitselpos, R.drawable.blank);
MyGridviewAdapter1.notifyDataChanged();
gridview.invalidateViews();
fruitleft = (fruitleft - 2);
}
else // nope, dont match
{ // you selected the wrong fruit, sorry.
SoundManager.playSound(60, 1); // play UNhappy sound
try{ Thread.sleep(1500); }catch(InterruptedException e){ }
FruitToChooseFromImages.set(firstfruitselpos, firstfruitselected);
FruitToDisplayImages.set(firstfruitselpos, R.drawable.blanktile);
FruitToDisplayImages.set(secondfruitselpos, R.drawable.blanktile);
MyGridviewAdapter1.notifyDataChanged();
gridview.invalidateViews();
}
}
}
// end
if (fruitleft == 0)
{ //end game - add code here
SoundManager.playSound(70, 1); // play big happy congrats sound
} }
});
等