LIVE Gra w życie. LIVE w JavaScript krok po kroku. ANIMACJA Rozpoczynamy od podstawowego schematu stosowanego w animacji

Podobne dokumenty
Opis programu. Obiekt canvas w HTML szerokość i wysokość 600 pikseli. Wygląd dolnej części sterownia armaty grawitacyjnej

Lekcja 11 Gra komputerowa LASER

LIVE Gra w życie. - wpisz do niej polecenie z ramki. - uruchom program poleceniem F9

Baltie 3. Podręcznik do nauki programowania dla klas I III gimnazjum. Tadeusz Sołtys, Bohumír Soukup

Wykład 03 JavaScript. Michał Drabik

Zdarzenia Zdarzenia onload i onunload

Ćwiczenie 1 Galeria zdjęć

Funkcje i instrukcje języka JavaScript

przedmiot kilka razy, wystarczy kliknąć przycisk Wyczaruj ostatni,

WYKŁAD 3 WYPEŁNIANIE OBSZARÓW. Plan wykładu: 1. Wypełnianie wieloboku

Defilada - przykład wykorzystujący animowane modele Copperlicht. Andrzej P.Urbański Politechnika Poznańska

Podstawy JavaScript ćwiczenia

Usługi Informatyczne "SZANSA" - Gabriela Ciszyńska-Matuszek ul. Świerkowa 25, Bielsko-Biała

Jeżeli pole Krawędź będzie zaznaczone uzyskamy obramowanie w całej wstawianej tabeli

Przygotuj za pomocą tabulatorów element formularza. Utwórz pole tekstowe i sformatuj tak, aby dół napisu w polu był dokładnie nad kropkami.

FINCH PONG. Realizator: Partner: Patronat:

Zadanie Wstaw wykres i dokonaj jego edycji dla poniższych danych. 8a 3,54 8b 5,25 8c 4,21 8d 4,85

KARTA INFORMACYJNA Z INFORMATYKI DO KLASY 6. Imię i nazwisko ucznia:

Przenoszenie, kopiowanie formuł

JAVAScript tablice, przekazanie danych do funkcji, obiekty Date i window

DOM (Document Object Model)

Zakładka Obmiar jest dostępna dla pozycji kosztorysowej w dolnym panelu. Służy do obliczania ilości robót (patrz też p ).

Zaawansowane aplikacje internetowe

JAVAScript w dokumentach HTML (2)

Wstawianie nowej strony

Ćwiczenia z przetwarzania tablic 2D

DOKUMENTY I GRAFIKI. Zarządzanie zawartością Tworzenie folderu Dodawanie dokumentu / grafiki Wersje plików... 7

2.1. Duszek w labiryncie

1. Pobierz i zainstaluj program w 3 krokach : 2. Wybierz produkt -> FotoAlbum (Photo Books)

ZAJĘCIA KOMPUTEROWE KLASA IV. Opis wymagań, które uczeń powinien spełnić, aby uzyskać ocenę:

Moduł rozliczeń w WinUcz (od wersji 18.40)

Formularze w programie Word

Spis treści. Księgarnia PWN: Roland Zimek - SWiSH Max2 i SWiSH Max3. Wprowadzenie... 9

Animacje z zastosowaniem suwaka i przycisku

Robert Barański, AGH, KMIW MathScript and Formula Nodes v1.0

Jak przygotować pokaz album w Logomocji

Spis treści. Księgarnia PWN: Roland Zimek - Swish Max3

Podstawy technologii WWW

Wstęp Sterowanie Utworzenie, wybór i kasowanie gracza. utworzenia nowego gracza Nowy gracz Nastawienie gracza

etrader Pekao Podręcznik użytkownika Strumieniowanie Excel

Pozycjonowanie i poruszanie warstw

Opis implementacji: Implementacja przedstawia Grę w życie jako przykład prostej symulacji opartej na automatach.

Moduł rozliczeń w WinSkład (od wersji 18.40)

1. Umieść kursor w miejscu, w którym ma być wprowadzony ozdobny napis. 2. Na karcie Wstawianie w grupie Tekst kliknij przycisk WordArt.

Prezentacje multimedialne w Powerpoint

Ćwiczenie: JavaScript Cookies (3x45 minut)

Dokument zawiera podstawowe informacje o użytkowaniu komputera oraz korzystaniu z Internetu.

narzędzie Linia. 2. W polu koloru kliknij kolor, którego chcesz użyć. 3. Aby coś narysować, przeciągnij wskaźnikiem w obszarze rysowania.

