Hallo ich wollte ein kleines BrickBreaker Spiel programmieren. (sowas wie DX-Ball falls das wer kennt nur halt sehr vereinfacht). Ich bin soweit, dass ich einen Ball habe, der sich bewegt und auch die Bricks. Mein problem ist nur...
...das der Ball durch die Bricks durchfliegt.
... die X-Richtungsveränderung des Balls sich einscheinend auf 0 setzt denn der Ball bewegt sich dann nur nach senkrecht hoch und runter.
... die Bricks nicht verschwinden.
Außerdem noch folgende Fragen dazu:
Wie kann ich neue Level dann hinzufügen?
Wie kriege ich es hin, dass wenn ich den Ball mit der rechten Seite des ich nenne es mal schlägers treffe nach rechts fliegt, und mit der linken eben nach Links?
Vielen Dank für eure Hilfe.
Die Main Klasse:
Die GamePlay Klasse
Die MapGenerator Klasse
...das der Ball durch die Bricks durchfliegt.
... die X-Richtungsveränderung des Balls sich einscheinend auf 0 setzt denn der Ball bewegt sich dann nur nach senkrecht hoch und runter.
... die Bricks nicht verschwinden.
Außerdem noch folgende Fragen dazu:
Wie kann ich neue Level dann hinzufügen?
Wie kriege ich es hin, dass wenn ich den Ball mit der rechten Seite des ich nenne es mal schlägers treffe nach rechts fliegt, und mit der linken eben nach Links?
Vielen Dank für eure Hilfe.
Die Main Klasse:
Java:
package com.ludevstudio.brickbreaker;
import javax.swing.JFrame;
public class Main extends JFrame{
GamePlay PlayGround = new GamePlay();
public static void main(String[] args) {
new Main();
}
public Main() {
setSize(800, 800);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setResizable(false);
setLocationRelativeTo(null);
add(PlayGround.getPanel());
setVisible(true);
}
}
Die GamePlay Klasse
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.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 = -2;
private MapGenerator mapGenerator;
public GamePlay() {
mapGenerator = new MapGenerator(4, 8);
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;
}
A: for (int i=0; i<mapGenerator.map.length; i++) {
for(int j = 0; j<mapGenerator.map[0].length; j++) {
if(mapGenerator.map[i][j] > 0) {
int brickX = i*mapGenerator.brickWidth+50;
int brickY = j*mapGenerator.brickHeight+60;
int brickWidth = mapGenerator.brickWidth;
int brickHeight = mapGenerator.brickHeight;
Rectangle rect = new Rectangle(brickX, brickY, brickWidth, brickHeight);
Rectangle ballRect = new Rectangle(ballPosX, ballPosY, 20, 20);
Rectangle brickRect = rect;
if(ballRect.intersects(brickRect)) {
mapGenerator.setBrickValue(0, i, j);
totalBricks--;
score += 10;
}
if(ballPosX+19 >= brickRect.x || ballPosX+1 <= brickRect.x+brickRect.width ) {
ballXdir = -ballXdir;
} else {
ballYdir = -ballYdir;
}
break A;
}
}
}
if(ballPosX<0) {
ballXdir = - ballXdir;
}
if(ballPosY<0) {
ballYdir = - ballYdir;
}
if(ballPosX>this.getWidth()) {
ballXdir = - ballXdir;
}
}
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;
}
}
}
Die MapGenerator Klasse
Java:
package com.ludevstudio.brickbreaker;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Shape;
import java.awt.Stroke;
import java.util.Random;
public class MapGenerator {
public int map[][];
public int brickWidth;
public int brickHeight;
int color;
public MapGenerator(int row, int col) {
map = new int[row][col];
for(int i = 0; i<map.length; i++) {
for(int j = 0; j<map[0].length; j++) {
map[i][j] = 1;
}
Random random = new Random();
color = random.nextInt(9);
}
brickWidth = 700/col;
brickHeight = 300/row;
}
public void setBrickValue(int value, int i, int j) {
map[i][j] = value;
}
public void draw(Graphics2D g) {
for(int i = 0; i<map.length; i++) {
for(int j = 0; j<map[0].length; j++) {
if(map[i][j]>0) {
if(color==0) {
g.setColor(Color.WHITE);
} else if(color==1) {
g.setColor(Color.YELLOW);
} else if(color==2) {
g.setColor(Color.ORANGE);
} else if(color==3) {
g.setColor(Color.RED);
} else if(color==4) {
g.setColor(Color.BLUE);
} else if(color==5) {
g.setColor(Color.GREEN);
} else if(color==6) {
g.setColor(Color.GRAY);
} else if(color==7) {
g.setColor(Color.PINK);
} else if(color==8) {
g.setColor(Color.MAGENTA);
} else if(color==9) {
g.setColor(Color.cyan);
}
g.fillRect(j*brickWidth+50, i*brickHeight+60, brickWidth, brickHeight);
g.setStroke(new BasicStroke(3));
g.setColor(Color.black);
g.drawRect(j*brickWidth+50, i*brickHeight+60, brickWidth, brickHeight);
}
}
}
}
}
[Code]