master
3009594 2024-09-07 00:14:08 +02:00
parent 2686aac7e3
commit ce9f646909
3 changed files with 265 additions and 1 deletions

View File

@ -33,7 +33,6 @@ public class MouseMotionListenerBeispiel {
}); });
frame.setSize(700, 700); // هنا قمنا بتحديد حجم النافذة. عرضها 300 و طولها 250 frame.setSize(700, 700); // هنا قمنا بتحديد حجم النافذة. عرضها 300 و طولها 250
frame.setSize(700, 500); // هنا قمنا بتحديد حجم النافذة. عرضها 300 و طولها 250
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // هنا جعلنا زر الخروج من النافذة يغلق البرنامج frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // هنا جعلنا زر الخروج من النافذة يغلق البرنامج
frame.setLayout(new FlowLayout()); // لترتيب الأشياء التي أضفناها فيها FlowLayout هنا جعلنا النافذة تستخدم الـ frame.setLayout(new FlowLayout()); // لترتيب الأشياء التي أضفناها فيها FlowLayout هنا جعلنا النافذة تستخدم الـ
frame.setVisible(true); // هنا جعلنا النافذة مرئية frame.setVisible(true); // هنا جعلنا النافذة مرئية

View File

@ -0,0 +1,229 @@
package Übungen.BreakOut;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Random;
public class GamePlay extends JPanel implements Runnable,KeyListener,ActionListener {
// Schläger
final int WIDTH = 80;
final int HEIGHT = 10;
int positionX = 700 / 2;
int positionY = 700 - HEIGHT - 50;
int bewegung = 0;
Rectangle schläger;
// Ball
final int WIDTHball = 10;
final int HEIGHTball = 10;
int positionXball = 700 / 2;
int positionYball = 700 - HEIGHT - 90;
double bewegungxball = 1 ;
double bewegungyball = 1;
Rectangle ball;
Random rand = new Random();
int anzahlRects = 18;
int[][] spielField = new int[3][6];
// Startpositionen für die Blöcke
int posX = 60;
int posY = 60;
int width = 80;
int height = 10;
Rectangle schlägerGame;
boolean gameOver = false;
GamePlay(){
this.schläger = new Rectangle(positionX,positionY,WIDTH,HEIGHT);
this.ball = new Rectangle(positionXball,positionYball,WIDTHball,HEIGHTball);
fülleMitEinsen();
schlägerGame = new Rectangle(posX,posY,width,height);
this.addKeyListener(this);
this.setFocusable(true);
this.setFocusTraversalKeysEnabled(false);
}
public void fülleMitEinsen() {
for (int i = 0; i < 3; i++)
for (int j = 0; j < 6;j++)
spielField[i][j] = 1;
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
// Screen
g.setColor(Color.BLACK);
g.fillRect(0, 0, 700, 700);
// Schläger
g.setColor(Color.WHITE);
g.fillRect(schläger.x, schläger.y, schläger.width, schläger.height);
// Ball
g.setColor(Color.WHITE);
g.fillOval(ball.x, ball.y, ball.width, ball.height);
// Border
g.setColor(Color.YELLOW);
g.fillRect(0, 0, 700, 3);
g.fillRect(0, 0, 3, 700);
g.fillRect(680, 0, 3, 650);
// Blöcke zeichnen
int initialPosX = 60;
int initialPosY = 60;
final int width = 80;
final int height = 10;
posY = initialPosY;
for (int i = 0; i < 3; i++) {
posX = initialPosX;
for (int j = 0; j < 6; j++) {
if (spielField[i][j] > 0) {
g.setColor(Color.RED);
g.fillRect(posX, posY, width, height);
}
posX += width + 10; // 10 ist für Spacing
}
posY += height + 10;
}
}
public void mov() {
checkKollision();
// MovRect
schläger.x += bewegung;
if (schläger.x < 0)
schläger.x = 0;
if (schläger.x > getWidth())
schläger.x = 600;
// MovBall
ball.x += bewegungxball;
ball.y -= bewegungyball;
if (ball.x <= 0 || ball.x >= 670)
bewegungxball = -bewegungxball;
if (ball.y <= 0 || ball.intersects(schläger))
bewegungyball = -bewegungyball;
repaint();
}
public void setRandX(int x) {
bewegungxball = x;
}
public void setRandY(int x) {
bewegungyball = x;
}
public void checkKollision() {
// Kollision mit Blöcken überprüfen
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 6; j++) {
if (spielField[i][j] > 0) {
int blockX = 60 + j * (width);
int blockY = 60 + i * (height);
Rectangle block = new Rectangle(blockX, blockY, width, height);
if (ball.intersects(block)) {
spielField[i][j] = 0;
if (ball.x + ball.width - bewegungxball <= block.x || ball.x - bewegungxball >= block.x + block.width) {
bewegungxball = -bewegungxball;
} else {
bewegungyball = -bewegungyball;
}
}
}
}
}
repaint();
}
public void setBewegungRect(int x) {
bewegung = x;
}
@Override
public void run() {
try {
while (!gameOver) {
mov();
Thread.sleep(2);
}
} catch (Exception e) {
System.err.println(e.getMessage());
}
}
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}
@Override
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() ==KeyEvent.VK_A)
setBewegungRect(-1);
if (e.getKeyCode() ==KeyEvent.VK_D)
setBewegungRect(+1);
}
@Override
public void keyReleased(KeyEvent e) {
if (e.getKeyCode() ==KeyEvent.VK_A || e.getKeyCode() ==KeyEvent.VK_D)
setBewegungRect(0);
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
}
}

View File

@ -0,0 +1,36 @@
package Übungen.BreakOut;
import java.awt.Color;
import java.awt.*;
import javax.swing.*;
public class Window extends JFrame {
final int WIDTH = 700;
final int HEIGHT = 700;
GamePlay gamePlay;
Window() {
gamePlay = new GamePlay();
this.setTitle("Breakout Game");
this.setBounds(10, 10, WIDTH, HEIGHT);
this.setResizable(false);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
this.getContentPane().setBackground(Color.BLACK);
this.setVisible(true);
this.add(gamePlay);
}
public static void main(String[] args) {
Window game1 = new Window();
Thread gamePlay = new Thread(game1.gamePlay);
gamePlay.start();
//
// Ball b1 = new Ball();
}
}