Witam staram sie zrobić mapke z Pozycjami Row,Col
i malować kwadraciki np: http://i.dekros.ovh/2016-03/19-03-16_23-20-30.mp4 tutaj filmik jak to działa
chodź mam problem bo jak np usune jakiś kwadracik z środka to będzie dziura i chce to usunać
wiec zrobiłem hashMape
Position,Square
gdzie Position to Position(Row,Col) a Square to obiekt z x,y środka
i np mam Keye:
ROW COL
1 0
2 0
3 0
4 0
5 0
6 0
i np usuwam wartość 3 0
mam też taką metode która szuka pustego miejsca: http://hastebin.com/kifitufuve.java
i w tym wypadku metoda zwraca mi 3 0 i to jest dobre tylko żeby zrobić nastepny kwadrcik musze znać kordynaty starego czyli w tym wypadku 2 0 i nie wiem jak pobrać wartość 2 0 znajać 3 0 ... w tym wypadku wystarczy odjać ale np jakbym mial 0 90 wartość o dejmujać cofła by sie np 200 89 i tutaj dużo kombinowania z tym mam;/
Dekros napisał(a):
żeby zrobić nastepny kwadrcik musze znać kordynaty starego czyli w tym wypadku 2 0
Dlaczego akurat 2 0 ci potrzebny? Zdefiniuj "stary kwadrat" i w jaki sposób "robisz" kolejne kwadraty.
Nie wiem, czy dobrze rozumiem, ale może tu jest odpowiedź:
http://docs.oracle.com/javase/8/docs/api/java/util/NavigableMap.html#lowerKey-K-
HashMap jest strukturą danych, które nie ma pojęcia kolejności. Jeśli masz jakiś porządek kluczy i Ci na nim zależy użyj http://docs.oracle.com/javase/8/docs/api/java/util/TreeMap.html.
Jak wspomniano w odpowiedzi wyżej pojęcie "starego kwadratu" jest niejasne, ale jakie ono by nie było może to jest dobry kandydat na metodę w klasie Position?
ok to jeszcze raz mam
tak jakby Sektory nazwijmy te kwadraciki sektorami
Każdy sektor ma swoją kordynate X,Z (X,Y) nazewnictwo obojetne oraz swoja pozycyje ROW/COL i działa tak dodając nowy sektor inkrementuje ROW kiedy ROW bedzie MAKS zeruje je i dodaje do COL +1 i tak dalej .... kiedy np usune Sektor o pozycji ROW=2 COL = 0 to robi sie tam "dziura" i nie chce by one były wiec pętlą np:
for(int col=0;col<max...)
for(int row=0;row<maxx.....){
Position key = new Position(row,col);
if(!map.containsKey(key){
//JEJ MAM DZIURKE!
return key;
}}}
i juz mam Pozycje gdzie jest dziura i teraz musza ja załatać a żeby to zrobić musze znać koordynaty wcześniejszego Sektora bo nowy Kordynaty nowego Sektora są tworzone poprzez stary Sektor i nie wiem jak by to pobierać
W takim razie pierwsze rozwiązanie, które przychodzi mi do głowy to trzymać:
- ostanio wstawioną pozycję w "normalny sposób" (bez latania dziurek),
- stos ostatnio usuniętych pozycji.
I wstawiasz nowy element w następujący sposób:
Position newPosition = null;
if (not stackWithPreviousDeletions.isEmpty()) {
newPosition = stackWithPreviousDeletions.pop();
}
else {
newPosition = previousPosition.next();
previousPosition = newPosition;
}