2048

Diskutiere 2048 im Allgemeine Java-Themen Forum; Hallo, ich wollte das Spiel "2048" programmieren, momentan bin ich gerade beim Verschieben der Felder. Hier meine Methode um die Felder nach...

  1. member42
    member42 Mitglied
    Hallo,
    ich wollte das Spiel "2048" programmieren, momentan bin ich gerade beim Verschieben der Felder. Hier meine Methode um die Felder nach rechts zu verschieben. Als Ergebnis bekomme ich in der obersten Reihe 00088. Müssten die beiden 8 dann nicht noch zur 16 werden?

    Code (Java):

        private int feld[][]=
          {{4, 4, 0, 4, 4 },  // als Ergebnis 00088
          { 0,0, 0, 0, 0 },
          { 0,0, 0, 0, 0},
          { 0,0, 0, 0, 0 },
          { 0,0, 0, 0, 0 }
        };
       
        private int feldGroeße=5;
       
        private boolean rechtsVerschieben() {

            int index = 0;

            for (int k = 0; k < feldGroeße; k++) {

                for (int i = 0; i < feldGroeße; i++) { //spalte

                    for (int j = feldGroeße - 1; j > 0; j--) { /zeile

                        if (index == k) {
                            break;
                        }

                        if (feld[i][j] == feld[i][j - 1] && feld[i][j] != 0) {
                            feld[i][j] = feld[i][j] * 2; // 2 benachbarte Felder mit gleichem Inhalt addieren
                            feld[i][j - 1] = 0;
                            index++;
                        }

                        if (feld[i][j] == 0) {
                            feld[i][j] = feld[i][j - 1];
                            feld[i][j - 1] = 0;
                        }

                    }
                }
            }

            if (index == 0) { // es wurde nichts verschoben
                return false;
            }

            return true; // Feld hat sich verändert ein leeres Feld kann mit 2 oder 4 gefüllt werden
        }
     
     
  2. Vielleicht hilft dir diese Seite hier weiter (Klick!)
  3. mihe7
    mihe7 Bekanntes Mitglied
    Wenn ich die Beschreibung des Spiels richtig verstanden habe, dann sollte bei einer Rechtsverschiebung doch eigentlich 0,0,4,8,4 rauskommen.
     
  4. Robat
    Robat Bekanntes Mitglied
    Ich würde zb behaupten, dass da 0088 am Ende raus kommen muss.
    Sollte doch aber am Ende auch egal sein, oder? Du kannst es ja interpretieren wie du möchtest und was du für sinnig hälst - ist ja schließlich deine Interpretation von dem Spiel 2048 ;)
     
    member42 gefällt das.
  5. mihe7
    mihe7 Bekanntes Mitglied
    Natürlich kann man es machen, wie man will - aber interessieren würde es mich jetzt schon, wie das Spiel eigentlich angedacht ist :)
     
  6. MoxxiManagarm
    MoxxiManagarm Aktives Mitglied
    Ich habe das Spiel mal gespielt und ich bin mir ziemlich sicher, dass man 2 mal rechts verschieben musste um für diesen Fall 16 zu erreichen. Also aus meiner Sicht ist 00088 schon richtig. Stell dir vor du hast:

    0 0 4 4 8
    0 0 0 8 32
    ...

    Es sollte dem Nutzer überlassen bleiben, ob er die resultierende 8 aus den 2x 4 mit der rechten oder der unteren 8 zusammenfügen will.
     
    member42 gefällt das.
  7. member42
    member42 Mitglied
    OK,danke dann lasse ich es so. Ich war mir nur unsicher mit den Regeln, ich habe auch nirgendwo was gefunden, wo sie genau beschrieben sind.
     
  8. Blender3D
    Blender3D Aktives Mitglied
  9. member42
    member42 Mitglied
    Moin,

    Also ist es so, wenn ein Feld die Summe aus zwei anderen Feldern ist, dass sich dieses Feld dann nicht mehr mit einem anderen verbinden kann?

    Mit dem Code von oben wird z.B 2204 zu 0088, was ich ja jetzt eigentlich nicht wollte. Ich habe jetzt folgendes abgeändert:
    Code (Java):


    private boolean[][] feldSchonVerbunden = new boolean[feldGroeße][feldGroeße];
    private void rechts_Verschieben(int i) {

            for (int k = 0; k < feldGroeße; k++) {

                for (int j = feldGroeße - 1; j > 0; j--) {
             
                    if (feld[i][j] == feld[i][j - 1] && feld[i][j] != 0 && feldSchonVerbunden[i][j]==false && feldSchonVerbunden[i][j-1] ==false) {
                        feld[i][j] = feld[i][j] * 2;
                        feldSchonVerbunden[i][j] = true;
                        punkte = punkte + feld[i][j] * 2;
                        feld[i][j - 1] = 0;            
                    }

                    if (feld[i][j] == 0) {
                        feld[i][j] = feld[i][j - 1];
                        feld[i][j - 1] = 0;
                    }

                }
            }
        feldSchonVerbunden = new boolean[feldGroeße][feldGroeße]; // nach jedem Zug reseten
    }
     
    So wird kann dann ein Feld was schonmal mit einem anderen Feld verbunden wurde, sich nicht nochmal mit einem anderen Feld verbunden. So wird dann aus 2204 -> 0044
     
    Zuletzt bearbeitet: 12. Okt. 2018
  10. Blender3D
    Blender3D Aktives Mitglied
    Im Originalspiel sollte aber bei einer Rechtsbewegung aus 2204 genau 0088 herauskommen.
    Das bedeutet Du möchtest Deine eigene Variante des Spiels basteln.
     
  11. mihe7
    mihe7 Bekanntes Mitglied
    Es sind 8 Punkte auf dem Feld und daraus werden dann 16?
     
  12. Hinweis: Du möchtest Java lernen? Vielleicht hilft dir dieser Kurs hier weiter. Sichere dir hier den Zugriff auf umfangreiches Java-Know How und starte richtig durch!
Die Seite wird geladen...

2048 - Ähnliche Themen

2048
2048 im Forum Codeschnipsel u. Projekte
Arrays auf Bewegung prüfen (2048)
Arrays auf Bewegung prüfen (2048) im Forum Spiele- und Multimedia-Programmierung
2048, 3 kleine Probleme
2048, 3 kleine Probleme im Forum Spiele- und Multimedia-Programmierung
Thema: 2048