Jawbreaker

Latsch

Mitglied
Guten Tag,

nachdem ich nun ein Semester gar kein praktisches programmieren mehr hatte wollte ich mir nun
mal wieder was anschaun, merke aber das das gar nichts mehr wird und hoffe nun auf Hilfe von hier.

Ich hab mir eine Jawbreaker Übungsaufgabe rausgesucht, aber ich komme gar nich klar
was die Implementierung der Spiellogik angeht.
Ich weiß was zu tun ist, aber ich weiß einfach nicht wie ich es Implementier.

Hoffe ihr koennt mir weiter Helfen, jedoch nicht zu viel verraten, kleine Denkanstoesse wären am
besten ;)

Klasse die auf meinen Mist gewachsen ist:

Java:
package de.logic;

import java.awt.Color;



public class JawbreakerGame {

	int height;
	int width;
	
	public JawbreakerGame(int nWidth, int nHeight)
	{
		setHeight(nHeight);
		setWidth(nWidth);
		
		int[][] spielfeld = new int[width][height];
		
		//Spielfeld mit Punkten fuellen die zufällige Farben haben
		
		for (int i = 0; i < height; i++)
		{
			for (int j = 0; j < width; j++)
			{
				spielfeld[i][j] = color(random); //Farbe zuweisen?
			}
		}
		
	}
	

	public void setHeight(int nHeight)
	{
		this.height = nHeight;
	}
	
	public int getHeight()
	{
		return height;
		
		
	}

	public void setWidth(int nWidth)
	{
		this.width = nWidth;
	}
	
	public int getWidth()
	{
		return width;
	}


	public boolean isCellSelected(int x, int y)
	{
		if (/*Zelle ist selektiert*/)
			return true;
		else
			return false;
	}

	public Color getCellColor(int x, int y)
	{
		return null; 
		
	}

	public void click(int x, int y)
	{
		// Mausklick an der Stelle x,y
	}


	public boolean isGameOver()
	{
		if ( /* kein punkt hat einen nachbar -> Methode zum pruefen*/)
			return true;
		else
			return false;
	}

	
	//Objektuebergabe an JawbreakerPanel Beispiel JawbreakerPanel Zeile 174
	public Statistics getStatistics()
	{
		Statistics stc = new Statistics();
		
		return stc;
		
	}
	

}

Ich bin hier total überfordert mit der Maustasten abfrage und dem Color package.
Sowie hab ich nicht wirklich Ahnung wie ich mit dem Array Arbeiten muss, da
die Oberfläche des spiels gegeben ist und ich nicht weiß wie ich genau
die Punkte einfärbe, wenn sie überhaupt schon existieren. Verwirrt mich etwas.




Folgende Klassen waren als Hilfe vorgegeben, jedoch verwirren sie mich mehr, da ich
keinen Überblick habe.

Statistic Klasse
Java:
/*
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Generation - Code and Comments
 */
package de.logic;

/**
 * 
 * 
 *
 * Statistiken aller Spiele.
 */
public class Statistics {
    private int gamesPlayed            = 0;
    private int maxPoints              = 0;
    private int prevGamePoints         = 0;
    private int currentSelectionPoints = 0;
    private int currentGamePoints      = 0;
    private int allPoints              = 0;
    
    /**
     * Loescht die komplette Statistik.
     */
    public void clear() {
        gamesPlayed            = 0;
        maxPoints              = 0;
        prevGamePoints         = 0;
        currentSelectionPoints = 0;
        currentGamePoints      = 0;
        allPoints              = 0;
    }
    
    /**
     * Liest die Anzahl gespielter Runden.
     * @return Die Anzahl gespielter Runden.
     */
    public int getGamesPlayed() {
        return gamesPlayed;
    }

    /**
     * Liest den hoechsten Spielstand aller Spiele.
     * @return Der hoechste Spielstand.
     */
    public int getHighscore() {
        return maxPoints;
    }
    
