+ Antworten
Seite 1 von 3 1 2 3 LetzteLetzte
Ergebnis 1 bis 20 von 51

Thema: 'Vier Gewinnt' programmieren

  1. #1
    User Bit Themenstarter

    Registriert seit
    15.02.2009
    Fachbeiträge
    5
    Genannt
    0 Post(s)
    Ich habe einige Probleme beim Programmieren des Spieles 4Gewinnt. Dass Spiel muss mit einer Grafischen Oberfläche erstellt werden und die Steine müssen per mouseevent eingefügt werden.

    Außerdem muss dass Programm erkennen, wenn vier steine Waagerecht Senkrecht oder schräg gelegt worden sind und wenn dass der Fall ist, soll eine Nachricht erscheinen, dass derjenige dass Spiel gewonnen hat.

    Außerdem muss ich auch noch einen Spielstand mit einbauen, der zählt, wie oft rot oder blau gewonnen haben. Diesen spielstand muss man mittels einen button aber auch wieder auf null setzen können.

    Ich habe schon ein Code vorbereitet, aber irgendwie will er die Steine einfach nicht zeichnen. KAnn mir jemand helfen?


    Java Code:
    1. import java.applet.Applet;
    2. import java.awt.Graphics;
    3. import java.awt.Image;
    4. import java.awt.Toolkit;
    5. import java.awt.event.MouseEvent;
    6. import java.awt.event.MouseListener;
    7.  
    8. public class connect4 extends Applet implements MouseListener {
    9.    /**
    10.     *
    11.     */
    12.    private static final long serialVersionUID = 1L;
    13.    int feld[][] = { { 0, 1, 2, 3, 4, 5, 6 },
    14.                 { 0, 0, 0, 0, 1, 0, 0 },
    15.                 { 2, 4, 0, 0, 1, 0, 0 },
    16.                 { 0, 0, 0, 0, 1, 0, 0 },
    17.                 { 0, 0, 0, 0, 0, 0, 0 },
    18.                 { 1, 1, 2, 0, 0, 0, 1 }
    19.                 };
    20.  
    21.    public void zeichneSpielfeld(Graphics g) {
    22.  
    23.       g.drawString("Vier Gewinnt", 260, 18);
    24.      
    25.       setSize(600,600);
    26.      
    27.       // g.drawRect(x, y, width, height)
    28.  
    29.       g.drawRect(85, 85, 420, 420);
    30.  
    31.       g.drawLine(85, 155, 505, 155);
    32.       g.drawLine(85, 225, 505, 225);
    33.       g.drawLine(85, 295, 505, 295);
    34.       g.drawLine(85, 365, 505, 365);
    35.       g.drawLine(85, 435, 505, 435);
    36.       g.drawLine(85, 505, 505, 505);
    37.  
    38.       g.drawLine(145, 85, 145, 505);
    39.       g.drawLine(205, 85, 205, 505);
    40.       g.drawLine(265, 85, 265, 505);
    41.       g.drawLine(325, 85, 325, 505);
    42.       g.drawLine(385, 85, 385, 505);
    43.       g.drawLine(445, 85, 445, 505);
    44.    }
    45.  
    46.    public void paint(Graphics g) {
    47.       Image rot = Toolkit.getDefaultToolkit().getImage("sonne.jpg");
    48.       Image blau = Toolkit.getDefaultToolkit().getImage("mond.jpg");
    49.  
    50.       for (int x = 0; x < 7; x++) {
    51.          for (int y = 0; y < 6; y++) {
    52.             if (feld[y][x] == 1)
    53.                g.drawImage(rot, 50 * x, 50 * y, this);
    54.             if (feld[y][x] == 2)
    55.                g.drawImage(blau, 50 * x, 50 * y, this);
    56.          }
    57.       }
    58.       zeichneSpielfeld(g);
    59.    }
    60.  
    61.    public void init() {
    62.       addMouseListener(this);
    63.    }
    64.  
    65.    public void mouseClicked(MouseEvent arg0) {
    66.       // TODO Auto-generated method stub
    67.  
    68.    }
    69.  
    70.    public void mousePressed(MouseEvent arg0) {
    71.       // TODO Auto-generated method stub
    72.  
    73.       int x = arg0.getX();
    74.  
    75.       if (x < 50)
    76.          feld[0][0] = 1;
    77.       if (x > 50 && x < 100)
    78.          feld[0][1] = 1;
    79.       if (x > 100 && x < 150)
    80.          feld[0][2] = 1;
    81.       repaint();
    82.    }
    83.  
    84.    public void mouseReleased(MouseEvent arg0) {
    85.       // TODO Auto-generated method stub
    86.  
    87.    }
    88.  
    89.    public void mouseEntered(MouseEvent arg0) {
    90.       // TODO Auto-generated method stub
    91.  
    92.    }
    93.  
    94.    public void mouseExited(MouseEvent arg0) {
    95.       // TODO Auto-generated method stub
    96.  
    97.    }
    98.  
    99. }

  2. #2
    Two Of Three Megabyte Avatar von L-ectron-X
    Registriert seit
    16.07.2006
    Ort
    Drebkau
    Fachbeiträge
    2.274
    Genannt
    101 Post(s)
    Augenblick, isch hab da mal was vorbereitet...

    Eine Benutzer-Oberfläche mit einem Demo-Spiel von zwei Spielern.
    Ich habe das Layout und die Funktionen an eines der bekanntesten "Vier Gewinnt" Spiele angeleht/nachgeahmt. Das Setzen der Steine funktioniert für 2 Spieler entweder durch Klicken auf den Button über einer Spalte oder direkt auf die Spalte.
    Dem Programm sind bisher noch keine Spielregeln bekannt, den Regelsatz und die Voraussetzungen für ein gewonnenes Spiel müsstest du also noch einbauen.
    Damit solltest du einen soliden Grundstock haben, um dein Programm weiter-/fertigzubauen.

    Sieht dann so aus:
    'Vier Gewinnt' programmieren-4-gewinnt.png

    Code kommt gleich, Moment.
    Geändert von L-ectron-X (15.10.2013 um 10:49 Uhr) Grund: Bild-Link repariert
    Schöne Grüße
    L-ectron-X

    Byte-Welt - Wir sind die Community, in der die Benutzer sagen, wohin wir uns entwickeln.
    Programmieren lernt man nur durch Programmieren.

    "Wenn man die Buchstaben von Bundeskanzlerin umstellt, kommt Bankzinsenluder raus..."

  3. #3
    Premium User Kilobyte Avatar von AndreUhres
    Registriert seit
    06.05.2007
    Fachbeiträge
    169
    Genannt
    5 Post(s)
    ...inzwischen geh ich mal Gassi...

  4. #4
    Two Of Three Megabyte Avatar von L-ectron-X
    Registriert seit
    16.07.2006
    Ort
    Drebkau
    Fachbeiträge
    2.274
    Genannt
    101 Post(s)
    Immer mit der Ruhe, ich will ja auch kein Blödsinn posten...

    So, versuchen wir's mal.

    Was zum Kern gehört:
    Der logische Aufbau des Spiels, ein Gitter.
    Java Code:
    1. package connect4.core;
    2.  
    3. /**
    4.  * GameMatrix speichert den aktuellen Spielzustand, also die Anordnung der
    5.  * Spielsteine auf dem Spielfeld.
    6.  * @author L-ectron-X
    7.  */
    8. public class GameMatrix {
    9.    private GamingPiece[][] matrix; //Spielgitter mit Spielsteinen
    10.    private Rules rules; //Spielregeln
    11.    
    12.    /** Erzeugt ein Standardspielfeld. */
    13.    public GameMatrix() {
    14.       this(6, 7);
    15.    }
    16.    
    17.    /**
    18.     * Erzeugt ein Spielfeld beliebiger Größe für Spielvariationen.
    19.     * @param rows Anzahl der Reihen auf dem Spielfeld.
    20.     * @param columns Anzahl der Spalten auf dem Spielfeld.
    21.     */
    22.    public GameMatrix(int rows, int columns) {
    23.       matrix = new GamingPiece[rows][columns];
    24.       rules = new Rules(this);
    25.    }  
    26.    
    27.    /**
    28.     * Setzt den Spielstein eines Spielers in die übergebene Spalte.
    29.     * @param player Der ziehende Spieler.
    30.     * @param column Die Spalte, in der der Zug gemacht werden soll.
    31.     * @return true Bei Erfolg, false bei voller Spalte.
    32.     */
    33.    public boolean setGamingPiece(Player player, int column) {
    34.       int maxRow = matrix.length-1;
    35.       if(matrix[0][column] != null) { //Spalte ist voll
    36.          return false;
    37.       }
    38.      
    39.       //belegtes Feld suchen (von unten nach oben)
    40.       while(matrix[maxRow][column] != null && maxRow > 0) { //Spalte noch nicht voll
    41.          maxRow--;
    42.       }
    43.      
    44.       //Spielstein in freies Feld über dem letzten Spielstein der Spalte setzen.
    45.       matrix[maxRow][column] = new GamingPiece(player); //Spielstein eines Spielers Feld setzen
    46.      
    47.       return true;
    48.    }
    49.    
    50.    /**
    51.     * Löscht alle gesetzten Spielsteine vom Spielfeld.
    52.     */
    53.    public void clearMatrix() {
    54.       for(int i = 0; i < matrix.length; i++) {
    55.          for(int j = 0; j < matrix[0].length; j++) {
    56.             matrix[i][j] = null;
    57.          }
    58.       }
    59.    }
    60.    
    61.    public GamingPiece[][] getMatrix() {
    62.       return matrix;
    63.    }
    64.  
    65. }


    Der Spielstein:
    Java Code:
    1. package connect4.core;
    2.  
    3. /**
    4.  * GamingPiece beschreibt einen Spielstein.
    5.  * @author L-ectron-X
    6.  */
    7. public class GamingPiece {
    8.    private Player owner; //der Eigentümer dieses Spielsteins
    9.    
    10.    /**
    11.     * Erzeugt einen Spielstein, der dem übergebenen Spieler gehört.
    12.     * @param owner Der Eigentümer dieses Spielsteins.
    13.     */
    14.    public GamingPiece(Player owner) {
    15.       this.owner = owner;
    16.    }
    17.    
    18.    /**
    19.     * Gibt den Eigentümer (Spieler) dieses Spielsteins zurück.
    20.     * @return Der Spieler dieses Spielsteins.
    21.     */
    22.    public Player getPlayer() {
    23.       return owner;
    24.    }
    25.  
    26. }


    Der Spieler:
    Java Code:
    1. package connect4.core;
    2.  
    3. import java.awt.image.BufferedImage;
    4.  
    5. /**
    6.  * Player beschreibt die allgemeinen Eigenschaften eines Spielers.
    7.  * Neben dem Namen des Spielers wird auch die vom Spieler benutzte "Farbe"
    8.  * in Form einer Grafikdatei gespeichert.
    9.  * @author L-ectron-X
    10.  */
    11. public class Player {
    12.    private String name;
    13.    private BufferedImage pieceImage;
    14.    private boolean isNext;
    15.    
    16.    /**
    17.     * Erzeugt einen neuen Spieler mit dem übergebenen Namen.
    18.     * Der Spieler hält im Spiel die Farbe des Spielsteins anhand
    19.     * der übergebenen Grafik.
    20.     * @param name
    21.     * @param pieceImage Die visualisierende Grafik für den Spielstein.
    22.     */
    23.    public Player(String name, BufferedImage pieceImage) {
    24.       this.name = name;
    25.       this.pieceImage = pieceImage;
    26.    }
    27.    
    28.    /**
    29.     * Gibt den Namen des Spielers zurück.
    30.     * @return Der Name des Spielers.
    31.     */
    32.    public String getName() {
    33.       return name;
    34.    }        
    35.    
    36.    /**
    37.     * Gibt die visualisierende Grafik für den Spielstein zurück.
    38.     * @return Die Grafik für den Spielstein.
    39.     */
    40.    public BufferedImage getImage() {
    41.       return pieceImage;
    42.    }
    43.    
    44.    /**
    45.     * Gibt zurück, ob ein Spieler am Zug ist, oder nicht.
    46.     * @return true, wenn der Spieler am Zug ist, sonst false.
    47.     */
    48.    public boolean isNext() {
    49.       isNext = !isNext;
    50.       return isNext;
    51.    }
    52. }


    Die Spielregeln (Implementierung noch notwendig):
    Java Code:
    1. package connect4.core;
    2.  
    3. /**
    4.  * Rules beschreibt die Spielregeln für 4 Gewinnt.
    5.  * @author L-ectron-X
    6.  */
    7. public class Rules {
    8.    
    9.    /**
    10.     * Spielregeln für ein Spielfeld in der übergebenen Größe (Zeilen x Spalten)
    11.     * @param matrix Das Spielfeld, für das die Spielregeln gelten.
    12.     */
    13.    public Rules(GameMatrix matrix) {
    14.  
    15.    }
    16. }


    Eine Klasse zum Abrufen einer Demonstration
    Java Code:
    1. package connect4.core;
    2.  
    3. import connect4.gui.MainFrame;
    4.  
    5. /**
    6.  * Diese Klasse demonstriert ein laufendes Spiel.
    7.  * @author L-ectron-X
    8.  */
    9. public class Demo extends Thread {
    10.    private MainFrame frame;
    11.    
    12.    /**
    13.     * 4 Gewinnt-Demo
    14.     * @param frame Das Hauptfenster.
    15.     */
    16.    public Demo(MainFrame frame) {
    17.       this.frame = frame;
    18.    }
    19.    
    20.    @Override
    21.    public void run() {
    22.       try {
    23.          frame.setGamingPiece(4);
    24.          sleep(1000);
    25.          frame.setGamingPiece(4);
    26.          sleep(1000);
    27.          frame.setGamingPiece(3);
    28.          sleep(1000);
    29.          frame.setGamingPiece(4);
    30.          sleep(1000);
    31.          frame.setGamingPiece(4);
    32.          sleep(1000);
    33.          frame.setGamingPiece(3);
    34.          sleep(1000);
    35.          frame.setGamingPiece(3);
    36.          sleep(1000);
    37.          frame.setGamingPiece(2);
    38.          sleep(1000);
    39.          frame.setGamingPiece(2);
    40.          sleep(1000);
    41.          frame.setGamingPiece(2);
    42.          sleep(1000);
    43.          frame.setGamingPiece(1);      
    44.       }
    45.       catch(InterruptedException ex) {
    46.          interrupt();
    47.       }
    48.    }
    49. }
    Schöne Grüße
    L-ectron-X

    Byte-Welt - Wir sind die Community, in der die Benutzer sagen, wohin wir uns entwickeln.
    Programmieren lernt man nur durch Programmieren.

    "Wenn man die Buchstaben von Bundeskanzlerin umstellt, kommt Bankzinsenluder raus..."

  5. #5
    Two Of Three Megabyte Avatar von L-ectron-X
    Registriert seit
    16.07.2006
    Ort
    Drebkau
    Fachbeiträge
    2.274
    Genannt
    101 Post(s)
    Was zur Oberfläche gehört:
    Das Spielfeld
    Java Code:
    1. package connect4.gui;
    2.  
    3. import connect4.core.GameMatrix;
    4. import connect4.core.GamingPiece;
    5. import java.awt.Cursor;
    6. import java.awt.Dimension;
    7. import java.awt.Graphics;
    8. import java.awt.event.MouseEvent;
    9. import java.awt.event.MouseListener;
    10. import java.awt.image.BufferedImage;
    11. import javax.swing.JPanel;
    12.  
    13. /**
    14.  * Board ist die Visualisierung des Spielfeldes. Es zeichnet den aktuellen
    15.  * Spielzustand aus den Daten, die in GameMatrix gespeichert sind.
    16.  * @author L-ectron-X
    17.  */
    18. public class Board extends JPanel implements MouseListener {
    19.    private MainFrame frame;
    20.    private GameMatrix matrix;
    21.    private BufferedImage blank;
    22.    private int columnWidth, rowHeight;
    23.    private int rows, columns;
    24.    private GamingPiece[][] field;
    25.    
    26.    /**
    27.     * Erzeugt das Spielfeld.
    28.     * @param frame Das Hauptfenster.
    29.     * @param matrix Der Spielzustand, Anordnung der Spielsteine.
    30.     * @param blank Die Grafik repräsentiert ein leeres Spielfeld.
    31.     */
    32.    public Board(MainFrame frame, GameMatrix matrix, final BufferedImage blank) {
    33.       setLayout(null);
    34.       this.frame = frame;
    35.       this.matrix = matrix;
    36.       this.blank = blank;
    37.       columnWidth = blank.getWidth();
    38.       rowHeight = blank.getHeight();      
    39.      
    40.       field = matrix.getMatrix();
    41.       rows = field.length;
    42.       columns = field[0].length;
    43.      
    44.       setPreferredSize(new Dimension(columns * columnWidth, rows * rowHeight));
    45.      
    46.       addMouseListener(this);
    47.    }
    48.    
    49.    /**
    50.     * Zeichnet zeilenweise die aktuelle Spielansicht.
    51.     * @param g Das Zeichenbrett - das Objekt auf dem gezeichnet wird.
    52.     */
    53.    @Override
    54.    public void paintComponent(Graphics g) {
    55.       super.paintComponent(g);
    56.       int xPos = 0, yPos = 0;
    57.      
    58.       for(int i = 0; i < rows; i++) {
    59.          for(int j = 0; j < columns; j++) {
    60.             if(field[i][j] == null) { //das Feld wurde von keinem Spieler belegt
    61.                g.drawImage(blank, xPos, yPos, this);              
    62.             }
    63.             else { //das Feld ist von einem Spieler belegt
    64.                g.drawImage(field[i][j].getPlayer().getImage(), xPos, yPos, this);
    65.             }
    66.             xPos += columnWidth; //Position für Grafik Spalte rechts berechnen
    67.          }
    68.          xPos = 0; //neue Zeile, zeichnen wieder links beginnen
    69.          yPos += rowHeight; //Position für Grafik Zeile tiefer berechnen
    70.       }
    71.    }
    72.  
    73.    public void mouseClicked(MouseEvent e) {
    74.       int xPos = e.getX();
    75.  
    76.       for(int i = 0; i < columns; i++) {
    77.          if(xPos > columnWidth * i && xPos < (columnWidth * i) + columnWidth) {
    78.             frame.setGamingPiece(i);
    79.          }
    80.       }      
    81.    }
    82.  
    83.    public void mousePressed(MouseEvent e) {
    84.    }
    85.  
    86.    public void mouseReleased(MouseEvent e) {
    87.    }
    88.  
    89.    public void mouseEntered(MouseEvent e) {
    90.       setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR));
    91.    }
    92.  
    93.    public void mouseExited(MouseEvent e) {
    94.       setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
    95.    }
    96. }


    Eine Leiste mit Buttons, zum Absetzen der Spielsteine
    Java Code:
    1. package connect4.gui;
    2.  
    3. import java.awt.GridLayout;
    4. import java.awt.Insets;
    5. import java.awt.event.ActionEvent;
    6. import java.awt.event.ActionListener;
    7. import javax.swing.JButton;
    8. import javax.swing.JPanel;
    9.  
    10. /**
    11.  * Stellt eine einzeilige Reihe mit Buttons in der Anzahl der Spalten zur Verfügung.
    12.  * Die Buttons werden dazu benutzt, um einen Spielzug in der jeweilgen Spalte auszuführen.
    13.  * @author L-ectron-X
    14.  */
    15. public class BoardButtonBar extends JPanel implements ActionListener {
    16.    private JButton[] buttonBar;
    17.    private MainFrame frame;
    18.    
    19.    /**
    20.     * Erzeugt eine einzeilige Reihe mit Buttons in der Anzahl der Spalten.
    21.     * @param frame Das Hauptfenster.
    22.     * @param rows Die Anzahl der Spalten des Spielfeldes.
    23.     */
    24.    public BoardButtonBar(MainFrame frame, int rows) {
    25.       super(new GridLayout());
    26.       this.frame = frame;
    27.      
    28.       buttonBar = new JButton[rows];
    29.       for(int i = 0; i < buttonBar.length; i++) {
    30.          buttonBar[i] = new JButton(String.valueOf(i+1));
    31.          buttonBar[i].setMargin(new Insets(2, 2, 2, 2));
    32.          buttonBar[i].setFocusPainted(false);
    33.          buttonBar[i].addActionListener(this);
    34.          add(buttonBar[i]);
    35.       }
    36.    }
    37.  
    38.    public void actionPerformed(ActionEvent e) {
    39.       Object source = e.getSource();
    40.      
    41.       for(int i = 0; i < buttonBar.length; i++) {
    42.          if(source == buttonBar[i]) {
    43.             frame.setGamingPiece(i);
    44.          }
    45.       }
    46.      
    47.    }
    48. }


    Das Hauptfenster
    Java Code:
    1. package connect4.gui;
    2.  
    3. import connect4.core.Demo;
    4. import connect4.core.GameMatrix;
    5. import connect4.core.Player;
    6. import java.awt.BorderLayout;
    7. import java.awt.event.ActionListener;
    8. import java.awt.event.WindowAdapter;
    9. import java.awt.event.WindowEvent;
    10. import java.awt.image.BufferedImage;
    11. import java.io.IOException;
    12. import javax.imageio.ImageIO;
    13. import javax.swing.JOptionPane;
    14.  
    15. /**
    16.  * MainFrame ist das Hauptfenster und gleichzeitig der Controller des Programms.
    17.  * @author  L-ectron-X
    18.  */
    19. public class MainFrame extends javax.swing.JFrame implements ActionListener {
    20.    
    21.    /**
    22.     * Erzeugt ein neues Hauptfenster.
    23.     * @param title Der Titel dieses Fensters.
    24.     */
    25.    public MainFrame(String title) {
    26.       super(title);
    27.       initComponents();
    28.       setLocationRelativeTo(null);
    29.    }
    30.    
    31.    /** This method is called from within the constructor to
    32.     * initialize the form.
    33.     * WARNING: Do NOT modify this code. The content of this method is
    34.     * always regenerated by the Form Editor.
    35.     */
    36.    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    37.    private void initComponents() {
    38.  
    39.       //Modifikation unter menuBar-Properties (Pre-Creation Code)
    40.       addWindowListener(new WindowAdapter() {
    41.          public void windowClosing(WindowEvent e) {
    42.             exit();
    43.          }
    44.       });
    45.  
    46.       try {
    47.          blank = ImageIO.read(getClass().getResource("leeresFeld.gif"));
    48.          piece1 = ImageIO.read(getClass().getResource("rotesFeld.gif"));
    49.          piece2 = ImageIO.read(getClass().getResource("gelbesFeld.gif"));
    50.       }
    51.       catch(IOException ex) {
    52.          ex.printStackTrace();
    53.          JOptionPane.showMessageDialog(this,
    54.             "Ausnahmefehler beim Laden der Spielgrafiken!\nDas Programm kann nicht ausgeführt werden.",
    55.             "IOException",
    56.             JOptionPane.ERROR_MESSAGE);
    57.  
    58.          System.exit(1);
    59.       }
    60.       catch(IllegalArgumentException ex) {
    61.          ex.printStackTrace();
    62.          JOptionPane.showMessageDialog(this,
    63.             "Ausnahmefehler beim Laden der Spielgrafiken!\nMindestens eine Grafik konnte nicht gefunden werden! \nDas Programm kann nicht ausgeführt werden.",
    64.             "IllegalArgumentException",
    65.             JOptionPane.ERROR_MESSAGE);
    66.  
    67.          System.exit(1);
    68.       }
    69.  
    70.       matrix = new GameMatrix();
    71.       board = new Board(this, matrix, blank);
    72.       add(board, BorderLayout.CENTER);
    73.  
    74.       buttonBar = new BoardButtonBar(this, matrix.getMatrix()[0].length);
    75.       add(buttonBar, BorderLayout.NORTH);
    76.  
    77.       players = new Player[2];
    78.  
    79.       menuBar = new javax.swing.JMenuBar();
    80.       gameMenu = new javax.swing.JMenu();
    81.       newGame = new javax.swing.JMenuItem();
    82.       demoGame = new javax.swing.JMenuItem();
    83.       exitGame = new javax.swing.JMenuItem();
    84.  
    85.       setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);
    86.  
    87.       gameMenu.setText("Spiel");
    88.  
    89.       newGame.setText("Neues Spiel");
    90.       newGame.addActionListener(this);
    91.       gameMenu.add(newGame);
    92.  
    93.       demoGame.setText("Demo");
    94.       demoGame.addActionListener(this);
    95.       gameMenu.add(demoGame);
    96.  
    97.       exitGame.setText("Beenden");
    98.       exitGame.addActionListener(this);
    99.       gameMenu.add(exitGame);
    100.  
    101.       menuBar.add(gameMenu);
    102.  
    103.       setJMenuBar(menuBar);
    104.  
    105.       pack();
    106.    }
    107.  
    108.    // Code for dispatching events from components to event handlers.
    109.  
    110.    public void actionPerformed(java.awt.event.ActionEvent evt) {
    111.       if (evt.getSource() == newGame) {
    112.          MainFrame.this.newGameActionPerformed(evt);
    113.       }
    114.       else if (evt.getSource() == demoGame) {
    115.          MainFrame.this.demoGameActionPerformed(evt);
    116.       }
    117.       else if (evt.getSource() == exitGame) {
    118.          MainFrame.this.exitGameActionPerformed(evt);
    119.       }
    120.    }// </editor-fold>                        
    121.  
    122.    private void exitGameActionPerformed(java.awt.event.ActionEvent evt) {                                        
    123.       exit();
    124.    }                                        
    125.  
    126.    private void demoGameActionPerformed(java.awt.event.ActionEvent evt) {                                        
    127.       demo();
    128. }                                        
    129.  
    130.    private void newGameActionPerformed(java.awt.event.ActionEvent evt) {                                        
    131.       newGame();
    132.    }                                      
    133.    
    134.    //beendet das Programm
    135.    private void exit() {
    136.       int result = JOptionPane.showConfirmDialog(this,
    137.               "Möchtest du das Spiel jetzt wirklich beenden?",
    138.               "Spiel beenden",
    139.               JOptionPane.YES_NO_OPTION,
    140.               JOptionPane.QUESTION_MESSAGE);
    141.      
    142.       switch(result) {
    143.          case JOptionPane.YES_OPTION:
    144.             dispose();
    145.       }
    146.    }
    147.    
    148.    //Demonstration eines laufenden Spiels.
    149.    private void demo() {
    150.       matrix.clearMatrix();
    151.       board.repaint();
    152.       players[0] = new Player("Spieler 1", piece1);
    153.       players[1] = new Player("Spieler 2", piece2);
    154.       players[1].isNext();
    155.       new Demo(this).start();
    156.    }  
    157.    
    158.    //Öffnet ein neues Spiel.
    159.    private void newGame() {
    160.       matrix.clearMatrix();
    161.       board.repaint();
    162.       players[0] = new Player(
    163.               JOptionPane.showInputDialog(this, "Wie lautet dein Name?", "Spieler 1", JOptionPane.QUESTION_MESSAGE),
    164.               piece1);
    165.       players[1] = new Player(
    166.               JOptionPane.showInputDialog(this, "Wie lautet dein Name?", "Spieler 2", JOptionPane.QUESTION_MESSAGE),
    167.               piece2);
    168.       players[1].isNext(); //Spieler2 zieht zuerst. (Welcher Spieler zuerst ziehen soll, könnte noch abgefragt werden.)
    169.  
    170.    }
    171.  
    172.    
    173.    /**
    174.     * Muss aufgerufen werden, wenn ein Spieler einen Spielzug macht.
    175.     * @param column Die Spalte, in der der Zug ausgeführt werden soll.
    176.     */
    177.    public void setGamingPiece(int column) {
    178.       for(int i = 0; i < players.length; i++) {
    179.          if(players[i] == null) { //Es ist kein Spieler bekannt! (Name noch nicht eingegeben)
    180.             newGame();
    181.             break;
    182.          }
    183.          else if(players[i].isNext()) {
    184.             if(matrix.setGamingPiece(players[i], column)) {
    185.                board.repaint();        
    186.             }
    187.          }
    188.       }
    189.    }
    190.  
    191.    
    192.    // Variables declaration - do not modify                    
    193.    private javax.swing.JMenuItem demoGame;
    194.    private javax.swing.JMenuItem exitGame;
    195.    private javax.swing.JMenu gameMenu;
    196.    private javax.swing.JMenuBar menuBar;
    197.    private javax.swing.JMenuItem newGame;              
    198.    private GameMatrix matrix;
    199.    private Board board;
    200.    private BoardButtonBar buttonBar;
    201.    private Player[] players;
    202.    private BufferedImage blank, piece1, piece2;
    203. }

    Ins Package connect4.gui setzt du dann noch Grafikdateien:

    rotesFeld.gif
    'Vier Gewinnt' programmieren-rotesfeld.gif

    gelbesFeld.gif
    'Vier Gewinnt' programmieren-gelbesfeld.gif

    leeresFeld.gif
    'Vier Gewinnt' programmieren-leeresfeld.gif
    Geändert von L-ectron-X (25.02.2016 um 23:31 Uhr) Grund: Grafiken neu verlinkt
    Schöne Grüße
    L-ectron-X

    Byte-Welt - Wir sind die Community, in der die Benutzer sagen, wohin wir uns entwickeln.
    Programmieren lernt man nur durch Programmieren.

    "Wenn man die Buchstaben von Bundeskanzlerin umstellt, kommt Bankzinsenluder raus..."

  6. #6
    Premium User Kilobyte Avatar von AndreUhres
    Registriert seit
    06.05.2007
    Fachbeiträge
    169
    Genannt
    5 Post(s)
    Ja, klappt wie geschmiert, hier noch eine Hauptklasse zum Testen als Anwendung:
    Java Code:
    1. package connect4;
    2.  
    3. import javax.swing.*;
    4. import connect4.gui.MainFrame;
    5.  
    6. public class VierGewinnt {
    7.     public static void main(final String[] args) {
    8.         Runnable gui = new Runnable() {
    9.             @Override
    10.             public void run() {
    11.                 try {
    12.                     UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    13.                 } catch (Exception ex) {
    14.                     ex.printStackTrace();
    15.                 }
    16.                 new MainFrame("4 Gewinnt").setVisible(true);
    17.             }
    18.         };
    19.         //GUI must start on EventDispatchThread:
    20.         SwingUtilities.invokeLater(gui);
    21.     }
    22. }

  7. #7
    Two Of Three Megabyte Avatar von L-ectron-X
    Registriert seit
    16.07.2006
    Ort
    Drebkau
    Fachbeiträge
    2.274
    Genannt
    101 Post(s)
    Ist mir grad aufgefallen das die noch gefehlt hat, hatte sie eben im Clipboard, um sie noch nachzureichen.
    Du warst da aber schneller.
    Schöne Grüße
    L-ectron-X

    Byte-Welt - Wir sind die Community, in der die Benutzer sagen, wohin wir uns entwickeln.
    Programmieren lernt man nur durch Programmieren.

    "Wenn man die Buchstaben von Bundeskanzlerin umstellt, kommt Bankzinsenluder raus..."

  8. #8
    User Bit Themenstarter

    Registriert seit
    15.02.2009
    Fachbeiträge
    5
    Genannt
    0 Post(s)
    dumme Frage, wie setze ich die Codes im Script ein? muss ich sie einfach alle in einer klasse reinsetzen oder wie geht dass?

    Sorry wegen der dummen frage, bin noch ein anfänger in dem gebiet und versuche gerade den Quellcode nachzuvollziehen, den du gepostet hast.

    könntest du eventl. die Datei hochladen? ^^

  9. #9
    Two Of Three Megabyte Avatar von L-ectron-X
    Registriert seit
    16.07.2006
    Ort
    Drebkau
    Fachbeiträge
    2.274
    Genannt
    101 Post(s)
    Jedes gepostetes Codestück (in den Code-Fenstern) ist eine einzelne Klasse, die in einer .java-Datei gespeichert ist. Die Package-Definitionen entsprechen den Verzeichnissen, in denen die Dateien abgelegt sind. Die Java-Dateien kannst du mit einem ganz normalen Texteditor anlegen.

    Ich gebe dir ganz unten mal den Quellcode, dann kannst du den Aufbau vielleicht besser nachvollziehen. Der Code oben, wie in der unten bereitgestellten zip-Datei wurde nochmals gegenüber der zuerst geposteten Version leicht modifiziert.

    Für den Anfang solltest du dich vielleicht nicht gleich an solche Sachen heran wagen, zumindest nicht solange, wie die Java-Basics nicht sitzen.
    Geändert von L-ectron-X (21.11.2012 um 12:26 Uhr)
    Schöne Grüße
    L-ectron-X

    Byte-Welt - Wir sind die Community, in der die Benutzer sagen, wohin wir uns entwickeln.
    Programmieren lernt man nur durch Programmieren.

    "Wenn man die Buchstaben von Bundeskanzlerin umstellt, kommt Bankzinsenluder raus..."

  10. #10
    User Bit Themenstarter

    Registriert seit
    15.02.2009
    Fachbeiträge
    5
    Genannt
    0 Post(s)
    Also ich habe dass Programm in mein Verzeichnis kopiert und wird in Eclipse auch angezeigt. Ganz unten main.java und darüber noch Core und GUI.

    Wenn ich dass Programm starten will, taucht eine Meldung auf, ob ichs als Java Projekt oder Aplet starten will. Bei beiden gibt er einen Fehler aus "Selection does not compain a main type"

    Kann man dass überhaupt mit Eclipse starten?!? Da gibs ja verschiedene Programme für, liegt es daran oder hat dass damit nichts zu tun?


    P.S:Vielen Dank nochmal für die Hilfe, du hast mir sehr seeehr weiter geholfen

    hoffe, ich kann sowas in naher zukunft auch selbst programmieren ^^

    So ein alter Hase wie du Programmiert so'n poppel spiel bestimmt mal kurz in 5 Minuten in der Mittagspause wa

  11. #11
    Two Of Three Megabyte Avatar von L-ectron-X
    Registriert seit
    16.07.2006
    Ort
    Drebkau
    Fachbeiträge
    2.274
    Genannt
    101 Post(s)
    Zitat Zitat von cplusplus Beitrag anzeigen
    Wenn ich dass Programm starten will, taucht eine Meldung auf, ob ichs als Java Projekt oder Aplet starten will. Bei beiden gibt er einen Fehler aus "Selection does not compain a main type"
    Ich kann da jetzt nur Vermuten, weil ich nicht mit Eclipse arbeite, sondern mit NetBeans. Ich denke, dass du die falsche Klasse zum Starten angegeben hast.
    Die Main-Class, also die Klasse, die das Programm in Gang setzt, ist die Bytecode-Datei Main.class im Package connect4.

    Zitat Zitat von cplusplus Beitrag anzeigen
    Kann man dass überhaupt mit Eclipse starten?!? Da gibs ja verschiedene Programme für, liegt es daran oder hat dass damit nichts zu tun?
    Hat damit nichts zu tun, weil das allgemein gültger Code ist. Es ist also ganz egal, üb du das Programm in NetBeans, Eclipse oder über die Console kompilierst und startest.
    Schöne Grüße
    L-ectron-X

    Byte-Welt - Wir sind die Community, in der die Benutzer sagen, wohin wir uns entwickeln.
    Programmieren lernt man nur durch Programmieren.

    "Wenn man die Buchstaben von Bundeskanzlerin umstellt, kommt Bankzinsenluder raus..."

  12. #12
    User Bit Themenstarter

    Registriert seit
    15.02.2009
    Fachbeiträge
    5
    Genannt
    0 Post(s)
    Ich habe mir den Code mal angeschaut und dass ein oder andere nachgeguckt, aber der Code, den du gepostet hast, ist mir einfach noch zu viel, da blick ich einfach nicht durch. Und der Testlink funktioniert bei mir nicht, dass App wird zwar geladen, aber danach wird bei mir nichts angezeigt.


    Ich hab hier noch einen weiteren Quellcode von Andre Uhres, aber der will irgendwie auch nicht funktionieren, dass spielfeld erscheint zwar, und wenn ich im Feld klicke, notiert dass programm auch die Werte der x achse, zeichnet aber keine Bilder aufs spielfeld.

    Weiss du vielleicht wo der Wurm liegt?

    Java Code:
    1.  
    2. import java.applet.*;
    3. import java.awt.*;
    4. import java.awt.event.*;
    5. import java.lang.reflect.InvocationTargetException;
    6. import java.net.*;
    7. public class viergewinnt extends Applet implements MouseListener {
    8.     private static final long serialVersionUID = 1L;
    9.     private int feld[][] = {
    10.         {0, 1, 2, 0, 2, 0, 1},
    11.         {0, 0, 0, 0, 1, 0, 0},
    12.         {2, 4, 0, 0, 1, 0, 0},
    13.         {0, 0, 0, 0, 1, 0, 0},
    14.         {0, 0, 0, 0, 0, 0, 0},
    15.         {1, 1, 2, 0, 0, 0, 1}
    16.     };
    17.     private Image rot;
    18.     private Image blau;
    19.     public void zeichneSpielfeld(Graphics g, int x, int y) {
    20.         g.drawString("Vier Gewinnt", 260, 18);
    21.         setSize(600, 600);
    22.         g.drawRect(x, y, 420, 420);
    23.         g.drawLine(x, y + 70, x + 420, y + 70);
    24.         g.drawLine(x, y + 140, x + 420, y + 140);
    25.         g.drawLine(x, y + 210, x + 420, y + 210);
    26.         g.drawLine(x, y + 280, x + 420, y + 280);
    27.         g.drawLine(x, y + 350, x + 420, y + 350);
    28.         g.drawLine(x, y + 420, x + 420, y + 420);
    29.         g.drawLine(x + 60, y, x + 60, y + 420);
    30.         g.drawLine(x + 120, y, x + 120, y + 420);
    31.         g.drawLine(x + 180, y, x + 180, y + 420);
    32.         g.drawLine(x + 240, y, x + 240, y + 420);
    33.         g.drawLine(x + 300, y, x + 300, y + 420);
    34.         g.drawLine(x + 360, y, x + 360, y + 420);
    35.     }
    36.     @Override
    37.     public void paint(Graphics g) {
    38.         int xA = 85;
    39.         int yA = 85;
    40.         zeichneSpielfeld(g, xA, yA);
    41.         for (int x = 0; x < 6; x++) {
    42.             for (int y = 0; y < 5; y++) {
    43.                 int x1 = xA + 60 * x + 1;
    44.                 int y1 = yA + 70 * y + 1;
    45.                 int x2 = x1 + 60 - 1;
    46.                 int y2 = y1 + 70 - 1;
    47.                 if (feld[x][y] == 1) {
    48.                     g.drawImage(rot, x1, y1, x2, y2,
    49.                             0, 0, rot.getWidth(this), rot.getWidth(this), this);
    50.                 }
    51.                 if (feld[x][y] == 2) {
    52.                     g.drawImage(blau, x1, y1, x2, y2,
    53.                             0, 0, blau.getWidth(this), blau.getWidth(this), this);
    54.                 }
    55.             }
    56.         }
    57.     }
    58.     @Override
    59.     public void init() {
    60.         Runnable init = new Runnable() {
    61.             public void run() {
    62.                 try {
    63.                     rot = getImage(new URL("file:/sonne.jpg"));
    64.                     blau = getImage(new URL("file:/mond.jpg"));
    65.                 } catch (MalformedURLException ex) {
    66.                     ex.printStackTrace();
    67.                 }
    68.                 viergewinnt.this.addMouseListener(viergewinnt.this);
    69.             }
    70.         };
    71.         try {
    72.             EventQueue.invokeAndWait(init);
    73.         } catch (InterruptedException ex) {
    74.             ex.printStackTrace();
    75.         } catch (InvocationTargetException ex) {
    76.             ex.printStackTrace();
    77.         }
    78.     }
    79.     public void mouseClicked(MouseEvent arg0) {
    80.     }
    81.  
    82.     public void mousePressed(MouseEvent arg0) {
    83.         int x = arg0.getX();
    84.         System.out.println("x = " + x);
    85.         if (x < 50) {
    86.             feld[0][0] = 1;
    87.         }
    88.         if (x > 50 && x < 100) {
    89.             feld[0][1] = 1;
    90.         }
    91.         if (x > 100 && x < 150) {
    92.             feld[0][2] = 1;
    93.         }
    94.         repaint();
    95.     }
    96.     public void mouseReleased(MouseEvent arg0) {
    97.     }
    98.     public void mouseEntered(MouseEvent arg0) {
    99.     }
    100.     public void mouseExited(MouseEvent arg0) {
    101.     }
    102. }



    Die Bilder habe ich vorsichtshalber in alle verzeichnisse kopiert, daran liegt es schonmal nicht ^^

  13. #13
    Two Of Three Megabyte Avatar von L-ectron-X
    Registriert seit
    16.07.2006
    Ort
    Drebkau
    Fachbeiträge
    2.274
    Genannt
    101 Post(s)
    Zitat Zitat von cplusplus
    Und der Testlink funktioniert bei mir nicht, dass App wird zwar geladen, aber danach wird bei mir nichts angezeigt.
    Hinter dem Link steht eine JNLP-Datei (Java Webstart), die sollte sich um Herunterladen, Updaten und Starten kümmern können. Hat bei mir auch funktioniert...

    Ich hab das mit Java 1.6 kompiliert, möglicherweise hast du eine ältere JRE?
    Wenn ja, kann ich das Programm gerne noch mal für eine ältere JRE erzeugen.

    Warum du mit André's Code Probleme hast, müsste ich mir erst mal ansehen.
    Vielleicht schafft er es ja noch vor mir, das Problem zu finden.
    Schöne Grüße
    L-ectron-X

    Byte-Welt - Wir sind die Community, in der die Benutzer sagen, wohin wir uns entwickeln.
    Programmieren lernt man nur durch Programmieren.

    "Wenn man die Buchstaben von Bundeskanzlerin umstellt, kommt Bankzinsenluder raus..."

  14. #14
    User Bit Themenstarter

    Registriert seit
    15.02.2009
    Fachbeiträge
    5
    Genannt
    0 Post(s)
    ich benutze die neueste jre, daran liegt es nicht

  15. #15
    Unregistriert
    Gast/Guest
    ahh jetzt funktioniert es

    vielen dank =)

  16. #16
    Two Of Three Megabyte Avatar von L-ectron-X
    Registriert seit
    16.07.2006
    Ort
    Drebkau
    Fachbeiträge
    2.274
    Genannt
    101 Post(s)
    Bleibt also noch das Problem, mit André's Code?
    Wenn du mit dem Code von mir nicht klar kommst, brauchst du sicher noch etwas Übung in Java - speziell Grundlagen, Objektorientierung, GUI-Programmierung und Kenntnis der API.
    Schöne Grüße
    L-ectron-X

    Byte-Welt - Wir sind die Community, in der die Benutzer sagen, wohin wir uns entwickeln.
    Programmieren lernt man nur durch Programmieren.

    "Wenn man die Buchstaben von Bundeskanzlerin umstellt, kommt Bankzinsenluder raus..."

  17. #17
    Unregistriert
    Gast/Guest
    also wenn du eine läsung für den code kennst, wäre es sehr schön, wenn du dir dass anschauen könntest.

    Ja ich brauche noch viel übung in java, aber dass problem ist, dass ich dieses Spiel in kürze fertig stellen muss

    hast du auch eine idee, wie man das ermitteln des siegers programmiert? bei deinem code ist mir aufgefallen, dass das spiel im falle eines sieges nicht endet.

  18. #18
    Two Of Three Megabyte Avatar von L-ectron-X
    Registriert seit
    16.07.2006
    Ort
    Drebkau
    Fachbeiträge
    2.274
    Genannt
    101 Post(s)
    Das sind die Problemzeilen:
    Java Code:
    1. rot = getImage(new URL("file:/sonne.jpg"));
    2. blau = getImage(new URL("file:/mond.jpg"));
    Die URL kann nicht ausgewertet werden.
    Arbeite hier mit geCodeBase(), oder getDocumentBase().
    Schöne Grüße
    L-ectron-X

    Byte-Welt - Wir sind die Community, in der die Benutzer sagen, wohin wir uns entwickeln.
    Programmieren lernt man nur durch Programmieren.

    "Wenn man die Buchstaben von Bundeskanzlerin umstellt, kommt Bankzinsenluder raus..."

  19. #19
    Unregistriert
    Gast/Guest
    vielen dank nochmal für die hilfe, hat mich echt weitergebracht =)

    eine Frage hätte ich noch, wie mache ich sogennante Mouseover effekte in java?

    Also, damit meine ich z.b. wenn man mit dem mauszeiger in einer bestimmten position im Feld fährt, soll da ein paint grafik aufpopen und wenn die maus wieder aus diesem berreich wegfährt soll dass bild wieder verschwinden, aber nur wie mache ich dass?

  20. #20
    Two Of Three Megabyte Avatar von L-ectron-X
    Registriert seit
    16.07.2006
    Ort
    Drebkau
    Fachbeiträge
    2.274
    Genannt
    101 Post(s)
    Zitat Zitat von Unregistriert Beitrag anzeigen
    hast du auch eine idee, wie man das ermitteln des siegers programmiert? bei deinem code ist mir aufgefallen, dass das spiel im falle eines sieges nicht endet.
    Ich hab mir darüber noch keine Gedanken gemacht. Das wäre noch zu implementieren.

    Zitat Zitat von Unregistriert Beitrag anzeigen
    Also, damit meine ich z.b. wenn man mit dem mauszeiger in einer bestimmten position im Feld fährt, soll da ein paint grafik aufpopen und wenn die maus wieder aus diesem berreich wegfährt soll dass bild wieder verschwinden
    Hast du mal ein Funktionsbeispiel dazu? Kann mir das jetzt nicht so richtig vorstellen, was genau du suchst.
    Schöne Grüße
    L-ectron-X

    Byte-Welt - Wir sind die Community, in der die Benutzer sagen, wohin wir uns entwickeln.
    Programmieren lernt man nur durch Programmieren.

    "Wenn man die Buchstaben von Bundeskanzlerin umstellt, kommt Bankzinsenluder raus..."

+ Antworten Thema als "gelöst" markieren
Seite 1 von 3 1 2 3 LetzteLetzte

Direkt antworten Direkt antworten

Die chemische Formel von Wasser lautet ... ?

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Ähnliche Themen

  1. Wie lerne ich Programmieren (Java)?
    Von The_S im Forum Byte-Welt Fundgrube
    Antworten: 1
    Letzter Beitrag: 12.02.2009, 09:31
  2. Antworten: 0
    Letzter Beitrag: 12.02.2009, 09:14
  3. Mehrzeiligen JTableHeader programmieren
    Von L-ectron-X im Forum AWT, Swing, JavaFX & SWT
    Antworten: 10
    Letzter Beitrag: 22.07.2008, 14:46
  4. Nummernfeld programmieren
    Von christoph im Forum AWT, Swing, JavaFX & SWT
    Antworten: 5
    Letzter Beitrag: 10.09.2007, 14:56

Stichworte

Berechtigungen

  • Neue Themen erstellen: Ja
  • Themen beantworten: Ja
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •