Hallo!
Ich habe ein Spiel bei dem man verliert sobald der ball den unteren Bildrand berührt. Dann erscheint ein Menü, in dem man das Spiel neu starten kann. Das Problem ist, das dann immernoch das Level so aussieht, wie es vor dem Game Over war.
(Ich meine nur die Steine (es ist ein BrickBreaker Spiel))
Woran liegt das?
Ich habe ein Spiel bei dem man verliert sobald der ball den unteren Bildrand berührt. Dann erscheint ein Menü, in dem man das Spiel neu starten kann. Das Problem ist, das dann immernoch das Level so aussieht, wie es vor dem Game Over war.
(Ich meine nur die Steine (es ist ein BrickBreaker Spiel))
Woran liegt das?
Java:
package com.ludevstudio.brickbreaker;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.GroupLayout.Alignment;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.text.Position;
public class Main extends JFrame implements ActionListener{
GamePlay playGround = new GamePlay(this);
GameEnd gameEnd = new GameEnd(this, playGround);
Menu menu = new Menu(this);
JPanel masterContainer = new JPanel();
CardLayout layout = new CardLayout();
public static void main(String[] args) {
new Main();
}
public Main() {
setSize(800, 800);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setResizable(false);
setFocusable(true);
setAlwaysOnTop(true);
setLocationRelativeTo(null);
setLayout(null);
initComponents();
setVisible(true);
}
public void initComponents() {
masterContainer.setBounds(0, 0, 800, 800);
masterContainer.setVisible(true);
masterContainer.setFocusable(true);
masterContainer.setLayout(layout);
this.add(masterContainer);
menu.setBounds(0, 0, 800, 800);
menu.setFocusable(true);
masterContainer.add(menu, "menu");
playGround.setBounds(0, 0, 800, 800);
playGround.setFocusable(true);
masterContainer.add(playGround, "game");
gameEnd.setBounds(0, 0, 800, 800);
gameEnd.setFocusable(true);
masterContainer.add(gameEnd, "end");
}
@Override
public void actionPerformed(ActionEvent e) {
}
public void showGameEnd() {
layout.show(masterContainer, "end");
gameEnd.requestFocus();
}
public void showGamePlay() {
layout.show(masterContainer, "game");
playGround.requestFocus();
}
}
Java:
package com.ludevstudio.brickbreaker;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;
import com.ludevstudio.brickbreaker.levels.Level1;
import com.ludevstudio.brickbreaker.levels.Level2;
public class GamePlay extends JPanel implements KeyListener, ActionListener {
Timer timer;
int delay = 8;
Boolean play = false;
// Komponenten
Player player;
Border border;
Ball ball;
Main mainFrame;
// // Game
public int score = 0;
public String result = "Game Over";
public int level = 1;
// Levels
Level1 level1 = new Level1();
Level2 level2 = new Level2();
public GamePlay(Main mainFrame) {
this.mainFrame = mainFrame;
setFocusable(true);
addKeyListener(this);
timer = new Timer(delay, this);
timer.start();
player = new Player();
border = new Border();
ball = new Ball(player);
}
public void paint (Graphics g) {
// Hintergrund
g.setColor(Color.BLACK);
g.fillRect(0, 0, this.getWidth(), this.getHeight());
// Player
player.draw((Graphics2D)g);
// Border
border.draw((Graphics2D)g);
// Ball
ball.draw((Graphics2D)g);
// Leve
if(level==1) {
level2.draw((Graphics2D)g);
} else if(level==2) {
level2.draw((Graphics2D)g);
}
}
@Override
public void actionPerformed(ActionEvent arg0) {
timer.start();
if(play) {
ball.move();
ball.rebound();
gameOver();
if(level==1) {
level2Handler();
} else if(level==2) {
level2Handler();
}
}
repaint();
}
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode()==KeyEvent.VK_LEFT) {
play = true;
player.moveLeft();
repaint();
} else if(e.getKeyCode()==KeyEvent.VK_RIGHT) {
play = true;
player.moveRight();
repaint();
}
}
@Override
public void keyReleased(KeyEvent e) {
}
@Override
public void keyTyped(KeyEvent e) {
}
public void gameOver() {
if(ball.getBall().y>800) {
level1.reset();
play = false;
ball.reset();
player.reset();
timer.stop();
mainFrame.showGameEnd();
}
}
public void restartGame() {
timer.start();
score = 0;
level = 1;
repaint();
}
public void level1Handler() {
if(level1.blocksLeft()==0) {
level++;
}
for(int i = 0; i<level1.map.length; i++) {
for(int j = 0; j<level1.map[0].length; j++) {
Rectangle blockRect = new Rectangle(j*level1.brickWidth+50, i*level1.brickHeight+60, level1.brickWidth, level1.brickHeight);
Rectangle ballRect = ball.getBall();
if(level1.map[i][j] != 0) {
if(ballRect.intersects(blockRect)) {
level1.setBrickValue(0, i, j);
// ball.ballXdir = -ball.ballXdir;
// ball.ballYdir = -ball.ballYdir;
score += 10;
}
}
}
}
}
public void level2Handler() {
if(level2.blocksLeft()==0) {
level++;
}
for(int i = 0; i<level2.map.length; i++) {
for(int j = 0; j<level2.map[0].length; j++) {
Rectangle blockRect = new Rectangle(j*level2.brickWidth+50, i*level2.brickHeight+60, level2.brickWidth, level2.brickHeight);
Rectangle ballRect = ball.getBall();
if(level2.map[i][j] != 0) {
if(ballRect.intersects(blockRect)) {
level2.setBrickValue(0, i, j);
ball.ballXdir = -ball.ballXdir;
ball.ballYdir = -ball.ballYdir;
score += 10;
}
}
}
}
}
}
Java:
package com.ludevstudio.brickbreaker.levels;
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 Level1 {
public int[][] level = new int[][] {
{1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1}
};
public Color[][] colors = new Color[][] {
{Color.blue, Color.red, Color.red, Color.red, Color.red, Color.red, Color.red, Color.blue},
{Color.red, Color.blue, Color.red, Color.red, Color.red, Color.red, Color.blue, Color.red},
{Color.red, Color.red, Color.blue, Color.red, Color.red, Color.blue, Color.red, Color.red},
{Color.red, Color.red, Color.red, Color.orange, Color.orange, Color.red, Color.red, Color.red},
{Color.red, Color.red, Color.red, Color.orange, Color.orange, Color.red, Color.red, Color.red},
{Color.red, Color.red, Color.blue, Color.red, Color.red, Color.blue, Color.red, Color.red},
{Color.red, Color.blue, Color.red, Color.red, Color.red, Color.red, Color.blue, Color.red},
{Color.blue, Color.red, Color.red, Color.red, Color.red, Color.red, Color.red, Color.blue}
};
public int[][] map = level;
public int brickWidth;
public int brickHeight;
public Level1() {
brickWidth = 700/map[0].length;
brickHeight = 300/map.length;
}
public void setBrickValue(int value, int i, int j) {
map[i][j] = value;
}
public int blocksLeft() {
int blocksLeft = 0;
for(int i = 0; i<map.length; i++) {
for(int j = 0; j<map[0].length; j++) {
if(map[i][j]>0) {
blocksLeft++;
}
}
}
return blocksLeft;
}
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) {
g.setColor(colors[i][j]);
g.fillRect(j*brickWidth+50, i*brickHeight+60, brickWidth, brickHeight);
}
}
}
}
public void reset() {
map = level;
}
}