    /**
     * Liest den Spielstand des letzten Spiels.
     * @return Spielstand des letzten Spiels.
     */
    public int getScoreLastGame() {
        return prevGamePoints;
    }
    
    /**
     * Beendet ein Spiel. Der Spielstand des laufenden Spiels
     * wird als Ergebnis uebernommen. 
     * Dabei wird der Highscore neu gesetzt, falls in der letzten
     * Runde mehr Punkte als beim bisherigen Hoechststand erreicht
     * wurden. Weiterhin wird die Anzahl der gespielten Spiele erhoeht.
     */
    public void finishGame() {
        this.prevGamePoints = currentGamePoints;
        allPoints += currentGamePoints;
        if (prevGamePoints > maxPoints) {
            maxPoints = prevGamePoints;
        }
        gamesPlayed++;
        currentGamePoints = 0;
    }
    
    /**
     * Liest die Punkte der aktuell selektierten Zellen.
     * @return Punkte der aktuell selektierten Zellen.
     */
    public int getCurrentSelectionPoints() {
        return currentSelectionPoints;
    }
    
    /**
     * Schreibt die Punkte der aktuell selektierten Zellen.
     * @param currentSelectionPoints Punkte fuer die aktuelle Selektion.
     */
    public void setCurrentSelectionPoints(int currentSelectionPoints) {
        this.currentSelectionPoints = currentSelectionPoints;
    }

    /**
     * Ermittelt die Anzahl Punkte im jetzt laufenden Spiel.
     * @return Anzahl Punkte im laufenden Spiel.
     */
    public int getCurrentGamePoints() {
        return currentGamePoints;
    }

    /**
     * Addiert einen Wert zur Anzahl Punkte im laufenden Spiel.
     * @param addGamePoints Anzahl zu addierender Punkte.
     */
    public void addToCurrentGamePoints(int addGamePoints) {
        this.currentGamePoints += addGamePoints;
    }
    
    /**
     * Ermittelt den Mittelwert aller Punkte.
     * @return Mittelwert.
     */
    public int getAverage() {
        return gamesPlayed > 0 ? allPoints / gamesPlayed : 0;
    }
}


Jawbreaker Klasse
Java:
package de.visual;

import java.awt.BorderLayout;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;

import de.hska.faki.logic.JawbreakerGame;

/**
 * Erzeugen des Spiels in einem Fenster.
 * 
 * 
 */
public class Jawbreaker extends JFrame {

    /** 
     * Feldbreite in Zellen.
     */
    private static final int WIDTH = 11;

    /** 
     * Feldhoehe in Zellen.
     */
    private static final int HEIGHT = 12;

    /**
     * Referenz auf die Spiellogik.
     */
    private JawbreakerGame breakerGame;

    /**
     * Referenz auf das Panel, das die Ausgaben vornimmt.
     */
    private JawbreakerPanel breakerPanel;

    /**
     * Erzeugt das komplette Spiel.
     */
    public Jawbreaker() {
        super("Jawbreaker");
        breakerGame  = new JawbreakerGame(WIDTH, HEIGHT);
        breakerPanel = new JawbreakerPanel(breakerGame);
        
        getContentPane().setLayout(new BorderLayout());
        getContentPane().add(breakerPanel);
        
        JLabel points = new JLabel("0");
        breakerPanel.setScoreLabel(points);
        points.setHorizontalAlignment(SwingConstants.RIGHT);
        getContentPane().add(points, BorderLayout.SOUTH);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    
    
    /**
     * Die Methode wird beim Start des Programms aufgerufen.
     * @param args Kommandozeilenparameter
     */
    public static void main(String[] args) {
        Jawbreaker breaker = new Jawbreaker();
        breaker.pack();
        breaker.setVisible(true);
    }
}


Jawbreaker-Panel Klasse
Java:
package de.visual;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.RenderingHints;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.HashMap;

import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

import de.logic.JawbreakerGame;

/**
 * Visualisierung des Jawbreaker-Spiels.
 * 
 * 
 */
public class JawbreakerPanel extends JPanel implements MouseListener {