Matematyka grupa Uruchom arkusz kalkulacyjny. 2. Wprowadź do arkusza kalkulacyjnego wartości znajdujące się w kolumnach A i B.

Rys.2.1. Drzewo modelu DOM [1]

Zajęcia 4 - Wprowadzenie do Javascript

Co to jest arkusz kalkulacyjny?

Wyszukiwanie największej spośród czterech liczb. Przykładowe rozwiązanie

KATEGORIA OBSZAR WIEDZY

Nowy szablon stron pracowników ZUT

w kalendarzu pracownika po wybraniu z menu podręcznego polecenia Dziennik zdarzeń pracownika

BAZY DANYCH Panel sterujący

Ćwiczenia nr 4. Arkusz kalkulacyjny i programy do obliczeń statystycznych

Praca w edytorze WORD

Praca w programie Power Draft

Słowa kluczowe Sterowanie klawiaturą, klawiatura, klawisze funkcyjne, przesuwanie obiektów ekranowych, wydawanie poleceń za pomocą klawiatury

Multimedia i interfejsy. Ćwiczenie 5 HTML5

Prezentacja multimedialna MS PowerPoint 2010 (podstawy)

Zajęcia nr 15 JavaScript wprowadzenie do JavaScript

Ćwiczenie 1 Automatyczna animacja ruchu

Dokąd on zmierza? Przemieszczenie i prędkość jako wektory

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1

Warsztaty dla nauczycieli

Edytor tekstu MS Word 2010 PL: grafika. Edytor tekstu MS Word umożliwia wstawianie do dokumentów grafiki.

Podręczna pomoc Microsoft Power Point 2007

Podstawy OpenCL część 2

Damian Daszkiewicz Tworzenie strony-wizytówki dla firmy XYZ

Google Earth. Co to jest Google Earth? Co to jest KML? Skąd można pobrać Google Earth?

Rys.1. Technika zestawiania części za pomocą polecenia WSTAWIAJĄCE (insert)

Podstawy tworzenia prezentacji w programie Microsoft PowerPoint 2007

Instrukcja szybkiej obsługi

Edytor tekstu MS Word 2010 PL. Edytor tekstu MS Word 2010 PL umożliwia wstawianie i formatowanie tabel.

3.4. Opis konfiguracji layoutów.

Tworzenie szablonów użytkownika

4.Arkusz kalkulacyjny Calc

Technologie informacyjne: Arkusz kalkulacyjny

Arkusz kalkulacyjny MS Excel 2010 PL.

Ilość cyfr liczby naturalnej

Informatyka Arkusz kalkulacyjny Excel 2010 dla WINDOWS cz.3

INSTRUKCJA DO ĆWICZENIA 5

5.4. Tworzymy formularze

Cw.12 JAVAScript w dokumentach HTML

Spotkania z wiedzą webinarium

Arkusz kalkulacyjny EXCEL

Adobe InDesign lab.1 Jacek Wiślicki, Paweł Kośla. Spis treści: 1 Podstawy pracy z aplikacją Układ strony... 2.

Konfiguracja Połączenia

Zaprojektuj własny kalendarz na nowy rok szkolny

Nawigacja po długim dokumencie może być męcząca, dlatego warto poznać następujące skróty klawiszowe

Prezentacja multimedialna MS PowerPoint 2010 (podstawy)

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 3

Zadanie 3. Praca z tabelami

Ćwiczenie 1: Pierwsze kroki

FIGURY I BRYŁY JEDNOSTKI MIARY KĄTY POLE I OBWÓD OBJĘTOŚĆ I POWIERZCHNIA TRÓJKĄT PROSTOKĄTNY

Transkrypt:

