Wie kann eine vorgegebene Farbe über einen String erkannt werden?

Drachenbauer

Aktives Mitglied
Ich habe in meinem Spiel diese Variablen:

Java:
    public String selected_color;
   
    private Color red = new Color(191, 0, 0);
    private Color orange = new Color(191, 95, 0);
    private Color yellow = new Color(191, 191, 0);
    private Color green = new Color(0, 191, 0);
    private Color cyan = new Color(0, 191, 191);
    private Color blue = new Color(0, 0, 191);
    private Color purple = new Color(119, 0, 191);
    private Color magenta = new Color(191, 0, 191);

Ich benutze einen String, dem ich im Spiel den namen verschiedener Farben zuweise, da ich diesen zunächst benutze, um Spiel-Grafiken zu laden, die die entsprechenden Bezeichnungen im Dateinamen enthalten.
So kann ich die Variable als platzhalter im Dateipfad-String einbauen und es läd immer die Detei mit der gewünschten Farbe im namen.

Aber jetzt möchte ich das auch benutzen, um über folgendes:
Java:
        g.setColor(new Color(191, 191, 0));
        g.fillRect(0, 0, WIDTH, HIGHT);
die Hintergrundfarbe des Spielfeldes auch mit zu wechseln.
Deshalb sind die Namen der vorgegebenen Farben-Instanzen genauso geschrieben, wie die Inhalte, die der String erhalten kann.

Gibt es irgendetwas, das ich in die Klammern von dem Kommando zum Farbe einstellen einsetzen kann, damit über den Inhalt von dem String der name von einer meiner vorgegebenen Farben erkannt werden kann?

Ich möchte mir nämlich gerne eine 8-fache if-else-Entscheidung dort ersparen.
 
Wenn du if/else biz switch vermeiden willst, musst du eine geeignetere Datenstruktur wählen. Möglich wäre zB eine Map oder ein Wrapper für Farben, der Name und Farbwert wrappt.
 
Eine Möglichkeit wäre die über eine Klasse oder Struktur wie mrBrown schreibt:

Java:
package test;

import java.awt.Color;
import java.util.ArrayList;

public class ColorClass
{
    public Color Color = new Color(0,0,0);
    public String ColorName = "";
   
    public void SetColorByHexValue(String value)
    {
        try
        {
            Color = Color.decode(value);
        }
        catch (Exception ex)
        {
           
        }
       
    }
}


public class Test
{
    public Test()
    {
        ArrayList<ColorClass> ColorClassArray = new ArrayList<ColorClass>();
        ColorClass test = new ColorClass();
        test.Color = Color.blue;
        test.ColorName = "blue";
        ColorClassArray.add(test);
       
       
        for (ColorClass cl : ColorClassArray)
        {
            if (cl.ColorName.toUpperCase().trim().equals("BLUE"))
            {
                //found;
                break;
            }
        }
    }
}
 
das ist ja noch mehr text als 8 if-else - stufen.

ich suche immer nach Möglichkeiten, die möglichst wenig Code-Struktur benötigen und habe auf eine Lösung gehofft, die kompakter ist, als das.

Ich habe auf etwas gehofft, das frei übersetzt soviel bedeuten würde, wie "nimm die Farbe, deren Variablen-Name dem inhalt von "selected_color" entspricht" und komplett in die Klammern der "g.setColor();" - Methode passt, und wofür ich keine extra klasse oder so schreiben muss.
 
Zuletzt bearbeitet:
Ich habe schon gesagt, dass es jetzt funktioniert.
Meine Farben sind jetzt in einer HashMap gespeichert, aus der die Methode für die Hintergrundfarbe nun ausliest.

Nun kann ich in diesem Spiel nach belieben die Grafik-Farbe wechseln und die Grafiken und der Hintergrund sind immer schön aufeinander abgestimmt.

Ein wenig wie die Akzent-Farbe von Windows 10.
 
ich habe @Robats Antwort zu dem Zeitpunkt noch nicht gesehen.
Ich habe wohl vergessen, die Seite zu aktualisieren, als ich meinen beitrag überarbeiten wollte.

Und dann erst wieder eine ganze Weile später nochmal geguckt. dann erst habe ich sie gefunden.
 

Neue Themen


Zurück
Oben