gpt4 book ai didi

java - 如果方法返回 true,则停止计时器

转载 作者:行者123 更新时间:2023-12-01 06:03:29 25 4
gpt4 key购买 nike

如果方法为真,有什么方法可以暂停计时器。我创建了一个简单的拼图游戏,并添加了一个计时器来显示时间流逝,我试图在拼图解决时停止计时器。运行时,应用程序运行平稳,计时器滴答作响,但在游戏开始时不会停止解决了。任何形式的帮助将不胜感激。这是代码;

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_menu);
chronometer = findViewById(R.id.chronometer);

stopChronometer();
startChronometer();
isSolved();
}

public static boolean isSolved() {
boolean solved = false;
for (int i = 0; i < tileList.length; i++) {
if (tileList[i].equals(String.valueOf(i))) {
solved = true;
} else {
solved = false;
break;
}
}
return solved;
}
//to start the chronometer
public void startChronometer(){
if(!running){
chronometer.setBase(SystemClock.elapsedRealtime());
chronometer.start();
running = true;
}
}
//to stop the chronometer
public void stopChronometer(){
if(running && isSolved()){
chronometer.stop();
running =false;
}
}

如果对整个代码感兴趣;

import android.content.Context;
import android.content.Intent;
import android.os.SystemClock;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewTreeObserver;
import android.widget.Button;
import java.lang.*;
import java.util.ArrayList;
import java.util.Random;
import android.widget.Chronometer;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

//GestureDetectView* is the class where the puzzle grid is setup
private static GestureDetectGridView mGridView;
private static final int COLUMNS =3;
private static final int DIMENSIONS = COLUMNS * COLUMNS;
private static int mColumnWidth, mColumnHeight;
//up, down, left, right are tile movements
public static final String up = "up";
public static final String down = "down";
public static final String left = "left";
public static final String right = "right";
private static String[] tileList;

private Chronometer chronometer;
private boolean running;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
chronometer = findViewById(R.id.chronometer);
init();
scramble();
setDimensions();
stopChronometer();
startChronometer();
}

//to start the chronometer
public void startChronometer(){
if(!running){
chronometer.setBase(SystemClock.elapsedRealtime());
chronometer.start();
running = true;
}
}
//to stop the chronometer * PROBLEM AREA
public void stopChronometer(){

if(running && isSolved()){
chronometer.stop();
running =false;
}
}
//Grid view from GestureDetectView class
private void init() {
mGridView = (GestureDetectGridView) findViewById(R.id.grid);
mGridView.setNumColumns(COLUMNS);
tileList = new String[DIMENSIONS];
for (int i = 0; i < DIMENSIONS; i++) {
tileList[i] = String.valueOf(i);
}
}
//To shuffle the grid pieces
private void scramble() {
int index;
String temp;
Random random = new Random();

for (int i = tileList.length -1; i > 0; i--) {
index = random.nextInt(i + 1);
temp = tileList[index];
tileList[index] = tileList[i];
tileList[i] = temp;
}

}
private void setDimensions() {
ViewTreeObserver vto = mGridView.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
mGridView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
int displayWidth = mGridView.getMeasuredWidth();
int displayHeight = mGridView.getMeasuredHeight();

int statusbarHeight = getStatusBarHeight(getApplicationContext());
int requiredHeight = displayHeight - statusbarHeight;

mColumnWidth = displayWidth / COLUMNS;
mColumnHeight = requiredHeight / COLUMNS;

display(getApplicationContext());
}
});
}

private int getStatusBarHeight(Context context) {
int result = 0;
int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen",
"android");

if (resourceId > 0) {
result = context.getResources().getDimensionPixelSize(resourceId);
}