LIVE Gra w życie Live jest jednym z pierwszych i najbardziej znanych tzw. automatów komórkowych. Został wymyślony w 1970 roku przez brytyjskiego matematyka Johna Conwaya. Co to takiego automat komórkowy? Mnóstwo sąsiadujących z sobą komórek. Każda z nich może być zapalona lub zgaszona zgodnie z wymyślonymi prostymi regułami. Na czym polega gra symulacja? Ustalamy układ początkowy komórek, puszczamy cały układ w ruch i obserwujemy. Więcej na Wikipedii: https://pl.wikipedia.org/wiki/gra_w_życie LIVE w JavaScript krok po kroku ANIMACJA Rozpoczynamy od podstawowego schematu stosowanego w animacji KWADRATY Plansza składa się z kwadratowych komórek. Lewy górny róg komórki o długości (bok) znajduje się w punkcie (x,y). Brzeg komórki ma kolor (kol) i wnętrze jest wypełnione kolorem (wyp). Sprawdzenie działania: function KWA(x,y,bok,kol,wyp){ c.linewidth=1; c.fillstyle=wyp; c.fillrect(x,y,bok,bok); c.strokestyle=kol; c.strokerect(x,y,bok,bok); KWA(10,10,100,"black","white"); <canvas id="c1" width="600" height="600"> </canvas> <script> var c = c1.getcontext('2d') var w = c.canvas.width; var h = c.canvas.height; var skok = 10; var czas; function animacja() { c.clearrect(0, 0, w, h); // ramka c.strokestyle="black"; c.strokerect(0, 0, w, h); //... cleartimeout(czas); czas = settimeout(animacja, skok); animacja(); </script> SZACHOWNICA Szachownica składa się z kwadratów rysowanych w dwóch pętlach położenie lewego, górnego rogu obliczane jest prostymi zależnościami: x+bok*k oraz y+bok*w Sprawdzenie działania: SZACHY(10,10,20,10,"black","silver"); function SZACHY(x,y,bok,ile,kol,wyp){ for (var k=0; k<ile; k++){ for (var w=0; w<ile; w++){ KWA(x+bok*k,y+bok*w,bok,kol,wyp); SUWAK Szachownica powinna zmieniać swoje wymiary i automatycznie dopasowywać się do wielkości okna w przeglądarce zrealizujemy to za pomocą suwaka. <br> <input type="range" id="suwile" min=1 max=100 onchange=fsuwak()> <input type="text" id="suwtxt" size=6 onchange=fsuwak()> Zakładamy, że szachownica może mieć od 1 do 100 kratek. Odpowiednie instrukcje w HTML i funkcja FSuwak je obsługująca function FSuwak(){ SZAile = SUWile.value; SUWtxt.value = SZAile SZAbok = SZAsze / SZAile;

