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

Podobne dokumenty
Nazwa implementacji: Kółko i krzyżyk w Lazarusie. Autor: Piotr Fiorek Andrzej Stefaniuk

Widok po uruchomieniu. Widok w trakcie gry

Zaprojektuj grę logiczną NIM. Program losuje w każdym rzędzie od 1 do 10 grzybów. Gracz

PROGRAM: WYSZUKANIE LICZBY MAKSYMALNEJ

Po uruchomieniu Lazarusa należy wybrać z paska górnego opcję Projekt i następnie Nowy Projekt. Pokaże się okno:

Wprowadzenie do systemu Delphi

Ćwiczenie z wykorzystaniem zmiennych i komponentu TGauge. TTimer co pewien czas. Gra. A jednak odlicza. Stoper. Aktualny czas, czyli zegar

Wykład 7: Lazarus GUI

Delphi. Lazarus. Kompilatory Delphi. Linki do stron o Delphi

Tworzenie własnych komponentów

Niniejszy ebook jest własnością prywatną. Został zakupiony legalnie w serwisie Netpress.pl, będącym oficjalnym Partnerem Wydawcy.

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

5.9 Modyfikacja gry Kółko i krzyżyk

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Obsługa grafiki w Delphi, rysowanie na płótnie, obsługa myszki, zapisywanie obrazków do plików, bitmapy pozaekranowe.

Delphi podstawy programowania. Środowisko Delphi

Programowanie obiektowe

Unity 3D - własny ekran startowy i menu gry

DIAGRAMY SYNTAKTYCZNE JĘZYKA TURBO PASCAL 6.0

Praktyczny kurs programowania w Delphi na przykładzie wygaszacza ekranu Windows

01 grid tablica grid. Copyright 2017, mgr inż. Janusz Bonarowski 1

SPRAWOZDANIE. Architektura systemów komputerowych projekt robota W Y K O N A N I E :

Delphi 7 + Indy 10 Przykłady prostych aplikacji sieciowych

Właściwości i metody obiektu Comment Właściwości

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

Robert Szmurło. Projektowanie Graficznych Interfejsów Użytkownika

2. Kliknij Insert->Userform. Jeżeli Toolbox nie pojawi się automatycznie, kliknij View -> Toolbox. Otrzymany widok powinien być jak poniżej.

LibreOffice Calc VBA

PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy.

1. Otwórz swój program. 2. Przejdź do źródła. Posłuży ci do tego funkcja Toggle Form/Unit lub naciśnięcie klawisza F12. [rys.1]

Pascal. 1. Pliki tekstowe. Przykład 1.1. Zapis do pliku tekstowego

Niniejszy ebook jest własnością prywatną.

Wstęp do programowania. Procedury i funkcje. Piotr Chrząstowski-Wachtel

Podstawy Programowania semestr drugi. Wykład czternasty

Tak przygotowane pliki należy umieścić w głównym folderze naszego programu. Klub IKS

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

OPERACJE NA PLIKACH. Podstawowe pojęcia:

Informatyka 1. Przetwarzanie tekstów

Lazarus dla początkujących, część III

VBA praca z makrami w Excelu

Tablice, DataGridView

Darmowa publikacja dostarczona przez

Ćwiczenia z przetwarzania tablic 2D

C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów

Podstawy programowania 2. Temat: Drzewa binarne. Przygotował: mgr inż. Tomasz Michno

Wykład 15. Literatura. Kompilatory. Elementarne różnice. Preprocesor. Słowa kluczowe

Unity 3D - podpowiedzi w grze. System cząstek

Podstawy Programowania 2

Amortyzacja obliczenia ekonomiczne w informatyce.

Sieciowe Technologie Mobilne. Laboratorium 2

Programowanie obiektowe

Instrukcje cykliczne (pętle) WHILE...END WHILE

DataGridView. Aby dodawać kolumny wybieramy z listy zadań Add Column..., co wywoła okno dodawania kolumn, rys. 2. Rysunek 1

