![]() |
Wyjście Spis treści Poprzedni Następny
Autor: mgr Jerzy Wałaszek, wersja 3.0 |
©2008 mgr
Jerzy Wałaszek
|

W latach 70-tych ubiegłego wieku istniała popularna zabawa logiczna zwana Grą w Piętnastkę. Oryginał zbudowany jest w kształcie kwadratu, wewnątrz którego mieści się 15 przesuwnych segmentów. Na segmentach nadrukowane są kolejne liczby od 1 do 15. Jedno pole zawsze jest puste i można na nie przesunąć sąsiedni segment.
|
W naszej wersji gry na segmentach umieścimy kolejne literki alfabetu od A do O. Dzięki temu znacznie uprości się nam algorytm - będziemy sprawdzać teksty zamiast liczb. Całość planszy przechowamy w zmiennej łańcuchowej o długości 16 znaków, gdzie każdy znak będzie reprezentował ruchomy segment Problemem jest jedynie przeliczanie współrzędnej segmentu na położenie wewnątrz zmiennej łańcuchowej. Przyglądnijmy się rozkładowi współrzędnych, aby wyprowadzić odpowiednie wzory:
|
1 |
2 |
3 |
4 |
|
|---|---|---|---|---|
|
1 |
1 |
2 |
3 |
4 |
|
2 |
5 |
6 |
7 |
8 |
|
3 |
9 |
10 |
11 |
12 |
|
4 |
13 |
14 |
15 |
16 |
U góry i z lewej strony mamy odpowiednio współrzędne segmentu na polu gry. Wewnątrz, kolorem czerwonym wypisano położenie danego segmentu w zmiennej łańcuchowej. Np. segment w trzecim wierszu i drugiej kolumnie znajduje się na pozycji 10.
Mamy dane współrzędne x (w poziomie) i y (w pionie) elementu na planszy. Chcemy znaleźć jego położenie wewnątrz zmiennej łańcuchowej. Stosujemy następujący wzór:
p := 4 * (y - 1) + x; |
Sprawdźmy, x = 3; y = 4; p = (4-1) * 4 + 3 = 15 - zgadza się.
Teraz sytuacja odwrotna. Mamy położenie w zmiennej łańcuchowej, chcemy znaleźć współrzędne segmentu na planszy. Wzory są następujące:
x := 1 + (p - 1) mod 4; y := 1 + (p - 1) div 4; |
Sprawdźmy, p = 11; x = 1 + (11-1) mod 4 = 3; y = 1 + (11-1) div 4 = 3 - zgadza się.
Dzięki podanym wzorom możemy bez problemu odwzorować zmienną
łańcuchową w pole gry. Dlaczego stosujemy zmienną łańcuchową, a nie np.
Przy wyświetlaniu segmentów na ekranie musimy otrzymane
współrzędne odpowiednio przekształcić. Każdy segment będzie wyświetlony w
postaci matrycy
| (33,6) | |||||
| A | B | C | D | ||
| E | F | G | H | ||
| I | J | K | L | ||
| M | N | O | |||
Ustalamy, iż pierwszy segment rozpocznie się na współrzędnych: kolumna 33 i wiersz 6. Każdy następny w poziomie i w pionie będzie odległy odpowiednio o 4 kolumny i wiersze. Stąd wzory na kolumnę i wiersz są następujące:
k := 33 + 4 * ((p - 1) mod 4); w := 6 + 4 * ((p - 1) div 4); |
Kolejnym zagadnieniem jest sterowanie grą. Wykorzystamy klawisze kursora, których odczyt jest identyczny jak w grze w Pole Minowe. Klawisze kursora będą sterowały segmentami przyległymi do pustego pola na planszy. Np. naciśnięcie strzałki w dół spowoduje ruch na puste pole segmentu górnego. Oczywiście ruch zostanie wykonany o ile jest możliwy - tzn. istnieje segment, który można w tym kierunku przesunąć. Segmenty będziemy przesuwać wykorzystując wzory przeliczeniowe pozycji segmentu na planszy. Współrzędne x i y odnoszą się do pozycji pustego miejsca:
Przy wykonywaniu przesunięć musimy sprawdzać odpowiednie warunki istnienia segmentu. Jeśli będą spełnione, to wyznaczamy pozycję przesuwanego segmentu w zmiennej łańcuchowej, przenosimy umieszczony tam znak na miejsce puste, a na pozycji segmentu umieszczamy spację.
![]() | I Liceum Ogólnokształcące |
Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl
W artykułach serwisu są używane cookies. Jeśli nie chcesz ich otrzymywać,
zablokuj je w swojej przeglądarce.
Informacje dodatkowe