2017-07-12 12 views
0

私は 'Tic Tac Toe'ゲームを作っています。 3x3フィールド、基本。今私はいくつかのロジックを加え、ランダムなコンピュータのために を選択しました。しかし、フィールドをクリックするといつか起こりますが、コンピュータは動きません。私は 問題はarraylistにあると思う。私のXMLとJavaファイルをチェックアウト:Android tic tac toeゲーム - 論理問題

MY XMLファイル:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.tictactoe.ThirdActivity" 
    android:background="@color/background" 
    android:padding="16dp" 
    android:orientation="vertical"> 

    <LinearLayout 
     android:id="@+id/firstLayout" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_weight="4" 
     android:elevation="1dp" 
     android:orientation="horizontal"> 

     <Button 
      android:id="@+id/buttonOne" 
      android:layout_width="wrap_content" 
      android:layout_height="120dp" 
      android:layout_weight="1" 
      android:background="@color/buttonColor" 
      android:onClick="onClickButton" 
      android:layout_margin="5dp" 
      android:text=" "/> 

     <Button 
      android:id="@+id/buttonTwo" 
      android:layout_width="wrap_content" 
      android:layout_height="120dp" 
      android:layout_weight="1.00" 
      android:background="@color/buttonColor" 
      android:onClick="onClickButton" 
      android:layout_margin="5dp" 
      android:text=" "/> 

     <Button 
      android:id="@+id/buttonThree" 
      android:layout_width="wrap_content" 
      android:layout_height="120dp" 
      android:layout_weight="1" 
      android:background="@color/buttonColor" 
      android:onClick="onClickButton" 
      android:layout_margin="5dp" 
      android:text=" "/> 
    </LinearLayout> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="horizontal" 
     android:id="@+id/secondLayout" 
     android:layout_weight="4"> 

     <Button 
      android:id="@+id/buttonFour" 
      android:layout_width="wrap_content" 
      android:layout_height="120dp" 
      android:layout_weight="1" 
      android:background="@color/buttonColor" 
      android:onClick="onClickButton" 
      android:layout_margin="5dp" 
      android:text=" "/> 

     <Button 
      android:id="@+id/buttonFive" 
      android:layout_width="wrap_content" 
      android:layout_height="120dp" 
      android:layout_weight="1" 
      android:background="@color/buttonColor" 
      android:onClick="onClickButton" 
      android:layout_margin="5dp" 
      android:text=" "/> 

     <Button 
      android:id="@+id/buttonSix" 
      android:layout_width="wrap_content" 
      android:layout_height="120dp" 
      android:layout_weight="1" 
      android:background="@color/buttonColor" 
      android:onClick="onClickButton" 
      android:layout_margin="5dp" 
      android:text=" "/> 
    </LinearLayout> 

    <LinearLayout 
     android:id="@+id/thirdLayout" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_weight="4" 
     android:orientation="horizontal"> 

     <Button 
      android:id="@+id/buttonSeven" 
      android:layout_width="wrap_content" 
      android:layout_height="120dp" 
      android:layout_weight="1" 
      android:background="@color/buttonColor" 
      android:onClick="onClickButton" 
      android:layout_margin="5dp" 
      android:text=" "/> 

     <Button 
      android:id="@+id/buttonEight" 
      android:layout_width="wrap_content" 
      android:layout_height="120dp" 
      android:layout_weight="1" 
      android:background="@color/buttonColor" 
      android:onClick="onClickButton" 
      android:layout_margin="5dp" 
      android:text=" "/> 

     <Button 
      android:id="@+id/buttonNine" 
      android:layout_width="wrap_content" 
      android:layout_height="120dp" 
      android:layout_weight="1" 
      android:background="@color/buttonColor" 
      android:onClick="onClickButton" 
      android:layout_margin="5dp" 
      android:text=" "/> 
    </LinearLayout> 

    <LinearLayout 
     android:id="@+id/fourthLayout" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_weight="4" 
     android:orientation="horizontal"> 

     <Button 
      android:id="@+id/button3" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center" 
      android:layout_weight="1" 
      android:text="@string/restart" 
      android:textColor="@color/text"/> 
    </LinearLayout> 

</LinearLayout> 

MY Javaファイル:

package com.tictactoe; 

import android.app.ActionBar; 
import android.app.Activity; 
import android.graphics.Color; 
import android.graphics.drawable.ColorDrawable; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.Toast; 

import java.util.ArrayList; 
import java.util.Random; 

public class ThirdActivity extends Activity { 