START Deklarujemy zmienne globalne SZAsze, SZAile i SZAbok odpowiadające za wielkość szachownicy. Umieścimy je w funkcji startowej START będzie inicjowała wszystkie parametry. Pobieramy do zmiennej SZAile wartość ustawioną na suwaku W polu tekstowym piszemy ilość kratek szachownicy Obliczamy bok szachownicy W funkcji START wstawiamy początkowe ustawienia suwaka function START(){ SZAsze=580; SZAile=10; SZAbok=SZAsze / SZAile; SUWile.value=SZAile; FSuwak(); Funkcję START wstawiamy na koniec, przed SZACHY(10,10,SZAbok,SZAile,"black","silver"); funkcję animacja(); Teraz wystarczy delikatnie poprawić rysowanie szachownicy w animacji KLIKANIE Najpierw nauczymy się sprawdzać, w który punkt obszaru canvas kliknięto myszką, a potem przeliczymy uzyskane współrzędne na numer kolumny i wiersza na szachownicy. var MYSZKA={x:0,y:0; Deklarujemy dwie zmienne, w której zapamiętamy: var SZAWSP={x:0,y:0; - MYSZKA współrzędne kliknięcia myszki - SZAWSP numer wiersza i kolumny szachownicy (przeliczone ze współrzędnych myszki) Do pobrania współrzędnych użyjemy standardowej funkcji onclick. Obszar canvas jest przesunięty o 8 pikseli w przeglądarkach! Od położenia myszki odejmujemy 10 (o tyle przesunięta jest szachownica), a następnie dzielimy przez długość boku i to wystarczy aby obliczyć współrzędne kratek. c.canvas.onclick = function(evt) { MYSZKA.x = evt.clientx-8; MYSZKA.y = evt.clienty-8; SZAWSP.x=parseInt((MYSZKA.x - 10) / SZAbok) + 1; SZAWSP.y=parseInt((MYSZKA.y - 10) / SZAbok) + 1; alert('('+myszka.x+','+myszka.y+')' + '('+SZAWSP.x+','+SZAWSP.y+')'); Aby sprawdzić działanie, użyjemy funkcji alert, którą wstawiamy (na chwilę) do funkcji onclick. WYPEŁNIANIE Aby wypełnić klikniętą kratkę należy obliczyć współrzędne jej lewego, górnego rogu (na podstawie numeru wiersza i kolumny (na podstawie klikniętego punktu)) i narysować kwadrat. Odpowiednie polecenia wstawiamy również do funkcji onclick. var x1=(szawsp.x-1) * SZAbok + 10; var y1=(szawsp.y-1) * SZAbok + 10; KWA(x1,y1,SZAbok,"black","white"); Aby zobaczyć działanie należy na chwilę wyłączyć animację i ręcznie narysować szachownicę. //animacja(); SZACHY(10,10,SZAbok,SZAile,"black","silver"); </script>

TABLICE Jak sprawdzać kolor kratki? Pobierać z canvas kolor piksela? Tak też można, ale jest to nieefektywne. Na pewno lepsze będą tablice, w których zapamiętamy stan kratek, i które za chwilę będą niezbędne w celu uruchomienia życia. Deklarujemy dwie tablice globalne (bez var) i je zerujemy: SZAtab przechowujemy stan kratek: 0-szara, 1-biała SZAsas liczba białych sąsiadów wokół kratki Tablice mają z każdej strony dodatkowy wiersz i kolumnę o numerach 0 i 101 nie są używane, ale będą bardzo użyteczne podczas wyszukiwania i obliczania nie musimy stosować dodatkowych warunków brzegowych. Funkcję TABLICE wstawiamy do funkcji START function TABLICE(){ SZAtab=new Array(101); SZAsas=new Array(101); for (var w=0; w <= 101; w++) { SZAtab[w] = new Array(101); SZAsas[w] = new Array(101); for (var k=0; k <= 10; k++) { SZAtab[w][k] = 0; SZAsas[w][k] = 0; POCZĄTEK Gdy klikamy myszą w kratkę powinna zapalić się na biało, gdy klikniemy powtórnie - ma wrócić do stanu początkowego (kolor szary). Aby było to możliwe musimy zapalać wstawiać 1 lub gasić wstawiać 0, do odpowiednich komórek tablicy SZAtab. Zamiana zawartość klikniętej komórki tablicy na przeciwną. Nie jest nam już potrzebne zapalanie i gaszenie w funkcji onclick usuwamy wyliczanie współrzędnych x1 i y1 oraz rysowanie kwadratu szachownica będzie rysowana na podstawie tablicy. Nowa szachownica będzie rysowana na podstawie zawartości tablicy SZAtab Funkcję RYSUJ_SZACHY wstawiamy do pętli animacyjnej zamiast funkcji SZACHY SZAtab[SZAWSP.x][SZAWSP.y] =!(SZAtab[SZAWSP.x][SZAWSP.y]); function RYSUJ_SZACHY(bok,ile){ for (var w=1;w<=ile;w++){ for (var k=1;k<=ile;k++){ var x1=(w-1) * bok + 10; var y1=(k-1) * bok + 10; if (SZAtab[w][k]==0){ KWA(x1,y1,bok, black, silver ); if (SZAtab[w][k]==1){ KWA(x1,y1,bok, black,"white"); ; POKOLENIA Umiemy zmieniać szachownicę, a także ustawiać początkowe położenie robaczków. Aby puścić w ruch naszą grę należy wykonać jeszcze dwie czynności: - wyliczyć ile robaczków znajduje się wokół każdego pola - usunąć lub wstawić robaczki na podstawie ilości sąsiadów Funkcja WYLICZ_SZACHY przelatuje po kolei przez wszystkie kratki szachownicy i w każdej z nich rozgląda się wokół (8 pól) i sumuje ile jest robaczków (zapalonych pól). Zaglądamy do tablicy SZAtab Zliczamy robaczki w zmiennej SUMA Wynik zapisujemy do tablicy SZAsas function WYLICZ_SZACHY(){ var suma=0; suma=suma+szatab[w-1][k-1]; suma=suma+szatab[w-1][k-0]; suma=suma+szatab[w-1][k+1]; suma=suma+szatab[w-0][k-1]; suma=suma+szatab[w-0][k+1]; suma=suma+szatab[w+1][k-1]; suma=suma+szatab[w+1][k-0]; suma=suma+szatab[w+1][k+1]; SZAsas[w][k]=suma;

REGUŁY Skoro mamy obliczoną ilość robaczków, to możemy wyliczyć, jakie będzie położenie nowego pokolenia robaczków. Nowy robacze rodzi się gdy ma dokładnie trzech sąsiadów Robaczek umiera, gdy ma mniej niż dwóch sąsiadów Robaczek umiera, gdy ma więcej niż 3 sąsiadów function WYLICZ_POKOLENIE(){ if (SZAtab[w][k]==0 && SZAsas[w][k]==3) {SZAtab[w][k]=1 if (SZAtab[w][k]==1 && SZAsas[w][k]<=1) {SZAtab[w][k]=0 if (SZAtab[w][k]==1 && SZAsas[w][k]>=4) {SZAtab[w][k]=0 START-STOP W grze musimy mieć możliwość puszczenia machiny w ruch i jej zatrzymania w dowolnym momencie. Wstawimy do programu dodatkowy przycisk <input type="button" id="butstart" value=" START " onclick=fstartstop()> Funkcja, która go obsługuje ustawia zmienną ANIMUJ i zmienia napis na przycisku Do funkcji start wstawiamy dodatkowo polecenie animuj=false; Do pętli animacyjnej polecenia function FStartStop(){ animuj=!animuj; if (!animuj) {BUTstart.value=" START "; else {BUTstart.value=" STOP "; if (animuj){ WYLICZ_SZACHY(); WYLICZ_POKOLENIE(); i GOTOWE!!!

<canvas id="c1" width="600" height="600"></canvas> <br> <input type="button" id="butstart" value=" START " onclick=fstartstop()> <input type="range" id="suwile" min=1 max=100 onchange=fsuwak()> <input type="text" id="suwtxt" size=6 onchange=fsuwak()> <script> var c = c1.getcontext('2d') var w = c.canvas.width; var h = c.canvas.height; var skok = 10; var czas; var MYSZKA={x:0,y:0; var SZAWSP={x:0,y:0; function START(){ animuj=false; SZAsze=580; SZAile=10; SZAbok=SZAsze / SZAile; SUWile.value=SZAile; FSuwak(); TABLICE(); function TABLICE(){ SZAtab=new Array(101); SZAsas=new Array(101); for (var w=0; w <= 101; w++) { SZAtab[w] = new Array(101); SZAsas[w] = new Array(101); for (var k=0; k <= 101; k++) { SZAtab[w][k] = 0; SZAsas[w][k] = 0; function FStartStop(){ animuj=!animuj; if (!animuj) { BUTstart.value=" START "; else {BUTstart.value=" STOP "; c.canvas.onclick = function(evt) { MYSZKA.x = evt.clientx-8; MYSZKA.y = evt.clienty-8; SZAWSP.x=parseInt((MYSZKA.x - 10) / SZAbok) + 1; SZAWSP.y=parseInt((MYSZKA.y - 10) / SZAbok) + 1;

SZAtab[SZAWSP.x][SZAWSP.y]=!(SZAtab[SZAWSP.x][SZAWSP.y]) function FSuwak(){ SZAile=SUWile.value; SUWtxt.value=SZAile SZAbok=SZAsze / SZAile; function KWA(x,y,bok,kol,wyp){ c.linewidth=1; c.fillstyle=wyp; c.fillrect(x,y,bok,bok); c.strokestyle=kol; c.strokerect(x,y,bok,bok); //szachownica function SZACHY(x,y,bok,ile,kol,wyp){ for (var k=0; k<ile; k++){ for (var w=0; w<ile; w++){ KWA(x+bok*k,y+bok*w,bok,kol,wyp); function RYSUJ_SZACHY(bok,ile){ for (var w=1;w<=ile;w++){ for (var k=1;k<=ile;k++){ var x1=(w-1) * bok + 10; var y1=(k-1) * bok + 10; if (SZAtab[w][k]==0){KWA(x1,y1,bok,"black","silver"); if (SZAtab[w][k]==1){KWA(x1,y1,bok,"black","white"); ; function WYLICZ_SZACHY(){ var suma=0; suma=suma+szatab[w-1][k-1]; suma=suma+szatab[w-1][k-0]; suma=suma+szatab[w-1][k+1]; suma=suma+szatab[w-0][k-1]; suma=suma+szatab[w-0][k+1]; suma=suma+szatab[w+1][k-1]; suma=suma+szatab[w+1][k-0]; suma=suma+szatab[w+1][k+1]; SZAsas[w][k]=suma; function WYLICZ_POKOLENIE(){

if (SZAtab[w][k]==0 && SZAsas[w][k]==3) {SZAtab[w][k]=1 if (SZAtab[w][k]==1 && SZAsas[w][k]<=1) {SZAtab[w][k]=0 if (SZAtab[w][k]==1 && SZAsas[w][k]>=4) {SZAtab[w][k]=0 function animacja() { c.clearrect(0, 0, w, h); c.strokestyle="black"; c.strokerect(0, 0, w, h); RYSUJ_SZACHY(SZAbok,SZAile); if (animuj){ WYLICZ_SZACHY(); WYLICZ_POKOLENIE(); cleartimeout(czas); czas = settimeout(animacja, skok); START(); animacja(); </script>