    /**
     * Referenz auf das Spiel des Benutzers.
     */
    private JawbreakerGame breakerGame;
    private JLabel         scoreLabel;
    private Point          clickedCell = null;
    private Font           font = null;
    
    /**
     * Cache fuer die Farben und deren Abstufungen, um nicht permanent neue Farbobjekte
     * mit brighter() und darker() zu erzeugen.
     */
    private HashMap<Color, Color> selectedColors     = new HashMap<Color, Color>();
    private HashMap<Color, Color> darkerColors       = new HashMap<Color, Color>(); 
    private HashMap<Color, Color> brighterColors     = new HashMap<Color, Color>(); 

    /**
     * Erzeugt ein neues Panel.
     * Die Groesse des Panels berechnet sich aus der Anzahl
     * der Zellen im Spiel sowie der Groesse der einzelnen Zellen.
     *
     * @param nBreakerGame Referenz auf das Spiel, das angezeigt werden soll.
     */
      public JawbreakerPanel(JawbreakerGame nBreakerGame) {
        breakerGame = nBreakerGame;
        addMouseListener(this);
        setPreferredSize(new Dimension(600, 605));
      }

      /**
       * Neuzeichnen des Panel.
       * Die Zeichenmethode wird intern vom Browser aufgerufen,
       * wenn ein Neuzeichnen notwendig ist.
       *
       * @param gr Referenz auf den Grafikkontext.
       */
      public void paintComponent(Graphics gr) {
        Graphics2D graphics  = (Graphics2D) gr;
        boolean    selection = false;
        
        int cellSize = getCellSize();

        // Hintergrund loeschen
        graphics.setColor(Color.white);
        graphics.fillRect(0, 0, getSize().width, getSize().height);

        graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, 
                                  RenderingHints.VALUE_ANTIALIAS_ON);
        
        for (int x = 0; x < breakerGame.getWidth(); x++) {
          for (int y = 0; y < breakerGame.getHeight(); y++) {
            Color col = breakerGame.getCellColor(x, y);
            if (col != null) {
                if (breakerGame.isCellSelected(x, y)) {
                    Color selectedCellColor = selectedColors.get(col);
                    if (selectedCellColor == null) {
                        selectedCellColor = col.darker().darker().darker();
                        selectedColors.put(col, selectedCellColor);
                    }
                    col = selectedCellColor;
                    selection = true;
                }
                // Dunklere Farbe erzeugen bzw. lesen
                Color darkerColor = darkerColors.get(col);
                if (darkerColor == null) {
                    darkerColor = col.darker();
                    darkerColors.put(col, darkerColor);
                }
                // Hellere Farbe erzeugen bzw. lesen
                Color brighterColor = brighterColors.get(col);
                if (brighterColor == null) {
                    brighterColor = col.brighter();
                    brighterColors.put(col, brighterColor);
                }
                graphics.setPaint(new GradientPaint(2 + x * cellSize, 2 + y * cellSize, darkerColor, 
                                                    2 + x * cellSize + cellSize - 2,
                                                    2 + y * cellSize + cellSize - 2, brighterColor));
                graphics.fillOval(2 + x * cellSize,
                                  2 + y * cellSize,
                                  cellSize - 2, cellSize - 2);
                
                graphics.setColor(darkerColor);
                graphics.drawOval(2 + x * cellSize,
                        2 + y * cellSize,
                        cellSize - 2, cellSize - 2);
            }
          }
        }
        
        // Mindestens eine Zelle ist selektiert: Punkte anzeigen
        if (selection) {
            String selectedCellPoints = String.valueOf(breakerGame.getStatistics().getCurrentSelectionPoints());
            graphics.setColor(Color.white);
            if (font == null || font.getSize() != cellSize / 3) {
                font = new Font(Font.SANS_SERIF, Font.BOLD, cellSize / 3);
            }
            graphics.setFont(font);
            FontMetrics fm = graphics.getFontMetrics();
            graphics.drawString(selectedCellPoints, 
                                (int) (clickedCell.x * cellSize + (cellSize - fm.stringWidth(selectedCellPoints)) / 2), 
                                (int) (clickedCell.y * cellSize + (cellSize - fm.getHeight())));
            selection = false;
        }
      }

