Zmiany

Arkanoid

Dodane 1285 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 użyciu kreatora duszków rysujemy paletkę (np.: prostokąt) * Następnie ustawiamy startowe położenie paletki, oraz programujemy sterowanie paletką, tj. ruch w lewo i prawo za pomocą strzałek, odbywajacy się poprzez zmienianie współrzędnej X.  [[Plik:Paletka nowy.JPG]] === Duszek - Piłeczka ===* Następnym krokiem jest utworzenie duszka "piłeczka"'''Wskazówka ->''' W trybie wektorowym edytora graficznego, do narysowania koła wykorzystujemy narzędzie 'elipsa' jednocześnie trzymając włączony klawisz Shift.
* Po wybraniu Skrypt duszka "nowy duszekPiłeczka" przy uzyciu kreatora duszków rysujemy paletkę zawiera pozycję "startową" np.: (x: 0 , y: 0), informację na temat kierunku w którym ma się poruszać (zwykły prostokątspadanie, np.: 190 stopni)oraz prędkość jej poruszania. Dodatkowo ustawiamy odbicie od krawędzi sceny oraz od paletki.
* Następnie ustawiamy startowe położenie paletki po starcie programu, oraz programujemy sterowanie paletką (ruch w lewo i prawo za pomocą strzałek - odbywa się to poprzez zmienianie współrzędnej X) [[Plik:Kulka_pierwszy_krok.jpg]]
<center>[[Plik'''Uwaga:Paletka''' Istotnym atrybutem duszka "piłeczka" jest sposób obrotu. 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 odbijając się od paletki, wykona obrót powodując tym samym ponowne "zderzenie" z paletką.jpg]]</center>
==== Piłeczka ====* Następnym krokiem jest utworzenie duszka "piłeczka" - analogicznie do paletki, aczkolwiek tym razem tworzymy kółko zamiast prostokątu (trzymanie shiftu w trakcie rysowania koła pomoże nam stworzyć idealnie okrągły kształt)[[Plik:Obrot.jpg]]
=== Porażka - duszek ''pod paletką''===* Aby gra mogła zadziałąć potrzebujemy poruszającej się piłeczki. Aby wprawić ją w ruch potrzebujemy ustawić jej pozycję Jedną z możliwości zaprogramowania sytuacji "startowąporażki"jest stworzenie duszka, ustawić kierunek w którym ma się poruszać oraz prędkośćktóry będzie obejmował całą przestrzeń poniżej duszka "paletka". Dodatkowo musimy zadbać Ten duszek pozostaje bez skryptu, ponieważ kod odpowiadający za nadanie informacji o to aby odbijała się od krawędzi mapy oraz położeniu piłki poniżej paletki. Ustawiamy więc piłeczke na środku planszy (x: 0 , y: 0) ustawiamy jej kierunek na spadanie, ale nie idealnie umieszczony zostanie w dół (npskrypcie duszka ''piłka''. 190 stopni)[[Plik:Bottom pasek.jpg]]
<center>* Po utworzeniu tego duszka dodajemy w skryptach piłeczki zdarzenie dotknięcia duszka "przestrzeni przegrywającej". W prezentowanym projekcie, takie położenie piłki powoduje zakończenie gry. [[Plik:Kulka_pierwszy_krokPileczka dodaj przegrana.jpg]]</center>
* W tym momencie mamy zaimplementowaną podstawową mechanikę gry=== Duszki - Klocki ===1. Nasza piłeczka odbija się od ścian i od paletkiOstatnim elementem gry są klocki, a gracz może sterowac paletką wedle własnego uznaniazbijane uderzeniami piłeczki. Do kompletu funkcjonalności ozostało nam jeszcze oprogramować sytuacje "przegranej" oraz dodać Analogicznie do wcześniejszych duszków, klocki które gracz będzie musiał tworzymy w edytorze graficznym, dowolnie wybierając kształt oraz kolor. <br />2. Tworzymy duszka "zbijaćCel A"<br />[[Plik:Listaduszkow duszek1.jpg]]
==== Porażka ====* 3. Aby zaprogramować sytuację "porażki" potrzebujemy stworzyć kolejnego duszkanie powtarzać tej samej funkcjonalności wiele razy, który będzie obejmował całą przesteń poprzez tworzenie wielu identycznych duszków, użyjemy kontrolki kopiującej duszki dostępne w której pojawienie się piłeczki będzie oznaczać porażkę.<center>Bloku [[Plik:Bottom pasekSklonuj.jpgpng]]. Dzieki temu, tylko w jednym miejscu będziemy programować zachowanie klocka.<br /center>Tak stworzony duszek odpowiadać będzie za tworzenie swoich klonów. * Po utworzeniu tego Ustawiamy startowe miejsce duszka dodajemy * 6 razy w skryptach piłeczki zdarzenie dotknięcia duszka pętli uruchamiamy instrukcje odpowiedzialne za stworzenie klonu oraz zmianę pozycji "przestrzeni przegrywającejrodzica" powodujące zakończenie gry. tak, aby każdy kolejny klon był przesunięty w prawo względem poprzedniego* Ukrywamy duszka "rodzica"<centerbr />[[Plik:Pileczka dodaj przegranaUkryj.jpgJPG]]</center>
==== Klocki ====1. Ostatnim elementem naszej gry są klocki które będziemy zbijać uderzeniami piłeczki. Analogicznie do paletki tworzymy duszka * Każdy z utworzonych klonów przy pomocy kontrolki (kształt oraz kolor dowolne wedle pomysłu programisty'kiedy zaczynam jako klon')dostaje końcową funkcjonalność klocka. tj:<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.♦ Pokaż klocek,<br />3. Tworzymy więc duszka♦ 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 /><center>[[Plik:Listaduszkow duszek1CelAnowy.jpgJPG]]</center><br />
45. Tak stworzony duszek odpowiadać będzie za tworzenie swoich klonów. * Ukrywamy duszka "rodzica"<br />* Ustawiamy startowe miejsce duszka* 5 razy To samo zdarzenie odbieramy w pętli uruchamiamy instrukcje odpowiedzialne za stworzenie klonu oraz przesunięcie "rodzica" 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ż klocek* - 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"<center>[[Plik:Duszek1 klony.jpg]]</center>skrypcie piłeczki
# To samo zdarzenie odbieramy w skrypcie pileczki[[Plik:Kulka nowy.JPG]]
<center>[[Plik:Koncowa pileczka6. Tak zmieniony skrypt piłeczki (odbierającej wiadomość o zdarzeniu zetknięcia piłeczki z klockiem) zapewni nam efekt "odbicia" piłeczki od klocka.jpg]]</center>
# 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 inny wygląd oraz pozycję startową.
==== Kolejne klocki ====* Po zaprogramowaniu w ten sposób pierwszego duszka , tworzymy kolejnego - będzie posiadać tą samą funkcjonalność, ale zmienimy mu 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]]