package gamePackage;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.border.LineBorder;
import javax.swing.JLabel;
import javax.swing.JButton;
public class Game extends JFrame {
private final static String STARTBILD = "startbildschirm";
private final static String SPIELBILD = "spielbildschirm";
private JPanel contentPane;
private JPanel gamePane = new JPanel();
private JPanel optionenPane = new JPanel();
private CardLayout cl = new CardLayout();
private JPanel cardsPane = new JPanel();
private static int score = 0;
private JMyPanel panelZeichenflaeche;
private Thread t;
private JButton btnBeenden;
private static JLabel lblScore;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Game frame = new Game();
frame.setVisible(true);
frame.setResizable(false);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public Game() {
setTitle("Ballspin");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(Toolkit.getDefaultToolkit().getScreenSize().width/2-350, Toolkit.getDefaultToolkit().getScreenSize().height/2-300, 700, 400);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(cardsPane);
contentPane.setLayout(null);
contentPane.setBackground(Color.BLACK);
//Karten
cardsPane.setLayout(cl);
cardsPane.add(contentPane, STARTBILD);
cardsPane.add(gamePane, SPIELBILD);
cl.show(cardsPane, STARTBILD);
JLabel lblTitle = new JLabel("Ballspin");
lblTitle.setForeground(Color.WHITE);
lblTitle.setFont(new Font("Impact", Font.BOLD, 50));
lblTitle.setBounds(242, 59, 224, 44);
contentPane.add(lblTitle);
JButton btnStart = new JButton("START");
btnStart.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
cl.show(cardsPane, SPIELBILD);
starteRunde();
btnBeenden.requestFocus();
}
});
btnStart.setFont(new Font("Impact", Font.BOLD, 30));
btnStart.setBounds(210, 160, 256, 54);
contentPane.add(btnStart);
JButton btnOptionen = new JButton("Einstellungen");
btnOptionen.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
//hier später cardlayout verwei auf das optionen panel
}
});
btnOptionen.setFont(new Font("Impact", Font.BOLD, 25));
btnOptionen.setBounds(242, 237, 200, 40);
contentPane.add(btnOptionen);
/*
// hier beginnt der Einstellungen Bereich (Dieser Bereich ist noch unfertig
optionenPane.setVisible(true);
optionenPane.setBorder(new EmptyBorder(5, 5, 5, 5));
optionenPane.setLayout(null);
optionenPane.setBackground(Color.BLACK);
//setContentPane(optionenPane); wird für den Aufbau mit windowbuilder gebraucht und nach fertigstellung gelöscht
*/
JLabel lblEinstellungen = new JLabel("Einstellungen");
lblEinstellungen.setBorder(new LineBorder(Color.WHITE, 3));
lblEinstellungen.setForeground(Color.WHITE);
lblEinstellungen.setFont(new Font("Impact", Font.BOLD, 50));
lblEinstellungen.setBounds(180, 32, 326, 62);
optionenPane.add(lblEinstellungen);
// hier beginnt der Gamebereich
gamePane.setVisible(true);
gamePane.setBorder(new EmptyBorder(5, 5, 5, 5));
gamePane.setLayout(null);
gamePane.setBackground(Color.BLACK);
lblScore = new JLabel("Score: " + score);
lblScore.setFont(new Font("Segoe UI Black", Font.BOLD, 40));
lblScore.setForeground(Color.WHITE);
lblScore.setBounds(260, 11, 247, 41);
gamePane.add(lblScore);
btnBeenden = new JButton("Beenden");
btnBeenden.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_UP) {
if(panelZeichenflaeche.getRY()>17) {
panelZeichenflaeche.setRY(panelZeichenflaeche.getRY()-30);
repaint();
if(panelZeichenflaeche.getRY()<17) {
panelZeichenflaeche.setRY(15);
}
}
} else {
if(e.getKeyCode() == KeyEvent.VK_DOWN) {
if(panelZeichenflaeche.getRY()<getHeight()-145) {
panelZeichenflaeche.setRY(panelZeichenflaeche.getRY()+30);
repaint();
if(panelZeichenflaeche.getRY()>getHeight()-145) {
panelZeichenflaeche.setRY(getHeight()-144);
}
}
}
}
}
});
btnBeenden.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
beendeRunde();
cl.show(cardsPane, STARTBILD);
}
});
btnBeenden.setBounds(590, 11, 90, 41);
gamePane.add(btnBeenden);
panelZeichenflaeche = new JMyPanel();
panelZeichenflaeche.setBounds(0, 55, getWidth()-5, getHeight()-83);
gamePane.add(panelZeichenflaeche);
}
public void starteRunde() {
if(t == null) {
t = new Thread(panelZeichenflaeche);
}
if(!t.isAlive()) {
t.start();
}
panelZeichenflaeche.setSpielfeld();
score = 0;
lblScore.setText("Score: " + score);
panelZeichenflaeche.setPunkte(0);
panelZeichenflaeche.setVor(false);
}
public void beendeRunde() {
t.interrupt();
t = new Thread(panelZeichenflaeche);
}
public static void JScoreText(String sc) {
lblScore.setText(sc);
}
public static String getJScoreText() {
return lblScore.getText();
}
public static void JScorePlus(String sc) {
lblScore.setText(sc);
score++;
}
public static void JScoreMinus(String sc) {
lblScore.setText(sc);
score--;
}
public static int getJScore() {
return score;
}
}