Nur bestimmte Bilder aus einem Array auf Image Button anzeigen lassen

Schniffi

Neues Mitglied
Einen wundervollen guten Abend,

ich bin noch sehr neu in der Java Programmierung und habe meine ersten Schritte mit Android Studio mit zwei Büchern und Youtube Videos gestartet, nun komme ich nicht mehr so recht weiter und hoffe hier evtl. Hilfe bzw. Denkanstöße zu bekommen 🙂

Ich bin dabei ein Spiel mit Karten zu erstellen. Es wird per Klick eine von etwa 300 zufälligen Karte gezogen. Es gibt 3 Regelfelder für Regelkarten darunter, von denen es etwa 40 Stück gibt.

Wird eine Regel gezogen, soll sie entweder automatisch auf eins der drei freien Regelfelder wandern oder ich lege sie dort per Klick ab. Zur Zeit funktioniert es nur die gezogene Karte auf einem Regelfeld abzulegen, ungeachtet davon ob es eine Regel oder eine andere Karte ist.

So sieht mein Code dafür momentan aus:

btnRule1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
currentCard1();
}
});

private void currentCard1 () {
if (randomIconPointer >= 0 ) {
btnRule1.setBackgroundResource( icons.getResourceId(getIcon(), 1));
}
}



Hier der Code für die nächste gezogene Karte, evtl. kann man die Funktion bzw. die Überprüfung der aktuellen Karte auch hier einbauen?


private void changeImage() {
iv.setBackgroundResource(icons.getResourceId(nextIcon(), 1));
}
private void changePrevImage() {
iv.setBackgroundResource(icons.getResourceId(prevIcon(), 1));
}

private int getIcon(){
return randomIconSequence[randomIconPointer];
}

private int nextIcon(){
randomIconPointer = randomIconPointer + 1;
if (randomIconPointer >= randomIconSequence.length) {
randomIconPointer = 0;
}
return randomIconSequence[randomIconPointer];
}


Sobald die 3 Regelfelder voll sind und eine 4te Regel wird gezogen, soll eine ausgetauscht werden können, eigentlich per Wahl, aber es wäre auch okay das immer von 1-3 belegt und überschrieben wird. Ich komme einfach nicht recht voran, das Projekt startete bereits im Juni und ist mein erstes überhaupt. Es macht Spaß die kleinen "Puzzle" zu lösen und Erfolge zu haben, aber langsam bin ich an dem Punkt wo ich nicht mal mehr recht weiß wonach ich googlen soll.
Für andere Ideen bin ich ebenfalls offen.

Falls das hier jemand ließt und etwas Ahnung hat, wäre ich super happy über Lösungswege oder Denkanstöße, die mir helfen weiter voran zu kommen 🙂

Gruß Schniffi
 
So, wie du das beschrieben hast, würde ich glaube ich die Abfrage, ob eine Karte auf einem Regelfeld abgelegt werden darf, in den Button machen, der sie auf dem Regelfeld ablegt. Wenn der Benutzer dann den Button drückt könnte eine Meldung kommen, dass er das nicht darf. Eine andere Möglichkeit wäre, man macht die Abfrage beim Ziehen der neuen Karte rein und deaktiviert die Regelfelder komplett, wenn es keine Regelkarte ist.
Die erste Möglichkeit gefällt mir aus Spieler-Sicht aber besser, weil das Spiel dann nicht so viel vorgibt. Ich mag es immer nicht, wenn ein Spiel so viel Hilfestellungen bietet, dass es eigentlich nur noch durchklicken ist ohne nachzudenken.

Die Abfrage selbst würde ich gar nicht über das Image direkt regeln. In deinem Array sind, wenn ich das richtig verstehe, alle "Icons" drin und schon vermischt, als würden sie auf einem gemischten Kartenstapel liegen. Ist Icon eine Klasse von dir? Wenn ja, dann könnte man dort eine zusätzliche Eigenschaft rein nehmen, ob die Karte eine Regelkarte ist, oder nicht.

Wenn Icon keine Klasse von dir ist, dann weißt du ja trotzdem, welche Icon Nummern die Regelkarten sind, und welche nicht. Das kannst du dann eventuell in einer anderen Liste hinterlegen, die dann überprüft wird. Ich schätze aber, dass deine Karten noch ein paar andere Eigenschaften haben werden, als nur Regelkarte Ja/Nein, deshalb wäre es sowieso gar nicht so schlecht, eine eigene Klasse "Spielkarte" dafür anzulegen, bevor du weitermachst.

