Narzędzia użytkownika

Narzędzia witryny


c_i_lua

To jest stara wersja strony!


Łą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.

Konwencje leksykalne

wypunktować! W języku Lua identyfikatory mogą się składać z dowolnego łańcucha znaków alfanumerycznych lub znaku _. Jedynym ograniczeniem jest zakaz rozpoczynania identyfikatora od cyfry. Innym ograniczeniem są 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 zaczynamy –" i kończymy ".

Typy danych i wyrażenia

wypunktować W Lua nie deklarujemy typów zmiennych – każda zmienna ma dynamiczny typ określany przez jej wartość. Istnieje 8 podstawowych typów danych w Lua: nil – przyjmuje jedną wartość nil, która określa brak konkretnej wartości (często nil jest stosowany do określenia zmienną niezainicjalizowaną); • boolean – przyjmuje standardowe wartości boolowskie, czyli true lub false; • number – liczba reprezentująca wartości rzeczywiste (zmiennoprzecinkowe); liczby możemy zapisywać na różne sposoby, np.: 18, 3.141592, 1.23e12, 4.18e-3; • string – standardowy łańcuch znaków, np. „What is your name?”; • userdata – typ danych umożliwiający przetrzymywanie dowolnych danych z języka C (np. wskaźników) w strukturach Lua; • function – funkcje zdefniniowane jako wykonywalny ciąg instrukcji; funkcje mogą być deklarowane wewnątrz innych funcji, mogą być argumentami innych funkcji, lub być zwracane z innej funkcji; • thread – wątek w Lua – z uwagi na charakter niniejszego artykułu nie będziemy omawiać wątków w Lua; • table – tablica asosjacyjna będąca najcięższym orężem Lua; dokładny opis tablic znajduje się w dalszej części. W dowolnym miejscu skryptu możemy sprawdzić typ danej zmiennej poleceniem type (jak pokazano w Listingu 2). Lua, jak przystało na porządny język programowania, oferuje również różnego rodzaju operatory do definiowania wyrażeń. Wyróżniamy: • operatory arytmetyczne, czyli + (dodawanie), - (odejmowanie), * (mnożenie), / (dzielenie), % (modulo) i ^ (potęgowanie); • operatory porównania, czyli == (równe), ~= (różne), < (mniejsze), > (większe), ⇐ (mniejsze lub równe), >= (większe lub równe); • operatory logiczne, takie jak and (część wspólna), or (suma logiczna), not (negacja). 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 Tablice są najistotniejszymi strukturami danych w Lua. Są one reprezentowane przez kolekcję par (klucz, wartość), gdzie kluczem może być wszystko poza wartością nil. Elementami tablicy mogą być wszystkie wartości podstawowych typów Lua, czyli także same tablice. Dzięki temu mechanizm tablicy umożliwia definiowanie użytkownikowi dowolnych struktur danych, które mogą być utożsamiane z elementami takimi jak: lista, wektor, kolejka, zestaw czy stos. W tradycyjnych językach programowania jakimi są C czy Pascal w większości przypadków złożone struktury danych reprezentowane są właśnie przez dynamiczne listy lub wektory prostych typów danych. Tablice w Lua umożliwiają implementację o wiele bardziej złożonych i elastycznych struktur, stworzonych specjalnie na potrzeby rozwiązania danego zagadnienia. 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.1293551108.txt.gz · ostatnio zmienione: 2010/12/28 16:45 przez sjablon1