Darmowa publikacja dostarczona przez Złote Myśli

ejestr systemu Windows jest bazą danych, w której system i aplikacje mogą przechowywać swoje dane, w szczególności parametry konfiguracyjne.

Laboratorium Systemów SCADA

Wybieramy File->New->Project Wybieramy aplikację MFC->MFC Application jak na rysunku poniżej:

Algorytmy i struktury danych

Informatyka 1. Wyrażenia i instrukcje, złożoność obliczeniowa

VBA praca z makrami w Excelu

Plik->Opcje->Zakladka Główne->Dostosuj Wstążkę Zaznaczamy kwadracik Developer na liscie po prawej stronie. Klikamy OK.

Kodu z klasą. Skarb w zatrutej wodzie, cz. 2. Scenariusz 6

Wstęp do programowania. Różne różności

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

Wykład 03 JavaScript. Michał Drabik

Wydział Zarządzania AGH. Katedra Informatyki Stosowanej. Podstawy VBA cz. 1. Programowanie komputerowe

Obowiązuje od wersji

Unity 2D - prosta gra

Projekt z przedmiotu Specjalizowane języki programowania Temat: Zastosowanie programowania obiektowego w środowisku LabView

Tworzenie menu i authoring w programie DVDStyler

Język programowania PASCAL

Darmowa publikacja dostarczona przez

Cel: Przypisujemy przyciskom określone funkcje panel górny (Panel1)

wstawianie przycisków umożliwiających wybieranie wartości poprzez klikanie strzałek

Program szkoleniowy. 24 h dydaktycznych (18 h zegarowych) NAZWA SZCZEGÓŁY CZAS

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki

Podstawy programowania w języku Visual Basic dla Aplikacji (VBA)

MsgBox(Komunikat [, Przyciski] [, Tytuł] [, PlikHelp, HelpContext])

Informatyka II. Laboratorium Aplikacja okienkowa

Pascal - wprowadzenie

Visual Basic for Applications. Wstęp

Zadanie. Menu Plik niech posiada dwie pozycje: Tekstowy i Excel, a każda z nich niech posiada dwie pozycje Otwórz i Zapisz, patrz rys. 2.

Współbieżność w środowisku Java

Podstawy JavaScript ćwiczenia

Programowanie RAD Delphi

Aplikacje WWW - laboratorium

Wprowadzenie do programowania w języku Visual Basic. Podstawowe instrukcje języka

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

1. Przypisy, indeks i spisy.

Działki Przygotowanie organizacyjne

Program powinien otworzyć się z pierwszym formularzem. Jeśli nie, otwórz pierwszy formularz, wybierając go z listy - Shift+F12.

Budowa aplikacji z graficznym interfejsem użytkownika - GUI (Graphic User Interface)

Skopiuj plik do katalogu macierzystego serwera Apache (C:/xampp/htdocs). Uruchom przeglądarkę i wpisz w polu adresowym następujący ciąg:

Unity 3D - pierwsze skrypty

Wątek - definicja. Wykorzystanie kilku rdzeni procesora jednocześnie Zrównoleglenie obliczeń Jednoczesna obsługa ekranu i procesu obliczeniowego

Jak posługiwać się edytorem treści

Delphi Laboratorium 3

Przykładowa dostępna aplikacja w Visual Studio - krok po kroku

Podstawy technologii cyfrowej i komputerów

Platformy Programistyczne Podstawy języka Java

Transkrypt:

