Zmiany

Skocz do: nawigacji, wyszukiwania

Arkanoid

Dodane 1267 bajtów, 11:00, 7 lis 2014
[[Category:Scenariusze Scratch]] [[Category:Mistrzowie Kodowania]]
'''Materiały stworzone przez Fundację Coder Dojo Polska w ramach Programu „Mistrzowie Kodowania” finansowanego przez Samsung Electronics Polska, objęte licencją CC BY 3.0 PL "Creative Commons Uznanie Autorstwa 3.0 Polska".'''
== Cel projektu Informacje =====Cele===Celem projektu jest stworzenie gry zręcznościowej, polegającej na odbijaniu piłeczki tak , aby zbić wszystkie "klocki" na planszy , jednocześnie nie pozwalając piłeczce opaść poniżej "paletki".Projekt jest wersją popularnej gry [//en.wikipedia.org/wiki/Arkanoid "Arkanoid"]# Przypomnienie i utrwalenie poznanych wcześniej poleceń i konstrukcji języka Scratch# Wykorzystanie opcji dostępnej w Bloku [[Plik:Blok dane.png]]# Implementacja gry w środowisku Scratch
== Instrukcje =Poziom trudności i proponowane wersje ===Poziom trudności dla klas 4-6 ✪✪✰✰ Działający projekt [http://scratch.mit.edu/projects/26836173/ Arkanoid] Poziom trudności dla gimnazjum ✪✰✰✰ - przejdź do [[Arkanoid (wersja B)]] / Działający projekt [http://scratch.mit.edu/projects/26839468/ "Arkanoid wersja B"] === Orientacyjny czas realizacji===Orientacyjny czas realizacji jednej z proponowanych wersji: 2x 45minut == Etapy==Główne problemy postawione przed programistą ===:
# Jak zaprogramować sterowanie ruchem paletki?
# Jak zaprogramować odbijanie się piłeczki?
# Jak wychwycić moment "przegranej" ?
=== Instrukcja krok po kroku === ==== Duszek - Paletka ====
* Pierwszym krokiem implementacji naszej gry jest utworzenie duszka "Paletka" który odpowiedzialny będzie za odbijanie piłeczki.
<center>[[Plik:Button nowy duszek.jpg|wybierz ikonkę nowego duszka]]</center>
* Po wybraniu "nowy duszek" przy uzyciu użyciu kreatora duszków rysujemy paletkę (zwykły np.: prostokąt)
* Następnie ustawiamy startowe położenie paletki po starcie programu, oraz programujemy sterowanie paletką (, tj. ruch w lewo i prawo za pomocą strzałek - odbywa , odbywajacy się to poprzez zmienianie współrzędnej X) .
<center>[[Plik:Paletkanowy.jpgJPG]]</center>
==== Duszek - Piłeczka ====* Następnym krokiem jest utworzenie duszka "piłeczka" '''Wskazówka - analogicznie do paletki>''' W trybie wektorowym edytora graficznego, aczkolwiek tym razem tworzymy kółko zamiast prostokąta (trzymanie shiftu w trakcie rysowania do narysowania koła pomoże nam stworzyć idealnie okrągły kształt)wykorzystujemy narzędzie 'elipsa' jednocześnie trzymając włączony klawisz Shift.
* Aby gra mogła zadziałać potrzebujemy poruszającej się piłeczki. Aby wprawić ją w ruch potrzebujemy ustawić jej Skrypt duszka "Piłeczka" zawiera pozycję "startową", ustawić kierunek w którym ma się poruszać oraz prędkośćnp. Dodatkowo musimy zadbać o to aby odbijała się od krawędzi mapy oraz paletki. Ustawiamy więc piłeczkę na środku planszy : (x: 0 , y: 0) ustawiamy jej kierunek , informację na temat kierunku w którym ma się poruszać (spadanie, ale nie idealnie w dół (np. : 190 stopni)oraz prędkość jej poruszania. Dodatkowo ustawiamy odbicie od krawędzi sceny oraz od paletki.
<center>[[Plik:Kulka_pierwszy_krok.jpg]]</center>
* W tym momencie mamy zaimplementowaną podstawową mechanikę gry'''Uwaga:''' Istotnym atrybutem duszka "piłeczka" jest sposób obrotu. Nasza Aby uniknąć sytuacji, w której środek duszka nie znajduje się "idealnie po środku", ustawiamy sposób obrotu duszka w opcji "wokół własnej osi". Uchroni to przed sytuacją, w której piłeczka odbija odbijając się od ścian i od paletki, a gracz może sterować paletką wedle własnego uznania. Do kompletu funkcjonalności pozostało nam jeszcze oprogramować sytuacje wykona obrót powodując tym samym ponowne "przegranej" oraz dodać klocki, które gracz będzie musiał "zbijaćzderzenie"z paletką.
==== Porażka ====* Aby zaprogramować sytuację "porażki" potrzebujemy stworzyć kolejnego duszka, który będzie obejmował całą przesteń w której pojawienie się piłeczki będzie oznaczać porażkę.<center>[[Plik:Bottom pasek.jpg]]</center>* Po utworzeniu tego duszka dodajemy w skryptach piłeczki zdarzenie dotknięcia duszka "przestrzeni przegrywającej" powodujące zakończenie gry. <center>[[Plik:Pileczka dodaj przegranaObrot.jpg]]</center>
==== Klocki =Porażka - duszek ''pod paletką''===1* Jedną z możliwości zaprogramowania sytuacji "porażki" jest stworzenie duszka, który będzie obejmował całą przestrzeń poniżej duszka "paletka". Ostatnim elementem naszej gry są klocki które będziemy zbijać uderzeniami piłeczki. Analogicznie do Ten duszek pozostaje bez skryptu, ponieważ kod odpowiadający za nadanie informacji o położeniu piłki poniżej paletki tworzymy , umieszczony zostanie w skrypcie duszka (kształt oraz kolor dowolne wedle pomysłu programisty)''piłka''. <br />2. Aby nie powtarzać tej samej funkcjonalności wiele razy użyjemy kontrolki kopiującej duszki - dzieki temu tylko w jednym miejscu będziemy programować zachowanie klocka.<br />3. Tworzymy więc duszka<br /><center>[[Plik:Listaduszkow duszek1Bottom pasek.jpg]]</center><br />
4. Tak stworzony duszek odpowiadać będzie za tworzenie swoich klonów. * Ukrywamy Po utworzeniu tego duszka "rodzica"<br />* Ustawiamy startowe miejsce dodajemy w skryptach piłeczki zdarzenie dotknięcia duszka* 5 razy w pętli uruchamiamy instrukcje odpowiedzialne za stworzenie klonu oraz przesunięcie "rodzicaprzestrzeni przegrywającej" w prawo - aby każdy kolejny klon był przesunięty w prawo względem poprzedniego* Każdy z utworzonych klonów przy pomocy kontrolki ('kiedy zaczynam jako klon') dostaje końcową funkcjonalność klocka. tj: ♦ Pokaż klocekW prezentowanym projekcie,<br /> ♦ W momencie zetknięcia się z piłeczką wysyłamy do systemu informację o tym że wystąpiło zdefiniowane przez nas zdarze "hit_on_target"<br />takie położenie piłki powoduje zakończenie gry. <center>[[Plik:Duszek1 klonyPileczka dodaj przegrana.jpg]]</center>
5=== Duszki - Klocki ===1. To samo zdarzenie odbieramy Ostatnim elementem gry są klocki, zbijane uderzeniami piłeczki. Analogicznie do wcześniejszych duszków, klocki tworzymy w skrypcie pileczkiedytorze graficznym, dowolnie wybierając kształt oraz kolor. <br />2. Tworzymy duszka "Cel A"<br />[[Plik:Listaduszkow duszek1.jpg]]
3. Aby nie powtarzać tej samej funkcjonalności wiele razy, poprzez tworzenie wielu identycznych duszków, użyjemy kontrolki kopiującej duszki dostępne w Bloku [[Plik:Sklonuj.png]]. Dzieki temu, tylko w jednym miejscu będziemy programować zachowanie klocka.<centerbr />Tak stworzony duszek odpowiadać będzie za tworzenie swoich klonów. * Ustawiamy startowe miejsce duszka * 6 razy w pętli uruchamiamy instrukcje odpowiedzialne za stworzenie klonu oraz zmianę pozycji "rodzica" tak, aby każdy kolejny klon był przesunięty w prawo względem poprzedniego* Ukrywamy duszka "rodzica"<br />[[Plik:Koncowa pileczkaUkryj.jpgJPG]] * Każdy z utworzonych klonów przy pomocy kontrolki ('kiedy zaczynam jako klon') dostaje końcową funkcjonalność klocka. tj:<br /center>♦ Pokaż klocek,<br /> ♦ W momencie zetknięcia się z piłeczką wysyłamy do systemu informację o tym, że wystąpiło zdefiniowane przez nas zdarzenie "uderzenie w cel"<br />[[Plik:CelAnowy.JPG]] 5. To samo zdarzenie odbieramy w skrypcie piłeczki [[Plik:Kulka nowy.JPG]]
6. Tak zmieniony skrypt piłeczki (odbierającej wiadomość o zdarzeniu zetknięcia piłeczki z klockiem) zapewni nam efekt "odbicia" piłeczki od klocka.
==== Duszki - Kolejne klocki ====* Po zaprogramowaniu w ten sposób pierwszego duszka , tworzymy kolejnego - ''Cel B'', który będzie posiadać tą samą funkcjonalność, ale zmienimy mu inny wygląd - oraz pozycję startową - ten zestaw klocków będzie widniał wiersz wyżej.<center>[[Plik:Duszek2 kloc.jpg]] [[Plik:Duszek2 skrpy.jpg]]</center>* Oraz kolejnego który będzie posiadać 2 życia<center>[[Plik:Duszek2hp.jpg]][[Plik:Duszek3 skrpyCelBnowy.jpgJPG]]</center>
* Ten duszek Następnie tworzymy duszka ''Cel C'', który poza funkcjonalnością jakie posiadały , posiadaną przez pozostałe duszki poprzednie , ma również lokalną zmienną "hpuderzenie"odpowiedzialną za zbieranie informacji o ilości trafień piłki w cel. Ta opcja pozwala stworzyć klocki, których zbicie wymaga dwukrotnego uderzenia piłeczką (tzw. dwa życia)'''Uwaga:''' zmienna "uderzenie" jest widziana tylko dla danego duszka. Ustawienie tej zmiennej jako globalnej, widocznej dla wszystkich duszków, spowodowałoby, że już pierwsze trafienie w klocek z tą zmienną (Cel C) pomniejszałoby wartość ''uderzenie'' dla wszystkich duszków (czyli również dla Cel A i Cel B).Po każdym uderzeniu kulki hp zmienna zmniejsza się o jeden. Jeżeli wartość spadnie poniżej jednego 1., uznajemy , że klocek został "zbity" i go ukrywamy. Dodana jest również kontrolka "czekaj , aż nie dotyka kulka" , aby od razu po dotknięciu przez kulke odjąc hp kulkę odjąć ''uderzenie'' tylko o 1 i zaczekać , aż kulka się odbije - . Jest to konieczne, aby uniknąć sytuacji, w której jedno odbicie nie pomniejszało od razu całego hppomniejsza wartość zmiennej o więcej niż 1.
== Działający projekt ==[//scratch.mit[Plik:Cel Cnowy.edu/projects/25323412// ArkanoidJPG]]