Лучшие помощники
- Megamozg 2200 б
- Matalya1 1800 б
- DevAdmin 1700 б
- arkasha_bortnikov 890 б
- Dwayne_Johnson 860 б
18 мая 2023 18:10
312
package com.tetris.tetris;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
public class Game extends AppCompatActivity implements View.OnClickListener {
DrawView drawView;
GameState gameState;
RelativeLayout gameButtons;
Button left;
Button right;
Button rotateAc;
FrameLayout game;
Button pause;
TextView score;
Button difficultyToggle;
Handler handler;
Runnable loop;
int delayFactor;
int delay;
int delayLowerLimit;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
gameState = new GameState(24, 20, TetraminoType.getRandomTetramino());
drawView = new DrawView(this, gameState);
drawView.setBackgroundColor(Color.WHITE);
game = new FrameLayout(this);
gameButtons = new RelativeLayout(this);
delay = 500;
delayLowerLimit = 200;
delayFactor = 2;
left = new Button(this);
left.setText("Лево");
left.setId(R.id.left);
right = new Button(this);
right.setText(R.string.right);
right.setId(R.id.right);
rotateAc = new Button(this);
rotateAc.setText(R.string.rotate_ac);
rotateAc.setId(R.id.rotate_ac);
pause = new Button(this);
pause.setText(R.string.pause);
pause.setId(R.id.pause);
score = new TextView(this);
score.setText(R.string.score);
score.setId(R.id.score);
score.setTextSize(30);
difficultyToggle = new Button(this);
difficultyToggle.setText(R.string.easy);
difficultyToggle.setId(R.id.difficulty);
RelativeLayout.LayoutParams rl = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
RelativeLayout.LayoutParams leftButton = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
RelativeLayout.LayoutParams rightButton = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
RelativeLayout.LayoutParams downButton = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
RelativeLayout.LayoutParams pausebutton = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
RelativeLayout.LayoutParams scoretext = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
RelativeLayout.LayoutParams speedbutton = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
gameButtons.setLayoutParams(rl);
gameButtons.addView(left);
gameButtons.addView(right);
gameButtons.addView(rotateAc);
gameButtons.addView(pause);
gameButtons.addView(score);
gameButtons.addView(difficultyToggle);
leftButton.addRule(RelativeLayout.ALIGN_PARENT_LEFT, RelativeLayout.TRUE);
leftButton.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, RelativeLayout.TRUE);
rightButton.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, RelativeLayout.TRUE);
rightButton.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, RelativeLayout.TRUE);
downButton.addRule(RelativeLayout.CENTER_HORIZONTAL, RelativeLayout.TRUE);
downButton.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, RelativeLayout.TRUE);
pausebutton.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, RelativeLayout.TRUE);
pausebutton.addRule(RelativeLayout.ALIGN_PARENT_TOP, RelativeLayout.TRUE);
scoretext.addRule(RelativeLayout.ALIGN_PARENT_LEFT, RelativeLayout.TRUE);
scoretext.addRule(RelativeLayout.ALIGN_PARENT_TOP, RelativeLayout.TRUE);
speedbutton.addRule(RelativeLayout.CENTER_HORIZONTAL, RelativeLayout.TRUE);
speedbutton.addRule(RelativeLayout.ALIGN_PARENT_TOP, RelativeLayout.TRUE);
left.setLayoutParams(leftButton);
right.setLayoutParams(rightButton);
rotateAc.setLayoutParams(downButton);
pause.setLayoutParams(pausebutton);
score.setLayoutParams(scoretext);
difficultyToggle.setLayoutParams(speedbutton);
game.addView(drawView);
game.addView(gameButtons);
setContentView(game);
View leftButtonListener = findViewById(R.id.left);
leftButtonListener.setOnClickListener(this);
View rightButtonListener = findViewById(R.id.right);
rightButtonListener.setOnClickListener(this);
View rotateACButtonListener = findViewById(R.id.rotate_ac);
rotateACButtonListener.setOnClickListener(this);
View pauseButtonListener = findViewById(R.id.pause);
pauseButtonListener.setOnClickListener(this);
View speedButtonListener = findViewById(R.id.difficulty);
speedButtonListener.setOnClickListener(this);
handler = new Handler(Looper.getMainLooper());
loop = new Runnable() {
public void run() {
if (gameState.status) {
if (!gameState.pause) {
boolean success = gameState.moveFallingTetraminoDown();
if (!success) {
gameState.paintTetramino(gameState.falling);
gameState.lineRemove();
gameState.pushNewTetramino(TetraminoType.getRandomTetramino());
if (gameState.score % 10 == 9 && delay >= delayLowerLimit) {
delay = delay / delayFactor + 1;
}
gameState.incrementScore();
}
drawView.invalidate();
handler.postDelayed(this, delay);
} else {
handler.postDelayed(this, delay);
}
} else {
pause.setText(R.string.start_new_game);
}
}
};
loop.run();
}
@Override
public void onClick(View action) {
if (action == left) {
gameState.moveFallingTetraminoLeft();
} else if (action == right) {
gameState.moveFallingTetraminoRight();
} else if (action == rotateAc) {
gameState.rotateFallingTetraminoAntiClock();
} else if (action == pause) {
if (gameState.status) {
if (gameState.pause) {
gameState.pause = false;
pause.setText(R.string.pause);
} else {
pause.setText(R.string.play);
gameState.pause = true;
}
} else {
pause.setText(R.string.start_new_game);
Intent intent = new Intent(Game.this, MainActivity.class);
startActivity(intent);
}
} else if (action == difficultyToggle) {
if (!gameState.difficultMode) {
delay = delay / delayFactor;
gameState.difficultMode = true;
difficultyToggle.setText(R.string.hard);
} else {
delay = delay * delayFactor;
difficultyToggle.setText(R.string.easy);
gameState.difficultMode = false;
}
}
}
}
Помогите, пожалуйста, описать этот класс. Написано на Джава
1
ответ
Этот класс представляет собой игру Tetris. Он наследуется от класса AppCompatActivity и реализует интерфейс View.OnClickListener. Внутри класса определены переменные и методы, которые используются для отрисовки игры, обработки пользовательского ввода и управления игровым процессом.
В методе onCreate() происходит инициализация игрового состояния, создание объекта DrawView для отрисовки игры, настройка элементов управления (кнопки "влево", "вправо", "вращение", "пауза", "сложность") и их размещение на экране. Также в методе создается цикл обновления игрового состояния, который вызывается каждый раз, когда игра не находится в состоянии паузы.
Метод onClick() используется для обработки нажатий на элементы управления. В зависимости от нажатой кнопки, происходит соответствующее изменение игрового состояния (движение фигуры влево/вправо, вращение, пауза, изменение сложности).
В целом, этот класс представляет собой основу для игры Tetris и содержит основную логику управления игровым процессом.
В методе onCreate() происходит инициализация игрового состояния, создание объекта DrawView для отрисовки игры, настройка элементов управления (кнопки "влево", "вправо", "вращение", "пауза", "сложность") и их размещение на экране. Также в методе создается цикл обновления игрового состояния, который вызывается каждый раз, когда игра не находится в состоянии паузы.
Метод onClick() используется для обработки нажатий на элементы управления. В зависимости от нажатой кнопки, происходит соответствующее изменение игрового состояния (движение фигуры влево/вправо, вращение, пауза, изменение сложности).
В целом, этот класс представляет собой основу для игры Tetris и содержит основную логику управления игровым процессом.
0
·
Хороший ответ
18 мая 2023 18:12
Остались вопросы?
Еще вопросы по категории Информатика
Ученик задумал целое число от -10 до 10. Какова вероятность что квадрат этого числа больше 25...
На каком языке программирования написан дневник ру...
cd объемом 700 Мб весит 15 грамм, сколько будет весить набор таких дисков, необходимый для полного копирования информации с жесткого диска объемом 320...
Пользователь, перемещаясь из одного каталога в другой, последовательно посетил каталоги LESSONS, CLASS, SCHOOL, D:\ , MYDOC, LETTERS. При каждом перем...
Каких требований следует придерживаться при выборе имён для различных объектов языке Паскаль?...
Все предметы