Nazwa implementacji: Gra w życie Autor: Piotr Fiorek Opis implementacji: Implementacja przedstawia Grę w życie jako przykład prostej symulacji opartej na automatach. Zaprojektuj prostą grę, której celem jest odwzorowanie popularnej gry w życie. Okno Formularza Należy dodać trzy przyciski, timer oraz kontener na obrazki (TPictureList). W przypadku TPictureList należy określić jego rozmiary (powinien być taki sam jak rozmiar pól obrazkowych. które zamierzamy stworzyć, w przeciwnym wypadku obrazki będą przycięte) oraz po dwukrotnym kliknięciu w obiekt listę obrazków przedstawiających komórkę żywą, oraz martwą. W oknie Object Inspector można również ustawić nazwy poszczególnych elementów. W tej implementacji używamy nazw: Obrazki dla obiektu TpictureList Timer1 dla obiektu Timer KROK dla pierwszego przycisku START dla drugiego przycisku STOP dla trzeciego przycisku 1

Kod: unit zycie; {$mode objfpc}{$h+} interface uses Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls; type { TForm1 } TForm1 = class(tform) // deklaracje elementów w oknie Obrazki: TImageList; KROK: TButton; START: TButton; STOP: TButton; Timer1: TTimer; // deklaracje procedur procedure FormCreate(Sender: TObject); procedure KROKClick(Sender: TObject); procedure STARTClick(Sender: TObject); procedure STOPClick(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure KomorkaClick(Sender: TObject); procedure PrzerysujEkran(); private // zmienne używane w programie gramy: Boolean; // zmienna przechowująca informację czy gra się toczy biezaca, nastepna: array [0..50,0..50] of Boolean; // tablice stanu gry - bierząca oraz tymczasowa do przeliczenia stanu w komorki: array[0..50, 0..50] of TImage; // tablica z obrazkami komórek public { public declarations } Form1: TForm1; implementation { TForm1 } // procedura wywoływana podczas tworzenia okna procedure TForm1.FormCreate(Sender: TObject); i, j: Integer; // zmienne używane jako iteratory gramy:= False; // na początku gra jest przerwana // tworzenie komorek 2

for i:=0 to 50 do // przechodzenie po rzędach tablic for j:=0 to 50 do // przechodzenie po kolumnach tablic komorki[i,j]:= TImage.Create(self); // stworzenie komórki komorki[i,j].parent:= self; // przypisanie jej do ekranu komorki[i,j].width:= 10; // określenie szerokości komórki komorki[i,j].height:= 10; // określenie wysokości komórki Obrazki.GetBitmap(0, komorki[i,j].picture.bitmap); // załadowanie obrazka do komórki komorki[i,j].left:= (j+1)*2 + j*10; // określenie położenia komórki od lewej krawędzi okna komorki[i,j].top:= (i+1)*2 + i*10; // określenie położenia komórki od górnej krawędzi okna komorki[i,j].tag:= i*50+j; // przypisanie komórce numeru komorki[i,j].onclick:= @KomorkaClick; // przypisanie do komórki funkcji wywoływanej w momencie kliknięcia w komórkę biezaca[i,j]:=false; // ustawienie komórki na stan "martwa" nastepna:=biezaca; // skopiowanie stanu tablicy // funkcja obliczająca stan gry w następnym kroku procedure TForm1.KROKClick(Sender: TObject); sasiedzi, rzad, kolumna: Integer; // zmienne pomocnicze // tutaj sie wszystko dzieje for rzad:=1 to 50 do // przejdź po wszystkich rzędach for kolumna:=1 to 50 do // przejdź po wszystkich kolumnach sasiedzi:=0; // zmienna przechowująca informację o ilości żywych sąsiadów komórki if rzad>0 then // sprawdzenie czy istnieje rząd powyżej komórki if biezaca[rzad-1, kolumna] = True then sasiedzi:=sasiedzi+1; // sprawdzenie czy komórka powyżej jest żywa i zwiększeni if kolumna>0 then if biezaca[rzad-1, kolumna-1] = True then sasiedzi:=sasiedzi+1; // sprawdzenie czy istnieje lewy gór if kolumna<50 then if biezaca[rzad-1, kolumna+1] = True then sasiedzi:=sasiedzi+1; // sprawdzenie czy istnieje prawy g if rzad<50 then // sprawdzenie czy istnieje rząd poniżej komórki if biezaca[rzad+1, kolumna] = True then sasiedzi:=sasiedzi+1; // sprawdzenie czy komórka poniżej jest żywa i zwiększen if kolumna>0 then if biezaca[rzad+1, kolumna-1] = True then sasiedzi:=sasiedzi+1; // sprawdzenie czy komórka poniżej n if kolumna<50 then if biezaca[rzad+1, kolumna+1] = True then sasiedzi:=sasiedzi+1; // sprawdzenie czy komórka poniżej if kolumna>0 then if biezaca[rzad, kolumna-1] = True then sasiedzi:=sasiedzi+1; // sprawdzenie czy komórka na lewo istni if kolumna<50 then if biezaca[rzad, kolumna+1] = True then sasiedzi:=sasiedzi+1; // sprawdzenie czy komórka na prawo ist if (sasiedzi<2) or (sasiedzi>=4) then nastepna[rzad,kolumna]:=false; // jeśli komórka mniej niż dwóch, lub więcej niż tr if sasiedzi=2 then nastepna[rzad,kolumna]:=biezaca[rzad,kolumna]; // jeśli komórka ma dwóch sąsiadów w następnej rundzi if sasiedzi=3 then nastepna[rzad,kolumna]:=true; // jeśli komórka ma trzech sąsiadów w następnej rundzie będzie żywa biezaca:=nastepna; // skopiowanie tablicy reprezentującej następną rundę do aktualnej tablicy PrzerysujEkran(); // przerysowanie ekranu nowym stanem gry 3