    Button buttonOne; 
    Button buttonTwo; 
    Button buttonThree; 
    Button buttonFour; 
    Button buttonFive; 
    Button buttonSix; 
    Button buttonSeven; 
    Button buttonEight; 
    Button buttonNine; 
    ArrayList<Button> myList = new ArrayList<Button>(); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_third); 

     ActionBar actionBar = getActionBar(); 
     actionBar.setBackgroundDrawable(new ColorDrawable(Color.BLACK)); 
     actionBar.setIcon(R.mipmap.tictactoe); 
     actionBar.setTitle("Play Game"); 

     buttonOne = (Button) findViewById(R.id.buttonOne); 
     buttonTwo = (Button) findViewById(R.id.buttonTwo); 
     buttonThree = (Button) findViewById(R.id.buttonThree); 
     buttonFour = (Button) findViewById(R.id.buttonFour); 
     buttonFive = (Button) findViewById(R.id.buttonFive); 
     buttonSix = (Button) findViewById(R.id.buttonSix); 
     buttonSeven = (Button) findViewById(R.id.buttonSeven); 
     buttonEight = (Button) findViewById(R.id.buttonEight); 
     buttonNine = (Button) findViewById(R.id.buttonNine); 


     myList.add(0, buttonOne); 
     myList.add(1, buttonTwo); 
     myList.add(2, buttonThree); 
     myList.add(3, buttonFour); 
     myList.add(4, buttonFive); 
     myList.add(5, buttonSix); 
     myList.add(5, buttonSeven); 
     myList.add(5, buttonEight); 
     myList.add(5, buttonNine); 

    } 


    public void onClickButton(View view) { 
     if (view.equals(buttonOne)) { 
      CharSequence textOne = buttonOne.getText().toString(); 
      if (!textOne.equals(" ")) { 
       Toast.makeText(this, "This filed is not empty, choose another.", Toast.LENGTH_SHORT).show(); 
      } else { 
       buttonOne.setText("X"); 
       buttonOne.setTextColor(Color.GREEN); 
       myList.remove(buttonOne); 

       Button random = myList.get(new Random().nextInt(myList.size())); 
       if (!random.equals(" ")) { 
        random.setText("O"); 
        random.setTextColor(Color.RED); 
       } 
      } 



     } else if (view.equals(buttonTwo)) { 
      CharSequence textTwo = buttonTwo.getText().toString(); 
      if (!textTwo.equals(" ")) { 
       Toast.makeText(this, "This filed is not empty, choose another.", Toast.LENGTH_SHORT).show(); 
      } else { 
       buttonTwo.setText("X"); 
       buttonTwo.setTextColor(Color.GREEN); 
       myList.remove(buttonTwo); 

       Button random = myList.get(new Random().nextInt(myList.size())); 
       if (!random.equals(" ")) { 
        random.setText("O"); 
        random.setTextColor(Color.RED); 
       } 
      } 



     } else if (view.equals(buttonThree)) { 
      CharSequence textThree = buttonThree.getText().toString(); 
      if (!textThree.equals(" ")) { 
       Toast.makeText(this, "This filed is not empty, choose another.", Toast.LENGTH_SHORT).show(); 
      } else { 
       buttonThree.setText("X"); 
       buttonThree.setTextColor(Color.GREEN); 
       myList.remove(buttonThree); 

       Button random = myList.get(new Random().nextInt(myList.size())); 
       if (!random.equals(" ")) { 
        random.setText("O"); 
        random.setTextColor(Color.RED); 
       } 
      } 



     } else if (view.equals(buttonFour)) { 
      CharSequence textFour = buttonFour.getText().toString(); 
      if (!textFour.equals(" ")) { 
       Toast.makeText(this, "This filed is not empty, choose another.", Toast.LENGTH_SHORT).show(); 
      } else { 
       buttonFour.setText("X"); 
       buttonFour.setTextColor(Color.GREEN); 
       myList.remove(buttonFour); 

       Button random = myList.get(new Random().nextInt(myList.size())); 
       if (!random.equals(" ")) { 
        random.setText("O"); 
        random.setTextColor(Color.RED); 
       } 
      } 



     } else if (view.equals(buttonFive)) { 
      CharSequence textFive = buttonFive.getText().toString(); 
      if (!textFive.equals(" ")) { 
       Toast.makeText(this, "This filed is not empty, choose another.", Toast.LENGTH_SHORT).show(); 
      } else { 
       buttonFive.setText("X"); 
       buttonFive.setTextColor(Color.GREEN); 
       myList.remove(buttonFive); 

       Button random = myList.get(new Random().nextInt(myList.size())); 
       if (!random.equals(" ")) { 
        random.setText("O"); 
        random.setTextColor(Color.RED); 
       } 
      } 



     }else if (view.equals(buttonSix)) { 
      CharSequence textSix = buttonSix.getText().toString(); 
      if (!textSix.equals(" ")) { 
       Toast.makeText(this, "This filed is not empty, choose another.", Toast.LENGTH_SHORT).show(); 
      } else { 
       buttonSix.setText("X"); 
       buttonSix.setTextColor(Color.GREEN); 
       myList.remove(buttonSix); 

       Button random = myList.get(new Random().nextInt(myList.size())); 
       if (!random.equals(" ")) { 
        random.setText("O"); 
        random.setTextColor(Color.RED); 
       } 
      } 
     }else if (view.equals(buttonSeven)) { 
      CharSequence textSeven = buttonSeven.getText().toString(); 
      if (!textSeven.equals(" ")) { 
       Toast.makeText(this, "This filed is not empty, choose another.", Toast.LENGTH_SHORT).show(); 
      } else { 
       buttonSeven.setText("X"); 
       buttonSeven.setTextColor(Color.GREEN); 
       myList.remove(buttonSeven); 

       Button random = myList.get(new Random().nextInt(myList.size())); 
       if (!random.equals(" ")) { 
        random.setText("O"); 
        random.setTextColor(Color.RED); 
       } 
      } 
     }else if (view.equals(buttonEight)) { 
      CharSequence textEight = buttonEight.getText().toString(); 
      if (!textEight.equals(" ")) { 
       Toast.makeText(this, "This filed is not empty, choose another.", Toast.LENGTH_SHORT).show(); 
      } else { 
       buttonEight.setText("X"); 
       buttonEight.setTextColor(Color.GREEN); 
       myList.remove(buttonEight); 

       Button random = myList.get(new Random().nextInt(myList.size())); 
       if (!random.equals(" ")) { 
        random.setText("O"); 
        random.setTextColor(Color.RED); 
       } 
      } 
     }else if (view.equals(buttonNine)) { 
      CharSequence textNine = buttonNine.getText().toString(); 
      if (!textNine.equals(" ")) { 
       Toast.makeText(this, "This filed is not empty, choose another.", Toast.LENGTH_SHORT).show(); 
      } else { 
       buttonNine.setText("X"); 
       buttonNine.setTextColor(Color.GREEN); 
       myList.remove(buttonNine); 

       Button random = myList.get(new Random().nextInt(myList.size())); 
       if (!random.equals(" ")) { 
        random.setText("O"); 
        random.setTextColor(Color.RED); 
       } 
      } 
     } 
    } 
} 

