Du bist nicht angemeldet.

Werbeanzeige

1

14.05.2018, 14:51

Javascript | Match3 Fehlersuche

Guten Tag,
Ich arbeite gerade an einem Match3 Spiel und habe folgendes Problem.
Bei der einen Funktion, wo zwei Blöcke miteinander vertauscht werden sollen, ist ein Fehler.
Es werden nicht immer die gewünschten Blöcke vertauscht.

Javascript-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
function swap(fieldC,row,col,dir){
 var row2,col2,
     fieldCopy=JSON.parse(JSON.stringify(fieldC));
    //get second position
    switch(dir){
      case 't':row2=row-1;col2=col;break;
      case 'b':row2=row+1;col2=col;break;
      case 'l':row2=row;col2=col-1;break;
      case 'r':row2=row;col2=col+1;
    }
    //swap
    var tmp=fieldCopy[row][col];
    fieldCopy[row][col]=fieldCopy[row2][col2];
    fieldCopy[row2][col2]=tmp;

        return fieldCopy;
    }
}

/*** START HERE ***/
var cursorX=3,cursorY=3;
var field=createField(8,5); //creates 8*8 Matrix with 5 different Values
var tmp=swap(field,cursorX,cursorY,'t');
if(tmp){
  field=tmp;
  cursorY--;
}
mode=0;

Ich habe jetzt mal nur einen kleinen unvollständigen Ausschnitt reingepackt.
An sich funktioniert das Programm, nur halt eben nicht bei jeder Eingabe(Pfeiltasten) wie gewünscht.
Ich bin diesen Codeabschnitt bereits mehrere male durchgegangen, auch mit Papier und Bleistift und es müsste auch alles richtig funktionieren, aber das tut es nicht.
Da ich in einem Emulator programmiere, gibt es auch keine Konsole, die Fehler anzeigt.

Falls sich jemand das ganze unsauber geschriebene Programm antun möchte:
- Programmiert wird in einem speziellen Emulator (https://tic.computer)

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Chodot« (16.05.2018, 20:43)


2

14.05.2018, 17:32

Ist mir jetzt persönlich zu wenig Fehlerbeschreibung. Bei welchen Eingaben passiert denn was genau, was du nicht erwartet hast? Ich würde jetzt einfach mal ins Blaue hinein tippen, dass du da irgendwo einen out of bounds access hast.

EDIT: Zumal du auch nur in deinem 't' case swapst. Hast du den Rest vergessen?
Besucht mich und meinen Blog unter:
www.simple-world.org

Du magst Tower Defense?
Dann probier doch mal Coregrounds aus ;)

3

14.05.2018, 18:46

Ist mir jetzt persönlich zu wenig Fehlerbeschreibung.
Du hast vollkommen recht. Ich weiß einfach nicht, wie ich das besser formulieren soll.

EDIT: Zumal du auch nur in deinem 't' case swapst. Hast du den Rest vergessen?
Vergessen nicht, nein. Wollte ich hinterher nachholen, auch das mit der Out of Bounds Exception.

Aber ich glaube, das Problem liegt in dem folgendem Abschnitt, ich mache es auch ganz kurz:

Javascript-Quelltext

1
2
3
4
//swap
    var tmp=fieldCopy[row][col];
    fieldCopy[row][col]=fieldCopy[row2][col2];
    fieldCopy[row2][col2]=tmp;

Ist damit alles in Ordnung?

David Scherfgen

Administrator

Beiträge: 10 199

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

5

14.05.2018, 18:49

Sieht OK aus.

Dann werde ich noch ein weiteres mal den ganzen Quellcode durchgehen.
Ich dachte, dass Problem läge bei der einen Funktion.

Danke für eure Hilfe

EDIT:

Ich habe den Fehler nun endlich entdeckt.
Bei

Javascript-Quelltext

1
var tmp=swap(field,cursorX,cursorY,'t');
musste ich die beiden Cursor Koordinaten tauschen.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Chodot« (14.05.2018, 19:12)


6

18.05.2018, 13:38

EDIT: Hat sich erledigt

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Chodot« (18.05.2018, 18:55)


TGGC

1x Rätselkönig

Beiträge: 1 812

Beruf: Software Entwickler

  • Private Nachricht senden

7

22.05.2018, 08:48

Darum ist es immer gut, sowas in eine Point oder Vector Struktur zu kapseln.

8

22.05.2018, 21:50

Darum ist es immer gut, sowas in eine Point oder Vector Struktur zu kapseln.
Ist das denn Standard und kannst du das bitte etwas genauer erläutern, also wie ich das mit js umsetzen kann. Für mich hört sich das irgedwie nach ANSI-C an.

TGGC

1x Rätselkönig

Beiträge: 1 812

Beruf: Software Entwickler

  • Private Nachricht senden

9

23.05.2018, 07:32

z.B. sowas: http://paperjs.org/reference/point/

Mit einer bestimmten Sprache hat das nichts zu tun, sowas geht in jeder objektorientierten Sprache.

Werbeanzeige