kategoria: ANSI C
[#1] Kulki na Amidze
W końcówce lat 90 i na początku 2000 w moich kręgach popularna była gra kulki firmy MarBit na PC. Więc w ramach chęci nauczenia się programowania na amige postanowiłem stworzyć cos w tym z stylu. Robiłem wczesniej parę prób podejścia do programowania dla Amigi, najpierw w C, później w Blitzu, ţóźniej znowu z C, w miedzyczasie jeszcze oglądałem ten kurs assemblera. Jednak wszystko to szło strasznie mozolnie, czas poświecony był bardzo nieproporcjonalny do efektów. Z pomocą przyszedł w końcu ACE i wtedy zabrałem się do roboty na poważnie. Okazuje sie, że o wielu rzeczach nie muszę mieć pojęcia. Jakiś czas temu, któś pytał czego użyć obecnie do programowania na Amigę i wydaje mi się, że jest to najlepsza droga. POLECAM

Tak to obecnie wyglada:

Grafiki zrobił mój brat, czcionke zakosiłem z innej gry Last Minute Creations.:D

Zeby urchomić grę najelpiej odpalić system bez SS - u mnie na TF1260 nie chciało to działać bez takich sztuczek, natomiast może ktoś inny będzie miał więcej szczęścia.
DOWNLOAD - ITCH.IO

Gra polega na układaniu kulek w linie. Ułożenie 5 kulek w linii powoduje ich usunięcie. Linie można układać: pionowo, poziomo i na skos. Kulki muszą mieć dostęp do danego pola - inaczej 'nie przejdą'.

Działa w sumie wszytsko co miało działać. Wydaje mi się, że nie ma błędów z znajdowaniu linii, dodawaniu punktów, ale może coś mi umknęło.

Gra powinna się uruchomić na dowonlej Amidze z kickiem 1.3 i 0,5 chip.

Dodać by można było parę rzeczy - dźwieki, ruch kulki.

PS Powstała oczywiście juz tego typu gra na Amige, jednak miała ona pewne niedociagniecia https://aminet.net/package/game/misc/AmiLinesDLX

PPS Bardzo dziękuję też za pomoc KaiNowi, który chętnie odpowiadał na moje pytania.

Ostatnia aktualizacja: 07.01.2023 12:03:24 przez Mir3k
18
[#2] Re: Kulki na Amidze

@Mir3k, post #1

super zabijacz czasu
gdzieś to jeszcze mam na starym dysku :)


ps.
dlaczego NIE da się przestawić tej samotnej, czerwonej kulki?
wygląda na to, że jest zablokowana
:(



Ostatnia aktualizacja: 07.01.2023 03:42:48 przez Cezarykl
[#3] Re: Kulki na Amidze

@Cezarykl, post #2

Nie możesz jej ruszyć na lewą stronę, bo zrobiłeś mur. Dla kulki musi być przejście.
[#4] Re: Kulki na Amidze

@Mir3k, post #1

Bardzo fajna. Czysto i ładnie zrobiona, no i wspomnienia mi przywróciłeś!

Jeśli mam się czepiać, dodałbym jakąś płynność, animację, żeby te kulki przechodziły zamiast robić "flash" z jednej klatki na następną. Byłoby to wtedy bardziej organiczne.

Ale ogólnie dzięki, syn już nie daje mi jej wyłączyć...

I jeszcze. Jak Aneczka zdobyła punkty niepodzielne przez 10 :D

Ostatnia aktualizacja: 07.01.2023 08:30:54 przez miau
[#5] Re: Kulki na Amidze

@Cezarykl, post #2

Gratuluję sam kiedyś chciałem ją napisać na Amigę ale zawsze wybór padał na coś innego. Brakowało tego na Ami.

PS. Możesz napisać wymagania dla gry. Czy AGA /ECS, jaki proc, ile RAM minimum itd.

Ostatnia aktualizacja: 07.01.2023 08:28:13 przez tukinem
[#6] Re: Kulki na Amidze

@tukinem, post #5

Brakowało tego na Ami.


Ekhem, pamiętam przed ponad 20 laty jak na którymś z Coverów do Magazynu Amiga była gra o wdzięcznej nazwie "Kultura kulki zone". Na Aminecie mamy też "Kulki" z 1998 roku.
1
[#7] Re: Kulki na Amidze

@miau, post #4

1. Nie zdobyła - wpisałem z palca :D Swoją drogą zawsze się zastanawiałem jak w Gunship2000 gość na pierszym miejscu "Duty roster" miał 2 medale treningowe. Teraz juz wiem, że po prostu tak zrobili plik ;)

2. Mozna kasować po więcej niż 5 kulek w linii.
[#8] Re: Kulki na Amidze

@tukinem, post #5

Dopisałem, jednak gra po prostu powinna się uruchomić "na wszytskim" ;)
[#9] Re: Kulki na Amidze

@Mir3k, post #8

Ciekawi mnie jak rozwiązałeś algorytm szukający najkrótszej drogi dla przemieszczanej kulki. Niekiedy ma poblokowaną drogę tak mocno, że musi przejść niezły labirynt.
[#10] Re: Kulki na Amidze

@Mir3k, post #7

Jednak gierka źle zlicza punkty zdobyłem 486 punktów a rozjechało się przy 400 zamiast 410 naliczył 412.
Gierka uruchamia się na 060 ale musi być bez s-s. Można dać loadwb/endcli i uruchomić z ikonki.
Fajny zabijacz czasu OK
[#11] Re: Kulki na Amidze

@Mir3k, post #1

czcionke zakosiłem z innej gry Last Minute Creations.:D


Tak trzeba żyć. Gratulacje skończenia gry. To teraz możesz robić dune 3. ;)

Co do hostingu, to bym wywalił w czorty ten bytehost i założył stronę dla gry na itchu jak na prawdziwego kodera amigowego przystało. Raz że darmowy hosting, dwa że możesz ustawić "pay what you want" i może ktoś Ci nawet paczkę czipsów zafunduje.

Dodam jeszcze tylko że kolega Mir3k napisał do mnie po raz pierwszy 1.12 i mniej-więcej wtedy zaczął korzystać z ACE'a bo to były podstawowe pytania. Widać zrobienie takiej gry w miesiąc-półtora od podstaw nie stanowi problemu! Trzeba tylko chcieć!

Ostatnia aktualizacja: 07.01.2023 11:17:56 przez teh_KaiN
3
[#12] Re: Kulki na Amidze

@Alex, post #10

A na pewno nie skasowales 6 kulek?
[#13] Re: Kulki na Amidze

@Mir3k, post #12

A może w sumie nie zwróciłem na to uwagi.
[#14] Re: Kulki na Amidze

@tukinem, post #9

To nie jest algorytm, szukania najkrótszej drogi. Sprawdza czy dostępna jest jakakolwiek droga, pewnie da się to zrobić lepiej. Natomiast tak jest wystarczajaco dobrze w przypadku kulek.
canBallBeMoved oznacza wszystkie kafle jako niesprawdzone.
Następnie z kafla startowego, oznaczane są wszytskie sąsiadujące i jesli któryś z nich jest bez kulki to dla niego rekurencyjnie wykonujemy też taką analize pól sąsiadujących.
Tu jest kod


BOOL markAdjacentTiles(UWORD x, UWORD y, UWORD endX, UWORD endY, UWORD incomingDirection) {

    if (x > 0 && incomingDirection!=DIRECTION_RIGHT) {
        logWrite("Going left from %d %d to %d %d", x, y, x - 1, y);
        if (analyzeTile(x - 1, y, endX, endY, DIRECTION_LEFT)) {
            return TRUE;
        }
    }

    if (x < BOARD_SIZE - 1 && incomingDirection!=DIRECTION_LEFT) {
        logWrite("Going RIGHT from %d %d to %d %d", x, y, x + 1, y);
        if (analyzeTile(x + 1, y, endX, endY, DIRECTION_RIGHT)) {
            return TRUE;
        }
    }

    if (y > 0 && incomingDirection!=DIRECTION_DOWN) {
        logWrite("Going UP from %d,%d to %d,%d", x, y, x, y - 1);
        if (analyzeTile(x, y - 1, endX, endY, DIRECTION_UP)) {
            return TRUE;
        }
    }
    if (y < BOARD_SIZE - 1 && incomingDirection!=DIRECTION_UP) {
        logWrite("Going DOWN from %d %d to %d %d", x, y, x, y + 1);
        if (analyzeTile(x, y + 1, endX, endY, DIRECTION_DOWN)) {
            return TRUE;
        }
    }

    return FALSE;
}

BOOL canBallBeMoved(UWORD startX, UWORD startY, UWORD endX, UWORD endY) {

    for (int i = 0; i < BOARD_SIZE; ++i) {
        for (int j = 0; j < BOARD_SIZE; ++j) {
            board[i][j]->IsAlreadyAnalyzed = FALSE;
        }
    }

    board[startX][startY]->IsAlreadyAnalyzed = TRUE;

    return markAdjacentTiles(startX, startY, endX, endY, DIRECTION_START);

}

BOOL analyzeTile(UWORD x, UWORD y, UWORD endX, UWORD endY, UWORD direction) {
    if (x == endX && y == endY) {
        return TRUE;
    }

    if (!board[x][y]->IsAlreadyAnalyzed) {
        board[x][y]->IsAlreadyAnalyzed = TRUE;
        if (board[x][y]->BallColor == NO_BALL) {
            return markAdjacentTiles(x, y, endX, endY, direction);
        } else return FALSE;
    }

    return FALSE;
}


Duzo ciekawszy przykład znajduje się w grze germz - tam wykonana jest implementacja A*, która szuka sciezek, odkładając kolejne kafle na sterte, dzięki czemu moze sobie takie poszukiwanie sciezki rozdzielić na poszczególne klatki.
https://github.com/Last-Minute-Creations/germz/blob/master/src/astar.c
1
[#15] Re: Kulki na Amidze

@Mir3k, post #14

ciężko rozeznać mi się w C, musiałbym sobie to rozpisać powoli w Basicu
[#16] Re: Kulki na Amidze

@Mir3k, post #1

W tę odmianę "Kulek" jeszcze nie grałem. Gratuluję ukończenia projektu.
[#17] Re: Kulki na Amidze

@miau, post #3

Nie możesz jej ruszyć na lewą stronę, bo zrobiłeś mur. Dla kulki musi być przejście.

faktycznie, zapomniałem.

windowskie kulki skakały przemieszczając się, a tu nie za baŁdzo,
no i dużo wódy upłynęło w rzece, skleroza nie boli.


Ostatnia aktualizacja: 07.01.2023 21:04:45 przez Cezarykl
[#18] Re: Kulki na Amidze

@Mir3k, post #1

Fajne. Super że przypomniałeś starą grę.

Swego czasu Xtd napisał wersję tej gry (którą nazwał... Kradwaty), i jeszcze dodał kilka bajerów.
1
[#19] Re: Kulki na Amidze

@tukinem, post #15

Jakby co, to mam gotową implementację algorytmu A* w AMOSie, myślę że łatwiej Ci będzie się w tym rozeznać niż w C.
1
[#20] Re: Kulki na Amidze

@Ralpheeck, post #18

ModuleInfo 1.5e może ktoś bardziej wyjaśnić co ten program robi ?
[#21] Re: Kulki na Amidze

@djpiotrs, post #20

To program do optymalizacji modów. Jak masz już gotowy moduł, to dzięki niemu przytniesz sample, zredukujesz wielkość o parę kb.
[#22] Re: Kulki na Amidze

@Ralpheeck, post #21

Z muzyką na Amidze zaznajamiam się powoli i od niedawna. Przyszły czasy że nie dość że jesteś programistą to musisz być jeszcze grafikiem i muzykiem ale jest fajnie tkwić w hobby.
[wyróżniony] [#23] Re: Kulki na Amidze

@tukinem, post #5

Brakowało tego na Ami.

Ja kojarzę trzy wersje Kulek na taką czy inną Amigę.

"Kulce" na Amigę są od 2004 roku na Aminecie (także osobna wersja dla MorphOS).
http://aminet.net/search?query=kulce

Do tego są jeszcze jakieś Kradwaty napisane w epoce przez XTD:
https://www.xtdmusic.eu/?sel=progs

Na MorphOS też są Kulki (autorem jest znany nam Widelec). Gdy wyszła wersja 1.0 to skomentowałem, że bardzo chciałbym mieć opcję "cofnij", bo używam w wersji gry dla iOS. No i zaraz wyszła wersja 1.1 z funkcją "undo". Nie wiem czy to przypadek czy nie ale teraz jest wyyypas i można dziubać czekając na koniec kompilacji.
https://www.morphos-storage.net/?id=1777435

Ostatnia aktualizacja: 08.01.2023 21:55:46 przez MDW
1
[#24] Re: Kulki na Amidze

@Mir3k, post #1

Gratulacje z ukończonego projektu. Chwilę nawet pograłem.OK
Na stronie www.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem