poniedziałek, 24 kwietnia 2017

I znowu gierka

Tak mi się spodobało pisanie w Java Scripcie, że trzasnąłem następną gierkę. Jest to znana wszystkim układanka Tetris. Gra jest osadzona na podstronie mojego CMS-a, podobnie zresztą jak poprzednia gra, Snake. Udało mi się uzyskać w miarę zgrabny kod, z którego jestem całkiem zadowolony. Aczkolwiek jest jedna rzecz, do której bym mógł się przyczepić - algorytm obracania figur. Bazuje on na 2-wymiarowych macierzach 3x3 i gdybym chciał w przyszłości dodać figury o większych rozmiarach, algorytm należałoby przerobić na bardziej uniwersalny, obsługujący figury dowolnej wielkości. Dało mi to do myślenia i właśnie się nad tym głęboko zastanawiam... Może coś wymyślę, a tymczasem zapraszam do zagrania on-line: http://angular-cms.pl/page/21

PS: Już wymyśliłem - wystarczy zwykła transpozycja kolumn i wierszy w odpowiedniej kolejności.

Obrót w lewo:

for (i = 0; i < this.size; i++) {
  for (j = 0; j < this.size; j++) {
    this.shape.map[i][j] = map[this.size - j - 1][i];
  }
}
Obrót w prawo:
for (i = 0; i < this.size; i++) {
  for (j = 0; j < this.size; j++) {
    this.shape.map[i][j] = map[j][this.size - i - 1];
  }
}
gdzie map[][] jest mapą figury przed transformacją.

PS: Można tworzyć własne figury i je dodawać do puli klocków - wystarczy wpisać w konsoli coś takiego, jak na przykład:

shapes.push({ map: [[1, 1, 1, 1, 0], 
                    [1, 0, 0, 0, 0], 
                    [1, 1, 1, 0, 0], 
                    [1, 0, 0, 0, 0], 
                    [1, 1, 1, 1, 1]], 
              color: 'brown' 
});

Brak komentarzy:

Publikowanie komentarza