2011-07-11 22 views
5

Konwertuję program Javascript, który napisałem na Javę, i istnieje jeden obiekt, którego nie jestem pewien, jak pisać w Javie.Literały obiektów w Javie

tetros.types = new Array(); 
    tetros.types[0] = new Object(); 

    tetros.types[0].color = "green"; 
    tetros.types[0].rotations = new Array(); 
    tetros.types[0].rotations[0] = new Object(); 
    tetros.types[0].rotations[0].blocks = Array([0,0],[1,0],[2,0],[2,1]); 
    tetros.types[0].rotations[0].edges ={ 
     "down" :Array([2,0],[2,1]), 
     "left" :Array([0,0],[1,0],[2,0]), 
     "right" :Array([2,1],[1,0],[0,0]), 
     "up" :Array([0,0],[2,1]) 
    } 

    tetros.types[0].rotations[1] = new Object(); 
    tetros.types[0].rotations[1].blocks = Array([0,0],[0,1],[0,2],[1,0]); 
    tetros.types[0].rotations[1].edges ={ 
     "down" :Array([0,1],[0,2],[1,0]), 
     "left" :Array([0,0],[1,0]), 
     "right" :Array([0,2],[1,0]), 
     "up" :Array([0,0],[1,0]) 
    } 

    tetros.types[0].rotations[2] = new Object(); 
    tetros.types[0].rotations[2].blocks = Array([0,0],[0,1],[1,1],[2,1]); 
    tetros.types[0].rotations[2].edges ={ 
     "down" :Array([0,0],[2,1]), 
     "left" :Array([0,0],[1,1],[2,1]), 
     "right" :Array([0,1],[1,1],[2,1]), 
     "up" :Array([0,0],[0,1]) 
    } 

    tetros.types[0].rotations[3] = new Object(); 
    tetros.types[0].rotations[3].blocks = Array([0,2],[1,0],[1,1],[1,2]); 
    tetros.types[0].rotations[3].edges ={ 
     "down" :Array([1,0],[1,1],[1,2]), 
     "left" :Array([1,0],[0,2]), 
     "right" :Array([0,2],[1,2]), 
     "up" :Array([0,2],[1,0],[1,1]) 
    } 


    tetros.types[1] = new Object(); 
    tetros.types[1].color = "blue"; 
    tetros.types[1].rotations = new Array(); 
    tetros.types[1].rotations[0] = new Object(); 
    tetros.types[1].rotations[0].blocks = Array([0,0],[0,1],[1,0],[1,1]); 
    tetros.types[1].rotations[0].edges ={ 
     "down" :Array([1,0],[1,1]), 
     "left" :Array([0,0],[1,0]), 
     "right" :Array([0,1],[1,1]), 
     "up" :Array([0,0],[0,1]) 
    } 
    tetros.types[1].rotations[1] = new Object(); 
    tetros.types[1].rotations[1].blocks = tetros.types[1].rotations[0].blocks; 
    tetros.types[1].rotations[1].edges = tetros.types[1].rotations[0].edges; 

    tetros.types[1].rotations[2] = new Object(); 
    tetros.types[1].rotations[2].blocks = tetros.types[1].rotations[0].blocks; 
    tetros.types[1].rotations[2].edges = tetros.types[1].rotations[0].edges; 

    tetros.types[1].rotations[3] = new Object(); 
    tetros.types[1].rotations[3].blocks = tetros.types[1].rotations[0].blocks; 
    tetros.types[1].rotations[3].edges = tetros.types[1].rotations[0].edges; 

To około 1/4 całego obiektu, ale reszta jest bardziej podobna.

Jak mogę to napisać w Javie?

+3

Nie musisz żałować.W końcu to miejsce, do którego przychodzą ludzie, gdy mają kłopoty, prawda :-)? –

+0

Wiem, ale już zadałem pytanie dzisiaj. Po prostu nie chcę chciwości i nadal korzystać z tej strony bez zwracania czegoś, nie jestem wystarczająco dobry w żadnym języku, aby pomóc:/ – Diesal11

