0

私はAndroidプログラミングの初心者です。より多くの学習のためにTicTacToeゲームを書きたいです。フォローしました

この記事 (ここにリンクの説明を入力してください) を読み、理解を深めるためにこの記事の一部を変更しました ;)

私の問題は、validateGame() メソッドにあります。

例: 座標[0][0]=X、座標0 =X、座標[0][2]=X)、このメソッドを最初に実行する必要があります

'for' ループしてログに書き込み、"horizo​​ntal x" をトーストしますが、メソッドは 2 番目の 'for' ループを実行し、

ログに「縦のX」を書きます。

とにかく、私の方法では X または O は検出できますが、横線または縦線は検出できません。何が問題ですか?これをどのように解決できますか?この中のvalidate_game()メソッドが理解できません

記事と私は自分でメソッドを書きたいです;)助けてください。

乾杯。

public boolean validateGame(){
    Cell check=null;
    int counter=0;
    XSymbol xsym=new XSymbol();
    OSymbol osym=new OSymbol();

    //horizontal
    for(int i=0;i<coordinate.length;i++){
        check=null;
        for(int j=0;j<coordinate.length;j++){
            if(!coordinate[i][j].equals(check)||coordinate[i][j] instanceof Empty){
                check=coordinate[i][j];
                counter=0;
            }
            else
                counter++;
            if(counter==playerWin-1){
                if(coordinate[i][j].equals(xsym)){
                    winX=true;
                    Log.e("horizontal", "x");
                    Toast.makeText(getContext(), "HORIZONTAL X", Toast.LENGTH_LONG).show();
                }
                else{
                    winO=true;
                    Log.e("horizontal", "o");
                    Toast.makeText(getContext(), "HORIZONTAL O", Toast.LENGTH_LONG).show();
                }
                return true;
            }
        }
        counter=0;
    }

    //vertical
    for(int i=0;i<coordinate.length;i++){
        check=null;
        counter=0;
        for(int j=0;j<coordinate.length;j++){
            if(!coordinate[j][i].equals(check)||coordinate[j][i] instanceof Empty){
                check=coordinate[j][i];
                counter=0;
            }
            else
                counter++;
            if(counter==playerWin-1){
                if(coordinate[j][i].equals(osym)){
                    winO=true;
                    Log.e("vertical", "o");
                    Toast.makeText(getContext(), "VERTICAL O", Toast.LENGTH_LONG).show();
                }
                else{
                    winX=true;
                    Log.e("vertical", "x");
                    Toast.makeText(getContext(), "VERTIC" +"AL X", Toast.LENGTH_LONG).show();
                }
                return true;
            }
        }
        counter=0;
    }

    return false;
}

下手な英語でごめんなさい:P

更新:質問に答えたいのですが、質問を変更しましたが、サイトは許可されていません:(とにかく、最初の回答を更新します。

私はあなたの提案された方法を書きますが、私のプログラムは再び正しく実行されません:( 私の問題は別の問題だと思います.CellとEmpty、OSymbolとXSymbolクラスを書いています。読んで教えてください、何が問題なのですか??

あなたの方法、最初のクリックで画面に触れると、トーストに「水平O」が表示されます!!!

Cell.java:

public abstract class Cell extends Point {
    public Cell(int x, int y) {
       super(x, y);
    }
    public Cell(){
       super();
    }
    abstract public void draw(Canvas g,Resources res, int x, int y, int w, int h);
 }

空の.java:

public class Empty extends Cell {
    public Empty(int x, int y) {
        super(x, y);
    }
    public Empty(){
        super();
    }    
    public void draw(Canvas g, Resources res, int x, int y, int w, int h) {
        Bitmap im = BitmapFactory.decodeResource(res, R.drawable.blank);
        g.drawBitmap(im, null, new Rect(x*w, y*h, (x*w)+w, (y*h)+h), new Paint());
    }
    @Override
    public boolean equals(Object obj) {
        if (obj instanceof Empty) {
            return true;
        } else {
            return false;
        }
    }
 }

XSymbol.java:

public class XSymbol extends Cell {
    public XSymbol(int x, int y) {
        super(x, y);
    }
    public XSymbol(){
        super();
    }
    public void draw(Canvas g, Resources res, int x, int y, int w, int h) {
        Bitmap im = BitmapFactory.decodeResource(res, R.drawable.x);
        g.drawBitmap(im, null, new Rect(x*w, y*h, (x*w)+w, (y*h)+h), new Paint());
    }
    @Override
    public boolean equals(Object obj) {
        if (obj instanceof XSymbol) {
            return true;
        } else {
            return false;
        }
    }
 }

OSymbol.java:

public class OSymbol extends Cell { 
   public OSymbol(int x, int y) {
      super(x, y);
   }
   public OSymbol(){
      super();
   }
   public void draw(Canvas g, Resources res, int x, int y, int w, int h) {
      Bitmap im = BitmapFactory.decodeResource(res, R.drawable.o);
      g.drawBitmap(im, null, new Rect(x*w, y*h, (x*w)+w, (y*h)+h), new Paint());
   }
   @Override
   public boolean equals(Object obj) {
      if (obj instanceof OSymbol) {
         return true;
       } else {
          return false;
       }
    }
 }

ゲーム.java:

 public class Game extends View{
    .
    .
    . 
    @Override
public boolean onTouchEvent(MotionEvent event){
     int x_touch=(int)(event.getX()/(this.getWidth()/x));
     int y_touch=(int)(event.getY()/(this.getHeight()/y));
     drawImage(x_touch,y_touch);
     return super.onTouchEvent(event);
} 
    public void drawImage(int x_touch,int y_touch){
    Cell cell=null;
    if(whatDrawn){
    cell=new XSymbol(x_touch,y_touch);
    whatDrawn=false;
    }else{
    cell=new OSymbol(x_touch,y_touch);
    whatDrawn=true;
    }
        coordinate[x_touch][y_touch]=cell;
    validate();
     }
     public boolean validate(){
    XSymbol xsym=new XSymbol();
    OSymbol osym=new OSymbol();

    boolean xWin=false;
    boolean oWin=false;

    for(int i=0;i<coordinate.length;i++){
        boolean won=true;
        for(int j=1;j<coordinate.length;j++){
            if(!coordinate[i][j-1].equals(coordinate[i][j])){
                won=false;
                break;
            }
        }
        if(won){
            if(coordinate[i][0].equals(xsym)){
                xWin=true;
                Toast.makeText(getContext(), "horizontal X", Toast.LENGTH_LONG).show();
            }
            else{
                oWin=true;
                Toast.makeText(getContext(), "horizontal O", Toast.LENGTH_LONG).show();
            }
        }
    }


    //vertical
    for(int i=0;i<coordinate.length;i++){
        boolean won=true;
        for(int j=1;j<coordinate.length;j++){
            if(!coordinate[j-1][i].equals(coordinate[j][i])){
                won=false;
                break;
            }
        }
        if(won){
            if(coordinate[0][i].equals(xsym)){
                xWin=true;
                Toast.makeText(getContext(), "vertical X", Toast.LENGTH_LONG).show();
            }
            else{
                oWin=true;
                Toast.makeText(getContext(), "vertical O", Toast.LENGTH_LONG).show();
            }
        }
    }


    return false;
    }
        .
        .
        .
     }

長い質問で申し訳ありません:(ありがとう。乾杯

4

1 に答える 1