Это метод onCreate, который вызывает указанные функции
int displayScore;
int posPart11, posPart12, posPart13, posPart21, posPart22, posPart23, posPart31, posPart32, posPart33, posPart41, posPart42, posPart43;
View part11, part12, part13, part21, part22, part23, part31, part32, part33, part41, part42, part43;
boolean b,c,d,e;
int rand = 0, prevRand, score = 0;
int displayHeight;
int viewHeight;
int viewInitPos;
Random random = new Random();
Handler handler;
Runnable runnable;
@SuppressLint("SourceLockedOrientationActivity")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
setContentView(R.layout.activity_game);
displayHeight = getScreenHeight(GameActivity.this);
viewHeight = (int) (displayHeight * 0.20);
viewInitPos = -viewHeight;
initXML();
initColor();
logic();
}
public static int getScreenHeight(Activity h){
DisplayMetrics height = new DisplayMetrics();
h.getWindowManager().getDefaultDisplay().getMetrics(height);
return height.heightPixels;
}
Вот логика c этой игры, я создал один тип анимации на простом языке java. Здесь я использовал обработчик и метод runnable для анимации.
private void logic() {
handler = new Handler();
runnable = new Runnable() {
@Override
public void run() {
while (true) {
prevRand = rand;
rand = random.nextInt(4);
while (prevRand == rand) {
rand = random.nextInt(4);
}
b = posPart21 == 0 || posPart31 == 0 || posPart41 == 0 || posPart22 == 0 || posPart23 == 0 || posPart32 == 0 || posPart33 == 0 || posPart42 == 0 || posPart43 == 0;
c = posPart12 == 0 || posPart31 == 0 || posPart41 == 0 || posPart11 == 0 || posPart13 == 0 || posPart32 == 0 || posPart33 == 0 || posPart42 == 0 || posPart43 == 0;
d = posPart21 == 0 || posPart41 == 0 || posPart12 == 0 || posPart13 == 0 || posPart22 == 0 || posPart23 == 0 || posPart11 == 0 || posPart42 == 0 || posPart43 == 0;
e = posPart21 == 0 || posPart31 == 0 || posPart12 == 0 || posPart13 == 0 || posPart22 == 0 || posPart23 == 0 || posPart32 == 0 || posPart33 == 0 || posPart11 == 0;
handler.postDelayed(runnable, 2);
if ((rand == 0) && b && (posPart13 != 0) && (posPart11 > displayHeight)) {
posPart11 = viewInitPos;
}
if (posPart11 == displayHeight - viewHeight) {
if (((ColorDrawable) part11.getBackground()).getColor() == Color.BLACK) {
displayScore = score;
break;
}
}
if (posPart11 == displayHeight) {
part11.setBackground(new ColorDrawable(Color.BLACK));
}
part11.setY(posPart11);
posPart11++;
if (posPart11 <= displayHeight && posPart11 >= viewInitPos) {
if ((rand == 0) && b && (posPart11 != 0)) {
posPart12 = viewInitPos;
}
}
if (posPart12 == displayHeight - viewHeight) {
if (((ColorDrawable) part12.getBackground()).getColor() == Color.BLACK) {
displayScore = score;
break;
}
}
if (posPart12 == displayHeight) {
part12.setBackground(new ColorDrawable(Color.BLACK));
}
part12.setY(posPart12);
posPart12++;
if ((posPart11 <= displayHeight && posPart11 >= viewInitPos) && (posPart12 <= displayHeight && posPart12 >= viewInitPos)) {
if ((rand == 0) && b && (posPart12 != 0)) {
posPart13 = viewInitPos;
}
}
if (posPart13 == displayHeight - viewHeight) {
if (((ColorDrawable) part13.getBackground()).getColor() == Color.BLACK) {
displayScore = score;
break;
}
}
if (posPart13 == displayHeight) {
part13.setBackground(new ColorDrawable(Color.BLACK));
}
part13.setY(posPart13);
posPart13++;
if ((rand == 1) && c && (posPart23 != 0) && (posPart21 > displayHeight)) {
posPart21 = viewInitPos;
}
if (posPart21 == displayHeight - viewHeight) {
if (((ColorDrawable) part21.getBackground()).getColor() == Color.BLACK) {
displayScore = score;
break;
}
}
if (posPart21 == displayHeight) {
part21.setBackground(new ColorDrawable(Color.BLACK));
}
part21.setY(posPart21);
posPart21++;
if (posPart21 <= displayHeight && posPart21 >= viewInitPos) {
if ((rand == 1) && c && (posPart21 != 0)) {
posPart22 = viewInitPos;
}
}
if (posPart22 == displayHeight - viewHeight) {
if (((ColorDrawable) part22.getBackground()).getColor() == Color.BLACK) {
displayScore = score;
break;
}
}
if (posPart22 == displayHeight) {
part22.setBackground(new ColorDrawable(Color.BLACK));
}
part22.setY(posPart22);
posPart22++;
if ((posPart21 <= displayHeight && posPart21 >= viewInitPos) && (posPart22 <= displayHeight && posPart22 >= viewInitPos)) {
if ((rand == 1) && c && (posPart22 != 0)) {
displayScore = score;
posPart23 = viewInitPos;
}
}
if (posPart23 == displayHeight - viewHeight) {
if (((ColorDrawable) part13.getBackground()).getColor() == Color.BLACK) {
displayScore = score;
break;
}
}
if (posPart23 == displayHeight) {
part23.setBackground(new ColorDrawable(Color.BLACK));
}
part23.setY(posPart23);
posPart23++;
if ((rand == 2) && d && (posPart33 != 0) && (posPart31 > displayHeight)) {
posPart31 = viewInitPos;
}
if (posPart31 == displayHeight - viewHeight) {
if (((ColorDrawable) part31.getBackground()).getColor() == Color.BLACK) {
displayScore = score;
break;
}
}
if (posPart31 == displayHeight) {
part31.setBackground(new ColorDrawable(Color.BLACK));
}
part31.setY(posPart31);
posPart31++;
if (posPart31 <= displayHeight && posPart31 >= viewInitPos) {
if ((rand == 2) && d && (posPart31 != 0)) {
posPart32 = viewInitPos;
}
}
if (posPart32 == displayHeight - viewHeight) {
if (((ColorDrawable) part32.getBackground()).getColor() == Color.BLACK) {
displayScore = score;
break;
}
}
if (posPart32 == displayHeight) {
part32.setBackground(new ColorDrawable(Color.BLACK));
}
part32.setY(posPart32);
posPart32++;
if ((posPart31 <= displayHeight && posPart31 >= viewInitPos) && (posPart32 <= displayHeight && posPart32 >= viewInitPos)) {
if ((rand == 2) && d && (posPart32 != 0)) {
posPart33 = viewInitPos;
}
}
if (posPart33 == displayHeight - viewHeight) {
if (((ColorDrawable) part33.getBackground()).getColor() == Color.BLACK) {
displayScore = score;
break;
}
}
if (posPart33 == displayHeight) {
part33.setBackground(new ColorDrawable(Color.BLACK));
}
part33.setY(posPart33);
posPart33++;
if ((rand == 3) && e && (posPart43 != 0) && (posPart41 > displayHeight)) {
posPart41 = viewInitPos;
}
if (posPart41 == displayHeight - viewHeight) {
if (((ColorDrawable) part41.getBackground()).getColor() == Color.BLACK) {
displayScore = score;
break;
}
}
if (posPart41 == displayHeight) {
part41.setBackground(new ColorDrawable(Color.BLACK));
}
part41.setY(posPart41);
posPart41++;
if (posPart41 <= displayHeight && posPart41 >= viewInitPos) {
if ((rand == 3) && e && (posPart41 != 0)) {
posPart42 = viewInitPos;
}
}
if (posPart42 == displayHeight - viewHeight) {
if (((ColorDrawable) part42.getBackground()).getColor() == Color.BLACK) {
displayScore = score;
break;
}
}
if (posPart42 == displayHeight) {
part42.setBackground(new ColorDrawable(Color.BLACK));
}
part42.setY(posPart42);
posPart42++;
if ((posPart41 <= displayHeight && posPart41 >= viewInitPos) && (posPart42 <= displayHeight && posPart42 >= viewInitPos)) {
if ((rand == 3) && e && (posPart42 != 0)) {
posPart43 = viewInitPos;
}
}
if (posPart43 == displayHeight - viewHeight) {
if (((ColorDrawable) part43.getBackground()).getColor() == Color.BLACK) {
displayScore = score;
break;
}
}
if (posPart43 == displayHeight) {
part43.setBackground(new ColorDrawable(Color.BLACK));
}
part43.setY(posPart43);
posPart43++;
}
}
};
runnable.run();
}
Здесь я инициализировал некоторую высоту вида, цвет и их начальную позицию.
private void initColor() {
part11.getLayoutParams().height = viewHeight;
part21.getLayoutParams().height = viewHeight;
part31.getLayoutParams().height = viewHeight;
part41.getLayoutParams().height = viewHeight;
part12.getLayoutParams().height = viewHeight;
part22.getLayoutParams().height = viewHeight;
part32.getLayoutParams().height = viewHeight;
part42.getLayoutParams().height = viewHeight;
part13.getLayoutParams().height = viewHeight;
part23.getLayoutParams().height = viewHeight;
part33.getLayoutParams().height = viewHeight;
part43.getLayoutParams().height = viewHeight;
part11.setBackground(new ColorDrawable(Color.BLACK));
part21.setBackground(new ColorDrawable(Color.BLACK));
part31.setBackground(new ColorDrawable(Color.BLACK));
part41.setBackground(new ColorDrawable(Color.BLACK));
part12.setBackground(new ColorDrawable(Color.BLACK));
part22.setBackground(new ColorDrawable(Color.BLACK));
part32.setBackground(new ColorDrawable(Color.BLACK));
part42.setBackground(new ColorDrawable(Color.BLACK));
part13.setBackground(new ColorDrawable(Color.BLACK));
part23.setBackground(new ColorDrawable(Color.BLACK));
part33.setBackground(new ColorDrawable(Color.BLACK));
part43.setBackground(new ColorDrawable(Color.BLACK));
posPart11 = viewInitPos;
posPart12 = displayHeight;
posPart13 = displayHeight;
posPart21 = displayHeight;
posPart22 = displayHeight;
posPart23 = displayHeight;
posPart31 = displayHeight;
posPart32 = displayHeight;
posPart33 = displayHeight;
posPart41 = displayHeight;
posPart42 = displayHeight;
posPart43 = displayHeight;
part11.setY(posPart11);
part12.setY(posPart12);
part13.setY(posPart13);
part21.setY(posPart21);
part22.setY(posPart22);
part23.setY(posPart23);
part31.setY(posPart31);
part32.setY(posPart32);
part33.setY(posPart33);
part41.setY(posPart41);
part42.setY(posPart42);
part43.setY(posPart43);
}
Здесь я установил все onclicklistener для всех видов.
private void initXML() {
part11 = findViewById(R.id.part11);
part11.setOnClickListener(this);
part12 = findViewById(R.id.part12);
part12.setOnClickListener(this);
part13 = findViewById(R.id.part13);
part13.setOnClickListener(this);
part21 = findViewById(R.id.part21);
part21.setOnClickListener(this);
part22 = findViewById(R.id.part22);
part22.setOnClickListener(this);
part23 = findViewById(R.id.part23);
part23.setOnClickListener(this);
part31 = findViewById(R.id.part31);
part31.setOnClickListener(this);
part32 = findViewById(R.id.part32);
part32.setOnClickListener(this);
part33 = findViewById(R.id.part33);
part33.setOnClickListener(this);
part41 = findViewById(R.id.part41);
part41.setOnClickListener(this);
part42 = findViewById(R.id.part42);
part42.setOnClickListener(this);
part43 = findViewById(R.id.part43);
part43.setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch(view.getId()) {
case R.id.part11:
part11.setBackground(new ColorDrawable(Color.LTGRAY));
score++;
break;
case R.id.part12:
part12.setBackground(new ColorDrawable(Color.LTGRAY));
score++;
break;
case R.id.part13:
part13.setBackground(new ColorDrawable(Color.LTGRAY));
score++;
break;
case R.id.part21:
part21.setBackground(new ColorDrawable(Color.LTGRAY));
score++;
break;
case R.id.part22:
part22.setBackground(new ColorDrawable(Color.LTGRAY));
score++;
break;
case R.id.part23:
part23.setBackground(new ColorDrawable(Color.LTGRAY));
score++;
break;
case R.id.part31:
part31.setBackground(new ColorDrawable(Color.LTGRAY));
score++;
break;
case R.id.part32:
part32.setBackground(new ColorDrawable(Color.LTGRAY));
score++;
break;
case R.id.part33:
part33.setBackground(new ColorDrawable(Color.LTGRAY));
score++;
break;
case R.id.part41:
part41.setBackground(new ColorDrawable(Color.LTGRAY));
score++;
break;
case R.id.part42:
part42.setBackground(new ColorDrawable(Color.LTGRAY));
score++;
break;
case R.id.part43:
part43.setBackground(new ColorDrawable(Color.LTGRAY));
score++;
break;
}
}