Przedwczoraj skończył się konkurs Gynvaela Coldwinda na grę z kodem źródłowym nie większym niż 1234 bajty. Ktoś mógłby zapytać: ile można w 1234 bajtach zmieścić? Najwyraźniej dużo, bo zainteresowanie było całkiem spore. Mój ByteHero pewnie przepadnie gdzieś w gąszczu konkurencji, ale samo tworzenie gry było przednią zabawą. Fajnie jest spojrzeć na kod z innej strony: zamiast czytelnie, ma być maksymalnie krótko i prosto.

 

gra

Idealna gra na każdą imprezę!

 

Na czym polega ByteHero? Z dołu ekranu lecą cyferki, a my musimy wyklikać je w odpowiednim momencie na klawiaturze. Cała filozofia. Główną atrakcją gry jest utwór Akcentu – Przez Twe Oczy Zielone:

{12,2,0,0,3,0,5,0,6,6,5,6,0,6,5,6,0,3,0,8,0,10,0,11,0,0,0,0,3,0,0,0,0,0,8,0,6,0,5,5,3,5,0,5,3,5,0,5,0,3,0,2,0,5,0,3,-1}

To jest zapis utworu w kodzie. Fajny, nie? Pierwsza cyferka to tempo, druga to ilość powtórzeń całego fragmentu, potem mamy już samą piosnkę, takie pseudo-taby. 0 oznacza przerwę, brak dźwięku. A jak odtwarzane są poszczególne nutki? Przecież nie mogłem dołączyć do paczki plików mp3, więc skorzystałem z Beep. Beep to urocza funkcja z WinApi, która jako pierwszy argument przyjmuje częstotliwość dźwięku w hercach, za drugi czas trwania dźwięku w milisekundach, a efektem jest soczysty BEEEP z głośników. Skąd wiedziałem, jaką częstotliwość powinien mieć dany dźwięk? Z pomocą przychodzi ciocia Wikipedia:

Zmiana wysokości dźwięku o ton, odpowiada pomnożeniu jego częstotliwości w hercach przez {\displaystyle {\sqrt[{6}]{2}}\approx 1,122462}. Zmiana o półton odpowiada pomnożeniu częstotliwości o czynnik {\displaystyle {\sqrt[{12}]{2}}\approx 1,059463}. Zmiana o całą oktawę odpowiada pomnożeniu lub podzieleniu częstotliwości przez 2, np. a1 to 440 Hz, zaś z kolei a² odpowiada częstotliwości 880 Hz.

No i voilà! Po co komu szkoła muzyczna, gdy jest internet?

 

 

ByteHero robi też Beep z brzydką częstotliwością, gdy gracz trafi w zły dźwięk, albo nie trafi wcale. Trochę żałuję, bo zabrakło mi 30 bajtów, żeby zrobić jeszcze zaznaczanie na zielono udanych zagrań. Niestety, WinApi musi używać samych wielgaśnych nazw pokroju SetConsoleTextAttribute, a krótsze system(„Color AB”) okazało się ślamazarnie wolne.

Tutaj link do gry. Jeśli nie stać Cię na kupienie GuitarHero, to ByteHero będzie godnym zamiennikiem!

  • Did you like it?
  • Yes   No