Logiczna gra z owockami

Mój w założeniu miesięczny projekt przeciągnął się do pół roku, a do zrobienia zostało mi jeszcze dużo. Główne mechaniki są już sfinalizowane i zrobiłem już setki poziomów, więc dzielę się grą ze Światem, bo naprawdę jest w co pograć.

Chciałem zrobić od podstaw zupełnie nową grę logiczną, z mechaniką jakiej jeszcze nigdy nie spotkałem. Łatwo skopiować czyjąś sprawdzoną i szeroko przyjętą mechanikę i zrobić dzięki temu w miarę grywalną gierkę. Moje podejście było jednak odmienne. Wziąłem koncepcję, którą wszyscy znają i zaprojektowałem do niej własne zasady, które są nie tylko ciekawe, ale też pozwalają na utworzenie całego spektrum poziomów trudności. W swojej grze mam poziomy bardzo proste i podstawowe, poprzez średniej trudności, na trudnych i bardzo trudnych kończąc. Plansza gry wypełniona jest owocami, które trzeba zbić, ale zbija się je w nietypowy sposób.

Klikasz na owocka i w ten sposób zaznaczasz go. Następnie klikasz na drugiego takiego samego owocka, który znajduje się w tej samej linii. Może to być ta sama kolumna, wiersz albo przekątna. Po kliknięciu drugiego owocka, te dwa owocki, oraz wszystkie pomiędzy nimi, znikają.

Na poniższym przykładzie zaznaczam kokosa w prawym górnym rogu.

Następnie, po kliknięciu na dolnego prawego kokosa – wisienki, kokos oraz banan znajdujące się pomiędzy dwoma wybranymi przeze mnie kokosami zostają zbite razem z nimi.

Można zbijać owoce na różne sposoby, w różnej kolejności i różnie dobierać pary owoców, przez co powstaje multum możliwości. Proste plansze można przejść na wiele różnych sposobów. W trudniejszych planszach trzeba więcej pomyśleć, bo losowe klikanie może szybko doprowadzić nas do sytuacji, w której na planszy zostaną nam owoce nie do zbicia. Żeby przejść poziom i otrzymać trzy gwiazdki, trzeba zbić wszystkie owoce.

W grę jak na razie grało około 80 osób i odzew od nich był naprawdę pozytywny, więc zachęcam do zagrania 🙂 Można zagrać na komputerze, tablecie czy telefonie. Jest to gra na przeglądarkę. Podczas jej tworzenia używałem przeglądarki Chrome i wiem, że gra działa dobrze zarówno na komputerowej wersji Chrome jak i na mobilnej na Androidzie.

Zagraj pod adresem:

owocki.tymski.pl

 

 

All Play Game Jam

Poznańska Gildia Graczy oraz Koło Naukowe Pyra to główni organizatorzy Game Jamu „All Play”, który odbył się w Poznaniu 02-05/grudnia/2016. Gry wykonane na tym game jamie, z założenia przystosowane są dla jak największego grona odbiorców. Gry są dostępne dla graczy niepełnosprawnych dzięki zastosowaniu na przykład alternatywnych kontrolerów takich jak Eye Trackery śledzące wzrok gracza, albo dodatkowe większe przyciski podłączane do portu USB. Gry wykorzystują palety barwne odpowiednie dla osób ze ślepotą barwną, bądź komplementują barwy symbolami, aby gracze mogli bez przeszkód rozróżnić szczegóły plansz rozgrywki. Niektórzy developerzy całkowicie zrezygnowali z obrazu, na rzecz gier głosowych, a inni na nowo przemyśleli sterowanie swoich gier, aby większa liczba osób mogła czerpać przyjemność z ich dzieł.

W mojej grze można ćwiczyć śledzenie ruchu, reagowanie na pojawiające się koła, trafianie w nieporuszające się albo ruchome obiekty. Zasady gry można zmienić podczas trwania rozgrywki. Można zmieniać dynamikę kół, albo metodę ich zbijania.

Koło i powiększony wskaźnik

Zwiększenie dostępności mojej gry:

  • Sterowanie w grze może odbywać się za pomocą jednej ręki.
  • Elementy interaktywne wyróżniają się od tła przez co są lepiej widoczne dla osób ze słabszym wzrokiem.
  • Łatwo zmienić wielkość wskaźnika.
  • Elementy gry są duże, aby ułatwić graczowi interakcje.
  • Umiejętność rozróżniania kolorów w grze nie jest istotna dla rozgrywki.
  • Ilość elementów na polu gry można dostosować indywidualnie dla każdego gracza.
  • Dźwięki nie stanowią istotnego elementu rozgrywki, ale mogą być pomocne dla osób z wadami wzroku.