    /**
     * Ermittelt die Ausmasse einer Zelle. 
     * @return Die Ausmasse einer Zelle.
     */
    private int getCellSize() {
        int cellSize = Math.min(getSize().width  / breakerGame.getWidth(),
                                getSize().height / breakerGame.getHeight());
        return cellSize;
    }

    /**
     * Mausklick: Bildschirmposition in Feldposition umrechnen.
     * @param event Systemereignis
     */
    public void mouseClicked(MouseEvent event) {
        int cellSize = getCellSize();
        int xField = event.getX() / cellSize;
        int yField = event.getY() / cellSize;

        // Click ausserhalb?
        if ((xField >= breakerGame.getWidth()) || (yField >= breakerGame.getHeight())) {
            return;
        }

        if (clickedCell == null) {
            clickedCell = new Point(xField, yField);
        }
        else {
            clickedCell.x = xField;
            clickedCell.y = yField;
        }
        
        breakerGame.click(xField, yField);
        
        // Aktuelle Punktezahl anzeigen
        scoreLabel.setText(String.valueOf(breakerGame.getStatistics().getCurrentGamePoints()));
        
        repaint();

        if (breakerGame.isGameOver()) {
            scoreLabel.setText(String.valueOf(breakerGame.getStatistics().getScoreLastGame()));
            JOptionPane.showMessageDialog(null, "Game over!");
            removeMouseListener(this);
        }
    }

    public void mousePressed(MouseEvent e) {
    }

    public void mouseReleased(MouseEvent e) {
    }

    public void mouseEntered(MouseEvent e) {
    }

    public void mouseExited(MouseEvent e) {
    }

    public void setScoreLabel(JLabel points) {
        scoreLabel = points;
    }
}


Vielen Dank schonmal im Vorraus für euren Aufwand,

Liebe Grüße Latsch
 

HimBromBeere

Top Contributor
Ich bin hier total überfordert mit der Maustasten abfrage und dem Color package.
Ich auch grade, aber das liegt eher an der Fülle an Informationen... zumindest den zweiten Teil der Frage kann ich recht schnell beantworten, der Rest kommt später.
Schonmal Color angesehen? Dem Konstruktor übergibst du einfach drei Zufallszahlen zwischen 0 und 255. Das sollte reichen, nachdem, was ich bisher gesehen hab.

[EDIT]Dein Spielfeld im Konstruktor von
Code:
JawbreakerGame
zu deklarieren, ist übriugens recht sinnfrei. Mach es als Instanzvariable, also direkt hinter die beiden bereits vorhandenen Variablen
Code:
height
und
Code:
width
. So kannst du überall innerhakb der (Instanz der) Klasse auf das Spielfeld zugreifen.[/EDIT]

[EDIT]Sollen in deinem Spielfeld Zahlen stehen oder Farben? Das eine wäre
Code:
int[][]
, das andere
Code:
Color[][]
[/EDIT]
 
Zuletzt bearbeitet:
E

Eigeninitiative

Gast
Guten Tag,

nachdem ich nun ein Semester gar kein praktisches programmieren mehr hatte wollte ich mir nun
mal wieder was anschaun, merke aber das das gar nichts mehr wird und hoffe nun auf Hilfe von hier.

Informatik-Studium heißt ja auch nicht das du nur dann praktisch programmierst wenn du es von deinem Dozenten als "Hausaufgabe" bekommst sondern kontinuirlich das bereits erworbene Wissen festigst und selbstständig übst. Das heißt "Eigeninitiative" und sollte man in diesem Bereich schon mal haben.
Wenn du es also auf die leichte Schulter genommen und dir gedacht hast : ach das wird schon ...
Sorry, aber dann ist es eigentlich deine eigene Schuld. Und da wird man dir hier so direkt auch schlecht helfen können, denn Nachhilfe wird es kaum kostenfrei geben.
 

