|
Gry komputerowe sprawiają ogromną frajdę oraz dają wiele satysfakcji, szczególnie jeśli wygramy etap, przejdziemy misje lub wykonamy bezlitośnie trudne zadanie. Granie jest jednak często, delikatnie mówiąc, mało produktywne. Wiecie co i uczy i jest naprawdę ciekawe? Tworzenie gier! Panie i panowie! Przedstawiam pierwszy z (mam nadzieję) serii artykułów poświęconym programowaniu. Jest to wprowadzenie do dalszych tekstów, które pomogą wam napisać własną wersję sławnego Tetrisa, i to wersję na komórkę! Jestem przekonany, że każdy kto ma odrobinę wiedzy o komputerach będzie w stanie przebrnąć przez ten artykuł. Aby jednak zrozumieć, co dokładnie robimy i dlaczego tak a nie inaczej potrzebna będzie pewna wiedza. Postanowiłem nie wgłębiać was w tajniki programowania – opiszę tylko najważniejsze rzeczy. Jeśli chcesz wiedzieć co, jak i dlaczego, to polecam zatem lekturę tekstów zamieszczonych w bibliografii, na końcu artykułu.
Narzędzia Programy na komórkę pisze się w specjalnej wersji języka Java – w JME (Java Micro Edition). Co jest nam więc potrzebne aby jej używać? Przede wszystkim – edytor tekstu. Może być nawet windowsowy Notatnik. Ja jednak polecam jakiś edytor podświetlający składnię języków programowania (np. Vim) Potrzebujemy też J2SE Development Kit. Można pobrać tutaj . Jest to środowisko do pisania programów w Javie. Na JavaSoft jest opis instalacji dla Windowsa i przykładowy program. W innych systemach instalacja odbywa się inaczej. O więcej informacji proście Google'a ;-) . Mamy już zwykłą Javę. My chcemy jednak Javy dla urządzeń przenośnych. Trzeba zatem zainstalować jeszcze JME WTK (Wireless Toolkit) dla Javy. Można go ściągnąć tutaj (każą się zarejestrować!!!): . Instalujemy jak każdy inny program. Aby ułatwić sobie testowanie aplikacji na określonym sprzęcie, można poszukać w Internecie emulatora danego urządzenia przenośnego. Jedyne, co nam jest potrzebne jeszcze to dużo chęci :-) Zaczynamy! Uruchamiamy folder_z_wtk/bin/ktoolbar . Tworzymy nowy projekt. Project name proponuję Tetris, zaś MIDlet Class Name – TetrisMIDlet . W API selection, w Target platform wybieramy MIDP 1.0 . Pliki źródłowe naszego projektu będziemy przechowywać w folder_z_wtk/apps/nazwa_projektu/src/ . Zaczynamy od utworzenia pliku TetrisMIDlet.java . Zawiera on szkielet programu w JME (por. http://www.midlety.net/site/teoria/MIDP10.html ).
import javax.microedition.midlet.*; import javax.microedition.lcdui.*;
public class TetrisMIDlet extends MIDlet { public void startApp() throws MIDletStateChangeException { }
public void pauseApp() { }
public void destroyApp(boolean unconditional) { }
public TetrisMIDlet() { } } Kod zawarty w metodzie pauseApp() jest wykonywany jest wykonywany za każdym razem gdy MIDlet jest zatrzymywany (np. gdy ktoś do nas dzwoni). Metoda startApp() jest wykonywana gdy MIDlet jest uruchamiany oraz gdy wznawia pracę po zatrzymaniu. DestroyApp() Jest wywoływana, gdy MIDlet kończy pracę. Program w JME możemy tworzyć przy użyciu API wysokiego lub niskiego poziomu. API wysokiego poziomu przypomina budowanie z klocków – z gotowych elementów składamy całość. Jednakże to nie my ustalamy jak dany element będzie wyglądał lecz producent naszego telefonu. Co więcej, te elementy najczęściej inaczej wyglądają na innych telefonach. API niskiego poziomu daje nam pełną kontrolę nad wyglądem aplikacji, ale wszystko musimy tworzyć od podstaw. Za pomocą API niskiego poziomu stworzymy splash screen dla naszego MIDletu. Tworzymy klasę SplashScreen. Jej kod umieść w ciele klasy TetrisMIDlet Klasa to jakby forma na podstawie której można tworzyć obiekty. O więcej pytaj na www.google.pl .
private class SplashScreen extends Canvas { public SplashScreen() {} protected void paint(Graphics g){ //W tej metodzie rysujemy element //Malowanie tła: g.setColor(0xffffff); //zmiana aktualnego koloru g.fillRect(0, 0, getWidth(), getHeight());//rysowanie białego prostokąta g.setColor(0x000000); g.drawString("Tetris", getWidth()/2, getHeight()/2, g.HCENTER|g.TOP);//Czarny napis g.drawString("JME Tutorial", getWidth()/2, getHeight()/2+10, g.HCENTER|g.TOP); } } Utworzymy prymitywny splash screen zawierający jedynie napis Tetris JME Tutorial. Polecam go jednak nieco urozmaicić wg. Własnego uznania. Możecie ustawić własne kolory za pomocą metody setColor(). Jako jej argument podajemy kolor zapisany szesnastkowo. Na początku jest 0x – oznaczenie liczby zapisanej szesnastkowo, później po dwie liczby określające ilość poszczególnych kolorów: czerwonego, zielonego i niebieskiego. Dla przykładu: 0x0000ff to niebieski a 0xffff00 – żółty. Można też rysować prostokąty za pomocą funkcji fillRect(pozycjaX,pozycjaY,szerokosc,wysokosc) ,np: g.fillRect(1,1,5,10); g.drawRect(10,15,5,3); //tylko obrys prostokąta Podobnie rysujemy elipsy: fillArc(pozycjaX, pozycjaY, szerokosc, wysokosc, katPoczatkowy, kat), np:
g.fillArc(20,20,10,10,1,270); g.drawArc(20,20,10,10,1,270);//jw, tylko obrys Twoja metoda paint może wyglądać np. tak:
protected void paint(Graphics g){ g.setColor(0xffff00); //zmiana aktualnego koloru g.fillRect(0, 0, getWidth(), getHeight()); g.setColor(0x0000ff); g.fillArc(getWidth()/2-50,getHeight()/2-15,100,60,0,360); g.drawArc(getWidth()/2-55,getHeight()/2-20,110,70,0,180); g.drawArc(getWidth()/2-60,getHeight()/2-25,120,80,180,180); g.setColor(0xffff00); g.drawString("Tetris", getWidth()/2, getHeight()/2, g.HCENTER|g.TOP); g.drawString("JME Tutorial", getWidth()/2, getHeight()/2+10, g.HCENTER|g.TOP); g.setColor(0xff0000); g.drawString("Press any key", getWidth()/2, getHeight()/2+100, g.HCENTER|g.TOP); } Więcej będzie następnym razem :-) Trzeba teraz ustawić zawartość ekranu. Najpierw dodaj nową zmienną wpisując podany kod zaraz pod public class TetrisMIDlet extends MIDlet {
private Display display; Dzięki tej zmiennej będziemy się odwoływać do ekranu naszej komórki. Wstaw ten kod w metodę TetrisMIDlet() - czyli w tzw. konstruktor ( Metoda wykonywana za każdym razem gdy tworzymy obiekt na podstawie danej klasy). display = Display.getDisplay(this); display.setCurrent(new SplashScreen()); Pierwsza linia ustawia odwołanie do ekranu komórki, zaś druga ustawia obiekt stworzony na podstawie klasy SplashScreen jako bieżący ekran. Możesz teraz zbudować i uruchomić MIDlet klikając w WTK najpierw Build a później Run.
Fajnie byłoby jakby można było wyjść z MIDletu w jakiś cywilizowany sposób... Sprawimy, aby naciśnięcie czegokolwiek na klawiaturze telefonu kończyło program. Poniższy kod wstaw w definicję klasy SplashScreen. protected void keyPressed (int keyCode) { destroyApp(false); notifyDestroyed(); } Aby umieścić program w telefonie (lub innym urządzeniu przenośnym obsługującym Javę) musimy utworzyć pliki .jad oraz .jar . W WTK wybieramy polecenie Project->Package->Create package. W folder_z_wtk/apps/nazwa_projektu/bin/ są nasze pliki. Zależnie od modelu telefonu można je od razu wgrać do naszego urządzenia (np. używając kabla USB) lub trzeba się jeszcze pomęczyć: umieszczamy nasz plik .jar gdzieś w Internecie, w WTK klikamy na Settings, zakładka Required, w MIDlet-Jar-URL wpisujemy adres internetowy pliku .jar . Teraz również plik .jad umieszczamy w sieci. Z poziomu przeglądarki telefonu przechodzimy pod adres naszego pliku .jad . Nie testowałem, ale powinno działać ;-) I to by było na tyle jak na jeden artykuł :-) W następnym odcinku: tworzenie menu oraz jak wyświetlić stan gry Tetris. Tymczasem – miłego kodowania :-) Bibliografia |