2012-01-26 11 views
6

Pracując w środowisku biznesowym, nie mam już do czynienia z kodowaniem ani używaniem starej dobrej konsoli. Moja praca jest powtarzalna, a zatem nie stanowi większego wyzwania.Przypisanie tablicy Wąż

Postanowiłem rzucić wyzwanie sobie, pisząc grę w węża na konsoli C#; i chłopiec to sprawił, że mój mózg działa. Nigdy nie musiałem tak ciężko myśleć na co dzień, ale czułem, że moje umiejętności programistyczne nie stawały się lepsze.

Mam jednak problem. Podstawowym podejściem, jakie podjąłem, było stworzenie klasy węża i klasy jedzenia. Klasa snake używa tablicy do przechowywania wszystkich współrzędnych, a następnie klasa rysunku decyduje, jakie współrzędne będą rysowane na ekranie.

Problem polega na tym, że gdy poruszasz wężem, tablica wypełnia się (maksymalna wydajność to 250 dla wydajności), więc kiedy dojdę do końca tablicy, chcę skopiować ostatnie kilka współrzędnych do tablicy temp, przepłukać oryginalną tablicę i skopiuj tempory z powrotem do głównej tablicy.

Problem, który mam, polega na skopiowaniu x współrzędnych z powrotem do oryginalnej tablicy. Postanowiłem zrobić to ręcznie, aby przetestować, ale to rozwiązanie zawsze sprawia, że ​​mój biedny wąż zostawia jeden z jego segmentów na ekranie, kiedy nie powinno go tam być.

Jak to zrobić programowo?

spoints[4, 0] = stemp[249, 0]; 
spoints[4, 1] = stemp[249, 1]; 
spoints[4, 2] = stemp[249, 2]; 

spoints[3, 0] = stemp[248, 0]; 
spoints[3, 1] = stemp[248, 1]; 
spoints[3, 2] = stemp[248, 2]; 

spoints[2, 0] = stemp[247, 0]; 
spoints[2, 1] = stemp[247, 1]; 
spoints[2, 2] = stemp[247, 2]; 

spoints[1, 0] = stemp[246, 0]; 
spoints[1, 1] = stemp[246, 1]; 
spoints[1, 2] = stemp[246, 2]; 

spoints[0, 0] = stemp[245, 0]; 
spoints[0, 1] = stemp[245, 1]; 
spoints[0, 2] = stemp[245, 2]; 

Naprawdę nie mam nic przeciwko zamieszczaniu całej gry tutaj, jeśli ktoś naprawdę chce zagłębić się w kod.

+3

Utrudniasz życie, używając tablic zamiast wpisywanych kolekcji/słowników. –

Odpowiedz

1

Należy rozważyć użycie tablicy dla "punktów ogólnych" bez punktów rysunkowych, utworzyć kolejną klasę o nazwie podobnej do SnakePart, aby klasa Snake mogła obsługiwać części.

Można również utworzyć niestandardową klasę tablicową, więc w każdej części siatki będzie miała tylko wartość hasSnakePart i będzie nią manipulować.

+0

Hyp: Sprawiasz, że mój mózg jest zraniony, ostatni raz, kiedy programowałem w ten sposób 7 lat temu w liceum, więc chciałem, żeby to było BARDZO podstawowe lol – Batista

+0

Ah, ale to zabawna część, nieprawdaż! Spraw, by twój mózg działał, uczyń go interesującym! – hyp

+0

Prawdziwe, ale dziecinne kroki :) dalej to zrobić węża AI, więc gra jest interesująca, a następnie sprawić, by węże strzelały jadem, by spowolnić innego węża itd. – Batista

3

Wygląda na to, że tablica jest niewłaściwym typem danych do Twoich celów. Rozważ użycie zamiast tego opcji List, ponieważ pozwala ona na większą elastyczność podczas przenoszenia wpisów.

+0

Dzięki! Będę używał listy, ale na razie chcę tylko wiedzieć, jak to zrobić programowo :) – Batista

+3

Jeszcze lepiej: użyj kolejki –

1

Czy myślałeś o tym, dodając nową współrzędną do "przodu" tablicy, usuwając tę ​​z "plecami" w trakcie podróży. Czyli w zasadzie coś w rodzaju kolekcji typu FIFO ?! Można użyć kolejki w języku C#. Rzuć okiem na ten artykuł i zobacz, czy to pomaga ?! http://www.dotnetperls.com/queue.

Pozdrowienia,
Chris.

+0

CHRIS, ja kreślę wszystkie punkty, ale moja klasa rysunkowa rysuje wszystko oprócz ostatniego punktu w każdym iteracja.Nie podążałem tą trasą, ponieważ wtedy wąż nie będzie miał ogona i będzie tylko 1 znak poruszający się po ekranie lol - edycja - przepraszam, widzę teraz twoją logikę, po prostu musiałbym mieć var, który śledzi ilość segmenty, które ma wąż. – Batista