私は大学のコースのためにAndroidスタジオで古典的なポンゲームの簡単な演出を作成しました。この時点で、私は敵のパドルのための無敵のAIを作ったという事実を除いて、ほとんどすべてが準備ができています。私はパドルとボールをデフォルトのRectF
クラスで作成し、ボールの現在の位置に基づいて自分のAIパドルの位置を変更します(パドルの長さは130ピクセルでありボールと比較してパドルを中心にするため、これは本質的に敵のパドルがボールの速度/位置に合っているため(ボールの速度が新しいレベルごとに増加するため)、無限の速度で移動することができます。ここではその方法です:シンプルなポンゲームのために無敵のAIパドルにスピードを適用する
public void AI(Paddle paddle) {
RectF paddleRect = paddle.getRect();
RectF ballRect = ball.getRect();
if (ballRect.left >= 65 && ballRect.right <= screenX - 65) {
paddleRect.left = (ballRect.left - 65);
paddleRect.right = (ballRect.right + 65);
}
if (ballRect.left < 65) {
paddleRect.left = 0;
paddleRect.right = 130;
}
if (ballRect.right > screenX - 65) {
paddleRect.left = screenX - 130;
paddleRect.right = screenX;
}
}
参考のために、ここで私のPaddle
クラスの関連する部分です:上記の私View
クラスにrun()
メソッドから通過さupdate(long fps)
方法で
public Paddle(float screenX, float screenY, float xPos, float yPos, int defaultSpeed){
length = 130;
height = 30;
paddleSpeed = defaultSpeed;
// Start paddle in the center of the screen
x = (screenX/2) - 65;
xBound = screenX;
// Create the rectangle
rect = new RectF(x, yPos, x + length, yPos + height);
}
// Set the movement of the paddle if it is going left, right or nowhere
public void setMovementState(int state) {
paddleMoving = state;
}
// Updates paddles' position
public void update(long fps){
if(x > 0 && paddleMoving == LEFT){
x = x - (paddleSpeed/fps);
}
if(x < (xBound - 130) && paddleMoving == RIGHT){
x = x + (paddleSpeed/fps);
}
rect.left = x;
rect.right = x + length;
}
fps
:
私のパドルとボールは常にで更新されますView
クラスのメソッド。私はすでにそれぞれの新しいパドルに定義パドル速度を使用して、私のAIパドルに速度制限を付けることができますどのように
public void onUpdate() {
// Update objects' positions
paddle1.update(fps);
ball.update(fps);
AI(paddle2);
}
?私はすでにAI(Paddle paddle)
メソッドに+/- (paddleSpeed/fps)
を組み込むように修正しようとしましたが、パドルにはまったく影響しませんでした。たぶん私はそれを間違って実装したが、どんな助けも素晴らしいだろう!その後、
public void AI(Paddle paddle) {
RectF paddleRect = paddle.getRect();
RectF ballRect = ball.getRect();
float ballCenter = (ballRect.left + ballRect.right)/2;
float paddleCenter = (paddleRect.left + paddleRect.right)/2;
if (ballCenter < paddleCenter) {
setMovementState(LEFT);
}
else {
setMovementState(RIGHT);
}
}
と:
ありがとうございました! – ethanharrell