PS: Poste Code beim nächsten Mal bitte in Code-Tags. Das macht den viel leichter lesbar.
 
So, wie du das beschrieben hast, würde ich glaube ich die Abfrage, ob eine Karte auf einem Regelfeld abgelegt werden darf, in den Button machen, der sie auf dem Regelfeld ablegt. Wenn der Benutzer dann den Button drückt könnte eine Meldung kommen, dass er das nicht darf. Eine andere Möglichkeit wäre, man macht die Abfrage beim Ziehen der neuen Karte rein und deaktiviert die Regelfelder komplett, wenn es keine Regelkarte ist.
Die erste Möglichkeit gefällt mir aus Spieler-Sicht aber besser, weil das Spiel dann nicht so viel vorgibt. Ich mag es immer nicht, wenn ein Spiel so viel Hilfestellungen bietet, dass es eigentlich nur noch durchklicken ist ohne nachzudenken.

Die Abfrage selbst würde ich gar nicht über das Image direkt regeln. In deinem Array sind, wenn ich das richtig verstehe, alle "Icons" drin und schon vermischt, als würden sie auf einem gemischten Kartenstapel liegen. Ist Icon eine Klasse von dir? Wenn ja, dann könnte man dort eine zusätzliche Eigenschaft rein nehmen, ob die Karte eine Regelkarte ist, oder nicht.

Wenn Icon keine Klasse von dir ist, dann weißt du ja trotzdem, welche Icon Nummern die Regelkarten sind, und welche nicht. Das kannst du dann eventuell in einer anderen Liste hinterlegen, die dann überprüft wird. Ich schätze aber, dass deine Karten noch ein paar andere Eigenschaften haben werden, als nur Regelkarte Ja/Nein, deshalb wäre es sowieso gar nicht so schlecht, eine eigene Klasse "Spielkarte" dafür anzulegen, bevor du weitermachst.

PS: Poste Code beim nächsten Mal bitte in Code-Tags. Das macht den viel leichter lesbar.
Vielen Dank für deine Ausführliche Antwort, sowie die Zeit die du dir dafür genommen hast und entschuldige, ich werde beim nächsten Code drauf achten, danke für den Hinweis.

Das du sagst, von wegen nicht alles vorzugeben und das Spiel dann nur durchzuklicken gefällt mir sehr.
Ich muss gestehen mir vieles über Videos gezielt angesehen zu haben und auch immer nur die Bereiche nachgelesen zu haben.. mir fehlen daher wohl einige Grundlegende Dinge. Ich weiß gerade nicht mal recht eine Antwort auf die Frage, ob Icon eine Klasse ist oder nicht.

Bisher hat keine der Karten einen Wert, sie werden alle nur so als "Bild" wiedergegeben und haben bislang keinerlei weitere Eigenschaften. In meinem Spiel gibt es 5 Kartentypen und 3 davon benötigen eine Eigenschaft, um sie auf bestimmte Orte zu platzieren. Mit den Regeln wollte ich starten und dann könnte ich das Prinzip für die anderen beiden Kartentypen übernehmen. Es gibt noch viele andere Baustellen in der App, irgendwo muss man aber ja anfangen.
Die gesamten Bilder sind in einem Array und am Anfang werden sie gemischt, als würden sie auf einem Kartenstapel liegen.

Wie würde es in der Praxis etwa aussehen einer Karte einen Wert zu geben? Deine Idee, dass die Regelfelder für alle anderen Karten bis auf Regeln deaktiviert werden gefällt mir, würde man da dann mit einer "if" abfrage arbeiten oder was würdest du nehmen?

Könnte ich z.B. allen Regelkarten den Wert "R" geben und den Regelfeldern sagen sie dürfen nur Karten mit Wert "R" beinhalten?
 
Woher kommen das "icons" und die "randomIconSequence"? Das sind ja wahrscheinlich Arrays mit einem bestimmten Datentyp. Je nachdem, wo die erzeugt werden, ist es wahrscheinlich gar nicht so schwierig, dass noch ein bisschen umzubauen, da eine eigene Klasse für die Spielkarten dazwischen zu bekommen.

Dann musst du dir überlegen, was für Eigenschaften deine Spielkarten haben, und wie du das in einer Java-Klasse abbilden willst. Soweit ich das bisher verstanden habe, brauchst du ja auf jeden Falldas Bild und den Kartentyp.

Die Logik für das deaktivieren der Regelfelder würde dann vermutlich am ehesten dort Sinn machen, wo die nächste Karte gezogen wird.
 

Neue Themen


Zurück
Oben