+5

Jest OK. Dowiedz się, co możesz, pomóż, gdzie możesz, a staniesz się lepszy :) –

Odpowiedz

3

chciałbym zacząć na najgłębszym poziomie i swój sposób pracy do tyłu od tego, myśląc o tym, jak można przekonwertować każdy zestaw właściwości do zmiennych instancji klasy, np:

int[][] blocks; 
int[][] edges; 

(zauważ, że Java ma nie obsługuje tablic asocjacyjnych dla takich rzeczy jak "down", "up", itp.).

Następnie można umieścić je w klasach. Od kodzie te wydają się być właściwości obrotu, więc sugeruję coś takiego:

class Rotation { 
    // Instance variables 
    private int[][] blocks; 
    private int[][] edges; 

    // Constructor 
    public Rotation(int[][] blocks, int[][] edges) { 
     this.blocks = blocks; 
     this.edges = edges; 
    } 

    // Accessors and mutators here if applicable 
} 

Wtedy coś takiego:

class Type { 
    private Rotation[] rotations; 
    private String color; 
    // etc etc 
} 

i tak dalej. Wygląda na to, że jesteście nowicjuszami w pewnych formalnych koncepcjach obiektowych (np. Enkapsulacja), dlatego zaleciłbym przeczytanie niektórych samouczków w języku Java, które obejmują podstawy klas i obiektów przed próbą przeniesienia tego do Javy.

+0

Dziękuję! Nigdy nie myślałem o stworzeniu wyjątkowej klasy dla każdego "poziomu" – Diesal11

0

Szczerze mówiąc, zacznę od powrotu i przepisania Twojej wersji Javascriptu w celu użycia prototypów zamiast obiektów ad-hoc. Wtedy odwzorowanie między prototypami i klasami Java będzie znacznie bardziej 1-do-1. Nie wiem, czy możesz zrobić wiele, ponieważ Java nie ma pojęcia literałów Object, a Java nie wspiera tak dynamicznie budowania obiektów.

+0

Prototypowy format jest jak JSON tak? – Diesal11

+0

kinda, JSON to tylko format danych. Każdy obiekt javascript ma prototyp, w którym zwykle umieszcza się dane wspólne (stałe, właściwości, metody itd.). Dobra wiadomość na ten temat: http://eloquentjavascript.net/chapter8.html (cała książka naprawdę dobrze się czyta) –

1

Java i Javascript to dwa kompletnie różne języki. Może nie być możliwe znalezienie dokładnego odwzorowania. Możesz pisać rzeczy w bardziej swobodny sposób w JavaScript, więc przy przełączaniu się na Javę musisz pomyśleć, czym jest każdy obiekt i jakiego obiektu użyć.

W twoim przypadku, na przykład, types jest tablicą, a rotations jest tablicą wewnątrz elementu types. Będziesz musiał zainicjować je na tablice. W tym celu musisz znać rozmiar z góry. Można zrobić coś takiego:

tetros.types = new TypeObject[10]; 
tetros.types[0] = new TypeObject(); 
tetros.types[0].rotations = new Rotation[10]; 
tetros.types[0].rotations[3] = new Rotation(); 

etc ...

To się pod warunkiem, że tetros ma pole types i TypeObject ma pole rotations.

Ogólnie nie jest dobrze używać pól w języku Java. Pola z ustawiaczem i geterem są bardziej faworyzowane z punktu widzenia stylu.

Może się wydawać, że wykonywanie pewnych czynności w języku Java jest bardzo uciążliwe i najprawdopodobniej wymagane będą nowe projekty danych.

Ogólnie rzecz biorąc, przenoszenie z jednego języka na drugi to zadanie wymagające dogłębnej znajomości obu języków. Tak więc w twoim przypadku możesz rozważyć napisanie go od podstaw w Javie, podczas gdy używanie oryginalnego źródła Javascript jako wskazówki.