цикл по элементам сетки - PullRequest
0 голосов
/ 06 декабря 2018

Я пытаюсь сделать простую игру в крестики-нолики.Я уже написал логику для решения, кто выиграл, и текстовое поле отображает победителя.Как только кто-то выиграл, я делаю кнопку сброса видимой.И я установил атрибут onclick кнопки для сброса функции, который делает это

public void reset(View view){
        for(int i=0;i<playerAt.length;i++)
            playerAt[i]=2;
        activeGame=1;
        activePlayer=1;

        Button but = (Button) findViewById(R.id.button);
        TextView text = (TextView) findViewById(R.id.text);

        but.setVisibility(View.INVISIBLE);
        text.setVisibility(View.INVISIBLE);

        GridLayout grid = (GridLayout) findViewById(R.id.grid);

        for(int i=0;i<grid.getChildCount();i++){
            ImageView block = (ImageView) grid.getChildAt(i);
            block.setImageDrawable(null);
        }

    }

. Я исследовал способ обхода объектов сетки только на этом сайте, но, похоже, он не работает.Как только я нажимаю кнопку, приложение закрывается в эмуляторе.Если я удаляю цикл и вместо этого запускаю простой цикл, такой как

for(int i=0;i<9;i++) 

, тогда он работает без сбоев, но, очевидно, он ничего не сделает.По сути, я хочу, чтобы кнопка сброса очистила все записи в сетке.У меня есть их изображения черных и красных точек, которые я хочу очистить.

Но таким образом я не могу это сделать.

Я также попробовал это без использования петли

ImageView block = (ImageView) grid.getChildAt(0);
block.setImageDrawable(null);

Но опять тот же результат: приложение закрывается, как только нажимается кнопка.Вероятно, дело обстоит не так в последней версии Android Studio. Если вы хотите посмотреть мой полный код в файле MainActivity.java, то вот он

package com.example.nik7.tictactoe;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.GridLayout;
import android.widget.ImageView;
import android.widget.TextView;

import java.nio.InvalidMarkException;

public class MainActivity extends AppCompatActivity {

    int activePlayer = 1;
    int activeGame = 1;
    int [][]winningP = {{0,1,2},{3,4,5},{6,7,8},{0,3,6},{1,4,7},{2,5,8},{0,4,8},{2,4,6}};
    int []playerAt = {2,2,2,2,2,2,2,2,2};

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

    public void drop(View view){
        ImageView block = (ImageView) view;
        int currentPosition = Integer.parseInt(block.getTag().toString());

        if(activeGame==0)
            return;

        if(playerAt[currentPosition]==1 || playerAt[currentPosition]==0)
            return;

        playerAt[currentPosition] = activePlayer;

        if(activePlayer==1) {
            block.setImageResource(R.drawable.black);
            activePlayer = 0;
        }

        else{
            block.setImageResource(R.drawable.red);
            activePlayer=1;
        }


        //check if someone has won
        for(int[] wp:winningP){
            if(playerAt[wp[0]] == playerAt[wp[1]] && playerAt[wp[1]] == playerAt[wp[2]] && playerAt[wp[0]] != 2){
                activeGame=0;
                Button but = (Button) findViewById(R.id.button);
                TextView text = (TextView) findViewById(R.id.text);

                but.setVisibility(View.VISIBLE);
                text.setVisibility(View.VISIBLE);
                text.setText((activePlayer==1)?"red has won":"black has won");
            }
        }
    }

    public void reset(View view){
        for(int i=0;i<playerAt.length;i++)
            playerAt[i]=2;
        activeGame=1;
        activePlayer=1;

        Button but = (Button) findViewById(R.id.button);
        TextView text = (TextView) findViewById(R.id.text);

        but.setVisibility(View.INVISIBLE);
        text.setVisibility(View.INVISIBLE);

        GridLayout grid = (GridLayout) findViewById(R.id.grid);

        ImageView block = (ImageView) grid.getChildAt(0);
        block.setImageDrawable(null);


    }











}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...