Soluții - PC Magazine Romania, Iunie 2004
Specificații pentru realizarea jocurilor în J2ME
Mircea Scărlătescu
Site-ul www.forum.nokia.com este plin cu documentație și cu tutoriale despre ce reprezintă și ce standarde s-au impus în industria software-ului Java pentru telefoane mobile.
Discutam în numerele trecute despre ceea ce înseamnă să realizezi un joc pentru un telefon mobil, cum diferă acest joc de un software normal, realizat pentru calculatoare personale sau console pentru jocuri. Astăzi încercăm să prezentăm un workflow recomandat, un șir de opțiuni și setări pe care mulți useri le folosesc, și pe care un program care se respectă nu trebuie să le scape din vedere.
Lansarea jocului, echivalentă cu pornirea MIDlet-ului, trebuie să fie urmată de un Spalsh Screen adică o instanță a clasei FullCanvas. Așadar prezentăm numele jocului, un logo pentru acesta etc. Acest Spash Screen este de multe ori întâlnit în jocurile de PC, mai ales în cele vechi. Desigur acest element de design trebuie să respecte cât mai bine regulile de dimensiune, adâncime a culorilor specifice telefoanelor mobile. Iată un exemplu de cod în acest sens:
public class GameMIDlet extends MIDlet { private Display display = null; //Splash screen that starts the application private SplashFull Canvas splash; public GameMIDlet() { splash = new SplashFullCanvas(this); } protected void startApp() throws MIDletStateChangeException { if (display == null) { display = Display.getDisplay(this); } //splash screen to the display setDisplayable(splash); } ...
Orice joc urmează să aibă în mod obligatoriu după ecranul de prezentare un
meniu. Opțiunile principale ce trebuie să se regăsească sunt "New Game"
(joc nou), "Options" (Optiuni), "Instructions" (Instructiuni)
etc. De asemenea, dacă jocul are o opțiune de pauză, în acel moment trebuie
să existe și opțiunea de Continuare, care să apară prima în meniu. Desigur,
meniul de mai sus este orientativ, și creativitatea ocupă aici un loc foarte
important în a găsi cea mai bună soluție pentru a atrage jucătorul.
Ecranul principal al jocului va funcționa la selectarea opțiunii New Game.
Meniul de opțiuni trebuie să conțină elementele de bază pentru funcționarea telefonului (joc cu sau fără sunet, cu sau fără vibrații etc.). De asemenea, se pot insera opțiuni precum nivelul de dificultate, Ajutor, și așa mai departe. Orice joc va avea opțiuni specifice care trebuie inserate. Totodată o comandă Back trebuie implementată, pentru ca userul să se poată întoarce la meniul anterior sau la joc.
Un exemplu de clasă care implementează un meniu este următorul:
public class MainMenu extends List
implements CommandListener
{
private GameMIDlet parent = null;
private GameFullCanvas game = null;
public MainMenu(String p0, int p1,
String[] p2, Image[] p3,
GameMIDlet parent)
{
super(p0, p1, p2, p3);
init(parent);
}
public MainMenu(String p0,
int p1, GameMIDlet parent)
{
super(p0, p1); init(parent);
}
public void init(GameMIDlet parent)
{
this.parent = parent;
this.setCommandListener(this);
if (game != null &&
game.isPaused())
{
if(!(this.getString(0).equals
( new String(Resources.getString
( Resources.ID_GAME_CONTINUE)))))
{
this.insert(0,
Resources.getString(Resources.
ID_GAME_CONTINUE), null); }
this.setSelectedIndex(0,true);
}
else
{
this.append(Resources.getString
(Resources.ID_GAME_OPTIONS), null);
this.append(Resources.getString
( Resources.ID_GAME_HIGHSCORES),
null);
this.append(Resources.getString
( Resources.ID_GAME_INSTRUCTIONS),
null);
this.append(Resources.getString
( Resources.ID_GAME_ABOUT), null);
this.append(Resources.getString
( Resources.ID_GAME_EXIT), null);
}
}
Opțiunea de High Scores este necesară atunci când se dorește memorarea unor
scoruri record pentru joc. Pot fi inserate elemente grafice și chiar animații,
dacă se dorește. Iată un exemplu de clasă care implementează un ecran de tip
High Scores:
public class HighScore extends FullCanvas { private GameMIDlet parent = null; private MainMenu menu = null; public HighScore(GameMIDlet parent, MainMenu menu) { this.parent = parent; this.menu = menu; } protected void paint(Graphics g) { //Paint the high scores here } public void keyPressed(int keyCode) { if (keyCode != KEY_END) { //selection list to the screen parent.setDisplayable(menu); } } }
Secțiunea de Instructiuni (Instructions) trebuie să prezinte concis dar în același timp complet regulile de joc pentru programul nostru, diferite sfaturi (´tips&tricks´ ☺) și alte astfel de elemente. Pentru ca de obicei pe un singur ecran aceste informații nu au cum să încapă, atunci, vor exista opțiunile de More sau Next și cea de Back (sau Edit, după caz).
Exemplele de cod sursă de mai sus sunt preluate în parte din exemple specifice documentației ☺2ME, dar sunt esențiale și în același timp suficiente pentru înțelegerea elementelor de bază pentru programarea unui joc. De asemenea doritorii de informații suplimentare se pot înscrie la www.forum.nokia.com și vor găsi o mulțime de tutoriale și informații din domeniu.
|