przejście do zawartości
zpr c++ quick reference
Narzędzia użytkownika
Zarejestruj się!
Zaloguj
Narzędzia witryny
Narzędzia
Pokaż stronę
Poprzednie wersje
Odnośniki
Ostatnie zmiany
Menadżer multimediów
Indeks
Zaloguj
Zarejestruj się!
Ostatnie zmiany
Menadżer multimediów
Indeks
Ślad:
c_i_lua
Ta strona jest tylko do odczytu. Możesz wyświetlić źródła tej strony ale nie możesz ich zmienić.
====== Łączenie języka C++ i Lua ====== Szymon Jabłoński M1ISI ==== Wstęp ==== Głównym celem stosowania języków skryptowych jest możliwość ingerencji w istniejący system(np. silnik gry) bez konieczność znajomości i ingerencji w kod źródłowy. Przykładami języków skryptowych są np. Bash, Python, Perl, PHP, UnrealScript czy interesująca nas Lua. Języki skryptowe znalazły swoje zastosowanie w procesie tworzenia gier komputerowych np. w agorytmach sztucznej inteligencji(sterowanie postaciami Non-Playable Characters), obsługi interfejsu gry czy sterowaniem przebiegiem fabuły(np. dialogi). Jednym z najczęściej wybieranym językiem okazał się język Lua. Zastosowany został w takich tytułach jak: Crysis, FarCry, Baldur's Gate, World of Warcraft czy nasz rodzimy Wiedźmin. Innym popularną aplikacją wykorzystującą język Lua jest Adobe Lightroom, którego ok. 40% kodu źródłowego napisanego jest w Lua. Pełna lista gier i programów wykorzystujących Lua dostępna jest na stronie http://www.lua.org/uses.html Lua jest językiem skryptowym łączącym ze sobą elementy języka proceduralnego o składni zbliżonej do języka Pascal, rozszerzonego o bardziej złożone konstrukcje opisu danych opartych na tablicach asocjacyjnych. Język został zaprojektowany w celu rozszerzenia funkcjonalności aplikacji, często jednak jest wykorzystywany jako samodzielny język. Lua jest projektem open-source zaimplementowanym w języku C zgodnie ze standardem ANSI C,którego główną zaletą jest prostota, wydajność i przenośność kodu. ==== Wymagania ==== W celu rozpoczęcia pracy z językiem Lua musimy pobrać ze strony http://luabinaries.sourceforge.net/download.html skompilowane wersje bibliotek dla naszego systemu operacyjnego(do wyboru Windows, Linux oraz MacOS). Istnieje również możliwość pobrania kodu źródłowego i samodzielnej kompilacji : http://www.lua.org/ftp/. Interesującymi projektami są również Lua for Windows : http://code.google.com/p/luaforwindows/, Lua for Linux: http://luaforge.net/projects/luaforunix/ oraz LuaRocks: http://www.luarocks.org/. Poza binarkami zawierają również edytory do tworzenie i debugowania skryptów Lua. ==== Podstawy języka Lua ==== Strona ma na celu ukazanie sposobów i możliwości integracji języków C++ oraz Lua, jednak przedstawię krótko podstawy języka Lua wraz z przykładami. W celu dogłębnego poznania składni i możliwość języka polecam dokumentacje umieszczoną na stronie internetowej. Na początek standardowy Hello World( Listing 1) === Konwencje leksykalne === * W języku Lua identyfikatory mogą się składać z dowolnego łańcucha znaków alfanumerycznych lub znaku _. * Ograniczeniami są: zakaz rozpoczynania identyfikatora od cyfry oraz słowa zastrzeżone jak //and//, //or//, //break//, //else// itp. * Lua rozróżnia wielkość liter, więc For będzie oznaczał identyfikator zaś for będzie dotyczył pętli. * Komentarze rozpoczyna się podwójnym myślnikiem i działa analogicznie jak w C++, ignorowane są wszystkie znaki, aż do końca linii. * Istnieje również możliwość komentowania całego bloku kodu na kształt znanych z języka C, które w Lua zastąpione jest ciągiem --[[". === Typy danych i wyrażenia === W Lua podobnie jak w innych językach skryptowych nie deklarujemy typów zmiennych. Zamiast tego każda zmienna ma dynamiczny typ określany przez jej wartość. Istnieje 8 podstawowych typów danych: * nil - przyjmuje jedną wartość nil, która określa brak konkretnej wartości (często nil jest stosowany do określenia zmienną niezainicjalizowaną); * boolean - standardowe wartości boolowskie true/false; * number - liczba rzeczywista, zmiennoprzecinkowa; * string - standardowy łańcuch znaków; * userdata - typ danych pozwalajacy na przetrzymywanie dowolnych danych z języka C(np. wskaźników); * function - ciąg wykonywalnych instrukcji, funkcje mogą być deklarowane wewnątrz innych funkcji lub być zwracane z innej funkcji * thread - wątek w Lua; * table - tablica asocjacyjna(więcej informacji w dalszej części strony); Ciekawym mechanizmem języka jest poleceniem //type// pozwalające na sprawdzenie typu zmiennej. Przykład pokazano na Listingu 2. W Lua dostępne są następujące operatory: * Operatory arytmetyczne: +, -, *, /; * Operatory porównania: ==, ~=, <, >, <=, >=- * Operatory logiczne: //and//, //or//, //not// === Instrukcje i funkcje === Instrukcje i funkcje Lua obsługuje standardowy zestaw instrukcji podobnych do tych stosowanych w języku Pascal czy C. Istnieje możliwość definiowania bloków instrukcji objętych słowami kluczowymi do i end, które można kontrolować poprzez break czy return. Na listę pojedynczych instrukcji składają się: • instrukcje przypisania =; • instrukcje warunkowe, if/elseif/else/ end; • pętle, for/do/end, while/do/end, repeat/ until/; • wywołania funkcji; • lokalne deklaracje zmiennych. Instrukcja przypisania może dotyczyć kilku zmiennych. Pojedyncze instrukcje mogą opcjonalnie kończyć się średnikiem. Listing 3 ilustruje wykorzystanie funkcji, zastosowanie pętli oraz instrukcji warunkowych na przykładzie funkcji wyznaczającej wartość minimalną i maksymalną z trzech liczb, oraz funkcji obliczającej pierwiastki równania kwadratowego. Jak widzimy w przykładzie, funkcje mogą przyjmować i zwracać więcej niż jeden parametr. Istnieje również możliwość deklarowania funkcji rekurencyjnych (Listing 4). === Tablice === Najistotniejszymi strukturami danych w Lua są tablice asocjacyjne reprezentowane przez kolekcję par (klucz, wartość). Kluczem może być wszystko poza wartością //nil//. Elementami tablicy mogą być wszystkie wartości podstawowych typów Lua. Oznacza to, że również mogą to być omawiane w tym miejscu Tablice. Pozwala to na tworzenie takich struktur jak lista, wektor, kolejka czy stos. Listing 5 pokazuje przykłady wykorzystania tablic w Lua realizując proste zbiory danych, listę jednokierunkową, czy strukturę zawierającą zarówno atrybuty jak i metody. ==== Integracja z C++ ==== === Przygotowanie do pracy z Lua === === Wywoływanie funkcji Lua w C++ === === Wywoływanie funkcji C++ w Lua === BUUU ==== Więcej informacji ==== http://www.lua.org - strona domowa Lua. http://www.lua.org/manual/5.1 - dokumentacja on-line Lua. http://lua-users.org/wiki/ - zbiór artykułów, dodatków i przykładów Lua http://www.inf.puc-rio.br/~roberto/pil2/ - programowanie w Lua http://code.google.com/p/luaforwindows/ - biblioteki i narzędzi dla systemu Windows. http://luaforge.net/projects/luaforunix/ - biblioteki i narzędzi dla systemu Unix. http://www.luarocks.org/ - deployment and management system for Lua modules.
c_i_lua.1293561322.txt.gz
· ostatnio zmienione: 2010/12/28 19:35 przez
sjablon1
Narzędzia strony
Pokaż stronę
Poprzednie wersje
Odnośniki
Do góry