// rozpoczęcie lub wznowienie gry procedure TForm1.STARTClick(Sender: TObject); gramy:= True; // przerwanie gry procedure TForm1.STOPClick(Sender: TObject); gramy:= False; // procedura wywoływana co sekundę przez timer procedure TForm1.Timer1Timer(Sender: TObject); if gramy = True then KROKClick(self); // jeśli gra się toczy wywołuje funkcję generującą następny krok w grze // procedura wywoływana w momencie kliknięcia w komórkę procedure TForm1.KomorkaClick(Sender: TObject); rzad, kolumna: Integer; // zmienne pomocnicze kolumna:= (Sender as TImage).Tag mod 50; // wyciąganie numeru kolumny klikniętej komórki z jej numeru rzad:= (Sender as TImage).Tag div 50; // wyciąganie numeru rzędu z klikniętej komórki if biezaca[rzad, kolumna] = True then // jeśli komórka była "żywa" biezaca[rzad, kolumna]:= False; // zmieniamy jej stan nastepna[rzad, kolumna]:= False; // zmieniamy jej stan Obrazki.GetBitmap(0, komorki[rzad, kolumna].picture.bitmap); // zmieniamy jej obrazek end else biezaca[rzad, kolumna]:= True; // zmieniamy jej stan nastepna[rzad, kolumna]:= True; // zmieniamy jej stan Obrazki.GetBitmap(1, komorki[rzad, kolumna].picture.bitmap); // zmieniamy jej obrazek // funkcja przenosząca stan tablicy na komórki na ekranie procedure TForm1.PrzerysujEkran(); i, j: Integer; // zmienne używane jako iteratory for i:=0 to 50 do // przechodzenie po rzędach tablicy for j:=0 to 50 do // przechodzenie po kolumnach tablicy if biezaca[i,j] = True then // jeśli komórka jest żywa Obrazki.GetBitmap(1, komorki[i,j].picture.bitmap) // załaduj obrazek żywej else Obrazki.GetBitmap(0, komorki[i,j].picture.bitmap); // załaduj obrazek martwej initialization 4

{$I zycie.lrs} end. UWAGA: Podczas zapisywania projektu nie wolno zapisywać plików ".pas" (plik z kodem) oraz ".lpi" (plik projektu) pod tymi samymi nazwami. 5