Latsch

Mitglied
Guten Tag,

@HimBromBeere

Danke fuer deine schnelle Antwort werde mir das später nochmal genauer anschauen.

@Eigeninitiative

Es ist nich so das ich faul rumlag sondern, einfach durch gewisse Umstände dieses Semester
keinen praktischen Kurs hatte und somit dies unterging, da ich auch so gut beschäftigt war.
Und genau diese Eigeninitiative kommt hier ja zum Spiel, da ich mein Wissen nicht komplett
verschwinden lassen wollte, das bisschen was ich von Java angesammelt haben... :|
 

Ikaron

Bekanntes Mitglied
Hey ;)
Erstmal, ich versteh nicht, was du mit Mausabfrage meinst?

Die Mausabfrage macht doch schon JawbreakerPanel:
Java:
public void mouseClicked(MouseEvent event) {
        int cellSize = getCellSize();
        int xField = event.getX() / cellSize;
        int yField = event.getY() / cellSize;
 
        // Click ausserhalb?
        if ((xField >= breakerGame.getWidth()) || (yField >= breakerGame.getHeight())) {
            return;
        }
 
        if (clickedCell == null) {
            clickedCell = new Point(xField, yField);
        }
        else {
            clickedCell.x = xField;
            clickedCell.y = yField;
        }
        
        breakerGame.click(xField, yField);
        
        // Aktuelle Punktezahl anzeigen
        scoreLabel.setText(String.valueOf(breakerGame.getStatistics().getCurrentGamePoints()));
        
        repaint();
 
        if (breakerGame.isGameOver()) {
            scoreLabel.setText(String.valueOf(breakerGame.getStatistics().getScoreLastGame()));
            JOptionPane.showMessageDialog(null, "Game over!");
            removeMouseListener(this);
        }
    }
Und in die Methode "click" im JawbreakerGame musst du das schreiben, was passieren soll, wenn auf Feld x/y geklickt wurde. Z.B. erst überprüfen ob sie schon selektiert ist, wenn ja, dann schauen ob es eine Reihe gibt, und wenn sie noch nicht selektiert ist, muss sie halt dann selektiert werden.

Und sonst, bei getCellColor etc.. würde ich das so machen: Dein Spielfeld bleibt ein int[][], damit man leichter arbeiten kann. Dann legst du noch ein Array an, in dem du bestimmten Farben bestimmte Werte zuweist. Könnte dann so aussehen:

Java:
Color[] cellColors = new Color[]{new Color(255, 0, 0), new Color(0, 255, 0), new Color(0, 0, 255), new Color(255, 255, 0)};
-> cellColors[0] ist rot, 1 ist grün, 2 ist blau und 3 gelb.
Somit sollten in dein Spielfeld nur Zahlen von 0-3 eingefügt werden.
Dann kannst du dir einfach die Zahl an der Position holen und die dazu gehörige Farbe, indem du cellColors fragst. Somit musst du nicht immer die Farben vergleichen, sondern kannst diese "ID" nehmen -> Schneller und einfacher.
Sorry, falsch das nicht verständlich war, zur Not frag einfach nochmal.
Mein Problem ist, dass ich das zwar kann, aber umstrukturieren würde, was dann zu Verwirrung führt..

Ps: Ich setz mich mal selbst dran, ist auch ne gute Übung für mich (Aber ich zieh das komplett allein auf), wenn du willst, kannst du ja das haben.
 
Zuletzt bearbeitet:

Latsch

Mitglied
Hi,

wow echt super Vorschlag mit dem Color Array, werd ich so aufjedenfall einbaun. :toll:

