Logika gry labirynt

0

Witam,

Mam zrobić na laboratoria pewne zadanie, problem tkwi w tym ze nie rozumiem logiki tego zadania,
gościu niestety nie jest skłonny do wyjaśnień twierdzi że wszystko powinniśmy wiedzieć sami,
proszę was jedynie o pomoc w zrozumieniu treści tego laboratorium aby naprowadzić mnie na sens działania tego programu.
Nie rozumiem jak ma wyglądać struktura labiryntu, podany w pdf przykład nic mi nie mówi a gdy patrze na te liczby które pokazują w jaki sposób maja być generowane możliwe przejścia to już całkiem mi to się nie klei.
Może ktoś z was ma pomysł na przebrnięcie przez to?

Zadanie polega na napisaniu prostej gry Labirynt:
1. Gra powinna zawierać okno startowe – okno główne. Po zakończeniu gry okno wyniku i 
wznowienie.
2. Struktura labiryntu powinna być przechowywana w postaci tabeli liczb całkowitych. 
3. Każda z liczb określa wejścia / wyjścia dla danej komnaty labiryntu: wartości bitowe 
określają które drzwi można przejść. 1(2^0)-na lewo, 2(2^1)-na prawo, 4(2^2)-w górę, 
8(2^3)-w dół. 
4. Przejście w jedna stronę są dozwolone. 
5. Każda z komnat powinna być zaimplementowana jako jeden ekran z czterema przyciskami 
na jego krawędziach. Naciśniecie przycisku powoduje przejście do komnaty leżącej po 
stronie ekranu na którym leży przycisk. 
6. Określenie możliwości przejścia do sąsiedniej komnaty należy określić kolorem przycisku 
(można użyć elementów graficznych).
7. Zakończenie gry polega na dojściu do komnaty stopu określonej wartością 0. 
8. Komnata startowa ma ustawiony bit 4 (2^4). 

Przykład labiryntu:
{10, 8, 10, 9,
28, 1, 0, 12,
12, 10, 9, 13, 
6, 5, 6, 5}
2

Ale przecież to masz banalne wykorzystanie liczb dwójkowych... Masz labirynt opisany tak:

10 | 8 | 10 | 9
28 | 1 | 0 | 12
12 | 10 | 9 | 13
6 | 5 | 6 | 5

Każdą z tych liczb rozbijasz sobie na postać dwójkową np. korzystając z tabelki:

Liczba 24 23 22 21 20
16 8 4 2 1
Startowa W dół W górę W prawo W lewo
10 0 1 0 1 0
28 1 1 1 0 0

Dla każdej komnaty rozbijasz to w ten sposób, dla dwóch podanych masz już wiedzę, że:

10: ta komnata pozwala na przejście w dół i w prawo
28: ta komnata jest startowa i pozwala na przejście w dół i w górę

itd...

0

Heh, no tak teraz proste, dzięki :)
Wiesz jak ktoś się nie bawi często w takie łamigłówki to ciężko jest skojarzyć logikę działania ;)

0
jawka7 napisał(a)

Tak rozumiem już rozpisuje sobie kombinacja dla możliwości od 1 do 15, 0 jako koniec i x > 16 jako początkowy start a na starcie x-16 to pierwsza kombinacja przejść.

Ech, na pewno chcesz się tak bawić? A jak następnym razem dostaniesz trójwymiarowy labirynt będziesz rozpisywał 64 możliwości ruchu sprawdzając jeszcze startowa/końcowa na dodatek? Każdy język ma operatory bitowe, np. w taki prymitywny sposób można to zrobić w pythonie w ten sposób:

labirynt = [10, 8, 10, 9, 28, 1, 0, 12, 12, 10, 9, 13, 6, 5, 6, 5]

def rozpisz(liczba):
    print "komnata o wartosci", liczba, ":"
    if liczba & 1:
        print "\tw lewo"
    if liczba & 2:
        print "\tw prawo"
    if liczba & 4:
        print "\tw górę"
    if liczba & 8:
        print "\tw dół"
    if liczba & 16:
        print "\tstartowa"
    if liczba == 0:
        print "\tkoncowa"
        
if __name__ == '__main__':
    for komnata in labirynt:
        rozpisz(komnata)

Zobacz jak to się robi w języku, którego używasz a oszczędzi Ci to niepotrzebnej roboty z rozpisywaniem "kombinacji" i wychodzeniem od wykładowcy z ponurą miną :D

0

Ale przecież tak chciałem zrobić xd
pętla będzie sprawdzać pomieszczenie i pokazywać jakie ma dostępne ruchy
Zauważ to że nasz switch będzie miała nie 6 a 17 kombinacji (15 kombinacji klawiszy - bo komnata może mieć kilka dróg,
startowa większa od liczby 16 ponieważ gdyby było równe 16 to komnata byłaby jednocześnie startowa i koncową -> 28-16=12 czyli możliwość pójścia w dół lub górę z komnaty startowej i końcowa czyli 0

0
jawka7 napisał(a):

Zauważ to że nasz switch będzie miał nie 6 a 17 kombinacji (15 kombinacji klawiszy)

Ech... Bądź jednak łaskaw i przeczytaj mój powyższy post jeszcze raz (uważnie) - tu nie potrzeba żadnych 15 kombinacji + 2 startowa/końcowa!!! To co napisałem z tymi biednymi 6-cioma if-ami starczy za Twoje kilkanaście ;)

Wynik tego programu powyżej to coś takiego (zobacz, że uwzględnia wszystkie możliwości):

komnata o wartosci 10 :
	w prawo
	w dół
komnata o wartosci 8 :
	w dół
komnata o wartosci 10 :
	w w prawo
	w dół
komnata o wartosci 9 :
	w lewo
	w dół
komnata o wartosci 28 :
	w górę
	w dół
	startowa
komnata o wartosci 1 :
	w lewo
komnata o wartosci 0 :
	koncowa
komnata o wartosci 12 :
	w górę
	w dół
komnata o wartosci 12 :
	w górę
	w dół
komnata o wartosci 10 :
	w prawo
	w dół
komnata o wartosci 9 :
	w lewo
	w dół
komnata o wartosci 13 :
	w lewo
	w górę
	w dół
komnata o wartosci 6 :
	w prawo
	w górę
komnata o wartosci 5 :
	w lewo
	w górę
komnata o wartosci 6 :
	w prawo
	w górę
komnata o wartosci 5 :
	w lewo
	w górę
2

Szkoda, że prowadzący nie dał jeszcze opcji "na skos" w czterech kierunkach + na górę/w dół, wtedy byś zrozumiał, na czym polega problem z Twoim rozwiązaniem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1