答えて

1

私が思うに、このコードのフラグメントが問題になること:

 Button random = myList.get(new Random().nextInt(myList.size())); 
     if (!random.equals(" ")) { 
      random.setText("O"); 
      random.setTextColor(Color.RED); 
     } 

例:Playerは最初のボタンを選択し、次にコンピュータが選択する時間です。ランダムに選択するとコンピュータは0を選択しますが、このボタンwプレーヤーによって既にクリックされているので、何も起こっていません。

コンピュータが正しい番号を選択するように、このようないくつかの機能を用意する必要があります。

private void computerMove(){ 
    Button random = myList.get(new Random().nextInt(myList.size())); 
    if (!random.equals(" ")) { 
     random.setText("O"); 
     random.setTextColor(Color.RED); 
    } else { 
     computerMove(); 
    } 
} 

それは完璧なソリューションではないですが、それはアプリを凍結することができ、あなたは、コンピュータによって、フィールドを選択するより良いaproacheについて考える必要があります。

EDIT 私は別の問題を参照して、これを見て:あなたは同じ位置にボタンを追加している

myList.add(0, buttonOne); 
myList.add(1, buttonTwo); 
myList.add(2, buttonThree); 
myList.add(3, buttonFour); 
myList.add(4, buttonFive); 
myList.add(5, buttonSix); 
myList.add(5, buttonSeven); 
myList.add(5, buttonEight); 
myList.add(5, buttonNine); 

をまた、私は少しあなたの機能をリファクタリング5.

、位置、becouse boilerpalteがたくさんあります。

public void onClickButton(View view) { 
    if (view instanceof Button){ 
     Button btn = (Button) view; 
     CharSequence text = btn.getText(); 
     if(!text.equals(" ")){ 
      Toast.makeText(this, "This filed is not empty, choose another.", Toast.LENGTH_SHORT).show(); 
     } else { 
      btn.setText("X"); 
      btn.setTextColor(Color.GREEN); 
      myList.remove(btn); 
      computerMove(); 
     } 
    } 
} 
+0

私は何とか後で追加できますか? Button random = myList .get(新しいランダム()。nextInt(myList.size())); if(!random.equals( "")){ random.setText( "O"); random.setTextColor(Color.RED); 乱数がXまたはOと等しい場合は他の乱数を選択しますか? – SteveYo

+0

とにかく、何が良いアプローチですか?私の友人の時間をありがとう。 – SteveYo

+0

あなたはそれをすることができますが、2番目の乱数もXまたはOで占められたときはどうなりますか?だから、フリーフィールドを見つけてここにOを入れていくのが反復するほうがいい。 – Panczur