Hallo Leute,
auch wenn ich gleich von euch als Noob zerfetzt werde erhoffe ich mir etwas Hilfe von euch. Ich saß da jetzt schon ewig dran und habe es nicht hin bekommen.
Und zwar möchte ich PacMan programmieren, in etwas abgeänderter Form. Ich habe meine Klasse mit der MainMethode und möchte mit ihr ua mein Spielfeld zeichnen lassen. Das Spielfeld zeichnen an sich funktioniert.
Spielfeld (noch mit eigener Main)
auch wenn ich gleich von euch als Noob zerfetzt werde erhoffe ich mir etwas Hilfe von euch. Ich saß da jetzt schon ewig dran und habe es nicht hin bekommen.
Und zwar möchte ich PacMan programmieren, in etwas abgeänderter Form. Ich habe meine Klasse mit der MainMethode und möchte mit ihr ua mein Spielfeld zeichnen lassen. Das Spielfeld zeichnen an sich funktioniert.
Code:
public class frame extends JFrame implements ActionListener {
private JButton Start;
private JButton Einstellung;
private JButton Info;
private JButton Ende;
public static void main(String[] args) {
//Menό wird erstellt
frame frame = new frame("Hauptmenό");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(450,450);
//Layout wird selber angeordnet όber X/Y-Koordinaten
frame.setLayout(null);
frame.setVisible(true);
}
//Buttons werden angeordnet (Koordinaten) und ausgefόhrt
public frame(String title){
super(title);
Start = new JButton("Skeletor starten");
Start.setBounds(140,40,160,40); //Position und Grφίe festlegen
Start.addActionListener(this);
add(Start); //'Start' auf Grafikoberflδche hinzufόgen
Einstellung = new JButton("Einstellungen");
Einstellung.setBounds(140,120,160,40);
Einstellung.addActionListener(this);
add(Einstellung);
Info = new JButton("Info/ Hilfe");
Info.setBounds(140,200,160,40);
Info.addActionListener(this);
add(Info);
Ende = new JButton("Beenden");
Ende.setBounds(140,280,160,40);
Ende.addActionListener(this);
add(Ende);
}
public static void fenster (){
JFrame fenster = new JFrame();
fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
fenster.setSize(620, 380);
fenster.setVisible(true);{
fenster.add(new gui()); //Verknόpfung zu Klasse 'public gui' - Hintergrundbild erzeugen
}
//public static void auswahl(){
// }
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getSource()== Start ){
fenster();
}
//Auswahlmenό, ist noch als eigene Klasse zu erstellen!
if (e.getSource()== Einstellung){
// auswahl();
}
//Erstellen einer Messagebox - z.B. fόr Spielregeln
if (e.getSource()== Info){
Object[] options = { "OK"};
JOptionPane.showOptionDialog(null,"Projektgruppe-Skeletor","Spielregeln",JOptionPane.DEFAULT_OPTION,JOptionPane.PLAIN_MESSAGE,null,options,options[0]);
}
//hier wird das Programm beim Drόcken auf den Button "Ende" geschlossen
if (e.getSource()== Ende){
System.exit(0);
}
}
}
Spielfeld (noch mit eigener Main)
Code:
public class Main {
public static void main(String[] args) {
// Textdatei fόr Level1 einlesen (Inhalt Array)
ArrayList<String> bricks = Main.read("Versuch1.txt");
//Fenster erstellen, dass das Array enthδlt
Form window = new Form(bricks);
window.setTitle("Knochenjadt");
window.setLocationRelativeTo(null); //Fenster zentrieren/wichtig zum kalkulieren der Grφίe
window.setVisible(true);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
//Textdatei lesen
private static ArrayList<String> read(String filename) {
ArrayList<String> lines = new ArrayList<String>() ;
try {
FileInputStream fstream = new FileInputStream(filename);
DataInputStream in = new DataInputStream(fstream);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String line;
while ((line = br.readLine()) != null) {
lines.add(line);
}
// Input schlieίen
in.close();
} catch (Exception e) {
System.err.println("Error: " + e.getMessage());
}
return lines;
}
}
Code:
public class Form extends JFrame {
private static final long serialVersionUID = 1L;
//Grφίe der Kδstchen festlegen
private static final int BRICK_SIZE = 20;
// Array erstellen, dass mit Srings (#,X) gefόllt wird
ArrayList<String> bricks;
public Form(ArrayList<String> bricks) {
if (bricks.size() != 0) {
// Grφίe anhand der Zeilenanzahl * Kaestchengroίe bestimmen
int width = bricks.get(0).toCharArray().length * BRICK_SIZE;
int height = bricks.size() * BRICK_SIZE;
//etwas vergrφίert, damit Fenster grφίer als das Spielfeld ist
this.setSize(width + (3 * BRICK_SIZE), height + (3 * BRICK_SIZE));
}
this.bricks = bricks;
}
// Labyrinth zeichnen
public void paint(Graphics g) {
super.paintComponents(g);
Graphics2D painter = (Graphics2D) g.create();
painter.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
// Farbe der Gδnge festlegen
painter.setColor(Color.WHITE);
painter.fillRect(0, 0, getWidth(), getHeight());
// Farbe der Wδnde festlegen
Color line = Color.GRAY.brighter();
Color fill = Color.BLUE;
int x = 0;
int y = BRICK_SIZE + 20;
for (String wall : this.bricks) {
x = BRICK_SIZE + 10;
// Labyrinth nach Textdatei erstellen
for (char c : wall.toCharArray()) {
if (c == '#') {
painter.setColor(fill);
painter.fillRect(x, y, BRICK_SIZE, BRICK_SIZE);
}
else {
painter.setColor(line);
painter.drawRect(x, y, BRICK_SIZE, BRICK_SIZE);
}
x += BRICK_SIZE;
}
y += BRICK_SIZE;
}
}
}