1
0

Reset project

This commit is contained in:
Trutz
2021-05-03 15:05:55 +02:00
parent 488bb78d8b
commit 4bb5e40cc9
90 changed files with 601 additions and 974 deletions
@@ -0,0 +1,16 @@
package de.oszimt.ls.aliendefence.view;
import de.oszimt.ls.aliendefence.controller.AlienDefenceController;
import de.oszimt.ls.aliendefence.model.persistence.IPersistance;
import de.oszimt.ls.aliendefence.model.persistenceDummy.PersistanceDummy;
import de.oszimt.ls.aliendefence.view.menue.MainMenu;
public class StartAlienDefence {
public static void main(String[] args) {
IPersistance alienDefenceModel = new PersistanceDummy();//TODO new PersistanceDB();
AlienDefenceController alienDefenceController = new AlienDefenceController(alienDefenceModel);
MainMenu.show(alienDefenceController);
}
}
@@ -0,0 +1,95 @@
package de.oszimt.ls.aliendefence.view.game;
import java.awt.Color;
import java.awt.Point;
import java.awt.Toolkit;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import de.oszimt.ls.aliendefence.controller.GameController;
import pictures._Res;
/**
* GUI der Klasse _______
*
* @author Tenbusch
*
*/
public class GameGUI extends JFrame {
private static final long serialVersionUID = 1L;
private GameJPanel spielfeld;
private GameController gc;
public final long STARTTIME;
private final int WIDTH = 1280;
private final int HEIGHT = 960;
// Konstruktor
public GameGUI(GameController gc) {
super("Spiel v0.0 - FPS: ");
setCursor(Toolkit.getDefaultToolkit().createCustomCursor(_Res.image("crosshair.png"),
new Point(10, 10), "Cursor"));
// Fenstergestaltung
setSize(WIDTH, HEIGHT);
setLocation(10, 10);
setResizable(false);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
// Controller registrieren
this.gc = gc;
setBackground(new Color(200, 200, 200));
gc.setHasWon(false);
spielfeld = new GameJPanel(gc);
getContentPane().add(spielfeld);
setLocationRelativeTo(null);
setVisible(true);
// Startzeit setzen
STARTTIME = System.currentTimeMillis();
}
public void start() {
long lastStep = System.currentTimeMillis() - 1;
// Spielfeld vorbereiten
gc.startLevel();
while (true) {
// FPS berechnen
long delta = System.currentTimeMillis() - lastStep;
lastStep = System.currentTimeMillis();
setTitle("Spiel v0.0 - FPS: " + (1000 / delta));
// Spiellogik
this.gc.doLogik(delta);
repaint();
try {
Thread.sleep(1);
} catch (Exception e) {
}
if (gc.isHasWon() || gc.timeleft() <= -1) {
try {
Thread.sleep(1000);
} catch (InterruptedException ignored) {
}
dispose();
break;
}
}
}
}
@@ -0,0 +1,99 @@
package de.oszimt.ls.aliendefence.view.game;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.util.LinkedList;
import java.util.List;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import de.oszimt.ls.aliendefence.controller.GameController;
import de.oszimt.ls.aliendefence.model.Target;
import pictures._Res;
@SuppressWarnings("serial")
public class GameJPanel extends JPanel {
// Attribute die zum Zeichnen aus dem Controller geholt werden müssen (konkrete
// Objekte erst in init() erzeugen)
private GameController gc;
private MouseClickListener mouseClickListener;
private List<TargetPainter> rechteckePainter;
private BufferedImage img, win, lose;
private JLabel lblTimeleft;
public GameJPanel(GameController gc) {
super(); // do the JPanel-stuff
this.gc = gc;
this.mouseClickListener = new MouseClickListener(gc);
this.addMouseListener(this.mouseClickListener);
this.lblTimeleft = new JLabel(gc.timeleft() + "s");
this.lblTimeleft.setHorizontalAlignment(SwingConstants.RIGHT);
this.lblTimeleft.setBounds(1000, 10, 200, 40);
this.lblTimeleft.setFont(new Font("Comic Sans Serif", Font.BOLD, 30));
init();
}
/**
* Spielfläche initialisieren
*/
public void init() {
this.img = _Res.bimage(this.gc.getCurrLevel().getBackgroundImage());
this.win = _Res.bimage("YouWin.png");
this.lose = _Res.bimage("YouLoose.png");
LinkedList<TargetPainter> rechteckePainter = new LinkedList<TargetPainter>();
for (Target t : gc.getTargets()) {
rechteckePainter.add(new TargetPainter(t));
}
this.rechteckePainter = rechteckePainter;
}
@Override
public void paintComponent(Graphics g) {
// Abfrage Gewinn oder
if (gc.timeleft() <= 0 || gc.isHasWon()) {
g.setColor(Color.GRAY);
if (gc.isHasWon()) {
g.drawImage(this.win, 300, 120, null);
} else {
g.drawImage(this.lose, 300, 120, null);
}
g.setFont(new Font("Arial", Font.PLAIN, 16));
// g.drawString(gc.getShotsFired() + " Schüsse mit " + gc.getAccuracy() + " %
// Treffergenauigkeit", 300, 850);
} else {
// Spielfeldhintergrund zeichnen
if (img != null) {
g.drawImage(this.img, 0, 0, null);
} else {
g.setColor(Color.GREEN);
g.fillRect(0, 0, this.getWidth(), this.getHeight());
}
// System.out.println(gc.time());
// Targets zeichnen
for (TargetPainter rp : this.rechteckePainter) {
rp.paint(g, gc.time());
}
// Sekundenanzeige
if (gc.timeleft() <= 5)
g.setColor(Color.RED);
else
g.setColor(Color.WHITE);
g.setFont(new Font("Comic Sans Serif", Font.PLAIN, 30));
g.drawString(gc.timeleft() + "", 1210, 40);
}
}
}
@@ -0,0 +1,21 @@
package de.oszimt.ls.aliendefence.view.game;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import de.oszimt.ls.aliendefence.controller.GameController;
public class MouseClickListener extends MouseAdapter {
private GameController gc;
public MouseClickListener(GameController gc) {
this.gc = gc;
}
@Override
public void mousePressed(MouseEvent e) {
gc.fireShot(e.getX(), e.getY());
}
}
@@ -0,0 +1,48 @@
package de.oszimt.ls.aliendefence.view.game;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import de.oszimt.ls.aliendefence.model.Target;
import pictures._Res;
public class TargetPainter {
private Target target;
private BufferedImage image;
private BufferedImage imageDestroyed;
public TargetPainter(Target target) {
this.target = target;
this.image = _Res.bimage(target.getImageAddress());
this.imageDestroyed = _Res.bimage("explosion.png");
}
public void paint(Graphics g, long time) {
long targetStartTime = target.getTime();
long targetEndTime = target.getTime() + target.getDuration();
// Prüft, ob das Target erscheint.
if ((time < targetStartTime || time > targetEndTime))
return;
if (this.target.isHit() && time < targetEndTime) {
g.drawImage(this.imageDestroyed, this.target.getHitbox().getX(), this.target.getHitbox().getY(),
this.target.getHitbox().getWidth(), this.target.getHitbox().getHeight(), null);
return;
}
g.drawImage(this.image, this.target.getHitbox().getX(), this.target.getHitbox().getY(),
this.target.getHitbox().getWidth(), this.target.getHitbox().getHeight(), null);
}
}
@@ -0,0 +1,81 @@
package de.oszimt.ls.aliendefence.view.menue;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import de.oszimt.ls.aliendefence.controller.AttemptController;
import de.oszimt.ls.aliendefence.model.Level;
public class Highscore extends JFrame {
// Attribute
private AttemptController attemptController;
private Level level;
public Highscore(AttemptController attemptController, Level level) {
this(attemptController, level, 0);
}
// Konstruktor
public Highscore(AttemptController attemptController, Level level, int game_id) {
this.attemptController = attemptController;
this.level = level;
// Zweidimensioaler Vector, mit Inhalt der Tabelle wird geholt.
Vector<Vector<String>> vecRow = attemptController.getAllAttemptsPerLevel(level, game_id);
int mark = attemptController.getPlayerPosition();
setLayout(new BorderLayout(5, 10));
// Spaltenüberschriften
Vector<String> title = new Vector<>();
title.add("Rang");
title.add("Spieler");
title.add("Datum");
title.add("Uhrzeit");
title.add("Trefferwert");
title.add("Genauigkeitswert");
title.add("Reaktionswert");
title.add("Highscore-Wert");
// Tablle basierend auf zweidimensionalem Vector
JTable table = new JTable(vecRow, title);
if (mark >= 0)
table.setRowSelectionInterval(mark, mark);
setMinimumSize(new Dimension(650, 500));
getContentPane().add(new JScrollPane(table), BorderLayout.NORTH);
setTitle("Highscore-Liste"); // Titel
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
pack();
setVisible(true);
JButton btnZielndern = new JButton("Highscoreliste löschen");
btnZielndern.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
btnAendern_Clicked(arg0);
}
});
JPanel pnlSouth = new JPanel();
pnlSouth.add(btnZielndern);
// fügt Panel mit Button hinzu
add(pnlSouth, BorderLayout.SOUTH);
this.setLocationRelativeTo(null);
}
public void btnAendern_Clicked(ActionEvent evt) {
this.attemptController.deleteHighscore(level.getLevel_id());
dispose();
}
}
@@ -0,0 +1,56 @@
<?xml version="1.0" encoding="UTF-8"?>
<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="de.oszimt.ls.aliendefence.view.menue.LevelChoice">
<grid id="27dc6" binding="panel" layout-manager="BorderLayout" hgap="0" vgap="0">
<constraints>
<xy x="20" y="20" width="500" height="400"/>
</constraints>
<properties/>
<border type="none"/>
<children>
<grid id="6dda1" layout-manager="FlowLayout" hgap="5" vgap="5" flow-align="1">
<constraints border-constraint="South"/>
<properties/>
<border type="none"/>
<children>
<component id="c85bc" class="javax.swing.JButton" binding="btnNewLevel">
<constraints/>
<properties>
<text value="Neues Level"/>
</properties>
</component>
<component id="9382c" class="javax.swing.JButton" binding="btnUpdateLevel">
<constraints/>
<properties>
<text value="Ausgewähltes Level bearbeiten"/>
</properties>
</component>
<component id="5f096" class="javax.swing.JButton" binding="btnDeleteLevel">
<constraints/>
<properties>
<text value="Level löschen"/>
</properties>
</component>
</children>
</grid>
<component id="fc00" class="javax.swing.JLabel">
<constraints border-constraint="North"/>
<properties>
<font size="18" style="1"/>
<horizontalAlignment value="0"/>
<text value="Levelauswahl"/>
</properties>
</component>
<scrollpane id="231d4">
<constraints border-constraint="Center"/>
<properties/>
<border type="none"/>
<children>
<component id="28513" class="javax.swing.JTable" binding="tblLevels">
<constraints/>
<properties/>
</component>
</children>
</scrollpane>
</children>
</grid>
</form>
@@ -0,0 +1,90 @@
package de.oszimt.ls.aliendefence.view.menue;
import de.oszimt.ls.aliendefence.controller.LevelController;
import de.oszimt.ls.aliendefence.model.Level;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;
public class LevelChoice {
private JPanel panel;
private JButton btnNewLevel;
private JButton btnUpdateLevel;
private JTable tblLevels;
private JButton btnDeleteLevel;
private final LevelController lvlControl;
private final LeveldesignWindow leveldesignWindow;
private DefaultTableModel jTableData;
/**
* Create the panel
* @param lvlControl
* @param leveldesignWindow
*/
public LevelChoice(LevelController lvlControl, LeveldesignWindow leveldesignWindow) {
this.lvlControl = lvlControl;
this.leveldesignWindow = leveldesignWindow;
btnNewLevel.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
btnNewLevel_Clicked();
}
});
btnUpdateLevel.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
btnUpdateLevel_Clicked();
}
});
btnDeleteLevel.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
btnDeleteLevel_Clicked();
}
});
tblLevels.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
this.updateTableData();
}
private String[][] getLevelsAsTableModel() {
List<Level> levels = this.lvlControl.readAllLevels();
String[][] result = new String[levels.size()][];
int i = 0;
for (Level l : levels) {
result[i++] = l.getData();
}
return result;
}
public void updateTableData() {
this.jTableData = new DefaultTableModel(this.getLevelsAsTableModel(), Level.getLevelDescriptions());
this.tblLevels.setModel(jTableData);
}
public void btnNewLevel_Clicked() {
this.leveldesignWindow.startLevelEditor();
}
public void btnUpdateLevel_Clicked() {
int level_id = Integer
.parseInt((String) this.tblLevels.getModel().getValueAt(this.tblLevels.getSelectedRow(), 0));
this.leveldesignWindow.startLevelEditor(level_id);
}
public void btnDeleteLevel_Clicked() {
int level_id = Integer
.parseInt((String) this.tblLevels.getModel().getValueAt(this.tblLevels.getSelectedRow(), 0));
this.lvlControl.deleteLevel(level_id);
this.updateTableData();
}
public JPanel getPanel() {
return panel;
}
}
@@ -0,0 +1,107 @@
package de.oszimt.ls.aliendefence.view.menue;
import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import de.oszimt.ls.aliendefence.controller.LevelController;
import de.oszimt.ls.aliendefence.model.Level;
@SuppressWarnings("serial")
public class LevelChooserOld extends JPanel {
private LevelController lvlControl;
private LeveldesignWindow leveldesignWindow;
private JTable tblLevels;
private DefaultTableModel jTableData;
/**
* Create the panel.
*
* @param leveldesignWindow
*/
public LevelChooserOld(LevelController lvlControl, LeveldesignWindow leveldesignWindow) {
this.lvlControl = lvlControl;
this.leveldesignWindow = leveldesignWindow;
setLayout(new BorderLayout());
JPanel pnlButtons = new JPanel();
add(pnlButtons, BorderLayout.SOUTH);
JButton btnNewLevel = new JButton("Neues Level");
btnNewLevel.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
btnNewLevel_Clicked();
}
});
pnlButtons.add(btnNewLevel);
JButton btnUpdateLevel = new JButton("ausgew\u00E4hltes Level bearbeiten");
btnUpdateLevel.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
btnUpdateLevel_Clicked();
}
});
pnlButtons.add(btnUpdateLevel);
JButton btnDeleteLevel = new JButton("Level l\u00F6schen");
btnDeleteLevel.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
btnDeleteLevel_Clicked();
}
});
pnlButtons.add(btnDeleteLevel);
JLabel lblLevelauswahl = new JLabel("Levelauswahl");
lblLevelauswahl.setFont(new Font("Arial", Font.BOLD, 18));
lblLevelauswahl.setHorizontalAlignment(SwingConstants.CENTER);
add(lblLevelauswahl, BorderLayout.NORTH);
JScrollPane spnLevels = new JScrollPane();
add(spnLevels, BorderLayout.CENTER);
tblLevels = new JTable();
tblLevels.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
spnLevels.setViewportView(tblLevels);
this.updateTableData();
}
private String[][] getLevelsAsTableModel() {
List<Level> levels = this.lvlControl.readAllLevels();
String[][] result = new String[levels.size()][];
int i = 0;
for (Level l : levels) {
result[i++] = l.getData();
}
return result;
}
public void updateTableData() {
this.jTableData = new DefaultTableModel(this.getLevelsAsTableModel(), Level.getLevelDescriptions());
this.tblLevels.setModel(jTableData);
}
public void btnNewLevel_Clicked() {
this.leveldesignWindow.startLevelEditor();
}
public void btnUpdateLevel_Clicked() {
int level_id = Integer
.parseInt((String) this.tblLevels.getModel().getValueAt(this.tblLevels.getSelectedRow(), 0));
this.leveldesignWindow.startLevelEditor(level_id);
}
public void btnDeleteLevel_Clicked() {
int level_id = Integer
.parseInt((String) this.tblLevels.getModel().getValueAt(this.tblLevels.getSelectedRow(), 0));
this.lvlControl.deleteLevel(level_id);
this.updateTableData();
}
}
@@ -0,0 +1,386 @@
package de.oszimt.ls.aliendefence.view.menue;
import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.SystemColor;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;
import javax.swing.SwingConstants;
import javax.swing.border.EmptyBorder;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.DefaultTableModel;
import de.oszimt.ls.aliendefence.controller.LevelController;
import de.oszimt.ls.aliendefence.controller.TargetController;
import de.oszimt.ls.aliendefence.model.Level;
import de.oszimt.ls.aliendefence.model.Target;
@SuppressWarnings("serial")
public class LevelEditor extends JPanel {
private LevelController lvlControl;
private TargetController targetControl;
private LeveldesignWindow leveldesignWindow;
private Level lvl;
private JTable tblTargets;
private DefaultTableModel jTableData;
private JTextField tfdLevelname;
private JTextField tfdLevel_id;
private JTextField tfdLevelDuration;
private JTextField tfdTarget_id;
private JTextField tfdX;
private JTextField tfdY;
private JTextField tfdWidth;
private JTextField tfdHeight;
private JTextField tfdStarttime;
private JTextField tfdTargetDuration;
private JTextField tfdLevelBackground;
private JTextField tfdTargetImage;
/**
* Create the frame.
*/
public LevelEditor(LeveldesignWindow leveldesignWindow, LevelController lvlControl, TargetController targetControl,
Level lvl) {
this.leveldesignWindow = leveldesignWindow;
this.lvlControl = lvlControl;
this.targetControl = targetControl;
this.lvl = lvl;
setBorder(new EmptyBorder(5, 5, 5, 5));
setLayout(new BorderLayout());
JLabel lblLeveleditor = new JLabel("Leveleditor");
lblLeveleditor.setHorizontalAlignment(SwingConstants.CENTER);
lblLeveleditor.setFont(new Font("Arial", Font.BOLD, 18));
add(lblLeveleditor, BorderLayout.NORTH);
JPanel pnlMain = new JPanel();
add(pnlMain, BorderLayout.CENTER);
pnlMain.setLayout(new GridLayout(0, 2, 20, 0));
tblTargets = new JTable();
tblTargets.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
tblTargets.getSelectionModel().addListSelectionListener(new RowListener());
jTableData = new DefaultTableModel(this.lvl.getTargetsAsTableModel(), Target.getTableDescriptions());
tblTargets.setModel(jTableData);
JScrollPane spnTargets = new JScrollPane(tblTargets);
pnlMain.add(spnTargets);
JPanel pnlInputs = new JPanel();
pnlMain.add(pnlInputs);
pnlInputs.setLayout(new BorderLayout(0, 0));
JPanel pnlInputMask = new JPanel();
pnlInputMask.setBackground(SystemColor.activeCaption);
pnlInputMask.setBorder(new EmptyBorder(10, 5, 10, 5));
pnlInputs.add(pnlInputMask, BorderLayout.NORTH);
pnlInputMask.setLayout(new GridLayout(0, 2, 0, 10));
JLabel lblLevelUeberschrift = new JLabel("Level");
lblLevelUeberschrift.setFont(new Font("Arial", Font.BOLD, 18));
pnlInputMask.add(lblLevelUeberschrift);
JLabel lblLevelUeberschrift2 = new JLabel("");
pnlInputMask.add(lblLevelUeberschrift2);
JLabel lblLevelid = new JLabel("Level ID");
pnlInputMask.add(lblLevelid);
tfdLevel_id = new JTextField(this.lvl.getLevel_id() + "");
tfdLevel_id.setEditable(false);
tfdLevel_id.setHorizontalAlignment(SwingConstants.RIGHT);
pnlInputMask.add(tfdLevel_id);
tfdLevel_id.setColumns(10);
JLabel lblLevelname = new JLabel("Name des Level");
pnlInputMask.add(lblLevelname);
tfdLevelname = new JTextField(this.lvl.getName());
tfdLevelname.setHorizontalAlignment(SwingConstants.RIGHT);
pnlInputMask.add(tfdLevelname);
tfdLevelname.setColumns(10);
JLabel lblLevelDuration = new JLabel("Spieldauer (Millisekunden)");
pnlInputMask.add(lblLevelDuration);
tfdLevelDuration = new JTextField(this.lvl.getDuration() + "");
tfdLevelDuration.setHorizontalAlignment(SwingConstants.RIGHT);
pnlInputMask.add(tfdLevelDuration);
tfdLevelDuration.setColumns(10);
JButton btnBack = new JButton("zurück zur Levelauswahl");
btnBack.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
btnBack_Clicked(arg0);
}
});
JLabel lblbackground = new JLabel("Hintergrundsbild");
pnlInputMask.add(lblbackground);
tfdLevelBackground = new JTextField();
tfdLevelBackground.setHorizontalAlignment(SwingConstants.RIGHT);
pnlInputMask.add(tfdLevelBackground);
tfdLevelBackground.setColumns(10);
pnlInputMask.add(btnBack);
JButton btnSaveLevelChanges = new JButton("\u00C4nderungen am Level speichern");
btnSaveLevelChanges.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
btnSaveLevelChanges_Clicked(arg0);
}
});
pnlInputMask.add(btnSaveLevelChanges);
JPanel pnlInputMaskTargets = new JPanel();
pnlInputMaskTargets.setBorder(new EmptyBorder(10, 5, 10, 5));
pnlInputMaskTargets.setBackground(SystemColor.inactiveCaption);
pnlInputs.add(pnlInputMaskTargets, BorderLayout.CENTER);
pnlInputMaskTargets.setLayout(new GridLayout(0, 2, 0, 10));
JLabel lblUeberschrift = new JLabel("Targets");
lblUeberschrift.setFont(new Font("Arial", Font.BOLD, 18));
pnlInputMaskTargets.add(lblUeberschrift);
JLabel lbllblUeberschrift2 = new JLabel("");
pnlInputMaskTargets.add(lbllblUeberschrift2);
JLabel lblTargetid = new JLabel("Target ID");
pnlInputMaskTargets.add(lblTargetid);
tfdTarget_id = new JTextField();
pnlInputMaskTargets.add(tfdTarget_id);
tfdTarget_id.setColumns(10);
tfdTarget_id.setEditable(false);
JLabel lblZiel = new JLabel("Ziel:");
pnlInputMaskTargets.add(lblZiel);
JLabel lblZiel2 = new JLabel("");
pnlInputMaskTargets.add(lblZiel2);
JLabel lblTargetpicture = new JLabel("Bilddatei des Ziels");
lblTargetpicture.setHorizontalAlignment(SwingConstants.LEFT);
pnlInputMaskTargets.add(lblTargetpicture);
tfdTargetImage = new JTextField();
tfdTargetImage.setHorizontalAlignment(SwingConstants.LEFT);
pnlInputMaskTargets.add(tfdTargetImage);
tfdTargetImage.setColumns(10);
JLabel lblBreite = new JLabel("Breite des Ziels");
pnlInputMaskTargets.add(lblBreite);
tfdWidth = new JTextField();
pnlInputMaskTargets.add(tfdWidth);
tfdWidth.setColumns(10);
JLabel lblHhe = new JLabel("Höhe des Ziels");
pnlInputMaskTargets.add(lblHhe);
tfdHeight = new JTextField();
pnlInputMaskTargets.add(tfdHeight);
tfdHeight.setColumns(10);
JLabel lblX = new JLabel("X Position des Ziels (max. 1280 - Breite) ");
pnlInputMaskTargets.add(lblX);
tfdX = new JTextField();
pnlInputMaskTargets.add(tfdX);
tfdX.setColumns(10);
JLabel lblY = new JLabel("Y Position des Ziels (max. 960 - Höhe)");
pnlInputMaskTargets.add(lblY);
tfdY = new JTextField();
pnlInputMaskTargets.add(tfdY);
tfdY.setColumns(10);
JLabel lblZeiten = new JLabel("Zeiten: ");
pnlInputMaskTargets.add(lblZeiten);
JLabel lblZeiten2 = new JLabel(" ");
pnlInputMaskTargets.add(lblZeiten2);
JLabel lblStartzeit = new JLabel("Startzeit in nach Spielstart (Millisekunden)");
pnlInputMaskTargets.add(lblStartzeit);
tfdStarttime = new JTextField();
pnlInputMaskTargets.add(tfdStarttime);
tfdStarttime.setColumns(10);
JLabel lblAnzeigedauer = new JLabel("Anzeigedauer (Millisekunden)");
pnlInputMaskTargets.add(lblAnzeigedauer);
tfdTargetDuration = new JTextField();
pnlInputMaskTargets.add(tfdTargetDuration);
tfdTargetDuration.setColumns(10);
JPanel panel_2 = new JPanel();
pnlInputs.add(panel_2, BorderLayout.SOUTH);
JButton btnNeuesZiel = new JButton("Neues Ziel");
btnNeuesZiel.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
btnErstellen_Clicked(arg0);
}
});
panel_2.add(btnNeuesZiel);
JButton btnZielndern = new JButton("Ziel \u00E4ndern");
btnZielndern.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
btnAendern_Clicked(arg0);
}
});
panel_2.add(btnZielndern);
JButton btnDeleteTarget = new JButton("Ziel l\u00F6schen");
btnDeleteTarget.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
btnLoeschen_Clicked(arg0);
}
});
panel_2.add(btnDeleteTarget);
}
public Level getLvl() {
return lvl;
}
public void setLvl(Level lvl) {
this.lvl = lvl;
updateTableData();
this.tfdLevel_id.setText("" + lvl.getLevel_id());
this.tfdLevelname.setText(lvl.getName());
this.tfdLevelDuration.setText("" + lvl.getDuration());
this.tfdLevelBackground.setText(lvl.getBackgroundImage());
}
public void updateTableData() {
jTableData = new DefaultTableModel(this.lvl.getTargetsAsTableModel(), Target.getTableDescriptions());
tblTargets.setModel(jTableData);
}
public void targetAnzeigen_JTable(int row) {
this.tfdTarget_id.setText((String) tblTargets.getValueAt(row, 0));
this.tfdX.setText((String) tblTargets.getValueAt(row, 1));
this.tfdY.setText((String) tblTargets.getValueAt(row, 2));
this.tfdWidth.setText((String) tblTargets.getValueAt(row, 3));
this.tfdHeight.setText((String) tblTargets.getValueAt(row, 4));
this.tfdTargetImage.setText((String) tblTargets.getValueAt(row, 5));
this.tfdStarttime.setText((String) tblTargets.getValueAt(row, 6));
this.tfdTargetDuration.setText((String) tblTargets.getValueAt(row, 7));
}
public void targetAnzeigen_JTable(Target target) {
this.tfdTarget_id.setText(target.getTarget_id() + "");
this.tfdX.setText(target.getHitbox().getX() + "");
this.tfdY.setText(target.getHitbox().getY() + "");
this.tfdWidth.setText(target.getHitbox().getWidth() + "");
this.tfdHeight.setText(target.getHitbox().getHeight() + "");
this.tfdTargetImage.setText(target.getImageAddress());
this.tfdStarttime.setText(target.getTime() + "");
this.tfdTargetDuration.setText(target.getDuration() + "");
}
public Target targetAuslesen() {
Target currentTarget = null;
for (Target t : this.lvl.getTargets()) {
if (t.getTarget_id() == Integer.parseInt(tfdTarget_id.getText())) {
currentTarget = t;
}
}
if (currentTarget != null) {
currentTarget.getHitbox().setX(Integer.parseInt(tfdX.getText()));
currentTarget.getHitbox().setY(Integer.parseInt(tfdY.getText()));
currentTarget.getHitbox().setWidth(Integer.parseInt(tfdWidth.getText()));
currentTarget.getHitbox().setHeight(Integer.parseInt(tfdHeight.getText()));
currentTarget.setDuration(Long.parseLong(tfdTargetDuration.getText()));
currentTarget.setTime(Long.parseLong(tfdStarttime.getText()));
currentTarget.setImageAddress(tfdTargetImage.getText());
}
return currentTarget;
}
public void btnErstellen_Clicked(ActionEvent evt) {
Target target = this.targetControl.createTarget(this.lvl);
if (target != null)
targetAnzeigen_JTable(target);
updateTableData();
}
public void btnLoeschen_Clicked(ActionEvent evt) {
int target_id = Integer.parseInt(this.tfdTarget_id.getText());
this.targetControl.deleteTarget(this.lvl, target_id);
updateTableData();
// TODO clear Textfield-Data
}
public void btnAendern_Clicked(ActionEvent evt) {
this.targetControl.updateTarget(this.lvl, this.targetAuslesen());
updateTableData();
}
/**
* Zurück zur Levelauswahl
*
* @param evt
*/
public void btnBack_Clicked(ActionEvent evt) {
this.leveldesignWindow.showLevelChooser();
}
public void btnSaveLevelChanges_Clicked(ActionEvent evt) {
this.lvl.setName(this.tfdLevelname.getText());
this.lvl.setBackgroundImage(this.tfdLevelBackground.getText());
this.lvl.setDuration(Integer.parseInt(this.tfdLevelDuration.getText()));
this.lvlControl.updateLevel(this.lvl);
}
private class RowListener implements ListSelectionListener {
public void valueChanged(ListSelectionEvent event) {
if (event.getValueIsAdjusting()) {
return;
}
if (tblTargets.getSelectedRow() < 0)
tblTargets.clearSelection();
else
targetAnzeigen_JTable(tblTargets.getSelectedRow());
}
}
}
@@ -0,0 +1,75 @@
package de.oszimt.ls.aliendefence.view.menue;
import java.awt.CardLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import de.oszimt.ls.aliendefence.controller.LevelController;
import de.oszimt.ls.aliendefence.controller.TargetController;
import de.oszimt.ls.aliendefence.model.Level;
@SuppressWarnings("serial")
public class LeveldesignWindow extends JFrame {
private LevelController lvlControl;
private JPanel contentPane;
private LevelChoice cardChooseLevel;
private LevelEditor cardLevelEditor;
private CardLayout cards;
/**
* Create the frame.
*/
public LeveldesignWindow(LevelController lvlControl, TargetController targetControl) {
this.lvlControl = lvlControl;
setTitle("Leveldesigner");
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setBounds(100, 100, 1200, 800);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
this.cards = new CardLayout();
contentPane.setLayout(cards);
this.cardChooseLevel = new LevelChoice(lvlControl, this);
contentPane.add(cardChooseLevel.getPanel(), "levelChooser");
this.cardLevelEditor = new LevelEditor(this, lvlControl, targetControl, Level.getDefaultLevel());
contentPane.add(cardLevelEditor, "levelEditor");
this.showLevelChooser();
this.setLocationRelativeTo(null);
this.setVisible(true);
}
/**
* display leveleditor with a new level
*/
public void startLevelEditor() {
this.cardLevelEditor.setLvl(this.lvlControl.createLevel());
this.cards.show(contentPane, "levelEditor");
}
/**
* disply leveleditor with a new level
*
* @param level_id
*/
public void startLevelEditor(int level_id) {
this.cardLevelEditor.setLvl(this.lvlControl.readLevel(level_id));
this.cards.show(contentPane, "levelEditor");
}
/**
* display a jTable with all Levels
*/
public void showLevelChooser() {
this.cards.show(contentPane, "levelChooser");
this.cardChooseLevel.updateTableData();
}
}
@@ -0,0 +1,140 @@
<?xml version="1.0" encoding="UTF-8"?>
<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="de.oszimt.ls.aliendefence.view.menue.MainMenu">
<grid id="27dc6" binding="main" layout-manager="GridLayoutManager" row-count="13" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
<margin top="0" left="0" bottom="0" right="0"/>
<constraints>
<xy x="20" y="20" width="326" height="715"/>
</constraints>
<properties>
<background color="-16777216"/>
<foreground color="-1"/>
</properties>
<border type="empty">
<size top="5" left="5" bottom="5" right="5"/>
</border>
<children>
<component id="c5b1d" class="javax.swing.JLabel">
<constraints>
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="1" fill="0" indent="0" use-parent-layout="false">
<preferred-size width="177" height="9"/>
</grid>
</constraints>
<properties>
<font size="26" style="1"/>
<foreground color="-16711936"/>
<text value="Alien Defence"/>
</properties>
</component>
<component id="8961e" class="javax.swing.JLabel">
<constraints>
<grid row="1" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="0" fill="0" indent="1" use-parent-layout="false">
<preferred-size width="200" height="103"/>
</grid>
</constraints>
<properties>
<enabled value="true"/>
<foreground color="-3552823"/>
<icon value="pictures/logo200.png"/>
<text value=""/>
</properties>
</component>
<component id="965b" class="javax.swing.JLabel">
<constraints>
<grid row="2" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
</constraints>
<properties>
<font size="14" style="1"/>
<foreground color="-256"/>
<text value="Login:"/>
</properties>
</component>
<component id="14947" class="javax.swing.JLabel">
<constraints>
<grid row="4" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
</constraints>
<properties>
<font size="14" style="1"/>
<foreground color="-256"/>
<text value="Passwort:"/>
</properties>
</component>
<component id="b84a7" class="javax.swing.JPasswordField" binding="passwordTextField">
<constraints>
<grid row="5" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="6" anchor="8" fill="1" indent="0" use-parent-layout="false">
<preferred-size width="150" height="-1"/>
</grid>
</constraints>
<properties/>
</component>
<component id="4aca1" class="javax.swing.JLabel">
<constraints>
<grid row="6" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
</constraints>
<properties>
<font size="14" style="1"/>
<foreground color="-256"/>
<text value="Level:"/>
</properties>
</component>
<component id="a16d0" class="javax.swing.JComboBox" binding="level">
<constraints>
<grid row="7" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="2" anchor="8" fill="1" indent="0" use-parent-layout="false"/>
</constraints>
<properties/>
</component>
<component id="39eaf" class="javax.swing.JButton" binding="playButton">
<constraints>
<grid row="8" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
</constraints>
<properties>
<actionCommand value=""/>
<text value="Spielen"/>
</properties>
</component>
<component id="6cda2" class="javax.swing.JButton" binding="testButton">
<constraints>
<grid row="9" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
</constraints>
<properties>
<text value="Testen"/>
</properties>
</component>
<component id="9d215" class="javax.swing.JTextField" binding="loginTextField">
<constraints>
<grid row="3" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="6" anchor="8" fill="1" indent="0" use-parent-layout="false">
<preferred-size width="150" height="-1"/>
</grid>
</constraints>
<properties/>
</component>
<component id="e66c9" class="javax.swing.JButton" binding="highscoreButton" default-binding="true">
<constraints>
<grid row="10" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
</constraints>
<properties>
<text value="Highscore"/>
</properties>
</component>
<component id="7ae73" class="javax.swing.JButton" binding="levelEditorButton" default-binding="true">
<constraints>
<grid row="11" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
</constraints>
<properties>
<background color="-256"/>
<enabled value="true"/>
<text value="LevelEditor"/>
</properties>
</component>
<component id="ef1af" class="javax.swing.JButton" binding="exitButton">
<constraints>
<grid row="12" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
</constraints>
<properties>
<background color="-3552823"/>
<enabled value="true"/>
<text value="Beenden"/>
</properties>
</component>
</children>
</grid>
</form>
@@ -0,0 +1,124 @@
package de.oszimt.ls.aliendefence.view.menue;
import de.oszimt.ls.aliendefence.controller.AlienDefenceController;
import de.oszimt.ls.aliendefence.controller.GameController;
import de.oszimt.ls.aliendefence.model.Level;
import de.oszimt.ls.aliendefence.toDo.User;
import de.oszimt.ls.aliendefence.view.game.GameGUI;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;
public class MainMenu {
private JPanel main;
private JTextField loginTextField;
private JComboBox level;
private JButton playButton;
private JButton testButton;
private JButton highscoreButton;
private JButton levelEditorButton;
private JButton exitButton;
private JPasswordField passwordTextField;
public MainMenu(AlienDefenceController alienDefenceController) {
//fill level chooser
// Levelliste für die ComboBox abrufen
List<Level> arrLevel = alienDefenceController.getLevelController().readAllLevels();
String[] arrLevelNames = getLevelNames(arrLevel);
level.setModel(new DefaultComboBoxModel<String>(arrLevelNames));
// Button Spielen - ActionListener
playButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// User aus Datenbank holen
User user = alienDefenceController.getAlienDefenceModel().getUserPersistance().readUser(loginTextField.getText());
// Spielstarten, wenn Nutzer existiert und Passwort übereinstimmt
if (user != null && user.getPassword().equals(new String(passwordTextField.getPassword()))) {
Thread t = new Thread("GameThread") {
@Override
public void run() {
GameController gameController = alienDefenceController.startGame(arrLevel.get(level.getSelectedIndex()), user);
new GameGUI(gameController).start();
}
};
t.start();
} else {
// Fehlermeldung - Zugangsdaten fehlerhaft
JOptionPane.showMessageDialog(null, "Zugangsdaten nicht korrekt", "Fehler",
JOptionPane.ERROR_MESSAGE);
}
}
});
// Button Testen - ActionListener
testButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// Erstellt Modell von aktuellen Nutzer
User user = new User(1, "test", "pass");
Thread t = new Thread("GameThread") {
@Override
public void run() {
GameController gameController = alienDefenceController.startGame(arrLevel.get(level.getSelectedIndex()), user);
new GameGUI(gameController).start();
}
};
t.start();
}
});
// Button Highscore
highscoreButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
new Highscore(alienDefenceController.getAttemptController(), arrLevel.get(level.getSelectedIndex()));
}
});
// Button Leveleditor
levelEditorButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
new LeveldesignWindow(alienDefenceController.getLevelController(), alienDefenceController.getTargetController());
}
});
// Button Beenden
exitButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
}
private String[] getLevelNames(List<Level> arrLevel) {
String[] arrLevelNames = new String[arrLevel.size()];
for (int i = 0; i < arrLevel.size(); i++) {
arrLevelNames[i] = arrLevel.get(i).getName(); // Array aus Arraylist erstellt
}
return arrLevelNames;
}
public static void show(AlienDefenceController alienDefenceController) {
JFrame frame = new JFrame("AlienDefence");
frame.setContentPane(new MainMenu(alienDefenceController).main);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}