Guten Abend!
Ich habe hier ein BrickBreaker Spiel. Mein Problem ist, das der Ball (fast) immer zur gleichen Stelle zurückkehrt, und man so eigentlich nicht spielen braucht da der Balll ja alles allein macht. Meine Frage nun: Wie kriege ich mehr Abwechslung in die Ballbewegung?
Vielen Dank schonmal!
Hier der Code:
Ich habe hier ein BrickBreaker Spiel. Mein Problem ist, das der Ball (fast) immer zur gleichen Stelle zurückkehrt, und man so eigentlich nicht spielen braucht da der Balll ja alles allein macht. Meine Frage nun: Wie kriege ich mehr Abwechslung in die Ballbewegung?
Vielen Dank schonmal!
Hier der Code:
Java:
package com.ludevstudio.brickbreaker;
import java.awt.Color;import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.Shape;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.ImageObserver;
import java.text.AttributedCharacterIterator;
import java.util.Random;
import java.util.Timer;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import org.w3c.dom.css.Rect;
public class GamePlay extends JPanel implements KeyListener, ActionListener{
private static final long serialVersionUID = 1L;
Boolean play = false;
private int score = 0;
private int totalBricks = 21;
private javax.swing.Timer timer;
private int delay = 8;
private int playerX = 350;
private int ballPosX = 390;
private int ballPosY = 710;
private int ballXdir = -3;
private int ballYdir = -3;
private MapGenerator mapGenerator;
public GamePlay() {
mapGenerator = new MapGenerator(15, 10);
setVisible(true);
setLayout(null);
setFocusable(true);
addKeyListener(this);
timer = new javax.swing.Timer(delay, this);
timer.start();
}
public JPanel getPanel() {
return this;
}
public void paint (Graphics g) {
// Background
g.setColor(Color.BLACK);
g.fillRect(0, 0, this.getWidth(), this.getHeight());
// Map
mapGenerator.draw((Graphics2D)g);
// Border
g.setColor(Color.BLUE);
g.fillRect(0, 0, this.getWidth(), 10);
g.fillRect(0, 0, 10, this.getHeight());
g.fillRect(this.getWidth()-10, 0, 10, this.getHeight());
//Ball
g.setColor(Color.YELLOW);
g.fillOval(ballPosX, ballPosY, 20, 20);
// Paddle
g.setColor(Color.GREEN);
g.fillRect(playerX, 730, 100, 10);
g.dispose();
}
@Override
public void actionPerformed(ActionEvent arg0) {
timer.start();
if(play) {
ballPosX += ballXdir;
ballPosY += ballYdir;
if(new Rectangle(ballPosX, ballPosY, 20, 20).intersects(new Rectangle(playerX, 730, 100, 10))) {
ballYdir = -ballYdir;
}
if(new Rectangle(ballPosX, ballPosY, 20, 20).intersects(new Rectangle(playerX, 730, 100, 10))) {
int hit = (playerX+100)-ballPosX+10;
if(hit<20) {
ballXdir = 4;
} else if(hit<40) {
ballXdir = 2;
} else if(hit<40) {
ballXdir = 0;
} else if(hit<60) {
ballXdir = -2;
} else if(hit<80) {
ballXdir = -4;
}
}
}
for (int i = 0; i<mapGenerator.map.length; i++) {
for (int j = 0; j<mapGenerator.map[0].length; j++) {
Rectangle brickRect = new Rectangle(j*mapGenerator.brickWidth+60, i*mapGenerator.brickHeight+60, mapGenerator.brickWidth, mapGenerator.brickHeight);
Rectangle ballRect = new Rectangle(ballPosX-2, ballPosY-2, 22, 22);
if(ballRect.intersects(brickRect)) {
if(mapGenerator.map[i][j]!=0) {
ballXdir = -ballXdir;
ballYdir = -ballYdir;
}
mapGenerator.map[i][j] = 0;
}
}
}
if(ballPosX<10) {
ballXdir = -ballXdir;
}
if(ballPosY<10) {
ballYdir = -ballYdir;
}
if(ballPosX>this.getWidth()-30) {
ballXdir = - ballXdir;
}
if(ballPosY>this.getHeight()) {
ballYdir = - ballYdir;
}
repaint();
}
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_LEFT) {
moveLeft();
} else if(e.getKeyCode() == KeyEvent.VK_RIGHT) {
moveRight();
}
}
@Override
public void keyReleased(KeyEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void keyTyped(KeyEvent arg0) {
// TODO Auto-generated method stub
}
public void moveRight() {
if(playerX>this.getWidth()-30-100) {
playerX = this.getWidth()-30-100;
} else {
playerX += 40;
play = true;
}
}
public void moveLeft() {
if(playerX<30) {
playerX = 30;
} else {
playerX -= 40;
play = true;
}
}
}