return result;
}
//To determine if puzzle is solved
public static boolean isSolved() {
boolean solved = false;
for (int i = 0; i < tileList.length; i++)
{
if (tileList[i].equals(String.valueOf(i))) {
solved = true;
} else {
solved = false;
break;
}
}
return solved;
}
private static void swap(Context context, int Position, int swap) {
String newPosition = tileList[Position + swap];
tileList[Position + swap] = tileList[Position];
tileList[Position] = newPosition;
display(context);
if (isSolved()) {
Toast.makeText(context, "CONGRATULATIONS, YOU WIN!", Toast.LENGTH_SHORT).show();
}
}
//To source the image pieces and add them to the puzzle grid
private static void display(Context context) {
ArrayList<Button> buttons = new ArrayList<>();
Button button;

for (int i = 0; i < tileList.length; i++) {
button = new Button(context);

if (tileList[i].equals("0"))
button.setBackgroundResource(R.drawable.piece1);
else if (tileList[i].equals("1"))
button.setBackgroundResource(R.drawable.piece2);
else if (tileList[i].equals("2"))
button.setBackgroundResource(R.drawable.piece3);
else if (tileList[i].equals("3"))
button.setBackgroundResource(R.drawable.piece4);
else if (tileList[i].equals("4"))
button.setBackgroundResource(R.drawable.piece5);
else if (tileList[i].equals("5"))
button.setBackgroundResource(R.drawable.piece6);
else if (tileList[i].equals("6"))
button.setBackgroundResource(R.drawable.piece7);
else if (tileList[i].equals("7"))
button.setBackgroundResource(R.drawable.piece8);
else if (tileList[i].equals("8"))
button.setBackgroundResource(R.drawable.piece9);

buttons.add(button);

}

mGridView.setAdapter(new CustomAdapter(buttons, mColumnWidth, mColumnHeight));
}

public static void moveTiles(Context context, String direction, int position) {

// Upper-left-corner tile
if (position == 0) {

if (direction.equals(right)) swap(context, position, 1);
else if (direction.equals(down)) swap(context, position, COLUMNS);
else Toast.makeText(context, "Invalid move", Toast.LENGTH_SHORT).show();

// Upper-center tiles
} else if (position > 0 && position < COLUMNS - 1) {
if (direction.equals(left)) swap(context, position, -1);
else if (direction.equals(down)) swap(context, position, COLUMNS);
else if (direction.equals(right)) swap(context, position, 1);
else Toast.makeText(context, "Invalid move", Toast.LENGTH_SHORT).show();

// Upper-right-corner tile
} else if (position == COLUMNS - 1) {
if (direction.equals(left)) swap(context, position, -1);
else if (direction.equals(down)) swap(context, position, COLUMNS);
else Toast.makeText(context, "Invalid move", Toast.LENGTH_SHORT).show();

// Left-side tiles
} else if (position > COLUMNS - 1 && position < DIMENSIONS - COLUMNS &&
position % COLUMNS == 0) {
if (direction.equals(up)) swap(context, position, -COLUMNS);
else if (direction.equals(right)) swap(context, position, 1);
else if (direction.equals(down)) swap(context, position, COLUMNS);
else Toast.makeText(context, "Invalid move", Toast.LENGTH_SHORT).show();

// Right-side AND bottom-right-corner tiles
} else if (position == COLUMNS * 2 - 1 || position == COLUMNS * 3 -1)
{
if (direction.equals(up)) swap(context, position, -COLUMNS);
else if (direction.equals(left)) swap(context, position, -1);
else if (direction.equals(down)) {

// Tolerates only the right-side tiles to swap downwards as opposed to the bottom-
// right-corner tile.
if (position <= DIMENSIONS - COLUMNS - 1) swap(context, position,
COLUMNS);
else Toast.makeText(context, "Invalid move", Toast.LENGTH_SHORT).show();
} else Toast.makeText(context, "Invalid move", Toast.LENGTH_SHORT).show();

// Bottom-left corner tile
} else if (position == DIMENSIONS - COLUMNS) {
if (direction.equals(up)) swap(context, position, -COLUMNS);
else if (direction.equals(right)) swap(context, position, 1);
else Toast.makeText(context, "Invalid move", Toast.LENGTH_SHORT).show();

// Bottom-center tiles
} else if (position < DIMENSIONS - 1 && position > DIMENSIONS - COLUMNS) {
if (direction.equals(up)) swap(context, position, -COLUMNS);
else if (direction.equals(left)) swap(context, position, -1);
else if (direction.equals(right)) swap(context, position, 1);
else Toast.makeText(context, "Invalid move", Toast.LENGTH_SHORT).show();

// Center tiles
} else {
if (direction.equals(up)) swap(context, position, -COLUMNS);
else if (direction.equals(left)) swap(context, position, -1);
else if (direction.equals(right)) swap(context, position, 1);
else swap(context, position, COLUMNS);
}
}


@Override
protected void onSaveInstanceState(Bundle outState){
super.onSaveInstanceState(outState);


}

}

最佳答案

public void stopChronometer() {
if(running && isSolved()){
chronometer.stop();
running =false;
}
}

更改为

public void stopChronometer(){
if(running || isSolved()){
chronometer.stop();
running =false;
}
}

或者您可以从 isSolved() 方法调用 stopChronometer() (不过您必须从 stopChronometer 中删除 isSolved() )。在没有看到完整代码的情况下,很难回答。

关于java - 如果方法返回 true,则停止计时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51391193/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com