Sterowanie i kontrola:

Do klikania w kółka, możesz używać myszy, tabletu graficznego lub palca w przypadku ekranów dotykowych.

Z powodu ograniczonego czasu implementacji, nie udało mi się stworzyć interfejsu graficznego, przez co do zmiany parametrów i zasad gry trzeba używać skrótów klawiaturowych.

  • ] – zwiększ rozmiar wskaźnika
  • [ – zmniejsz rozmiar wskaźnika
  • c – rozpocznij challenge
  • spacja – dodaj nowe koło do pola gry (maksymalnie 50)
  • 1 – nowe koła będą pływać po planszy
  • 2 – nowe koła będą spadać z góry
  • 3 – dotknięcie koła powiększa wskaźnik
  • Enter – nie trzeba klikać
  • z – włącza tryb klikania na kółka (jedno kliknięcie działa maksymalnie na jedno koło)(działa w trybie gry 1 i 2)
  • x – wyłącza powyższy tryb
  • m – wycisza dźwięki
  • F11 – (skrót przeglądarki) włącza tryb pełnoekranowy
  • F5 – (skrót przeglądarki) odświeża przeglądarkę całkowicie resetując wszelkie ustawienia
  • e, c – zacznij wyzwanie z łatwiejszymi ustawieniami
  • h, c – zacznij wyzwanie z trudniejszymi ustawieniami

kliknij aby zagrać

Plansza gry "klikanie kółek"

Linki zewnętrzne:

PGG JAM: ALL PLAY

Jump – gra przeglądarkowa

Screenshots from game jump by Tymon Oziemblewski

Jump – gra w której wcielamy się w małą skaczącą świnkę. Zbieramy różne bonusy napotkane na naszej  pełnej wrogów ścieżce. Staramy się wskoczyć jak najwyżej, jednak nie jest to łatwe, bo im wyżej się wdrapiesz, tym rozgrywka staje się trudniejsza.

Sterowanie:
Strzałki na boki albo klawisze: [A][D] – ruch w lewo i prawo.Strzałka w górę, klawisz [W] albo [spacja] – strzał ognistą kulą.

Bonusy:
• Duża strzałka: jeden ogromny skok.
• Mała strzałka: jeden duży skok.
• Dwie małe strzałki: dwa duże skoki jeden po drugim.
• +250: Dodatkowe dwieście pięćdziesiąt punktów.
• 2x: Podwaja wszystkie zdobywane punkty, np. zmienia +250 na +500.

Przeciwnicy:
• Smok – jeśli zderzysz się ze smokiem, odpycha Cię on z dużą siłą aby zepchnąć Cię z planszy.
• Pająk – przy zderzeniu z siecią zostajesz w nią złapany. Następnie pająk zatruwa Cię, zadając obrażenia periodyczne i powstrzymuje regenerację zdrowia na około 10 sekund.

Pokonywanie przeciwników:
Strzel kulą ognia do przeciwnika aby go usmażyć.
Smoka można zabić również skacząc mu na głowę.
Zabicie smoka: 50 punktów.
Zabicie pająka: 35 punktów.

Punkty życia:
• Masz 100 punktów życia, które regeneruje się powoli w przypadku gdy je stracisz.
• Spadnięcie zabiera 60pkt. życia,
• Uderzenie przez smoka zabiera 45pkt. życia,
• Trucizna zabiera 2,7pkt. zdrowia na sekundę i działa przez 10 sekund od momentu uwolnienia się z pajęczyny.

Mana:
Posiadasz 100 punktów many, która regeneruje się w tempie 6 pkt. na sekundę (3pkt/sek jeśli jesteś zatruty przez pająka).
Strzał kulą ognia kosztuje 35 pkt. many.

Kliknij tutaj aby zagrać.

Allegro.js

Czym jest Allegro.js?

Allegro.js to biblioteka JavaScript napisana przez Sosa Sosowskiego. Przepisał on stare, poczciwe Allegro4, aby można było go używać do pisania gier przeglądarkowych, kompatybilnych z HTML5. Nasze aplikacje zadziałają więc na komputerze, smartfonie i tablecie. Na stronie domowej biblioteki, możemy przeczytać, że allegro.js nie jest zorientowane obiektowo oraz że można używać go za darmo. Jest tam też dostępny tutorial.

Pong

Moja pierwsza gra w allegro.js to prosty Pong, inspirowany między innymi grą Jardinains. Poruszamy się paletką za pomocą strzałek i staramy się zdobyć jak najwięcej punktów odbijając spadające klocki. Im dłużej odbijamy konkretny klocek, tym więcej punktów on daje. Po kilku odbiciach dostajemy też bonus – poszerzenie paletki lub dodatkowe punkty.

Aby zagrać, kliknij w ten link.

Skrót implementacji

Implementacja używa zwykłych tablic, w których znajdują się struktury. Dla przykładu tablica klocki[] posiada pola: x, y, vx, vy, width, height zapamiętujące pozycję, prędkość i rozmiar każdego klocka. Dodatkowo w strukturze mam zmienne boolowskie(prawda albo fałsz), aby sprawdzić, czy klocek jest zbity.

Kolizje ze ścianami bocznymi: Jeśli klocek wyleciał za daleko, czyli jego pozycja w osi X, jest większa od szerokości ekranu lub jest mniejsza od zera, mnożę jego prędkość razy minus jeden, przez co klocek zawraca, gdy spotyka krawędź ekranu.

Kolizja klocka z paletką nie jest aż tak prosta. Musimy bowiem nadać klockowi pewną prędkość zależną od miejsca, w którym zderzył się z paletką. Im bliżej środka rakietki, tym mniejszy kąt odbicia (klocek.vx zależy od klocek.x-paletka.x).
Samo sprawdzenie czy kolizja wystąpiła, można przeprowadzić następująco:

 

Enkapsulacja – co to takiego?

Enkapsulacja (hermetyzacja) jest pojęciem z dziedziny programowania obiektowego.
Chodzi w niej o to, aby ukryć przed użytkownikiem to, co nie jest dla niego istotne.
np. jeśli chcemy sprawdzić numer seryjny produktu, to wywołujemy metodę wyświetlającą ten numer na ekranie, zamiast martwić się czy jest on przechowywany w pamięci jako int, czy może string, a potem używać funkcji wyświetlającej odpowiedni typ danych.

Enkapsulacja jest to zaimplementowanie modelu, w którym obiekty mają przydatne metody, a parametry wewnętrzne są ukrywane, bo wiedza o nich nie przydaje się do niczego.
Dla przykładu, weźmiemy sobie stos. Istotne jest dla nas to, że do stosu możemy dodać element na górę i że możemy zdjąć pierwszy element z góry, nie interesuje nas jak nazywa się zmienna wewnątrz klasy.

Prawdziwe korzyści wynikające z użycia enkapsulacji zauważymy w szczególności w dużych projektach, ale już w małych zobaczymy, że kod będzie bardziej czytelny i lepiej zorganizowany.

Enkapsulacja pozwala nam operować na danych w sposób bliższy do rzeczywistości, na bardziej naturalnym poziomie abstrakcji.


Dla przykładu podajmy obiekt „Piłka” oraz dwa podejścia programistyczne, których opiszemy prostą animację toczącej się piłki.

  • Podejście podstawowe, proceduralne:
    Tworzymy dwie zmienne liczbowe: pozycja_piłki oraz rotacja_piłki. Jeśli chcemy sprawić aby piłka się poturlała, napiszemy coś w tym rodzaju:
    pozycja_piłki++;
    rotacja_piłki++;
    Dla kilku piłek, będziemy musieli napisać pętlę:
    for( int i = 0 ; i < liczba_piłek ; i++ ){
    pozycja_piłki[i]++;
    rotacja_piłki[i]++;
    }
    Jeśli ten kod umieścimy w odpowiedniej pętli (wykonującej się kilka razy na sekundę), możemy utworzyć prostą animację z piłkami toczącymi się po ekranie.
  • Z użyciem enkapsulacji kod będzie wyglądał tak:
    piłki.turlaj();

Więcej w temacie: Hermetyzacja(enkapsulacja) – Wikipedia, wolna encyklopedia

Krzywe Lissajous

Aby utworzyć krzywą Lissajous[wymawia się „lisażu”] możemy użyć dwóch wahadeł (ciężarków na sznurku), albo użyć modelu matematycznego do stworzenia komputerowej reprezentacji takich krzywych.

Eksperyment rysujący krzywe:
Kawałek sznurka przymocowujemy do stojaka. Na końcu sznurka przymocowujemy ciężarek. Do ciężarka przymocowujemy sznurek, a na jego końcu drugi ciężarek.
Odchylamy oba ciężarki od położenia równowagi, pierwszy ciężarek ma być odchylony w płaszczyźnie prostopadłej do płaszczyzny ruchu drugiego.
Ruch niższego ciężarka będzie zakreślał coś w rodzaju krzywej Lissajous.

W języku C++, napisałem program wyliczający pozycję wahadła matematycznego w zależności od czasu. Jedno wahadło zmieniało swoją pozycję w osi x, drugie w osi y. Do wyrysowania krzywych w czasie rzeczywistym, użyłem biblioteki graficznej Allegro. Złożenie ruchów dwóch wahadeł pozwalało rysować krzywe na ekranie.

Wygląd krzywych zależał od parametrów początkowych programu, amplitudy, fazy i częstotliwości drgań. Bawiąc się parametrami utworzyłem następujące obrazy:

W rezultacie uzyskałem ciekawe wzory, ale postanowiłem nieco je urozmaicić. W tym celu zmodyfikowałem nieco kod programu, uzależniając funkcyjnie (zwykłą funkcją liniową) amplitudę drgań wahadła od czasu.

Jeśli chcesz, abym dokładniej wyjaśnił coś z tego tematu  możesz zostawić komentarz. 🙂

Prosta gra konsolowa ze zgadywaniem liczb.

W grze naszym celem jest zgadywanie liczb z przedziału od 0 do 1000.
Komputer losuje nam liczbę np.(358). My wpisujemy np. 500 po czym otrzymujemy zwrotną informację, czy nasza liczba jest większa, czy mniejsza od wylosowanej: ‚500 to za dużo’.
Po zgadnięciu liczby otrzymujemy punkty według wzoru: ( 10 – liczba strzałów ) * 10.
Po zdobyciu 100 punktów wygrywamy grę.
Grę zaimplementowałem w języku ruby

Mastermind 1.0 – konsolowa gra w języku Ruby

Mastermind 1.0

W grze chodzi o odgadnięcie ukrytego kodu, przy czym komputer zlicza nam ilość prób po której odgadniemy kod.

Taki kod składa się z 4 cyfr od 1 do 4 (cyfry mogą się powtarzać)
Kod jest generowany przez komputer i może wyglądać jak jeden z poniższych:
– 2134
– 4223
– 1332

W pierwotnej wersji gry było maksymalnie 10 prób, a w mojej można zgadywać ile razy się chce. Ale skąd mamy wiedzieć, jak zgadywać aby wygrać? Wykorzystujemy informacje zwrotne od komputera.
Załóżmy sobie, że komputer wylosował kod: 3214
My wpisujemy np. 1234 i w odpowiedzi otrzymujemy ilość cyfr, które występują w kodzie (4) i ile z nich znajduje się na dobrym miejscu (2)
1234 4 2
1324 4 1
1243 4 1
2134 4 1
3214 4 4

Inny przykład:
1234 3 3
2244 2 1
1231 3 3
1232

Odgadłeś kod po 4 próbach.

Grę napisałem w języku ruby. Składa się ona z dwóch plików, o następującym kodzie:

Zmiana poziomu trudności gry:
Aby zmienić długość kodu do zgadnięcia i/lub ilość cyfr z jakich ma się on składać wystarczy w pliku Code.rb zmienić
@@length = 4
@@complexity = 4
na wybrane przez siebie liczby, z tym że:
długość(length) ma być większa od zera,
a druga liczba(poziom skomplikowania) musi być cyfrą większą od zera. Jeśli zmienisz complexity na liczbę dwucyfrową albo większą, program nie będzie działał poprawnie.

Jak uruchomić Mastermind (system windows)?
Instalacja:

Potrzebujesz zainstalować ruby na swoim komputerze.
Można pobrać za darmo z: http://rubyinstaller.org​/downloads/
Zainstaluj odpowiednią dla siebie wersję (polecam pierwszą z góry).

Na pulpicie utwórz katalog „Mastermind„, w którym stworzysz pliki „Code.rb” oraz „Game.rb„.
Przekopiuj do nich powyższy kod.

W systemowej wyszukiwarce wpisujemy cmd. Naszym oczom powinno ukazać się „Wiersz Polecenia” oraz „Start Command Prompt with Ruby”, w które klikamy.
Powinna wyświetlić się nam konsola.
Przechodzimy do miejsca, gdzie mamy naszą grę. Jak?
Polecenie cd Desktop powinno przenieść nas do pulpitu.
Następnie cd Mastermind przeniesie nas do katalogu Mastermind
Wystarczy już wpisać: ruby Game.rb Gra powinna już chodzić. 🙂
W tej wersji, po wygranej, gra nam się wyłączy, aby zagrać jeszcze raz naciśnij strzałkę do góry a następnie enter (w ten sposób wykonasz ostatnie polecenie jakie wpisałeś w konsolę, czyli ruby Game.rb)

Jak widać, ta gra ma prostą budowę, jednak jest wymagająca intelektualnie.