Und naja, ich echt etwas Verwirrt bei dem ganzen Porgramm da ich es eben nicht komplett selbst
aufbaue, wobei ich keine Ahnung haette ob ich das schaffen wuerde.

Ich setz mich jetzt mal dran und werd spaeter Berichten, konnte mich gestern nich dransetzen.

Greets,

Latsch

[EDIT]Wobei ich grade sehe das diese Variante mit den Farben eventuell konflikte mit der anderen
Implementierung der Klassen gibt.
Ich hab es jetzt so gemacht das ich zwei Color-Arrays habe.
Java:
Color[][] spielfeld;
	Color[] cellColors = new Color[]{new Color(255, 0, 0), new Color(0, 255, 0), new Color(0, 0, 255), new Color(255, 255, 0)};

Und dann einfach zur zufälligen zugabe dem Spielfeld Color[0-3] uebergebe.[/EDIT]
 
Zuletzt bearbeitet:

Ikaron

Bekanntes Mitglied
So, ich hab das jetzt fertig, das heißt, wenn du irgendwelche Algorithmen brauchst, wie z.B. alle in der Nähe selektieren, dann frag einfach^^
 

Ikaron

Bekanntes Mitglied
Wie sieht's denn jetzt aus? Was für Fragen gibt es noch? Oder läuft alles so weit gut?
Achja, kannst mich auch gerne in Skype adden: xXIkaron
Dann kannst du dir ja mal meine Version anschauen^^
 

Latsch

Mitglied
So also ich hab jetzt nur noch Probleme mit 2 Methoden und zwar
dieser isCellSelected:

Java:
public boolean isCellSelected(int x, int y)
	{
		if (/*Zelle ist selektiert*/)
			return true;
		else
			return false;
	}

Hier versteh ich nicht, ganz da ich theoretisch die Methode selber aufrufen müsste
und ich sowieso nich weiss wie ich darauf abfrage wann eine Zelle selektiert ist und wann nicht.


Und die click-Methode bei der ich noch nich ganz versteh was ich genau machen muss.
In der aufgabenstellung steht folgendes, woraus ich aber auch nicht arg viel schlauer werde.
Diese Methode wird von JawbreakerPanel aufgerufen,
wenn die Zelle an der Position (x, y) angeklickt wurde. Somit wird die komplette
Spielelogik über diese Methode abgewickelt.

Ich hab halt noch nie mit Mausaktivitäten gearbeitet von dem her absolut keine Ahnung hiervon.

Java:
public void click(int x, int y)
	{
		// Mausklick an der Stelle x,y
	}

Schoene Grüße Latsch
 

Ikaron

Bekanntes Mitglied
Wenn der Methode "click" die Argumente 4 und 2 übergeben werden, heißt das, dass auf spielfeld[4][2] geklickt wurde. Da musst du garnichts mit Maus programmieren, sondern nur, dass halt z.B. dann das selektiert werden muss, etc..


Java:
public boolean isCellSelected(int x, int y)
	{
		if (/*Zelle ist selektiert*/)
			return true;
		else
			return false;
	}

Das "Zelle ist selektiert" musst du durch einen Überprüfungsalgorithmus ersetzen.
[...] und ich sowieso nich weiss wie ich darauf abfrage wann eine Zelle selektiert ist und wann nicht.
Das musst du selbst abspeichern, z.B. in einem 2-Dim-Array:

Java:
private boolean[][] selektierteZellenImSpielfeld = new boolean[spielfeld.length][spielfeld[0].length];

public boolean isCellSelected(int x, int y)
{
	return selektierteZellenImSpielfeld[x][y];
}

Dann musst du natürlich bei click folgendes schreiben:

Java:
public void click(int x, int y)
{
	for(int i = 0; i < selektierteZellenImSpielfeld.length; i++)
		for(int j = 0; j < selektierteZellenImSpielfeld[i].length; j++)
			selektierteZellenImSpielfeld[i][j] = false; //Setzt erstmal alle selektierten Zellen zurück

	selektierteZellenImSpielfeld[x][y] = true; //Fügt die Zelle auf die geklickt wurde hinzu.
}

