Add File
This commit is contained in:
@@ -0,0 +1,93 @@
|
|||||||
|
/* Copyright 2018-2020 the original author or authors.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
||||||
|
* use this file except in compliance with the License. You may obtain a copy of
|
||||||
|
* the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by
|
||||||
|
* applicable law or agreed to in writing, software distributed under the
|
||||||
|
* License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
|
||||||
|
* OF ANY KIND, either express or implied. See the License for the specific
|
||||||
|
* language governing permissions and limitations under the License.
|
||||||
|
*/
|
||||||
|
package com.github.drinkjava2.frog.objects;
|
||||||
|
|
||||||
|
import static com.github.drinkjava2.frog.Env.ENV_HEIGHT;
|
||||||
|
import static com.github.drinkjava2.frog.Env.ENV_WIDTH;
|
||||||
|
import static com.github.drinkjava2.frog.Env.bricks;
|
||||||
|
|
||||||
|
import com.github.drinkjava2.frog.Env;
|
||||||
|
import com.github.drinkjava2.frog.Frog;
|
||||||
|
import com.github.drinkjava2.frog.util.RandomUtils;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is a seesaw to train frog's balance
|
||||||
|
*
|
||||||
|
* @author Yong Zhu
|
||||||
|
* @since 2.0.1
|
||||||
|
*/
|
||||||
|
public class SeeSaw implements Object {
|
||||||
|
private static final int LEGNTH = 300;
|
||||||
|
private static final int CENTER_X = Env.ENV_WIDTH / 2;
|
||||||
|
private static final int CENTER_Y = Env.ENV_HEIGHT / 2;
|
||||||
|
|
||||||
|
private double angle = 0;// -PI/4 to PI/4
|
||||||
|
private double leftWeight = 0;
|
||||||
|
private double rightWeight = 0;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void build() {
|
||||||
|
angle = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void destory() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void active(int screen) {
|
||||||
|
for (int i = 0; i < ENV_WIDTH; i++) {// 清除食物
|
||||||
|
for (int j = 0; j < ENV_HEIGHT; j++)
|
||||||
|
if (bricks[i][j] == Material.SEESAW)
|
||||||
|
bricks[i][j] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (RandomUtils.percent(2))
|
||||||
|
leftWeight = RandomUtils.nextFloat() * 3;
|
||||||
|
if (RandomUtils.percent(2))
|
||||||
|
rightWeight = RandomUtils.nextFloat() * 3;
|
||||||
|
Frog f = Env.frogs.get(screen);
|
||||||
|
|
||||||
|
if (f.x < (CENTER_X - LEGNTH / 2) || f.x > (CENTER_X + LEGNTH / 2))
|
||||||
|
f.energy -= 100000; // 如果走出跷跷板外则扣分,出局
|
||||||
|
double left = leftWeight - (f.x - CENTER_X);
|
||||||
|
double right = rightWeight + (f.x - CENTER_X);
|
||||||
|
// right - left need in -100 to +100
|
||||||
|
angle = angle + (right - left) * Math.PI * .000001;
|
||||||
|
if (angle > Math.PI / 6) {
|
||||||
|
angle = Math.PI / 6;
|
||||||
|
f.energy -= 200;
|
||||||
|
}
|
||||||
|
if (angle < -Math.PI / 6) {
|
||||||
|
angle = -Math.PI / 6;
|
||||||
|
f.energy -= 200;
|
||||||
|
}
|
||||||
|
f.y = CENTER_Y + (int) Math.round((f.x - CENTER_X) * Math.tan(angle));
|
||||||
|
f.energy -= Math.abs(angle) * 180; // 角度越大,扣分越多
|
||||||
|
int x;
|
||||||
|
int y;
|
||||||
|
for (int l = -LEGNTH / 2; l <= LEGNTH / 2; l++) {
|
||||||
|
x = (int) Math.round(l * Math.cos(angle));
|
||||||
|
y = (int) Math.round(l * Math.sin(angle));
|
||||||
|
Env.bricks[CENTER_X + x][CENTER_Y + y] = Material.SEESAW;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 画底座
|
||||||
|
for (int i = 1; i < 10; i++) {
|
||||||
|
Env.bricks[CENTER_X - i][CENTER_Y + i] = Material.SEESAW_BASE;
|
||||||
|
Env.bricks[CENTER_X + i][CENTER_Y + i] = Material.SEESAW_BASE;
|
||||||
|
}
|
||||||
|
for (int i = -10; i < 10; i++)
|
||||||
|
Env.bricks[CENTER_X + i][CENTER_Y + 10] = Material.SEESAW_BASE;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user