Hierbei entspricht "selektierteZellenImSpielfeld" praktisch deinem Spielfeld, bloß wird hier nicht die Farbe gespeichert, sondern einfach, ob die Zelle selektiert ist oder nicht.

Das Ganze ist jetzt nur ein Beispiel und es gibt bessere Methoden, aber es sollte funktionieren.

Wenn du Skype hast, gib mir deine addy und wir machen das da, geht dann einfacher :)
 
Zuletzt bearbeitet:

Latsch

Mitglied
Dankeschoen für die Hilfe,

hab leider kein Skype.
Ich hab das Programm jetzt soweit das es mir was darstellt, und müsste nur noch
die Punktevergabe und das löschen der jeweiligen Zellen darstellen.

Hierbei hätte ich die frage ob ich die Farbvergleiche realisieren kann indem
ich dann einfach abfrage ob z.B. spielfeld[x][y] == spielfeld[x][y+1]
wobei in spielfeld[x][y] dann eben der RGB Wert ala {255, 255, 255} ist?
Weil mir das irgendwie spanisch vorkommt.
Ansonsten müsste ich das Projekt vollends glaube ich hinbekommen ;)

Mfg Latsch
 

Ikaron

Bekanntes Mitglied
Ich persönlich habe das Ganze mit Rekursion umgesetzt, also die gleichfarbigen Zellen in der Nähe auszuwählen. Wenn du dazu eine Frage hast, dann frag einfach.
Der Vergleich [c]if(spielfeld[j].getRGB == spielfeld[j + 1].getRGB) //...[/c] sollte funktionieren. Könntest es auch in eine Methode einbauen:
Java:
public boolean isColorEqual(int x0, int y0, int x1, int y1) {

    return spielfeld != null && spielfeld[x0][y0] != null && spielfeld[x1][y1] != null ? [spielfeld[x0][y0].getRGB == spielfeld[x1][y1].getRGB : false;
}
Hierbei sind die vorigen Überprüfungen eigentlich unnötig, da das Spielfeld ja immer existiert und komplett gefüllt ist. Solltest du leere Zellen mit "null" darstellen, dann brauchst du sie wiederum.
(Ich gehe einfach mal davon aus, dass du die ? - : Abfrage schon kennst.. Wenn nicht, dann such mal nach "Konditionaler Operator Java")


Wäre auch schön, wenn du auf "Danke" klicken würdest :oops:
 
Zuletzt bearbeitet:

Ikaron

Bekanntes Mitglied
Ich persönlich habe das Ganze mit Rekursion umgesetzt, also die gleichfarbigen Zellen in der Nähe auszuwählen. Wenn du dazu eine Frage hast, dann frag einfach.
Der Vergleich [c]if(spielfeld[j].getRGB == spielfeld[j + 1].getRGB) //...[/c] sollte funktionieren. Könntest es auch in eine Methode einbauen:
Java:
public boolean isColorEqual(int x0, int y0, int x1, int y1) {

    return spielfeld != null && spielfeld[x0][y0] != null && spielfeld[x1][y1] != null ? [spielfeld[x0][y0].getRGB == spielfeld[x1][y1].getRGB : false;
}
Hierbei sind die vorigen Überprüfungen eigentlich unnötig, da das Spielfeld ja immer existiert und komplett gefüllt ist. Solltest du leere Zellen mit "null" darstellen, dann brauchst du sie wiederum.
(Ich gehe einfach mal davon aus, dass du die ? - : Abfrage schon kennst.. Wenn nicht, dann such mal nach "Konditionaler Operator Java")


Wäre auch schön, wenn du auf "Danke" klicken würdest :oops:


Oops, da ist mir ein kleiner Fehler unterlaufen: die "[" vor "spielfeld[x0]" muss weg.. Die Edit-Regel ist echt schlau xD
 

Oben