![]()
ƒCƒ“ƒTƒCƒh UJML
ƒo[ƒWƒ‡ƒ“ 1.5 - 2006/06/23
Copyright 2001-2006 by UIEvolution, Inc. All rights reserved.
¬‚³‚ȃfƒoƒCƒX‚Å‚à–L‚©‚ȃ†[ƒU‘ÌŒ±
ƒCƒ“ƒXƒg[ƒ‹•s—v‚̃AƒvƒŠƒP[ƒVƒ‡ƒ“ƒ‚ƒfƒ‹‚ð’ñ‹Ÿ
ƒtƒ@ƒ“ƒNƒVƒ‡ƒ“ƒL[iFunctionKeyj
–{ƒKƒCƒh‚Í UjinnMarkup Language(UJML) ‚ðŽg—p‚µAŒg‘Ñ“d˜b‚âPDAAƒpƒ\ƒRƒ“A‚»‚µ‚Ä‘g‚Ýž‚Ý‹@Ší‚Ȃǂ̃vƒ‰ƒbƒgƒtƒH[ƒ€‚É‚¨‚¢‚ăAƒvƒŠƒP[ƒVƒ‡ƒ“‚ÌŠJ”‚Æ”z•z‚ðŠÈ’P‚És‚¤•û–@‚É‹»–¡‚ª‚ ‚él‚Ì‚½‚߂̃KƒCƒh‚Å‚·B
–{ƒKƒCƒh‚ÍŠÈ’P‚ȃQ[ƒ€EƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚Ì‘‚«•û‚ɂ‚¢‚Äà–¾‚·‚éƒ`ƒ…[ƒgƒŠƒAƒ‹Œ`Ž®‚ð‚Æ‚Á‚Ä‚¢‚Ü‚·Bƒ`ƒ…[ƒgƒŠƒAƒ‹‚É‚¨‚¯‚éŠeƒXƒeƒbƒv‚Å‚ÍAƒQ[ƒ€ŠJ”‚É‚¨‚¯‚é UJML ‚ÌŠT”O‚ð‚P‚‚¸‚ÂЉ‚Ä‚¢‚Ü‚·B–{ƒKƒCƒh‚͂܂½AUJML ‚ÌŠT”O‚ÉŠÖ‚·‚éˆê”Ê“I‚ȃqƒ“ƒg‚à’ñ‹Ÿ‚µ‚Ä‚¢‚Ü‚·B
UJML ‚ðŽg—p‚·‚邯AƒŠƒbƒ`‚ȃ†[ƒU‘ÌŒ±‚ð—^‚¦‚éƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚𑼂̂ǂñ‚ȃeƒNƒmƒƒW[‚æ‚è‚à‘½‚‚ÌlX‚ɑ΂µ‚Ä’ñ‹Ÿ‚·‚邱‚Æ‚ªo—ˆ‚Ü‚·B
UJML ‚Í2‚‚̂±‚Æ‚ðŽÀŒ»‚·‚邽‚ßAƒ~ƒjƒ}ƒŠƒXƒg‚ÈŽv‘z‚ÅÝŒv‚³‚ê‚Ä‚¢‚Ü‚·B1‚Â‚Í UJML ‚̃oƒCƒgƒR[ƒh‚ðŽÀs‚·‚é UIE Player ‚̃TƒCƒY‚𬂳‚‚·‚邱‚ÆBUIE Player ‚Í Java ‘Ήž’[––‚É‚¨‚¢‚Ä 30KB ’ö“x‚ÉŽû‚ß‚ç‚ê‚Ä‚¢‚Ü‚·B‚à‚¤1‚‚̓Vƒ“ƒvƒ‹‚©‚ÂK“¾‚ª—eˆÕ‚ȃvƒƒOƒ‰ƒ~ƒ“ƒOŒ¾Œê‚ðŽÀŒ»‚·‚邱‚ÆBUJML ‚̓~ƒjƒ}ƒŠƒXƒg‚ÈÝŒvŽv‘z‚ðÌ‚Á‚Ä‚¢‚é‚É‚àŠÖ‚í‚炸AƒŠƒbƒ`‚ȃ†[ƒU‘ÌŒ±‚ð’ñ‹Ÿ‚·‚éƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ÌŠJ”‚ðŽÀŒ»‚µ‚Ä‚¢‚Ü‚·B
UJML ‚Í ECMA ScriptiJavaScriptj‚̃TƒuƒZƒbƒg‚ðƒTƒ|[ƒg‚·‚éAXMLƒx[ƒX‚̃vƒƒOƒ‰ƒ~ƒ“ƒOŒ¾Œê‚Å‚·B
ŽŸ‚ÉA‰æ–Êã‚ÉuHello Worldv‚Æ•\ަ‚·‚éƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ðЉ‚Ü‚·B‚±‚Ì—á‚Å‚Í UJMLAJavaiJ2ME/MIDPjAC++iBREWj‚ÌŠeŒ¾Œê‚ðŽg‚Á‚Ä Hello World ‚ð‹Lq‚µ‚Ä‚¢‚Ü‚·BSymbianAPalm OSA‚»‚µ‚Ä Pocket PC ƒo[ƒWƒ‡ƒ“‚Í•¡ŽG‚³‚É‚¨‚¢‚Ä BREW ƒo[ƒWƒ‡ƒ“‚ÉŽ—‚Ä‚¢‚邽‚ßÈ—ª‚µ‚Ä‚¢‚Ü‚·B‚Ü‚½ HTML ‚Æ WML ƒo[ƒWƒ‡ƒ“‚ÍŠÈ’P‚³‚É‚¨‚¢‚Ä UJML ‚ÆŽ—‚Ä‚¢‚é‚Ì‚ÅA‚â‚Í‚èÈ—ª‚µ‚Ä‚¢‚Ü‚·B
‚±‚Ì”äŠr‚Å‚Í UJML ‚̃Vƒ“ƒvƒ‹‚³‚ðƒ‚ƒoƒCƒ‹—p‚Ì‘¼‚̃vƒƒOƒ‰ƒ€Œ¾Œê‚Æ”äŠrà–¾‚µ‚Ä‚¢‚Ü‚·BUJML ‚ł͓Á’è‚̈—‚ð‹Lq‚·‚邽‚߂̃R[ƒfƒBƒ“ƒO—Ê‚ª‚È‚‚Äςނ¾‚¯‚łȂAŒ¾Œê‚ðŠw‚ÑA—‰ð‚µAn—û‚·‚邽‚߂ɕK—v‚ÈŒ¾ŒêƒRƒ“ƒZƒvƒg‚ª’Pƒ‚©‚ŠȌ‰‚ɂȂÁ‚Ä‚¢‚Ü‚·B
UJML ӁF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ujml PUBLIC "-//UIEVOLUTION//DTD UJML 1.1//EN" "ujml.dtd">
<ujml>
<application>
<display>
<label>
<text>Hello world</text>
</label>
</display>
</application>
</ujml>
J2ME/MIDP ӁF
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class HelloWorld extends MIDlet implements CommandListener
{
private Command exitCommand; // The exit command
private Display display; // The display for this MIDlet
public HelloWorld()
{
display = Display.getDisplay(this);
exitCommand = new Command("Exit", Command.SCREEN, 2);
}
public void startApp()
{
TextBox t = new TextBox("", "Hello World", 256, 0);
t.addCommand(exitCommand);
t.setCommandListener(this);
display.setCurrent(t);
}
public void pauseApp()
{
}
public void destroyApp(boolean unconditional)
{
}
public void commandAction(Command c, Displayable s)
{
if (c == exitCommand)
{
destroyApp(false);
notifyDestroyed();
}
}
}
BREW ӁF
#include "AEEModGen.h" // Module interface definitions
#include "AEEAppGen.h" // Applet interface definitions
#include "AEEShell.h" // Shell interface definitions
#include "AEEDisp.h" // Display interface defintions
#include "helloworld.bid" // applet class ID
#include "AEEFile.h" // AEEFile Services
static boolean HelloWorld_HandleEvent(IApplet * pi, AEEEvent eCode, uint16 wParam, uint32 dwParam);
int AEEClsCreateInstance(AEECLSID ClsId,IShell * pIShell,IModule * po,void ** ppObj)
{
*ppObj = NULL;
if(ClsId == AEECLSID_HELLOWORLD)
{
if(AEEApplet_New(sizeof(AEEApplet), ClsId, pIShell,po,(IApplet**)ppObj,
(AEEHANDLER)HelloWorld_HandleEvent,NULL) == TRUE)
{
return (AEE_SUCCESS);
}
}
return (EFAILED);
}
static boolean HelloWorld_HandleEvent(IApplet * pi, AEEEvent eCode, uint16 wParam, uint32 dwParam)
{
AEEDeviceInfo di;
AECHAR szBuf[] = {'H','e','l','l','o',' ','W','o', 'r', 'l', 'd', '\0'};
AEEApplet * pMe = (AEEApplet*)pi;
switch (eCode)
{
case EVT_APP_START:
ISHELL_GetDeviceInfo (pMe->m_pIShell, &di);
IDISPLAY_ClearScreen (pMe->m_pIDisplay);
IDISPLAY_DrawText(pMe->m_pIDisplay, AEE_FONT_BOLD, szBuf, -1, 0, 0, 0, IDF_ALIGN_CENTER | IDF_ALIGN_MIDDLE);
IDISPLAY_Update (pMe->m_pIDisplay);
return(TRUE);
case EVT_APP_STOP:
return TRUE;
default:
break;
}
return FALSE;
}
UIE Player ‚ÍŽŸ‚̃vƒ‰ƒbƒgƒtƒH[ƒ€‚ɑΉž‚µ‚Ä‚¢‚Ü‚·F
· Java
o J2ME/MIDP (AT&T, Sprint)
o J2ME/DoJa (NTT DoCoMo 504i ˆÈ~)
o Personal Java
o J2SE (Applet/Application)
· BREW (VerizonA All-TelAau/KDDI)
· Danger Hiptop
· Palm OS 3.5 ˆÈ~
· Pocket PC
· Symbian
· Win32 ActiveX
· ƒQ[ƒ€ƒ{[ƒCƒAƒhƒoƒ“ƒXiƒvƒƒgƒ^ƒCƒvj
UJML ‚ł̓AƒvƒŠƒP[ƒVƒ‡ƒ“‚ÆƒŠƒ\[ƒX‚̓ǂݞ‚Ý‚É URL ‚ðŽg—p‚µ‚Ü‚·BUJML ‚̃vƒƒOƒ‰ƒ~ƒ“ƒOƒ‚ƒfƒ‹‚̓Xƒ^ƒ“ƒ_ƒ[ƒ“‚̃vƒŠƒCƒ“ƒXƒg[ƒ‹ƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚¾‚¯‚łȂA“®“I‚ȃNƒ‰ƒCƒAƒ“ƒgƒT[ƒoŒ^ƒlƒbƒgƒ[ƒNƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚àŠÈ’P‚É쬂ł«‚邿‚¤‚ÉÝŒv‚³‚ê‚Ä‚¢‚Ü‚·BUIE Player‚ÍA‘Š‘ÎƒpƒX‚Ì URL ‚ɉÁ‚¦ http ‚Æ file ‚Ì2‚‚̃XƒL[ƒ}‚ɑΉž‚µ‚Ä‚¢‚Ü‚·B
UJML ƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚Í UIE Player ‚ªŽÀs‚µ‚Ü‚·BUIE Player ‚ÍŒ‡Š×‚∫ˆÓ‚Ì‚ ‚éƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚©‚çƒfƒoƒCƒX‚ðŽç‚èAƒNƒ‰ƒbƒVƒ…‚µ‚½ƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ðƒAƒ“ƒ[ƒh‚µ‚Ü‚·B‚±‚Ì "sandbox" ‹@”\‚ÍAUJML ƒAƒvƒŠƒP[ƒVƒ‡ƒ““¯Žm‚ðŒÝ‚¢‚©‚ç•ی삷‚邾‚¯‚łȂAˆ«ˆÓ‚Ì‚ ‚éƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚É‚æ‚éƒfƒoƒCƒX‚ւ̃_ƒ[ƒW‚ð§ŒÀ‚µ‚Ü‚·B
ƒfƒtƒHƒ‹ƒg‚Å‚ÍAUJML ƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚©‚çƒtƒ@ƒCƒ‹ƒVƒXƒeƒ€‚â“d˜b’ A“d˜b‚̉¹º”ŒÄ‚Ȃǂ̃fƒoƒCƒX‹@”\‚ɃAƒNƒZƒX‚·‚邱‚Ƃ͂ł«‚Ü‚¹‚ñBƒfƒoƒCƒX‚Ì‹@”\‚⃊ƒ\[ƒX‚ւ̃AƒNƒZƒX‚ðŠJ•ú‚µ‚½ƒJƒXƒ^ƒ}ƒCƒY”Å‚Ì UIE Player ‚Å‚ÍA UIE Player ‚ÌÝ’è‚ð’Ê‚¶‚Ä_“î‚ȃZƒLƒ…ƒŠƒeƒBƒ|ƒŠƒV[‚ðŽÀŒ»‚µ‚Ä‚¢‚Ü‚·B‚±‚̃ZƒLƒ…ƒŠƒeƒBƒ|ƒŠƒV[‚ðŽg—p‚·‚邯M—Ђł«‚é UJML ƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚âƒp[ƒeƒBƒVƒ‡ƒ“‚É‚æ‚郊ƒ\[ƒX‚ւ̃AƒNƒZƒX‚ðŒÀ’è‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·BUIE Player ‚ÍAHTML/HTTP ƒuƒ‰ƒEƒUã‚ł̃NƒbƒL[ƒZƒLƒ…ƒŠƒeƒB‚ÉŽ—‚½AURL ƒx[ƒX‚̃Vƒ“ƒvƒ‹‚ȃZƒLƒ…ƒŠƒeƒBƒ|ƒŠƒV[‚ð”õ‚¦‚Ä‚¢‚Ü‚·B
ƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚̃Cƒ“ƒXƒg[ƒ‹ŠÇ—‚©‚烆[ƒU[‚ð‰ð•ú‚·‚邽‚ßAUIE Player ‚ł̓fƒoƒCƒX‚Ƀ[ƒJƒ‹‚È‹L‰¯‘•’u‚ðƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚̃LƒƒƒbƒVƒ…‚Æ‚µ‚ÄŽg‚¤‚±‚Æ‚ª‚Å‚«‚Ü‚·BƒLƒƒƒbƒVƒ…‚É‘¶Ý‚µ‚È‚¢ƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ÍUIE Player ‚ªƒlƒbƒgƒ[ƒN‚©‚çŽæ“¾‚µ‚Ü‚·BƒLƒƒƒbƒVƒ…‚ªˆê”t‚ɂȂÁ‚½ê‡AƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚͌¢‡‚ɃLƒƒƒbƒVƒ…‚©‚çŽÌ‚Ä‚ç‚ê‚Ü‚·B
‚±‚ÌŽd‘g‚݂̓fƒoƒCƒX‚̉^—pƒRƒXƒg‚ð‘啂ɉº‚°‚Ü‚·B——R‚ÍAƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚Ì•ÛŽç‚Æ”z•z‚ðƒT[ƒo[‘¤‚Ås‚¤‚½‚ßAƒfƒoƒCƒXã‚É‚¨‚¯‚éƒAƒvƒŠƒP[ƒVƒ‡ƒ“ŠÇ—‚ª•s—v‚ƂȂ邩‚ç‚Å‚·B‚±‚ÌŽd‘g‚݂͂܂½AƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚̃Aƒbƒvƒf[ƒg‚𓧉ߓI‚É”z•z‚·‚邱‚Æ‚ð‰Â”\‚É‚µ‚Ü‚·BƒAƒbƒvƒf[ƒg‚ð”z•z‚·‚é‚É‚ÍV‚µ‚¢ƒo[ƒWƒ‡ƒ“‚ðƒT[ƒo‚É”z”õ‚µ‚Ü‚·BV‚µ‚¢ƒo[ƒWƒ‡ƒ“‚ÍAƒ†[ƒU[‚ªƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ðŽÀs‚·‚邯ީ“®“I‚ɓǂݞ‚Ü‚ê‚Ü‚·B
UJML ‚Í UJML DTD‚É€‹’‚·‚é XML ƒx[ƒX‚̃}[ƒNƒAƒbƒvŒ¾Œê‚Å‚·B‚±‚ÌŒ¾Œê‚ł̓rƒWƒ…ƒAƒ‹ƒXƒe[ƒg‚Ì‹Lq‚ð’Ê‚¶‚ĉæ–Ê•\ަ‚ðs‚¢‚Ü‚·B‚Ü‚½ƒXƒe[ƒg‚É‚Í UIE Player ‚ªƒXƒe[ƒgŠÔ‚ð‘JˆÚ‚·‚éÛ‚Ì“®ì‚ð§Œä‚·‚éAŽÀsƒR[ƒh‚̃uƒƒbƒN‚ð‹Lq‚µ‚Ü‚·B
UJML ‚Í UIE Player ‚ƌĂ΂ê‚鬂³‚ȃAƒvƒŠƒP[ƒVƒ‡ƒ“iHTMLƒuƒ‰ƒEƒU‚Æ“¯“™‚Ì‚à‚Ì‚Æl‚¦‚Ä‚‚¾‚³‚¢j‚É‚æ‚Á‚ăfƒoƒCƒXã‚É•\ަ‚³‚ê‚Ü‚·BuBrowseriƒuƒ‰ƒEƒUjv‚ł͂ȂuPlayeriƒvƒŒƒCƒ„[jv‚Æ‚¢‚¤Œ¾—t‚ð—p‚¢‚é‚Ì‚ÍAHTML ƒRƒ“ƒeƒ“ƒc‚̂قƂñ‚Ç‚ªÃ“I‚ȃy[ƒW‚Å‚ ‚é‚̂ɑ΂µAUJML ƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ªƒAƒNƒeƒBƒu‚©‚“®“I‚Å‚ ‚邱‚ƂɗR—ˆ‚µ‚Ä‚¢‚Ü‚·BUJML ‚Í’Êí‚Ì HTML ‚ł͂ȂAƒXƒNƒŠƒvƒeƒBƒ“ƒO‚É‚æ‚éƒAƒNƒeƒBƒu‚©‚“®“I‚ȃRƒ“ƒeƒ“ƒc‚ðƒTƒ|[ƒg‚·‚é Dynamic HTMLiDHTMLj‚ÉŽ—‚Ä‚¢‚邯‚¢‚¦‚é‚Å‚µ‚傤B
‘¼‚̃}[ƒNƒAƒbƒvŒ¾Œêƒuƒ‰ƒEƒU‚ƈقȂèAUIE Player ‚Í UJML ƒeƒLƒXƒgƒtƒ@ƒCƒ‹‚ð’¼Ú•\ަ‚µ‚Ü‚¹‚ñBƒpƒtƒH[ƒ}ƒ“ƒX‚Ìő剻‚ÆƒŠƒ\[ƒXÁ”ïiCPU‚ƃƒ‚ƒŠj‚ÌŒø—¦‰»‚ð}‚邽‚ß‚ÉAUJML ƒeƒLƒXƒgƒtƒ@ƒCƒ‹‚Í UIE Player ‚ªˆ—‰Â”\‚ȃoƒCƒgƒR[ƒhƒtƒ@ƒCƒ‹‚ɃRƒ“ƒpƒCƒ‹‚·‚é•K—v‚ª‚ ‚è‚Ü‚·BƒRƒ“ƒpƒCƒ‰‚Í UJML ƒeƒLƒXƒgƒtƒ@ƒCƒ‹‚ðŒø—¦‚Ì‚‚¢ŽÀsŒ`Ž®‚ɃRƒ“ƒpƒCƒ‹‚µ‚Ü‚·B‚»‚ÌÛAŒ³‚Ì UJML ƒeƒLƒXƒgƒtƒ@ƒCƒ‹‚𬂳‚ȃTƒCƒY‚Ɉ³k‚µA‚ƒRƒXƒg‚©‚‘шæ‚ÌŒÀ‚ç‚ꂽƒƒCƒ„ƒŒƒXƒlƒbƒgƒ[ƒNã‚ł̒ÊM”\—¦‚ð‚‚߂܂·B
ƒRƒ“ƒpƒCƒ‰‚Í UJBC ƒtƒ@ƒCƒ‹‚ƌĂ΂ê‚éƒRƒ“ƒpƒCƒ‹Ï‚Ý‚Ì UJML ƒtƒ@ƒCƒ‹‚ðƒIƒtƒ‰ƒCƒ“‚Å쬂·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B ƒRƒ“ƒpƒCƒ‰‚͂܂½AƒT[ƒo‚ɃCƒ“ƒXƒg[ƒ‹‚·‚邱‚Ƃɂæ‚èƒIƒ“ƒfƒ}ƒ“ƒh‚ȃRƒ“ƒpƒCƒ‹‚ª‰Â”\‚ɂȂè‚Ü‚·B ŽŸ‚Ì2‚‚Ì}‚Å‚ÍAUJML ƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ðŠJ”‚µ”z•z‚·‚éÛ‚És‚¤ì‹Æ‚ð‚»‚ê‚¼‚ê‚̃P[ƒX‚É“–‚Ă͂߂ĉðà‚µ‚Ä‚¢‚Ü‚·B ʼn‚Ì}‚ł̓Iƒtƒ‰ƒCƒ“‚ŃRƒ“ƒpƒCƒ‹‚µ‚½ƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ðƒfƒoƒCƒX‚ɃvƒŠƒCƒ“ƒXƒg[ƒ‹‚µ‚Ä‚¢‚Ü‚·B ŽŸ‚Ì}‚ł̓fƒoƒCƒX‚©‚ç‚ÌƒŠƒNƒGƒXƒg‚ɉž‚¶‚ÄAƒT[ƒo[‘¤‚ŃAƒvƒŠƒP[ƒVƒ‡ƒ“‚ð“®“I‚ɃRƒ“ƒpƒCƒ‹‚µ‚Ä‚¢‚Ü‚·B ‚±‚Ì2‚‚̓Rƒ“ƒpƒCƒ‹•û–@‚Ì“ñ‹É’[‚Å‚·‚ªA‚±‚êˆÈŠO‚É‚à‘½‚‚̃oƒŠƒG[ƒVƒ‡ƒ“‚ª‘¶Ý‚µ‚Ü‚·B

}FƒRƒ“ƒpƒCƒ‹Ïƒtƒ@ƒCƒ‹‚É‚æ‚éƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚Ì”z•z

}Fƒ_ƒCƒiƒ~ƒbƒNƒRƒ“ƒpƒCƒ‹‚É‚æ‚éƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚Ì”z•z
‚±‚Ì2‚‚̔z•zƒ‚ƒfƒ‹‚ɑΉž‚·‚邽‚ß‚ÉAUIE Player ‚Í http ‚Æ file ‚Ì—¼ URL ƒXƒL[ƒ€‚ɑΉž‚µ‚Ä‚¢‚Ü‚·B
UIE Player ‚Í HTML ƒuƒ‰ƒEƒU‚Æ“¯—l‚É—š—ð‹@”\‚ð”õ‚¦‚Ä‚¢‚Ü‚·B—š—ð‚Æ‚ÍAŽÀs’†‚Ì UJML ƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚©‚ç’¼‘O‚̃AƒvƒŠƒP[ƒVƒ‡ƒ“‚É–ß‚ê‚邱‚Æ‚ðˆÓ–¡‚µ‚Ä‚¢‚Ü‚·BƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ð‹N“®‚·‚é‚É‚Í _run() ŠÖ”‚ðŽg—p‚µ‚Ü‚·B‚»‚ÌÛA‹N“®‡‚ɉž‚¶‚ăAƒvƒŠƒP[ƒVƒ‡ƒ“‚ªƒqƒXƒgƒŠ[ƒXƒ^ƒbƒN‚ɒljÁ‚³‚ê‚Ü‚·BƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ðƒAƒ“ƒ[ƒh‚·‚é‚É‚Í _unload() ŠÖ”‚ðŽg—p‚µ‚Ü‚·BƒAƒ“ƒ[ƒh‚µ‚½ƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚̓Xƒ^ƒbƒN‚©‚çÁ‹Ž‚³‚êA’¼‘O‚ÉŽÀs‚³‚ê‚Ä‚¢‚½ƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ªÄ‹N“®‚³‚ê‚Ü‚·BƒfƒoƒCƒXã‚Å‹N“®‚µ‚½ UIE Player ‚ªÅ‰‚ÉŽÀs‚·‚ׂ«ƒAƒvƒŠƒP[ƒVƒ‡ƒ“ URL ‚ÌÝ’è•û–@‚â‹Lq•û–@‚̓vƒ‰ƒbƒgƒtƒH[ƒ€‚Ɉˑ¶‚µ‚Ü‚·B‚±‚ê‚ÍA–{ƒhƒLƒ…ƒƒ“ƒg‚̃AƒvƒŠƒP[ƒVƒ‡ƒ“EƒfƒvƒƒCƒƒ“ƒg‚ÌÍ‚Åà–¾‚µ‚Ä‚¢‚Ü‚·B
•¡”‚Ì HTML ƒy[ƒW‚©‚çƒEƒFƒuƒTƒCƒg‚ð\’z‚Å‚«‚é‚̂Ɠ¯—l‚ÉAUJML ƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ð•¡”‚̃p[ƒeƒBƒVƒ‡ƒ“‚©‚ç\¬‚·‚邱‚Æ‚ª‰Â”\‚Å‚·B_run() ŠÖ”‚É‚æ‚Á‚ēǂݞ‚Þƒp[ƒeƒBƒVƒ‡ƒ“‚̓AƒvƒŠƒP[ƒVƒ‡ƒ“‚ÌuƒƒCƒ“ƒp[ƒeƒBƒVƒ‡ƒ“v‚ ‚é‚¢‚Íueƒp[ƒeƒBƒVƒ‡ƒ“v‚ƌĂ΂ê‚Ü‚·B_link() ŠÖ”‚œǂݞ‚ÝA_unlink() ŠÖ”‚ŃAƒ“ƒ[ƒh‚·‚éƒp[ƒeƒBƒVƒ‡ƒ“‚ÍŽqƒp[ƒeƒBƒVƒ‡ƒ“‚ƌĂ΂ê‚Ü‚·B‚±‚ê‚ç‚ÌŠÖ”‚Ì–¼‘O‚̓oƒCƒiƒŠŒ`Ž®‚ÌŽÀsƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚â DLL ‚Ȃǂ̖½–¼‹K‘¥‚ɉˆ‚Á‚Ä–½–¼‚³‚ê‚Ä‚¢‚Ü‚·BUJML ƒp[ƒeƒBƒVƒ‡ƒ“‚Í—˜—p•û–@‚É‚æ‚Á‚Ä HTML ƒy[ƒW‚ƃoƒCƒiƒŠ DLL ‚Ì—¼“Á«‚𕹂¹Ž‚‚±‚Æ‚ªo—ˆ‚Ü‚·B_link() ŠÖ”‚ÅƒŠƒ“ƒN‚µ‚½ƒp[ƒeƒBƒVƒ‡ƒ“‚̓qƒXƒgƒŠ[ƒXƒ^ƒbƒN‚ɒljÁ‚³‚ê‚Ü‚¹‚ñB‚»‚Ì‘ã‚í‚èA‚±‚̃p[ƒeƒBƒVƒ‡ƒ“‚͌ĂÑo‚µŒ³‚ÌŽqƒp[ƒeƒBƒVƒ‡ƒ“‚ƂȂèAeiŒÄ‚Ño‚µŒ³j‚ªƒAƒ“ƒ[ƒh‚³‚ê‚邯‹¤‚ɃAƒ“ƒ[ƒh‚³‚ê‚Ü‚·B
ƒƒ‚ƒŠƒŠƒ\[ƒX‚ðŽg—p‚·‚éƒp[ƒeƒBƒVƒ‡ƒ“‚̓qƒXƒgƒŠ[ƒXƒ^ƒbƒN‚̈ê”Ôã‚É‚ ‚錻݂̃AƒvƒŠƒP[ƒVƒ‡ƒ“‚ÆA‚»‚±‚©‚烊ƒ“ƒN‚³‚ê‚Ä‚¢‚éƒp[ƒeƒBƒVƒ‡ƒ“‚ÉŒÀ‚ç‚ê‚Ü‚·BƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ªƒqƒXƒgƒŠ[ƒXƒ^ƒbƒN‚̈ê”Ôã‚łȂ‚È‚Á‚½Žž‚ÉA‚»‚̃AƒvƒŠƒP[ƒVƒ‡ƒ“‚ªŽg—p‚·‚é‚·‚ׂẴƒ‚ƒŠƒŠƒ\[ƒX‚͉ð•ú‚³‚êAV‚µ‚¢ƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚É‚æ‚éŽg—p‚ª‰Â”\‚ɂȂè‚Ü‚·B
ƒƒ‚F_run() ŠÖ”‚ðŒÄ‚уAƒvƒŠƒP[ƒVƒ‡ƒ“‚ªƒqƒXƒgƒŠ[ƒXƒ^ƒbƒN‚̈ê”Ôã‚Ƀ[ƒh‚³‚ê‚Ä‚¢‚éŠÔ‚ÍAƒ[ƒh‚ªŠ®—¹‚·‚é‚܂Ō»Ý‚̃AƒvƒŠƒP[ƒVƒ‡ƒ“‚ªƒƒ‚ƒŠƒŠƒ\[ƒX‚ðÁ”‚Ü‚·BƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ðŠJ”‚·‚éÛ‚ÍAV‹ŒƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚Ì—¼•û‚ªƒƒ‚ƒŠ‚É“¯Žž‚ÉŽû‚܂邿‚¤‚ÉÝŒv‚µ‚Ä‚‚¾‚³‚¢B
‚±‚Ì–â‘è‚ð‰ñ”ð‚·‚é•û–@‚̈ê‚‚ÉAƒƒ‚ƒŠ‚ÌÁ”ï—Ê‚ª‚È‚¢’†ŠÔƒAƒvƒŠƒP[ƒVƒ‡ƒ“iƒ[ƒ_[j‚ð Žg—p‚·‚é•û–@‚ª‚ ‚è‚Ü‚·B‚±‚̃hƒLƒ…ƒƒ“ƒg‚É‚ ‚éuAppSplash.ujmlv‚Ì—á‚ðŽQÆ‚µ‚Ä‚‚¾‚³‚¢B
ŽŸ‚Ì}‚ÍAˆÈ‰º‚Ì‚±‚Æ‚ª‹N‚±‚Á‚½Œã‚Ì UIE Player ‚̃qƒXƒgƒŠ[ƒXƒ^ƒbƒN‚Ìó‘Ô‚ðŽ¦‚µ‚Ä‚¢‚Ü‚·F

1. UIE Player ‚ª App 1 ‚ðƒfƒtƒHƒ‹ƒg‚̃AƒvƒŠƒP[ƒVƒ‡ƒ“‚Æ‚µ‚Ä‹N“®B ‚±‚ê‚É‚æ‚èAApp 1 ‚ªƒqƒXƒgƒŠ[ƒXƒ^ƒbƒN‚̈ê”Ô‰º‚Å‚ ‚é0”Ô–Ú‚ÉŠi”[‚³‚ê‚éB
2. App 1 ‚ª App 2 ‚ðŽÀs‚µAApp 2 ‚ªƒqƒXƒgƒŠ[ƒXƒ^ƒbƒN‚̈ê”Ôã‚Å‚ ‚é1”Ô–Ú‚ÉŠi”[‚³‚ê‚éB
3. App 2 ‚ªƒp[ƒeƒBƒVƒ‡ƒ“ Part A ‚ðƒŠƒ“ƒNB
4. App 1 ‚Í‚±‚ÌŽž“_‚Ńƒ‚ƒŠ‚𕨗“I‚Éè—L‚µ‚ĂȂ¢‚½‚ßAƒOƒŒ[•\ަB
App 2 ‚ª _unload() ŠÖ”‚ðŒÄ‚ÑAŽ©g‚ðƒAƒ“ƒ[ƒh‚·‚éB ‚·‚邯 UIE Player ‚Í App 1 ‚ðÄ‹N“®‚µAƒqƒXƒgƒŠ[ƒXƒ^ƒbƒN‚ÍŽŸ‚Ì}‚̂悤‚ɂȂéF

UIE Player ‚͂قƂñ‚ǂ̃fƒoƒCƒX‚É‚¨‚¢‚Ä UJML ƒtƒ@ƒCƒ‹‚ðƒ[ƒJƒ‹‚ɃLƒƒƒbƒVƒ…‚µA ƒlƒbƒgƒ[ƒNŒo—R‚ÌĎ擾‚ð–h‚¢‚Å‚¢‚Ü‚·B
UIE Player ‚Í‘½‚‚̃vƒ‰ƒbƒgƒtƒH[ƒ€‚É‚¨‚¢‚Ä uƒvƒƒpƒeƒBƒoƒbƒOv‚Æ‚¢‚¤Œ`Ž®‚Å ƒ[ƒJƒ‹‚ÅŽ‘±“I‚ȃXƒgƒŒ[ƒW‚ð’ñ‹Ÿ‚µ‚Ä‚¢‚Ü‚·B ƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚̓vƒƒpƒeƒBƒoƒbƒO‚ð’Ê‚¶‚ėʂ̃f[ƒ^‚ð’[––‚ɕۑ¶‚·‚邱‚Ƃɂæ‚èA Ž©g‚Ìó‘Ԃ̈ꕔ‚ð•Û‘¶‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B
ŽŸ‚̃ZƒNƒVƒ‡ƒ“‚Å‚ÍAUjinn[1]‚Æ‚¢‚¤ ƒQ[ƒ€‚ÌŠJ”‚ð’Ê‚¶‚Ä UJML ‚Ì‹@”\‚ðà–¾‚µ‚Ü‚·B‚±‚̃Q[ƒ€‚ÍuSameGamev‚Æ‚¢‚¤ƒQ[ƒ€‚ªƒx[ƒX‚ɂȂÁ‚Ä‚¨‚èA ŽŸ‚̂悤‚ÈŠî–{Žd—l‚ðŽ‚Á‚Ä‚¢‚Ü‚·B
ƒAƒvƒŠƒP[ƒVƒ‡ƒ“–¼Fujinn
–Ú“IF
ƒOƒŠƒbƒh‚©‚ç‰Â”\‚ÈŒÀ‚è‚̃{ƒbƒNƒX‚ðŽæ‚èœ‚«AƒXƒRƒA‚ðÅ‘å‚É‚·‚邱‚ÆB
—V‚Ñ•ûF
㉺¶‰E‚É“¯F‚̃{ƒbƒNƒX‚ª1‚ˆÈã‚ ‚éê‡A
‚»‚ê‚ç‚̃{ƒbƒNƒX‚ð‘I‘ð‚µ‚ÄŽæ‚蜂‚±‚Æ‚ª‚Å‚«‚Ü‚·B
ƒ{ƒbƒNƒX‚ƃ{ƒbƒNƒX‚Í—×Ú‚µ‚ĂȂ¯‚ê‚΂Ȃè‚Ü‚¹‚ñB
“¾“_‚ÌŒvŽZ•û–@F
ƒ{ƒbƒNƒX‚ðŽæ‚èœ‚‚Æ(n) * (n - 1) ‚ª“¾“_‚ɉÁŽZ‚³‚ê‚Ü‚·B
n ‚Í“¯Žž‚ÉÁ‚µ‚½ƒ{ƒbƒNƒX‚Ì”‚ðŽ¦‚µ‚Ü‚·B
ƒQ[ƒ€I—¹Žž‚ÉŽc‚Á‚Ä‚¢‚éƒ{ƒbƒNƒX‚Ì”‚̓yƒiƒ‹ƒeƒB‚Æ‚µ‚ÄŒ¸“_‚³‚ê‚Ü‚·B
‚·‚ׂẴ{ƒbƒNƒX‚ðŽæ‚èœ‚¢‚½ê‡‚̓{[ƒiƒX‚Æ‚µ‚Ä(mScore / 4)‚ª—^‚¦‚ç‚ê‚Ü‚·B
ŽŸ‚̃XƒNƒŠ[ƒ“ƒVƒ‡ƒbƒg‚ÍAƒQ[ƒ€ƒŒƒCƒAƒEƒg‚Æ“®ì‚ðŽ¦‚µ‚Ä‚¢‚Ü‚·B

ƒvƒŒƒCƒ„[‚ªŒ»Ý‚̃{ƒbƒNƒXi¶ãj‚ð‘I‘ð‚µ‚½‚½‚ßA‰©F‚̃{ƒbƒNƒX‚ƉE‘¤‚É—×Ú‚·‚é‚Q‚‚̉©F‚¢ƒ{ƒbƒNƒX‚ªÁ‚¦‚Ü‚·B

ˆÈ~‚ÌŠeƒZƒNƒVƒ‡ƒ“‚Å‚ÍA”‘½‚‚Ì UJML ƒTƒ“ƒvƒ‹‚ðЉ‚Ä‚¢‚Ü‚·B ‚±‚ê‚ç‚Ì UJML ‚Í‚·‚ׂÄuUjinnv‚ÌŠJ”‚ÉŠñ—^‚µ‚Ä‚¢‚Ü‚·BUJML ‚̃Tƒ“ƒvƒ‹‚ÍA ‚±‚̃hƒLƒ…ƒƒ“ƒg‚É“¯«‚³‚ê‚Ä‚¢‚éƒtƒ@ƒCƒ‹‚ÉŽû‚ß‚ç‚ê‚Ä‚¢‚Ü‚·B ¥”ñASDK ‚ðƒCƒ“ƒXƒg[ƒ‹‚µ‚Ä SDK ‚É“¯«‚³‚ê‚Ä‚¢‚éƒTƒ“ƒvƒ‹‚ðŽÀs‚µ‚Ă݂Ă‚¾‚³‚¢B
UIE SDK ‚̃Cƒ“ƒXƒg[ƒ‹•û–@F
1.
Java(TM) 2 Platform Standard Edition‚̃Cƒ“ƒXƒg[ƒ‹
ƒTƒ“Eƒ}ƒCƒNƒƒVƒXƒeƒ€ƒY‚ÌJ2SE‚Íujava.sun.com/j2sev‚Å’ñ‹Ÿ‚³‚ê‚Ä‚¢‚Ü‚·B
ƒTƒ“‚̃EƒFƒuƒTƒCƒg‚ÌŽg—pà–¾‘‚É]‚Á‚ÄJ2SE Software Development Kit‚ðƒ_ƒEƒ“ƒ[ƒh‚µAƒCƒ“ƒXƒg[ƒ‹‚µ‚Ä‚‚¾‚³‚¢B
2.
ŠÂ‹«•Ï”uJAVA_HOMEv‚ðAJ2SE SDK ‚̃‹[ƒgƒfƒBƒŒƒNƒgƒŠ‚Éݒ肵‚Ä‚‚¾‚³‚¢B
ƒfƒtƒHƒ‹ƒg‚Å‚ÍuC:\j2sdk1.4.1_01v‚Å‚·BŠÂ‹«•Ï”‚ÌÝ’è‚ɂ‚¢‚Ä‚Í
‚±‚¿‚ç‚ð‚²——‚‚¾‚³‚¢B
3.
UIE SDK ‚̃Cƒ“ƒXƒg[ƒ‰‚ðŽÀs‚µ‚Ä‚‚¾‚³‚¢B
UIE SDK ‚Í www.uievolution.com ‚©‚çƒ_ƒEƒ“ƒ[ƒh‚µ‚Ä‚‚¾‚³‚¢B
łଂ³‚È UJML ƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚Ì—áF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ujml PUBLIC "-//UIEVOLUTION//DTD UJML 1.2//EN" "ujml.dtd">
<ujml>
<application>
</application>
</ujml>
ƒtƒ@ƒCƒ‹–¼FApplication.ujml
ŽŸ‚̎臂ðs‚¢AUIE SDK Debugger ‚Å‚±‚̃AƒvƒŠƒP[ƒVƒ‡ƒ“‚ðŽÀs‚µ‚Ü‚·F
1. ƒfƒoƒbƒK‚ð‹N“®BuƒXƒ^[ƒg>ƒvƒƒOƒ‰ƒ€>UIEvolution SDKv’†‚ÌuUIEƒfƒoƒbƒK‹N“®v‚ð‘I‘ðB
2. ƒAƒvƒŠƒP[ƒVƒ‡ƒ“‘I‘ðƒ_ƒCƒAƒƒO‚ÅÝ’è‚ðs‚¤B
a. Application.ujml ‚ւ̃pƒX‚ð“ü—ÍB ‚à‚µInside UJML ZIPƒtƒ@ƒCƒ‹‚ðuD:\My Documents\Inside UJMLv‚É“WŠJ‚µ‚½ê‡‚Í URL‚Éufile:///D:\My Documents\Inside UJML\UJML\Application.ujmlv‚Æ“ü—Í iuŽQÆvƒ{ƒ^ƒ“‚ðŽg‚Á‚ÄAƒtƒ@ƒCƒ‹‚ðŽw’è‚·‚邱‚Æ‚à‰Â”\jB
b. ƒXƒLƒ“‚Ì‘I‘ð‚ÅuFlip Phone, MIDP (136x140)v‚ð‘I‘ðB
c.
OK ‚ðƒNƒŠƒbƒNB
3.
ƒc[ƒ‹ƒo[‚Ì Run ƒ{ƒ^ƒ“‚ðƒNƒŠƒbƒNB

4. ƒfƒoƒCƒXƒGƒ~ƒ…ƒŒ[ƒ^‚ÉŽŸ‚̂悤‚ȉæ–Ê‚ª•\ަ‚³‚ê‚éF

Ujinn ‚Íc‰¡‚̘g‚ðŽg‚Á‚½ƒQ[ƒ€‚Å‚ ‚邽‚ߊiŽqó‚̃{ƒbƒNƒX‚ð•\ަ‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B ‚Ü‚½ƒXƒNƒŠ[ƒ“Åã•”‚ÉŒ»Ý‚̃XƒRƒA‚ƃŒƒxƒ‹‚Ȃǂ̬тð•\ަ‚µ‚Ü‚·B
<display> —v‘f‚ðŽg—p‚·‚邯A‰æ–ʂւ̕`‰æ‚ðŠÈ’P‚És‚¤‚±‚Æ‚ª‚Å‚«‚Ü‚·B‚±‚±‚ł̓{ƒbƒNƒX‚ÆuScorev‚̃eƒLƒXƒg‚ð•`‚¢‚Ä‚¢‚Ü‚·F
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ujml PUBLIC "-//UIEVOLUTION//DTD UJML 1.2//EN" "ujml.dtd">
<ujml>
<application>
<display>
<label>
<text>Score</text>
<x>2</x>
<y>2</y>
<fg>&_COLOR_BLUE;</fg>
</label>
<box>
<x>5</x>
<y>20</y>
<width>30</width>
<height>50</height>
<fg>&_COLOR_RED;</fg>
<bg>&_COLOR_GREEN;</bg>
</box>
</display>
</application>
</ujml>
ƒtƒ@ƒCƒ‹F Display.ujml
SDK ƒfƒoƒbƒKã‚Å Display.ujml ‚ðŽÀs‚·‚邯AƒGƒ~ƒ…ƒŒ[ƒ^‚ªŽŸ‚ÌŒ‹‰Ê‚ð•Ô‚µ‚Ü‚·F

‚±‚Ì—á‚ł̓fƒtƒHƒ‹ƒg‚Ì <display> —v‘f‚ðŽg‚Á‚Ä‚¢‚Ü‚·B ƒfƒtƒHƒ‹ƒg‚Ì <display> ‚Ì“à—e‚ÍXV‚·‚邱‚Æ‚ª‚Å‚«‚È‚¢‚½‚ßA ÓI‚È”wŒi‰æ‘œ‚Ȃǂ̕\ަ‚ÉŒü‚¢‚Ä‚¢‚Ü‚·B
UJML ‚Å“®“I‚ȉæ–Ê•\ަ‚ðs‚¤‚É‚Í <display> —v‘f‚ð’ljÁ‚Å‹Lq‚µ‚Ü‚·B ƒvƒƒOƒ‰ƒ€‚ð’Ê‚¶‚ăXƒe[ƒg•Ï”‚Ì’l‚ÌXV‚·‚邯‚±‚ê‚ç‚Ì—v‘f‚ð§Œäi•\ަAXVA”ñ•\ަj‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B
UJML ‚̃Xƒe[ƒg‚͕ϔ‚ªŽæ‚蓾‚é’l‚Ì‚»‚ꂼ‚ê‚ɂ‚«1‚ˆÈã‚Ì <display> —v‘f‚ðŠÖ˜A‚¯‚Ü‚·B —Ⴆ‚΃u[ƒŠƒAƒ“•Ï”‚Í‚Q‚‚̒l‚ðŽæ‚è“¾‚邽‚ßAtrue ‚Æ false ‚Ì2‚‚Ìó‘Ô‚ð•\‚·‚±‚Æ‚ª‚Å‚«‚Ü‚·B UJML‚Å‚ÍA‚±‚ê‚ç‚Ì’l‚à‚µ‚‚̓Xƒe[ƒg‚²‚Æ‚É<display> —v‘f‚ð’è‹`‚·‚邱‚Æ‚ªo—ˆ‚Ü‚·B
ŽŸ‚Ì—á‚Å‚ÍAƒu[ƒŠƒAƒ“Œ^‚̃Xƒe[ƒg•Ï” sBox ‚ª true ‚Ì’l‚ðŽæ‚Á‚½ê‡‚Ì <display> —v‘f‚ª‚P‚Â’è‹`‚µ‚Ä‚¢‚Ü‚·B sBox ‚ª true ‚Éݒ肳‚ê‚邯‰æ–Êã‚Ƀ{ƒbƒNƒX‚ª•\ަ‚³‚ê‚Ü‚·B ‹t‚É false ‚ɃZƒbƒg‚³‚ꂽê‡Afalse ‚É’è‹`‚¯‚ç‚ꂽ <display> ‚ª‘¶Ý‚µ‚È‚¢‚½‚߃{ƒbƒNƒX‚ª”ñ•\ަ‚ƂȂè‚Ü‚·B
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ujml PUBLIC "-//UIEVOLUTION//DTD UJML 1.2//EN" "ujml.dtd">
<ujml>
<application>
<state-variables>
<state-var name="sBox" type="boolean"/>
</state-variables>
<script>
sBox = true;
</script>
<states>
<state var="sBox">
<transition value="true">
<display>
<box>
<x>5</x>
<y>20</y>
<width>30</width>
<height>50</height>
<fg>&_COLOR_RED;</fg>
<bg>&_COLOR_GREEN;</bg>
</box>
</display>
</transition>
</state>
</states>
</application>
</ujml>
ƒtƒ@ƒCƒ‹F DisplayState.ujml
‚±‚Ì—á‚ðŽÀs‚·‚é‚ÆŽŸ‚̂悤‚ȉæ–Ê‚ª•\ަ‚³‚ê‚Ü‚·F

ŽŸ‚Ì—á‚ł͂³‚«‚Ù‚Ç‚Ì Display.ujml ‚ð•ÏX‚µA <display> —v‘f‚ðƒeƒLƒXƒg‚ƃ{ƒbƒNƒX‚Ì‚»‚ꂼ‚ê‚É•ªŠ„‚µ‚Ä‹Lq‚µ‚Ä‚¢‚Ü‚·B •ªŠ„‚É‚æ‚èAƒeƒLƒXƒg‚ƃ{ƒbƒNƒX‚Ì‚»‚ꂼ‚ê‚ɑΉž‚·‚éƒXƒe[ƒg•Ï”‚ð true ‚Ü‚½‚Í false ‚Éݒ肵 ŠeX‚ð“Æ—§‚µ‚Ä•\ަE”ñ•\ަ‚·‚邱‚Æ‚ª‰Â”\‚ɂȂè‚Ü‚µ‚½B
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ujml PUBLIC "-//UIEVOLUTION//DTD UJML 1.2//EN" "ujml.dtd">
<ujml>
<application>
<state-variables>
<state-var name="sScore" type="boolean"/>
<state-var name="sBox" type="boolean"/>
</state-variables>
<script>
sScore = true;
sBox = true;
</script>
<states>
<state var="sScore">
<transition value="true">
<display>
<label>
<text>Score</text>
<x>2</x>
<y>2</y>
<fg>&_COLOR_BLUE;</fg>
</label>
</display>
</transition>
</state>
<state var="sBox">
<transition value="true">
<display>
<box>
<x>5</x>
<y>20</y>
<width>30</width>
<height>50</height>
<fg>&_COLOR_RED;</fg>
<bg>&_COLOR_GREEN;</bg>
</box>
</display>
</transition>
</state>
</states>
</application>
</ujml>
ƒtƒ@ƒCƒ‹F DisplayStates.ujml
UJML ‚ƃXƒe[ƒg‚ɂ‚¢‚ÄŠo‚¦‚Ä‚¨‚‚ׂ«Å‚àd—v‚È‚±‚ÆF
‰æ–Ê•\ަ‚ðXV‚·‚é—Bˆê‚Ì•û–@‚ÍA <display> —v‘f‚ðŠÜ‚ÞƒXƒe[ƒg•Ï”‚Ì’l‚ð•ÏX‚·‚邱‚ÆB
ƒXƒe[ƒg•Ï”‚ÉŒ»Ý‚Ì’l‚ðÄ“xݒ肵‚Ä‚à•\ަ‚ɉe‹¿‚ð—^‚¦‚Ü‚¹‚ñB ‰æ–Ê‚ð‘‚«Š·‚¦‚é‚É‚ÍA’l‚ð‘‚«Š·‚¦‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñ B [2] ‚±‚ê‚̓u[ƒŠƒAƒ“Œ^‚̕ϔ‚æ‚è‚à®”Œ^‚̃Xƒe[ƒg•Ï”‚̂ق¤‚ªƒpƒƒtƒ‹‚È‚±‚Æ‚ðˆÓ–¡‚µ‚Ä‚¢‚Ü‚·B ”ñ•\ަ‚Ìó‘Ô‚ª•K—v‚Èê‡Aƒu[ƒŠƒAƒ“Œ^ƒXƒe[ƒg•Ï”‚ł͒ÊíA’l‚ª true ‚Ìꇂɕ\ަ‚ðs‚¢A false ‚Ìꇂɔñ•\ަ‚ðs‚¢‚Ü‚·B‚»‚Ì‚½‚ߎÀŽ¿1Ží—Þ‚Ì <display> —v‘f‚µ‚©Ž‚Ă܂¹‚ñB
<display> —v‘f‚Í Z-ORDER ‚ɉž‚¶‚Ä”w–Ê‚©‚ç‘O–Ê‚Éd‚Ë‚ç‚êAƒfƒBƒXƒvƒŒƒCã‚É•`‰æ‚³‚ê‚Ü‚·B ‚±‚ê‚Í <display> —v‘f‚ª UJML ƒ\[ƒXƒtƒ@ƒCƒ‹‚ÉoŒ»‚·‚釘‚Ɉê’v‚µ‚Ä‚¢‚Ü‚·B ƒfƒtƒHƒ‹ƒg‚Ì <display> ‚Í Z-ORDER ‚ª’á‚Å”w–ʂɕ`‰æ‚³‚ê‚Ü‚·B ƒtƒ@ƒCƒ‹‚ÌÅŒã‚É‹Lq‚·‚é <display> ‚Í Z-ORDER ‚ª‚‚Å‘O–ʂɕ`‰æ‚³‚ê‚Ü‚· [3]B
ŽŸ‚Ì—á‚Å‚Í DisplayStates.ujml ‚É2‚‚̃{ƒbƒNƒX‚Æ”wŒi‚ð’ljÁ‚µ‚Ä‚¢‚Ü‚·B ‚Ü‚½ UJML ‚Ì”z—ñ‚Ì쬂Ǝg‚¢•û‚ɂ‚¢‚Ä‚àЉ‚Ä‚¢‚Ü‚·B sBox ‚Í‘O‰ñ‚̃Tƒ“ƒvƒ‹‚É‚¨‚¢‚Ă͒Pƒ‚ȃu[ƒŠƒAƒ“Œ^‚̕ϔ‚Å‚µ‚½‚ªA ‚±‚±‚ł͌•ʕ\ަ‚ª‰Â”\‚Ȃ悤‚É—v‘f”‚ª3‚‚̃u[ƒŠƒAƒ“Œ^‚Ì”z—ñ‚ɂȂÁ‚Ä‚¢‚Ü‚·B ÅŒã‚ÉA‚±‚̃vƒƒOƒ‰ƒ€‚ł̓rƒWƒ…ƒAƒ‹—v‘f‚Ì ARGBiƒAƒ‹ƒtƒ@AÔA—ÎAÂj‚Ì’l‚ðŽw’è‚·‚é•û–@‚ðЉ‚Ä‚¢‚Ü‚·B
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ujml PUBLIC "-//UIEVOLUTION//DTD UJML 1.2//EN" "ujml.dtd">
<ujml>
<application>
<state-variables>
<state-var name="sScore" type="boolean"/>
<state-var name="sBox" type="boolean" size="3"/>
</state-variables>
<script>
sScore = true;
sBox[ 0 ] = true;
sBox[ 1 ] = true;
sBox[ 2 ] = true;
</script>
<display>
<box>
<width>136</width>
<height>140</height>
</box>
</display>
<states>
<state var="sScore">
<transition value="true">
<display>
<label>
<text>Score</text>
<x>2</x>
<y>2</y>
<fg>&_COLOR_BLUE;</fg>
</label>
</display>
</transition>
</state>
<state var="sBox" index="0">
<transition value="true">
<display>
<box>
<x>5</x>
<y>20</y>
<width>30</width>
<height>50</height>
<fg>0xffcccccc</fg>
<bg>0xffcccccc</bg>
</box>
</display>
</transition>
</state>
<state var="sBox" index="1">
<transition value="true">
<display>
<box>
<x>10</x>
<y>25</y>
<width>30</width>
<height>50</height>
<fg>0xff999999</fg>
<bg>0xff999999</bg>
</box>
</display>
</transition>
</state>
<state var="sBox" index="2">
<transition value="true">
<display>
<box>
<x>15</x>
<y>30</y>
<width>30</width>
<height>50</height>
<fg>0xff666666</fg>
<bg>0xff666666</bg>
</box>
</display>
</transition>
</state>
</states>
</application>
</ujml>
ƒtƒ@ƒCƒ‹F DisplayZOrder.ujml
ƒvƒƒOƒ‰ƒ€‚ÌŽÀsŒ‹‰ÊF

‚±‚ê‚܂ł̗á‚Å‚Í UJML ‚ðŽg‚Á‚ĉæ–ʂɕ¨‚ð•\ަ‚·‚é•û–@‚ð‰ðà‚µ‚Ä‚«‚Ü‚µ‚½B‚Ü‚½ <scirpt> —v‘f‚ðŽg‚Á‚½ƒvƒƒOƒ‰ƒ€ƒƒWƒbƒN‚Ì•\Œ»•û–@‚àŠ_ŠÔŒ©‚邱‚Æ‚ª‚Å‚«‚½‚ÆŽv‚¢‚Ü‚·BUJML ‚͕ϔAŽZpŽ®A˜_—Eƒu[ƒŠƒAƒ“Ž®A•¶Žš—ñŽ®Aƒtƒ[§Œä•¶AŠÖ”‚ƃCƒxƒ“ƒg‚ðƒTƒ|[ƒg‚µ‚Ä‚¢‚Ü‚·B
‚±‚ê‚܂ł̗á‚Å‚ÍAƒXƒe[ƒg•Ï”‚Ì錾•û–@‚ÆŽg—p•û–@‚ðЉ‚Ü‚µ‚½BƒXƒe[ƒg•Ï”‚̓Xƒe[ƒg‘JˆÚ‚ɑΉž‚·‚邽‚ß‚Ì“à•”“I‚ȃI[ƒo[ƒwƒbƒh‚ðŽ‚Á‚Ä‚¢‚Ü‚·B ‚»‚±‚Å UJML ‚̓Xƒe[ƒg‚ðŽ‚½‚È‚¢’Pƒ•Ï”‚à”õ‚¦‚Ä‚¢‚Ü‚·B ƒXƒe[ƒg•Ï”‚Æ’Pƒ•Ï”‚Í‘¼‚̃vƒƒOƒ‰ƒ€Œ¾Œê‚̕ϔ‚Æ“¯—lAŽ®‚âŽÀs•¶‚ÉŽg—p‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B
ŽŸ‚Ì—á‚Å‚ÍAƒXƒRƒA‚Ì’l‚ƃ{ƒbƒNƒX‚ÌF‚ðŠi”[‚·‚邽‚߂̕ϔ‚ð’ljÁ‚µ‚Ä‚¢‚Ü‚·B‚Ü‚½ XML ƒGƒ“ƒeƒBƒeƒB’è‹`‚ðŽg—p‚µ‚½’蔂Ì錾‚ƃfƒBƒXƒvƒŒƒC—v‘f‚É‚¨‚¯‚é•Ï”‚ƒ蔂̎g‚¢•û‚ðЉ‚Ä‚¢‚Ü‚·B
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ujml PUBLIC "-//UIEVOLUTION//DTD UJML 1.2//EN" "ujml.dtd" [
<!ENTITY MAX_BOXES "3">
<!ENTITY BOX_WIDTH "30">
<!ENTITY BOX_HEIGHT "50">
]>
<ujml>
<application>
<state-variables>
<state-var name="sScore" type="boolean"/>
<state-var name="sBox" type="boolean" size="&MAX_BOXES;"/>
</state-variables>
<variables>
<var name="mScore" type="int"/>
<var name="mBox" type="int" size="&MAX_BOXES;"/>
</variables>
<script>
mScore = 0;
sScore = true;
mBox[ 0 ] = 0xffcccccc;
sBox[ 0 ] = true;
mBox[ 1 ] = 0xff999999;
sBox[ 1 ] = true;
mBox[ 2 ] = 0xff666666;
sBox[ 2 ] = true;
</script>
<display>
<box>
<width>136</width> <height>140</height>
</box>
</display>
<states>
<state var="sScore">
<transition value="true">
<display>
<label>
<text><eval>mScore</eval></text>
<x>2</x> <y>2</y>
<fg>&_COLOR_BLUE;</fg>
</label>
</display>
</transition>
</state>
<state var="sBox" index="0">
<transition value="true">
<display>
<box>
<x>5</x> <y>20</y>
<width>&BOX_WIDTH;</width>
<height>&BOX_HEIGHT;</height>
<fg><eval>mBox[ 0 ]</eval></fg>
<bg><eval>mBox[ 0 ]</eval></bg>
</box>
</display>
</transition>
</state>
<state var="sBox" index="1">
<transition value="true">
<display>
<box>
<x>10</x> <y>25</y>
<width>&BOX_WIDTH;</width>
<height>&BOX_HEIGHT;</height>
<fg><eval>mBox[ 1 ]</eval></fg>
<bg><eval>mBox[ 1 ]</eval></bg>
</box>
</display>
</transition>
</state>
<state var="sBox" index="2">
<transition value="true">
<display>
<box>
<x>15</x> <y>30</y>
<width>&BOX_WIDTH;</width>
<height>&BOX_HEIGHT;</height>
<fg><eval>mBox[ 2 ]</eval></fg>
<bg><eval>mBox[ 2 ]</eval></bg>
</box>
</display>
</transition>
</state>
</states>
</application>
</ujml>
ƒtƒ@ƒCƒ‹FVariables.ujml
•\ަŒ‹‰ÊF

UJML‚̓AƒvƒŠƒP[ƒVƒ‡ƒ“‚̃tƒ[§Œä‚ÆŽ®‚Ì•]‰¿‚Ì‚½‚ß‚É ‚Q‚‚̃XƒNƒŠƒvƒgŒ¾Œê‚ðƒTƒ|[ƒg‚µ‚Ä‚¢‚Ü‚·B ‚±‚±‚܂ł̗á‚Å‚ÍA UJML ‚ª‘Ήž‚µ‚Ä‚¢‚é ECMA ƒXƒNƒŠƒvƒgiJavaScriptj‚̃TƒuƒZƒbƒg‚ðŽg‚Á‚Ä‚¢‚Ü‚µ‚½B JavaScript ‚Í <script> —v‘f‚É‹Lq‚µ‚Ü‚·B CAC++AJava ‚»‚µ‚Ä JavaScript ‚̂悤‚ȃvƒƒOƒ‰ƒ~ƒ“ƒOŒ¾Œê‚ɸ’Ê‚µ‚½l‚Å‚ ‚ê‚ÎA UJML ƒAƒvƒŠƒP[ƒVƒ‡ƒ““à‚Å JavaScript ‚ð‹Lq‚·‚é‚â‚è•û‚ªŽg‚¢‚â‚·‚¢‚Å‚µ‚傤B
UJML ‚͂܂½AJavaScript ‚Æ“¯“™‚Ì‹@”\‚ðŽ‚¿A‚©‚ÂAXML \•¶‚ðˆÛŽ‚·‚é UJML ƒXƒNƒŠƒvƒg‚É‚à‘Ήž‚µ‚Ä‚¢‚Ü‚·B UJML ƒXƒNƒŠƒvƒg‚Í <execute> —v‘f‚É‹Lq‚µ‚Ü‚·B ƒvƒƒOƒ‰ƒ}[‚ª‘Oq‚̃vƒƒOƒ‰ƒ~ƒ“ƒOŒ¾Œê‚ɸ’Ê‚µ‚ĂȂ¢ê‡‚ÍAUJML ƒXƒNƒŠƒvƒg‚ÌŠwK‚©‚çŽn‚ß‚é‚Ù‚¤‚ªŠy‚Å‚µ‚傤B ‚µ‚©‚µ UJML ƒXƒNƒŠƒvƒg‚Íç’·‚ɂȂ肪‚¿‚Å‚ ‚邽‚ßA•¡ŽG‚ÈŒvŽZ‚âƒvƒƒOƒ‰ƒ€‚̃tƒ[§Œä‚ð s‚¤ê‡‚ɃR[ƒh‚̉“ǫ‚ªˆ«‚‚È‚Á‚Ä‚µ‚Ü‚¢‚Ü‚·BƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚̃vƒƒOƒ‰ƒ€ƒƒWƒbƒN‚ª •¡ŽG‚ɂȂéꇂÍAJavaScript ‚Ì•û‚ªŠÈ’P‚Å‚ ‚邯Œ¾‚¦‚é‚Å‚µ‚傤B
ŽŸ‚Ì—á‚Å‚Í JavaScript ‚Æ UJML ƒXƒNƒŠƒvƒg‚ª“¯“™‚Å‚ ‚邱‚Æ‚ðŽ¦‚µ‚Ä‚¢‚Ü‚·B ‚±‚êˆÈŠO‚Ì—á‚Í‘S‚Ä JavaScript ‚ðŽg‚Á‚Ä‚¢‚Ü‚·B
‚±‚Ì—á‚Í‘O‰ñ‚Ì Variables.ujml ‚Ì UJML ƒXƒNƒŠƒvƒg”łł·F
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ujml PUBLIC "-//UIEVOLUTION//DTD UJML 1.2//EN" "ujml.dtd" [
<!ENTITY MAX_BOXES "3">
<!ENTITY BOX_WIDTH "30">
<!ENTITY BOX_HEIGHT "50">
]>
<ujml>
<application>
<state-variables>
<state-var name="sScore" type="boolean"/>
<state-var name="sBox" type="boolean" size="&MAX_BOXES;"/>
</state-variables>
<variables>
<var name="mScore" type="int"/>
<var name="mBox" type="int" size="&MAX_BOXES;"/>
</variables>
<execute>
<set var="mScore">0</set>
<set-state var="sScore">true</set-state>
<set var="mBox">
<index>0</index>
<val>0xffcccccc</val>
</set>
<set-state var="sBox">
<index>0</index>
<val>true</val>
</set-state>
<set var="mBox">
<index>1</index>
<val>0xff999999</val>
</set>
<set-state var="sBox">
<index>1</index>
<val>true</val>
</set-state>
<set var="mBox">
<index>2</index>
<val>0xff666666</val>
</set>
<set-state var="sBox">
<index>2</index>
<val>true</val>
</set-state>
</execute>
<display>
<box>
<width>136</width>
<height>140</height>
</box>
</display>
<states>
<state var="sScore">
<transition value="true">
<display>
<label>
<text>
<ref var="mScore"/>
</text>
<x>2</x>
<y>2</y>
<fg>&_COLOR_BLUE;</fg>
</label>
</display>
</transition>
</state>
<state var="sBox" index="0">
<transition value="true">
<display>
<box>
<x>5</x>
<y>20</y>
<width>&BOX_WIDTH;</width>
<height>&BOX_HEIGHT;</height>
<fg>
<ref var="mBox">
<index>0</index>
</ref>
</fg>
<bg>
<ref var="mBox">
<index>0</index>
</ref>
</bg>
</box>
</display>
</transition>
</state>
<state var="sBox" index="1">
<transition value="true">
<display>
<box>
<x>10</x>
<y>25</y>
<width>&BOX_WIDTH;</width>
<height>&BOX_HEIGHT;</height>
<fg>
<ref var="mBox">
<index>1</index>
</ref>
</fg>
<bg>
<ref var="mBox">
<index>1</index>
</ref>
</bg>
</box>
</display>
</transition>
</state>
<state var="sBox" index="2">
<transition value="true">
<display>
<box>
<x>15</x>
<y>30</y>
<width>&BOX_WIDTH;</width>
<height>&BOX_HEIGHT;</height>
<fg>
<ref var="mBox">
<index>2</index>
</ref>
</fg>
<bg>
<ref var="mBox">
<index>2</index>
</ref>
</bg>
</box>
</display>
</transition>
</state>
</states>
</application>
</ujml>
ƒtƒ@ƒCƒ‹F UJMLscript.ujml
UJML ‚̓vƒƒOƒ‰ƒ}[‚ªˆê”Ê“I‚É—˜—p‚·‚é”’l‰‰ŽZA˜_—‰‰ŽZA‚»‚µ‚Ä•¶Žš—ñ‰‰ŽZ‚̉‰ŽZŽq‚ðƒTƒ|[ƒg‚µ‚Ä‚¢‚Ü‚·B Ž®‚ÍA’l‚ƕϔ‚ÌŽQÆ‚ª‹–‚³‚ê‚Ä‚¢‚é UJML —v‘f“à‚ÆƒXƒNƒŠƒvƒg“à‚É‹Lq‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B‚±‚Ìê‡AŽ®‚Í UJML ƒXƒNƒŠƒvƒg‚ ‚é‚¢‚Í <eval> —v‘f“à‚Ì JavaScript ‚łȂ¯‚ê‚΂Ȃè‚Ü‚¹‚ñB ‚Ü‚½UJML‚ł͂·‚ׂĂ̑®«’l‚̓Xƒ^ƒeƒBƒbƒN‚Ȓ蔂ł ‚邽‚ßAUJML —v‘f‚Ì‘®«’l‚ÉŽ®‚ð‹Lq‚·‚邱‚Ƃ͂ł«‚Ü‚¹‚ñB
ŽŸ‚Ì•\‚ł͎®‚̳‚µ‚¢Žg‚¢•û‚ÆŒë‚Á‚½Žg‚¢•û‚Ì—á‚ðЉ‚Ä‚¢‚Ü‚·F
|
³‚µ‚¢Žg‚¢•û |
Œë‚Á‚½Žg‚¢•û |
|
<script> x = y * 3; </script>
<box> <width><eval>w / 3</eval></width> <height><eval>h / 3</eval></height> </box> |
<state var= x + y index= z / 8 >
|
UJML ‚Í”‘½‚‚̃†ƒeƒBƒŠƒeƒBŠÖ”‚ð”õ‚¦‚Ä‚¢‚Ü‚·B ‚±‚ê‚ç‚ÌŠÖ”‚ɉÁ‚¦A“ÆŽ©‚ÌŠÖ”‚ð’è‹`‚·‚邱‚Æ‚ào—ˆ‚Ü‚·B
ŽŸ‚Ì—á‚ł̓fƒoƒCƒX‚̉æ–ʃTƒCƒY‚ɇ‚킹‚½ƒ_ƒCƒiƒ~ƒbƒN‚ȉæ–ʃŒƒCƒAƒEƒg‚ðs‚¤‚½‚ß‚ÉA Ž®‚Æ”Ží—ނ̃rƒ‹ƒgƒCƒ“ŠÖ”‚ð—˜—p‚µ‚Ä‚¢‚Ü‚·B ‚Ü‚½‚±‚Ì—á‚Å‚ÍuƒfƒtƒHƒ‹ƒgEƒXƒe[ƒgv‚Æ‚¢‚¤A”z—ñŒ^‚̃Xƒe[ƒg•Ï”‚Ì‘S—v‘f‚É“¯ˆê‚̃Xƒe[ƒg‚ð’è‹`‚·‚é‹@”\‚ÌŽg‚¢•û‚ðЉ‚Ä‚¢‚Ü‚·B
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ujml PUBLIC "-//UIEVOLUTION//DTD UJML 1.2//EN" "ujml.dtd" [
<!ENTITY MAX_BOXES "3">
]>
<ujml>
<application>
<state-variables>
<state-var name="sScore" type="boolean"/>
<state-var name="sBox" type="boolean" size="&MAX_BOXES;"/>
</state-variables>
<variables>
<var name="mScore" type="int"/>
<var name="mBox" type="int" size="&MAX_BOXES;"/>
<var name="mTextHeight" type="int"/>
<var name="mScrWidth" type="int"/>
<var name="mScrHeight" type="int"/>
<var name="mBoxWidth" type="int"/>
<var name="mBoxHeight" type="int"/>
</variables>
<script>
mTextHeight = _text_height( 0, 0, 0 );
mScrWidth = _getIntProperty( &_PROPERTY_INT_SCREEN_WIDTH; );
mScrHeight = _getIntProperty( &_PROPERTY_INT_SCREEN_HEIGHT; );
mBoxWidth = mScrWidth / &MAX_BOXES;;
mBoxHeight = mScrHeight - mTextHeight;
mScore = 0;
sScore = true;
mBox[ 0 ] = 0xffcccccc;
sBox[ 0 ] = true;
mBox[ 1 ] = 0xff999999;
sBox[ 1 ] = true;
mBox[ 2 ] = 0xff666666;
sBox[ 2 ] = true;
</script>
<display>
<box>
<width> <eval>mScrWidth</eval> </width>
<height> <eval>mScrHeight</eval> </height>
<fg>&_COLOR_BLACK;</fg>
<bg>&_COLOR_BLACK;</bg>
</box>
</display>
<states>
<state var="sScore">
<transition value="true">
<display>
<label>
<text> <eval>mScore</eval> </text>
<x>1</x> <y>1</y>
<fg>&_COLOR_YELLOW;</fg>
</label>
</display>
</transition>
</state>
ŽŸ‚̃Tƒ“ƒvƒ‹ƒR[ƒh‚ł͔z—ñŒ^‚̃Xƒe[ƒg•Ï” sBox ‚Ì‚·‚ׂĂ̗v‘f‚ð‚P‚‚̃fƒtƒHƒ‹ƒgƒXƒe[ƒg‚Å’è‹`‚µ‚Ä‚¢‚Ü‚·BƒfƒtƒHƒ‹ƒgƒXƒe[ƒg‚ðŽg‚¤Žå‚È–Ú“I‚ÍA”z—ñ“à‚Ì‘SƒXƒe[ƒg‚ª“¯ˆê‚Å‚ ‚éê‡‚É UJML ƒR[ƒh‚Ì‹Lq—Ê‚ðŒ¸‚ç‚·‚±‚Ƃɂ ‚è‚Ü‚·[4]B
<state var="sBox" index="*">
<transition value="true">
<display>
<box>
<x> <eval>_state_index() * mBoxWidth</eval> </x>
<y> <eval>mTextHeight</eval> </y>
<width> <eval>mBoxWidth</eval> </width>
<height> <eval>mBoxHeight</eval> </height>
<fg> <eval>mBox[ _state_index() ]</eval> </fg>
<bg> <eval>mBox[ _state_index() ]</eval> </bg>
</box>
</display>
</transition>
</state>
</states>
</application>
</ujml>
ƒtƒ@ƒCƒ‹F Functions.ujml
ŽŸ‚̃XƒNƒŠ[ƒ“ƒVƒ‡ƒbƒg‚̓Gƒ~ƒ…ƒŒ[ƒ^‚Å—lX‚ȃfƒoƒCƒXƒXƒLƒ“‚ðŽw’肵‚½ê‡‚Ì•\ަŒ‹‰Ê‚Å‚·F



ƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚͈ê”Ê“I‚ÉAƒfƒoƒCƒX‚̉æ–ʃTƒCƒY‚ðl—¶‚µ‚½•`‰æ‚ðs‚¤‚±‚Æ‚ª–]‚Ü‚µ‚¢‚Æ‚³‚ê‚Ä‚¢‚Ü‚·Bc’·‚̉æ–ʂƉ¡’·‚̉æ–ʂ̗¼•û‚ɑΉž‚·‚éƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ÌŠJ”‚Í¢“ïA‚ ‚é‚¢‚Í•s•K—v‚©‚à‚µ‚ê‚Ü‚¹‚ñ‚ªAŒg‘Ñ“d˜b‚Ì‘½‚‚͉æ–ʂ̃AƒXƒyƒNƒg”䂪“¯ˆê‚Å‚ ‚èA‰æ–ʃTƒCƒY‚݂̂ªˆÙ‚È‚Á‚Ä‚¢‚Ü‚·B‚µ‚Ì•ÏXi‚Ü‚½•ÏX–³‚µj‚ÅA‘½‚‚̃fƒoƒCƒX‚ɑΉž‚·‚邱‚Æ‚ª‘_‚¢‚Å‚ ‚é‚È‚ç‚ÎA“Á’è‚̃AƒXƒyƒNƒg”ä‚̉æ–ʂɕ`‰æ‚ðÅ“K‰»‚µA‰æ–ʃTƒCƒY‚̑嬂ɂàl—¶‚·‚ê‚Ηǂ¢Œ‹‰Ê‚𓾂ç‚ê‚é‚Å‚µ‚傤B
UJML ‚̓~ƒjƒ}ƒŠƒXƒg‚ÈŽv‘z‚ÌŒ³‚ÉÝŒv‚³‚ê‚Ä‚¢‚邽‚ßA—pˆÓ‚³‚ê‚Ä‚¢‚éƒtƒ[§Œä•¶‚Í if ‚Æ while ‚ÉŒÀ‚ç‚ê‚Ä‚¢‚Ü‚·Bswitch ‚â for ‚̓Tƒ|[ƒg‚µ‚Ä‚¢‚Ü‚¹‚ñB
ŽŸ‚Ì—á‚Å‚Í while ƒ‹[ƒv‚ðŽg‚Á‚Ä”z—ñ’†‚Ì‘Sƒ{ƒbƒNƒX‚ð•\ަ‚µ‚Ü‚·B‚±‚±‚ł͊eƒ{ƒbƒNƒX‚Ì x ޲•ûŒü‚̈ʒu‚ðŒvŽZ‚·‚邽‚߂Ɋ֔‚ðŽg—p‚µ‚Ä‚¢‚Ü‚·F
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ujml PUBLIC "-//UIEVOLUTION//DTD UJML 1.2//EN" "ujml.dtd" [
<!ENTITY MAX_BOXES "3">
]>
<ujml>
<application>
<state-variables>
<state-var name="sScore" type="boolean"/>
<state-var name="sBox" type="boolean" size="&MAX_BOXES;"/>
</state-variables>
<variables>
<var name="mScore" type="int"/>
<var name="mBox" type="int" size="&MAX_BOXES;"/>
<var name="mTextHeight" type="int"/>
<var name="mScrWidth" type="int"/>
<var name="mScrHeight" type="int"/>
<var name="mBoxWidth" type="int"/>
<var name="mBoxHeight" type="int"/>
<var name="i" type="int"/>
</variables>
<functions>
<function name="getX" type="int">
<parameters>
<var name="box" type="int"/>
</parameters>
<variables>
<var name="x" type="int"/>
</variables>
<script>
x = box * mBoxWidth;
</script>
<return>
<eval>x</eval>
</return>
</function>
</functions>
<script>
mTextHeight = _text_height( 0, 0, 0 );
mScrWidth = _getIntProperty( &_PROPERTY_INT_SCREEN_WIDTH; );
mScrHeight = _getIntProperty( &_PROPERTY_INT_SCREEN_HEIGHT; );
mBoxWidth = mScrWidth / &MAX_BOXES;;
mBoxHeight = mScrHeight - mTextHeight;
mScore = 0;
sScore = true;
mBox[ 0 ] = 0xffcccccc;
mBox[ 1 ] = 0xff999999;
mBox[ 2 ] = 0xff666666;
while (i < &MAX_BOXES;)
{
sBox[ i ] = true;
i = i + 1;
}
</script>
<display>
<box>
<width> <eval>mScrWidth</eval> </width>
<height> <eval>mScrHeight</eval> </height>
<fg>&_COLOR_BLACK;</fg>
<bg>&_COLOR_BLACK;</bg>
</box>
</display>
<states>
<state var="sScore">
<transition value="true">
<display>
<label>
<text> <eval>mScore</eval> </text>
<x>1</x> <y>1</y>
<fg>&_COLOR_YELLOW;</fg>
</label>
</display>
</transition>
</state>
<state var="sBox" index="*">
<transition value="true">
<display>
<box>
<x><eval>getX( _state_index() )</eval></x>
<y> <eval>mTextHeight</eval> </y>
<width> <eval>mBoxWidth</eval> </width>
<height> <eval>mBoxHeight</eval> </height>
<fg> <eval>mBox[ _state_index() ]</eval> </fg>
<bg> <eval>mBox[ _state_index() ]</eval> </bg>
</box>
</display>
</transition>
</state>
</states>
</application>
</ujml>
ƒ†[ƒU“ü—͂ƃVƒXƒeƒ€ƒXƒe[ƒ^ƒX‚Ì•ÏX‚ÍAƒCƒxƒ“ƒg‚ð’Ê‚¶‚Ä UJML ƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚É“`‚¦‚ç‚ê‚Ü‚·B
ŽŸ‚Ì—á‚ł̓tƒ@ƒ“ƒNƒVƒ‡ƒ“ƒL[ F1 ‚̃Cƒxƒ“ƒgƒnƒ“ƒhƒ‰‚ð’è‹`‚µ‚Ä‚¢‚Ü‚·B ƒ†[ƒU[‚ª F1 ‚ð‰Ÿ‚·‚ÆAƒCƒxƒ“ƒgƒnƒ“ƒhƒ‰‚ªƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ðƒAƒ“ƒ[ƒh‚µ‚Ü‚·B
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ujml PUBLIC "-//UIEVOLUTION//DTD UJML 1.2//EN" "ujml.dtd" [
<!ENTITY MAX_BOXES "3">
]>
<ujml>
<application>
<state-variables>
¥¥¥
</state-variables>
<variables>
¥¥¥
</variables>
<script>
¥¥¥
</script>
<display>
<box>
<width> <eval>mScrWidth</eval> </width>
<height> <eval>mScrHeight</eval> </height>
<fg>&_COLOR_BLACK;</fg>
<bg>&_COLOR_BLACK;</bg>
</box>
<fn>
<text>Back</text>
<event name="onselect">
<accelerators>
<key>F1</key>
</accelerators>
<script>
_unload();
</script>
</event>
</fn>
</display>
<states>
¥¥¥
</states>
</application>
</ujml>
ƒtƒ@ƒCƒ‹F Events.ujml
ƒƒ‚F F1 ƒL[‚Íu–ß‚év‹@”\‚Æ‚µ‚ÄŽg—p‚·‚邱‚Æ‚ð‚¨Š©‚ß‚µ‚Ü‚·B ——R‚ÍABREW ‚Ȃǂ̃vƒ‰ƒbƒgƒtƒH[ƒ€‚ª‚±‚Ì‹““®‚ð•K—v‚Æ‚µ‚Ä‚¢‚邽‚ß‚ÆA ‘¼‚̃fƒoƒCƒX‚É‚¨‚¯‚郆[ƒUƒCƒ“ƒ^ƒtƒF[ƒXÝŒv‚Æe˜a«‚ª‚‚¢‚½‚߂ł·B —Ⴆ‚Α½‚‚ÌŒg‘Ñ“d˜b‚Íu–ß‚év‚âuƒNƒŠƒAv‹@”\‚ðŽ‚Á‚Ä‚¨‚èA ƒ\ƒj[‚Ì CLIE ‚àu–ß‚évƒ{ƒ^ƒ“‚ðŽ‚Á‚Ä‚¢‚Ü‚·B
ƒCƒxƒ“ƒg‚ÍAƒrƒWƒ…ƒAƒ‹—v‘f‚Ì <display> —v‘f‚ɂ̂݊֘A‚¯‚邱‚Æ‚ª‚Å‚«‚Ü‚·B
ƒƒ‚F ƒrƒWƒ…ƒAƒ‹—v‘f‚Ì•K—v‚È‚¢ê–ʂŃCƒxƒ“ƒgƒnƒ“ƒhƒ‰‚ð쬂µ‚½‚¢ê‡‚ÍA ‹óE“§–¾‚Ì <box> —v‘f‚ð—˜—p‚µ‚Ü‚·B
ƒXƒe[ƒg‚É‚Í <display> —v‘f‚Ì’è‹`‚¾‚¯‚łȂAƒXƒe[ƒg‚ª—LŒøiƒXƒe[ƒg•Ï”‚ª <tansition> —v‘f‚ÅŽw’è‚Ì’l‚Éݒ肳‚ê‚éj‚ɂȂÁ‚½Žž‚ÉŽÀs‚·‚éƒAƒvƒŠƒP[ƒVƒ‡ƒ“ƒƒWƒbƒN‚ð’è‹`‚·‚邱‚Æ‚à‚Å‚«‚Ü‚·B
ŽŸ‚Ì—á‚ł̓ƒbƒZ[ƒWƒ{ƒbƒNƒX‚ð•\ަŒãAdelay ƒXƒNƒŠƒvƒg‚ðŽg‚Á‚Ä‚T•bŒã‚É”ñ•\ަ‚É‚µ‚Ü‚·B
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ujml PUBLIC "-//UIEVOLUTION//DTD UJML 1.2//EN" "ujml.dtd">
<ujml>
<application>
<state-variables>
<state-var name="sBox" type="boolean"/>
</state-variables>
<script>
sBox = true;
</script>
<states>
<state var="sBox">
<transition value="true">
<display>
<box>
<x>5</x>
<y>20</y>
<width>30</width>
<height>50</height>
<fg>&_COLOR_RED;</fg>
<bg>&_COLOR_GREEN;</bg>
</box>
</display>
</transition>
</state>
</states>
</application>
</ujml>
ƒtƒ@ƒCƒ‹G DisplayState.ujml
ƒXƒe[ƒg•Ï” sMessageBox ‚ª true ‚Éݒ肳‚ê‚邯‚Æ‚à‚ÉAUIE Player ‚ªˆÈ‰º‚̃Xƒe[ƒg‘JˆÚ‚ðŽÀs‚µ‚Ü‚·BUIE Player ‚͂܂¸ <display> —v‘f‚ðˆ—‚µA‰æ–Ê•`‰æ‚ðs‚¤‚½‚ß‚É“à•”‚ÅŽg—p‚µ‚Ä‚¢‚éu•\ަƒŠƒXƒgv‚É <display> —v‘f‚ð’ljÁ‚µ‚Ü‚·BUIE Player ‚ÍŽŸ‚É <scirpt> ‚ðˆ—‚µ‚Ü‚·B‚µ‚©‚µ’¼‘O‚É <delay> —v‘f‚ª‚ ‚邽‚ß <script> ‚ðŽÀs‚·‚é‘ã‚í‚è‚ÉAŽÀs‚ð‚T•bŒã‚É’x‰„‚·‚éƒLƒ…[‚É—v‘f‚ð’ljÁ‚µ‚Ü‚·B
<state var="sMessageBox">
<transition value="true">
<display>
<multi-label>
<text>This is a message box.</text>
<x>10</x>
<y>30</y>
<width><eval>mScrWidth - 20</eval></width>
<height><eval>mScrHeight - 60</eval></height>
<fg>&_COLOR_LIME;</fg>
<bg>&_COLOR_MAROON;</bg>
</multi-label>
</display>
<delay>5000</delay>
<script>
sMessageBox = false;
</script>
</transition>
</state>
</states>
</application>
</ujml>
ƒtƒ@ƒCƒ‹FScriptStates.ujml

ƒXƒe[ƒg‚Ì’†‚Ì scipt ‚ÌŽå‚È—p“rF
· ƒƒWƒbƒN‚Ì’x‰„ŽÀs
· ƒƒWƒbƒN‚ÌŽžŠÔŠÇ—
· ƒAƒjƒ[ƒVƒ‡ƒ“
Ujinn ƒQ[ƒ€‚Å‚ÍAƒQ[ƒ€ƒtƒB[ƒ‹ƒh‚É8~8‚̃OƒŠƒbƒh‚ðŽg‚¢‚Ü‚·B ‚»‚±‚Å‚QŽŸŒ³‚Ì”z—ñŒ^ƒXƒe[ƒg•Ï”‚ðŽg‚¤‚悤‚ɃTƒ“ƒvƒ‹ƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ðC³‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B‚Ü‚½ƒ{ƒbƒNƒX‚ÌFî•ñ‚ðŠi”[‚·‚邽‚߂̔z—ñ‚𓱓ü‚µ‚Ü‚·B‚±‚Ì”z—ñ‚̉Šú‰»‚Í ƒfƒoƒCƒX‚̃Jƒ‰[‘ΉžiƒJƒ‰[‚Ü‚½‚̓OƒŒ[ƒXƒP[ƒ‹j‚ɉž‚¶‚ÄŒã‚Ù‚Çs‚¢‚Ü‚·B
‘¾Žš‚ÍC³•”•ª‚ð•\‚µ‚Ü‚·F
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ujml PUBLIC "-//UIEVOLUTION//DTD UJML 1.2//EN" "ujml.dtd" [
<!ENTITY MAX_ROWS "8">
<!ENTITY MAX_COLS "8">
<!ENTITY MAX_COLORS "4">
]>
<ujml>
<application>
<state-variables>
<state-var name="sBoxes" type="boolean" size="&MAX_ROWS;,&MAX_COLS;"/>
¥¥¥
</state-variables>
<variables>
<var name="mBoxes" type="int" size="&MAX_ROWS;,&MAX_COLS;"/>
<var name="mColorMap" type="int" size="&MAX_COLORS;"/>
<var name="r" type="int"/>
<var name="c" type="int"/>
¥¥¥
</variables>
<script>
¥¥¥
mColorMap[ 0 ] = 0xffcccccc;
mColorMap[ 1 ] = 0xff999999;
mColorMap[ 2 ] = 0xff666666;
mColorMap[ 3 ] = 0xff333333;
while (r < &MAX_ROWS;)
{
c = 0;
while (c < &MAX_COLS;)
{
mBoxes[ r ][ c ] = mColorMap[ (r + c) % &MAX_COLORS; ];
sBoxes[ r ][ c ] = true;
c = c + 1;
}
r = r + 1;
}
</script>
<display>
¥¥¥
</display>
<states>
¥¥¥
<state var="sBoxes" index="*,*">
<transition value="true">
<display>
<box>
<x> <eval>_state_index(1) * mBoxWidth</eval> </x>
<y>
<eval>mTextHeight + (_state_index(0) * mBoxHeight)</eval>
</y>
<width> <eval>mBoxWidth</eval> </width>
<height> <eval>mBoxHeight</eval> </height>
<fg>
<eval>mBoxes[ _state_index(0) ][ _state_index(1) ]</eval>
</fg>
<bg>
<eval>mBoxes[ _state_index(0) ][ _state_index(1) ]</eval>
</bg>
</box>
</display>
</transition>
</state>
¥¥¥
</states>
</application>
</ujml>
ƒtƒ@ƒCƒ‹F ArrayStates.ujml
‚±‚̃AƒvƒŠƒP[ƒVƒ‡ƒ“‚ðŽÀs‚·‚é‚ÆŽŸ‚̂悤‚ȉæ–Ê‚ª•\ަ‚³‚ê‚Ü‚·F

UIE SDK ƒfƒoƒbƒK‚̓AƒvƒŠƒP[ƒVƒ‡ƒ“‚̃lƒbƒgƒ[ƒNƒgƒ‰ƒtƒBƒbƒN‚ɂ‚¢‚Ä‚Ì d—v‚Èî•ñ‚ð’ñ‹Ÿ‚µ‚Ä‚¢‚Ü‚·B ‚Ü‚½ƒlƒbƒgƒ[ƒNƒNƒ‰ƒCƒAƒ“ƒg‚ƃT[ƒoŠÔ‚Ì’x‰„‚âƒf[ƒ^“]‘—‚̑шæ‚ðƒGƒ~ƒ…ƒŒ[ƒg‚·‚é‹@”\‚à”õ‚¦‚Ä‚¢‚Ü‚·BƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚̃f[ƒ^“]‘——ʂ̓fƒoƒbƒK‚ÌuƒŠƒNƒGƒXƒgvƒ^ƒu‚É•\ަ‚³‚ê‚Ü‚·B ‚Ü‚½ƒOƒŠƒbƒh‚ð8~8‚É•ÏX‚·‚邱‚Ƃɂæ‚èƒAƒvƒŠƒP[ƒVƒ‡ƒ“ƒTƒCƒY‚ª‘å‚«‚‚È‚Á‚Ä‚¢‚邱‚Æ‚É‚à‚²’–Ú‚‚¾‚³‚¢B

ƒTƒCƒY‚ª‘‰Á‚µ‚½——R‚ÍAƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚É61ŒÂ‚̃fƒBƒXƒvƒŒƒCƒXƒe[ƒg‚ð’ljÁ‚µ‚½‚©‚ç‚Å‚·BƒfƒtƒHƒ‹ƒgƒXƒe[ƒg‚ð—˜—p‚µ‚Ä‚¢‚é‚É‚àŠÖ‚í‚炸‚±‚̂悤‚ÈŒ‹‰Ê‚ɂȂèA‹Á‚©‚ꂽ‚©‚à‚µ‚ê‚Ü‚¹‚ñF
<state var="sBoxes" index="*,*">
<transition value="true">
<display>
<box>
<x> <eval>_state_index(1) * mBoxWidth</eval> </x>
<y>
<eval>mTextHeight + (_state_index(0) * mBoxHeight)</eval>
</y>
<width> <eval>mBoxWidth</eval> </width>
<height> <eval>mBoxHeight</eval> </height>
<fg>
<eval>mBoxes[ _state_index(0) ][ _state_index(1) ]</eval>
</fg>
<bg>
<eval>mBoxes[ _state_index(0) ][ _state_index(1) ]</eval>
</bg>
</box>
</display>
</transition>
</state>
ƒfƒtƒHƒ‹ƒgƒXƒe[ƒg‚ÍA“¯ˆê‚̃Xƒe[ƒg‚ðŽ‚ÂƒXƒe[ƒg•Ï”‚©‚ç\¬‚³‚ê‚é”z—ñ‚ðŠÈˆÕ‚ȃVƒ“ƒ^ƒbƒNƒX‚Å’è‹`‚·‚邽‚߂̋Lq•û–@‚ɉ߂¬‚Ü‚¹‚ñBƒfƒtƒHƒ‹ƒgƒXƒe[ƒg‚ÍAƒRƒ“ƒpƒCƒ‹Žž‚É64ƒR‚̓Ɨ§‚µ‚½ƒXƒe[ƒg‚É“WŠJ‚³‚ê‚Ü‚·B]‚Á‚ătƒ@ƒCƒ‹ƒTƒCƒY‚͑傫‚‚È‚è‚Ü‚·B
UJML‚Å‚ÍuƒfƒBƒXƒvƒŒƒCƒeƒ“ƒvƒŒ[ƒgv‚Æ‚¢‚¤ƒeƒ“ƒvƒŒ[ƒg‚ð’è‹`‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B ƒfƒBƒXƒvƒŒƒCƒeƒ“ƒvƒŒ[ƒg‚ðƒfƒBƒXƒvƒŒƒCƒXƒe[ƒg‚©‚çŽQÆ‚·‚邯 UIE Player ‚ª“WŠJ‚µ‚Ü‚·Bƒeƒ“ƒvƒŒ[ƒg‚Í‘Oq‚Ì—á‚̂悤‚ɃAƒvƒŠƒP[ƒVƒ‡ƒ“ƒTƒCƒY‚𬂳‚‚·‚éꇂ¾‚¯‚łȂAÄ—˜—p‰Â”\‚ȃfƒBƒXƒvƒŒƒC—v‘f‚ð’è‹`‚·‚é–Ú“I‚É‚à•Ö—˜‚Å‚·B
ŽŸ‚Ì—á‚Å‚ÍAƒOƒŠƒbƒh“à‚ÌŠeƒXƒe[ƒg‚ªƒeƒ“ƒvƒŒ[ƒg‚ð—˜—p‚·‚邿‚¤‚ÉA‚±‚ê‚܂ł̃AƒvƒŠƒP[ƒVƒ‡ƒ“‚ð‰ü—Ç‚µ‚Ä‚¢‚Ü‚·F
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ujml PUBLIC "-//UIEVOLUTION//DTD UJML 1.2//EN" "ujml.dtd"[
¥¥¥
]>
<ujml>
<application>
<state-variables>
¥¥¥
</variables>
<templates>
<template name="tBox">
<display>
<box>
<x> <eval>c * mBoxWidth</eval> </x>
<y> <eval>mTextHeight + (r * mBoxHeight)</eval> </y>
<width> <eval>mBoxWidth</eval> </width>
<height> <eval>mBoxHeight</eval> </height>
<fg>
<eval>mBoxes[ r ][ c ]</eval>
</fg>
<bg>
<eval>mBoxes[ r ][ c ]</eval>
</bg>
</box>
</display>
</template>
</templates>
<script>
¥¥¥
</script>
<display>
¥¥¥
</display>
<states>
¥¥¥
<state var="sBoxes" index="*,*">
<transition value="true">
<display>
<expand template="tBox"/>
</display>
</transition>
</state>
¥¥¥
</states>
</application>
</ujml>
ƒtƒ@ƒCƒ‹F Templates.ujml
ƒeƒ“ƒvƒŒ[ƒg‚ðŽg—p‚µ‚½‚±‚Ƃɂæ‚éƒtƒ@ƒCƒ‹ƒTƒCƒY‚Ìk¬‚É‚²’–Ú‚‚¾‚³‚¢F

‚±‚Ì—á‚ł͈ȑO‚Æ“¯—l‚É64ŒÂ‚̃fƒBƒXƒvƒŒƒCƒXƒe[ƒg‚ª‚ ‚è‚Ü‚·B ‚µ‚©‚µŠeƒXƒe[ƒg‚Ì’†‚ŃfƒBƒXƒvƒŒƒCƒGƒŒƒƒ“ƒg‚ð’¼Ú‹Lq‚µ‚Ä‚¢‚½‚Æ‚±‚ë‚ð ƒeƒ“ƒvƒŒ[ƒg‚ÌŽQƂɒu‚«Š·‚¦‚邱‚Ƃɂæ‚èA¶¬‚³‚ê‚éƒoƒCƒgƒR[ƒh‚ðk¬‚µ‚Ä‚¢‚Ü‚·B
ƒƒ‚F ƒeƒ“ƒvƒŒ[ƒg‚ł̓Oƒ[ƒoƒ‹•Ï”‚µ‚©ŽQƂł«‚Ü‚¹‚ñB ƒeƒ“ƒvƒŒ[ƒg‚ðŽg‚¤Û‚ÍAƒOƒ[ƒoƒ‹•Ï”‚Ì’l‚ƃXƒe[ƒg‘JˆÚ‚𓯒²‚³‚¹‚Ä‚‚¾‚³‚¢B “¯’²‚ðŽÀŒ»‚·‚é•û–@‚Ì1‚‚Ɋ֔‚ðŽg‚¤•û–@‚ª‚ ‚è‚Ü‚·B ƒeƒ“ƒvƒŒ[ƒg‚ðŽg—p‚·‚éƒfƒBƒXƒvƒŒ[ƒXƒe[ƒg‚Ì•\ަE”ñ•\ަ‚ðs‚¤Û‚É ƒXƒe[ƒg•Ï”‚ÌÝ’è‚ð’¼Ús‚킸AŠÖ”‚ð‰î‚µ‚Äs‚¤A‚Æ‚¢‚¤•û–@‚Å‚·B ‚±‚ÌŠÖ”‚ł̓eƒ“ƒvƒŒ[ƒg‚ª•K—v‚Æ‚·‚éƒOƒ[ƒoƒ‹•Ï”‚ÌÝ’è‚ðs‚Á‚Ä‚©‚çƒfƒBƒXƒvƒŒƒCƒXƒe[ƒg‚ð—LŒø‚É‚µ‚Ü‚·B‚±‚̃eƒNƒjƒbƒN‚ÍŒã‚Ì Ujinn ƒQ[ƒ€‚ÌŠJ”‚É‚¨‚¢‚ÄŽg—p‚µ‚Ü‚·B
Ujinn ƒQ[ƒ€‚ðŽÀ‘•‚·‚邽‚߂ɕK—v‚È UJML ‚̃p[ƒc‚ª‚»‚ë‚¢‚Ü‚µ‚½B ‚»‚ê‚ł͎ÀۂɃQ[ƒ€‚ð쬂µ‚Ü‚µ‚傤B
Ujinn ‚Å‚ÍF‚ðƒ‰ƒ“ƒ_ƒ€‚É‘g‚݇‚킹‚ăOƒŠƒbƒh‚ð쬂µ‚Ü‚·B ‚Ü‚¸ƒTƒ“ƒvƒ‹ƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ðC³‚µAƒOƒŠƒbƒh‚̉Šú‰»‚ðŽÀ‘•‚µ‚Ü‚µ‚傤B
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ujml PUBLIC "-//UIEVOLUTION//DTD UJML 1.2//EN" "../ujml.dtd" [
<!ENTITY and "&&">
<!ENTITY SCORE_ITEM_FG "&_COLOR_WHITE;">
<!ENTITY SCORE_ITEM_BG "0xff000066">
<!-- Limits -->
<!ENTITY MAX_ROWS "8">
<!ENTITY MAX_COLS "8">
<!ENTITY MAX_COLORS "4">
<!ENTITY CLEARING_COLOR "&_COLOR_WHITE;">
<!ENTITY CLEARED_COLOR "&_COLOR_TRANSPARENT;">
]>
<ujml>
<application>
<state-variables>
<state-var name="sBoxes" type="boolean" size="&MAX_ROWS;,&MAX_COLS;"/>
</state-variables>
<variables>
<var name="mTextHeight" type="int"/>
<var name="mScrHeight" type="int"/>
<var name="mScrWidth" type="int"/>
<var name="mBoxHeight" type="int"/>
<var name="mBoxWidth" type="int"/>
<var name="mColorMap" type="int" size="&MAX_COLORS;,2"/>
<var name="tBoxRow" type="int"/>
<var name="tBoxCol" type="int"/>
<var name="gSeed" type="int"/>
<var name="mBoxes" type="int" size="&MAX_ROWS;,&MAX_COLS;,2"/>
</variables>
<functions>
<function name="setColorMapEntry" type="void">
<parameters>
<var name="entry" type="int"/>
<var name="color1" type="int"/>
<var name="color2" type="int"/>
</parameters>
<script>
mColorMap[ entry ][ 0 ] = color1;
mColorMap[ entry ][ 1 ] = color2;
</script>
</function>
<function name="setupColorMap" type="void">
<script>
if (_getBooleanProperty( &_PROPERTY_BOOLEAN_COLOR_CAPABLE; ))
{
setColorMapEntry( 0, 0xffff0000, 0xffdd0000 );
setColorMapEntry( 1, 0xff00ff00, 0xff00dd00);
setColorMapEntry( 2, 0xff0000ff, 0xff0000dd);
setColorMapEntry( 3, 0xffffff00, 0xffdddd00);
}
else
{
setColorMapEntry( 0, 0xff000000, 0xffcccccc);
setColorMapEntry( 1, 0xff555555, 0xffcccccc);
setColorMapEntry( 2, 0xffaaaaaa, 0xffcccccc);
setColorMapEntry( 3, 0xffdddddd, 0xffcccccc);
}
</script>
</function>
<function name="start" type="void">
<variables>
<var name="row" type="int"/>
<var name="col" type="int"/>
</variables>
<script>
gSeed = _srand( 101 );
while (col < &MAX_COLS;)
{
row = 0;
while (row < &MAX_ROWS;)
{
mBoxes[row][col][0] = mColorMap[ gSeed % &MAX_COLORS; ][0];
mBoxes[row][col][1] = mColorMap[ gSeed % &MAX_COLORS; ][1];
tBoxRow = row;
tBoxCol = col;
sBoxes[ tBoxRow ][ tBoxCol ] = true;
gSeed = _srand( gSeed );
row = row + 1;
}
col = col + 1;
}
</script>
</function>
</functions>
<templates>
<template name="tBox">
<display>
<box>
<x> <eval>tBoxCol * mBoxWidth</eval> </x>
<y> <eval>tBoxRow * mBoxHeight + mTextHeight</eval> </y>
<width> <eval>mBoxWidth</eval> </width>
<height> <eval>mBoxHeight</eval> </height>
<fg> <eval>mBoxes[ tBoxRow ][ tBoxCol ][ 1 ]</eval> </fg>
<bg> <eval>mBoxes[ tBoxRow ][ tBoxCol ][ 0 ]</eval> </bg>
<box>
<x> <eval>mBoxWidth / 4</eval> </x>
<y> <eval>mBoxHeight / 4</eval> </y>
<width> <eval>mBoxWidth / 2</eval> </width>
<height> <eval>mBoxHeight / 2</eval> </height>
<fg> <eval>mBoxes[ tBoxRow ][ tBoxCol ][ 1 ]</eval> </fg>
<bg> <eval>mBoxes[ tBoxRow ][ tBoxCol ][ 1 ]</eval> </bg>
</box>
</box>
</display>
</template>
</templates>
<script>
mTextHeight = _text_height( 0, 0, 0 );
mScrWidth = _getIntProperty( &_PROPERTY_INT_SCREEN_WIDTH; );
mScrHeight = _getIntProperty( &_PROPERTY_INT_SCREEN_HEIGHT; );
mBoxWidth = mScrWidth / &MAX_COLS;;
mBoxHeight = (mScrHeight - mTextHeight) / &MAX_ROWS;;
setupColorMap();
start();
</script>
<display>
<box>
<width> <eval>mScrWidth</eval> </width>
<height> <eval>mScrHeight</eval> </height>
<fg>&_COLOR_BLACK;</fg>
<bg>&_COLOR_BLACK;</bg>
</box>
<fn>
<text>Back</text>
<event name="onselect">
<accelerators> <key>F1</key> </accelerators>
<script>
_unload();
</script>
</event>
</fn>
</display>
<states>
<state var="sBoxes" index="*,*">
<transition value="true">
<display>
<expand template="tBox"/>
</display>
</transition>
</state>
</states>
</application>
</ujml>
ƒtƒ@ƒCƒ‹F ujinn1.ujml

ƒ{ƒbƒNƒX‚ÌF‚ð‘I‚ÔÛ‚É—”‚ðŽg‚Á‚Ä‚¢‚邱‚Ƃɒ–Ú‚µ‚Ä‚‚¾‚³‚¢B F‚Ìî•ñ‚̓Jƒ‰[ƒ}ƒbƒv‚ɕۑ¶‚³‚êAƒfƒoƒCƒX‚̃Jƒ‰[‘Ήž‚ɉž‚¶‚ĉŠú‰»‚ª s‚í‚ê‚Ü‚·BŠeƒ{ƒbƒNƒX‚Í“¯ŒnF‚ð2‚ÂŽg‚Á‚½“ñd‚̃{ƒbƒNƒX‚Æ‚µ‚Ä•`‰æ‚µ‚Ä‚¢‚Ü‚·B ‚±‚ê‚ÍF‚Ì‹æ•Ê‚ª‚‚«‚É‚‚¢ƒ†[ƒU‚É‚àŒ©‚â‚·‚‚·‚邽‚߂̔z—¶‚Å‚·B
start() ŠÖ”‚̓{ƒbƒNƒX‚ÌF‚ð‰Šú‰»‚µAŠeƒ{ƒbƒNƒX‚̃Xƒe[ƒg‚ð true ‚Éݒ肵‚Ä•\ަ‚ðs‚Á‚Ä‚¢‚Ü‚·B•\ަ‚ðXV‚·‚邽‚߂Ɋ֔‚ðŽg—p‚·‚é•û–@‚àl‚¦‚ç‚ê‚Ü‚·‚ªA ƒ†[ƒU‚ª‘Ï‚¦‚ê‚È‚¢‚Ù‚Ç’x‚‚È‚Á‚Ä‚µ‚Ü‚¤‰Â”\«‚ª‚ ‚è‚Ü‚·B —Ⴆ‚ÎAujinn1.ujml ‚ÍŒg‘Ñ“d˜b‚É‚æ‚Á‚Ă͉æ–ʂ̉Šú‰»‚É‘å•Ï’·‚¢ŽžŠÔ‚ª‚©‚©‚è‚Ü‚·B [RA1]
’x‚ꂪ”¶‚·‚é——R‚ÍAUIE Player ‚ª‰æ–Ê‚ÌXV‚ðƒAƒCƒhƒ‹ŽžiUJML ‚ðŽÀs‚µ‚ĂȂ¢ó‘Ôj‚És‚Á‚Ä‚¢‚邱‚ƂɋNˆö‚µ‚Ä‚¢‚Ü‚·B]‚Á‚Ä start() ŠÖ”‚ðŽÀs‚µ‚Ä‚¢‚éŒÀ‚èAŠÖ”‚ªI—¹‚·‚é‚܂ŃfƒBƒXƒvƒŒƒC‚ðXV‚·‚é‚·‚ׂẴXƒe[ƒg‘JˆÚ‚ªƒ†[ƒU‚É•\ަ‚³‚ê‚Ü‚¹‚ñB
ƒOƒŠƒbƒh‚̉Šú‰»’†‚ɉæ–Ê‚ðXV‚·‚é‚É‚Í <delay> ‚ðŠÜ‚ñ‚¾ƒXƒe[ƒg‚ðŽg‚Á‚Ä start() ŠÖ”‚ðŽÀ‘•‚·‚é•û–@‚ªŠÈ’P‚Å‚·B<delay> ‚É‚æ‚éƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚Ì ˆêu‚̃AƒCƒhƒ‹ó‘Ô‚ÌŠÔ‚É UIE Player ‚ª‰æ–Ê‚ðXV‚µ‚Ü‚·B
ƒXƒe[ƒg‚ðŽg‚¢A—ñ‚ð1‚‰Šú‰»‚·‚é“x‚ɉæ–Ê‚ðXV‚·‚邿‚¤‚É start() ŠÖ”‚ð‘‚«’¼‚µ‚Ü‚µ‚傤B‚±‚¤‚·‚邱‚Ƃɂæ‚èA‰½‚©‚ª‹N‚«‚Ä‚¢‚邱‚Æ‚âƒvƒƒOƒ‰ƒ€‚ªis‚µ‚Ä‚¢‚邱‚Æ‚ðƒ†[ƒU‚ÉŽ‹Šo“I‚ɃtƒB[ƒhƒoƒbƒN‚Å‚«‚Ü‚·B
<ujml>
<application>
<state-variables>
<state-var name="sBoxes" type="boolean" size="&MAX_ROWS;,&MAX_COLS;"/>
<state-var name="sStart" type="boolean"/>
</state-variables>
<variables>
¥¥¥
<var name="gCol" type="int"/>
</variables>
<functions>
¥¥¥
</functions>
<templates>
¥¥¥
</templates>
<script>
¥¥¥
gSeed = _srand( 101 );
gCol = 0;
sStart = true;
</script>
<display>
¥¥¥
</display>
<states>
¥¥¥
<state var="sStart">
<transition value="true">
<delay>20</delay>
<variables>
<var name="row" type="int"/>
</variables>
<script>
row = 0;
while (row < &MAX_ROWS;)
{
mBoxes[row][gCol][0] = mColorMap[ gSeed % &MAX_COLORS; ][0];
mBoxes[row][gCol][1] = mColorMap[ gSeed % &MAX_COLORS; ][1];
tBoxRow = row;
tBoxCol = gCol;
sBoxes[ tBoxRow ][ tBoxCol ] = true;
gSeed = _srand( gSeed );
row = row + 1;
}
gCol = gCol + 1;
sStart == true ‚̃gƒ‰ƒ“ƒWƒVƒ‡ƒ“‚͈ê—ñ–ˆ‚ÉŽÀs‚µ‚Ü‚·B gCol ‚ª MAX_COLS ‚Æ“¯‚¶‚ɂȂÁ‚½ŽžAgStart ‚Í false ‚ɃZƒbƒg‚³‚ꃋ[ƒv‚ðI—¹‚µ‚Ü‚·
_clear_state( sStart );
sStart = gCol < &MAX_COLS;;
</script>
</transition>
</state>
</states>
</application>
</ujml>
ƒtƒ@ƒCƒ‹F ujinn2.ujml
C³Œã‚Ì Ujinn ‚Å‚ÍAstart() ŠÖ”‚ð휂µ‚ÄA‰Šú‰»ƒ‹[ƒv‚ð sStart ‚Æ‚¢‚¤ƒXƒe[ƒg‚Ɉړ®‚µ‚Ä‚¢‚Ü‚·BŠe—ñ‚ÌŠO‘¤‚̃‹[ƒv‚̓Oƒ[ƒoƒ‹•Ï” gCol ‚ŧŒä‚µ‚Ä‚¢‚Ü‚·B‚±‚̕ϔ‚͂܂½A true ‚ÉÄ“x‘JˆÚ‚·‚ׂ«‚©‚ð”»’è‚·‚邽‚߂ɃXƒNƒŠƒvƒg‚ÌI‚í‚è‚Å‚àŽg—p‚µ‚Ä‚¢‚Ü‚·Btrue ‚Ìó‘Ԃւ̃Xƒe[ƒg‘JˆÚ‚Í—ñ‚Ì’l‚ª MAX_COLS ‚æ‚è‚ଂ³‚¢ê‡‚É”¶‚µ‚Ü‚·B¬‚³‚ȃfƒBƒŒƒC‚ðŽg‚Á‚ÄA‰æ–Ê‚ÌXV‚ð‹§‚µ‚Ä‚¢‚é“_‚É‚à’–Ú‚µ‚Ä‚‚¾‚³‚¢B‚±‚̃fƒBƒŒƒC‚Í UIE Player ‚ɃAƒCƒhƒ‹ó‘Ô‚ð‹‚¢‚邱‚Ƃɂæ‚èA‰æ–ʂ̑‚«Š·‚¦‚ðŽÀŒ»‚µ‚Ä‚¢‚Ü‚·B
ƒƒ‚F ‰æ–Ê‚ð’èŠú“I‚ÉXV‚·‚郋[ƒv‚Å‚Í <delay> ‚ðŽg—p‚µ‚Ü‚·B
ƒQ[ƒ€‚ɂ̓†[ƒU“ü—Í‚ðŽó‚¯•t‚¯‚éŽè’i‚ð—pˆÓ‚µ‚È‚‚Ă͂Ȃè‚Ü‚¹‚ñB Œg‘Ñ“d˜b‚͈ê”Ê“I‚ÉA•ûŒüƒL[‚ÆŒˆ’èƒL[^‘I‘ðƒL[‚ð”õ‚¦‚Ä‚¢‚Ü‚·B PDA ‚̃†[ƒU“ü—͂̓Xƒ^ƒCƒ‰ƒXŽwŒü‚Å‚·B ŽŸ‚ÌC³‚ÅAUjinn ‚ɃJ[ƒ\ƒ‹‚ƃXƒ^ƒCƒ‰ƒX“ü—Í‚ð’ljÁ‚µ‚Ü‚·B
¥¥¥
<ujml>
<application>
<state-variables>
¥¥¥
<state-var name="sCursor" type="boolean"/>
</state-variables>
<variables>
¥¥¥
<var name="mCursorCol" type="int"/>
<var name="mCursorRow" type="int"/>
</variables>
<functions>
¥¥¥
<function name="setCursor" type="void">
<parameters>
<var name="row" type="int"/>
<var name="col" type="int"/>
</parameters>
<script>
mCursorRow = row;
mCursorCol = col;
sCursor = false;
sCursor = true;
</script>
</function>
</functions>
¥¥¥
<states>
¥¥¥
<state var="sCursor">
<transition value="true">
<display>
ʼn‚̃{ƒbƒNƒX‚ªƒXƒ^ƒCƒ‰ƒX‚̃^ƒbƒv‚ðŒŸo‚µ‚Ü‚·B ƒXƒ^ƒCƒ‰ƒX‚Ìꊂ̓Cƒxƒ“ƒgƒnƒ“ƒhƒ‹‚É‚æ‚Á‚ă{ƒbƒNƒX‚̈ʒu‚ɕϊ·‚³‚êA ƒJ[ƒ\ƒ‹‚ªƒ{ƒbƒNƒX‚Ɉړ®‚µ‚Ü‚·B
<box>
<y> <eval>mTextHeight</eval> </y>
<width> <eval>mBoxWidth * &MAX_COLS;</eval> </width>
<height> <eval>mBoxHeight * &MAX_ROWS;</eval> </height>
<fg>&_COLOR_TRANSPARENT;</fg>
<bg>&_COLOR_TRANSPARENT;</bg>
<event name="onselect">
<script>
setCursor(
_getIntProperty( &_VALUE_INT_ONSELECT_Y_REL; ) /
mBoxHeight,
_getIntProperty( &_VALUE_INT_ONSELECT_X_REL; ) /
mBoxWidth );
</script>
</event>
</box>
<box>
<x>
<eval>mCursorCol * mBoxWidth + mBoxWidth / 2 - 2</eval>
</x>
<y>
<eval>(mCursorRow * mBoxHeight) + mTextHeight + 2</eval>
</y>
<width> <eval>4</eval> </width>
<height> <eval>mBoxHeight - 4</eval> </height>
</box>
<box>
<x> <eval>mCursorCol * mBoxWidth + 2</eval> </x>
<y>
<eval>(mCursorRow * mBoxHeight) + mTextHeight +
mBoxHeight / 2 - 2</eval>
</y>
<width> <eval>mBoxWidth - 4</eval> </width>
<height> <eval>4</eval> </height>
<event name="onselect">
<accelerators> <key>LEFT</key> </accelerators>
<script>
setCursor( mCursorRow, (mCursorCol + &MAX_COLS; - 1)
% &MAX_COLS; );
</script>
</event>
</box>
<box>
<x>
<eval>mCursorCol * mBoxWidth + mBoxWidth / 2 - 2</eval>
</x>
<y>
<eval>(mCursorRow * mBoxHeight) + mTextHeight +
mBoxHeight / 2 - 2</eval>
</y>
<width> <eval>4</eval> </width>
<height> <eval>4</eval> </height>
<bg> <eval>mBoxes[ mCursorRow ][ mCursorCol ][1]</eval></bg>
<event name="onselect">
<accelerators> <key>RIGHT</key> </accelerators>
<script>
setCursor( mCursorRow, (mCursorCol+1) % &MAX_COLS; );
</script>
</event>
</box>
<box>
<event name="onselect">
<accelerators> <key>UP</key> </accelerators>
<script>
if (mCursorRow == 0)
{
<!-- move to bottom of previous column -->
setCursor( &MAX_ROWS; - 1,
(mCursorCol + &MAX_COLS; - 1) %
&MAX_COLS; );
}
else
{
<!-- move to previous row -->
setCursor( mCursorRow - 1, mCursorCol );
}
</script>
</event>
</box>
<box>
<event name="onselect">
<accelerators> <key>DOWN</key> </accelerators>
<script>
if (mCursorRow == (&MAX_ROWS; - 1))
{
<!-- move to top of next column -->
setCursor( 0, (mCursorCol + 1) % &MAX_COLS; );
}
else
{
<!-- move to next row -->
setCursor( mCursorRow + 1, mCursorCol );
}
</script>
</event>
</box>
<box>
<x> <eval>mCursorCol * mBoxWidth</eval> </x>
<y> <eval>(mCursorRow * mBoxHeight) + mTextHeight</eval> </y>
<width> <eval>mBoxWidth</eval> </width>
<height> <eval>mBoxHeight</eval> </height>
<fg>&_COLOR_TRANSPARENT;</fg>
<bg>&_COLOR_TRANSPARENT;</bg>
</box>
</display>
</transition>
</state>
<state var="sStart">
…
</state>
</states>
</application>
</ujml>
ƒtƒ@ƒCƒ‹F ujinn3.ujml
ƒJ[ƒ\ƒ‹‚ð’ljÁ‚·‚é‚É‚ÍAƒJ[ƒ\ƒ‹‚Æ‚»‚ê‚ÉŠÖ˜A‚·‚éƒfƒBƒXƒvƒŒ—v‘f‚Ì•\ަ‚ð§Œä‚·‚é sCursor ‚Æ‚¢‚¤ƒXƒe[ƒg‚ð’ljÁ‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B“¯—l‚É㉺¶‰E‚̃{ƒ^ƒ“‰Ÿ‰º‚ðŒŸo‚·‚邽‚߂̃Cƒxƒ“ƒgƒnƒ“ƒhƒ‰‚ð’ljÁ‚µ‚Ü‚·BÅŒã‚ÉAƒXƒ^ƒCƒ‰ƒX‚Ì xAy À•W‚ðƒQ[ƒ€ƒOƒŠƒbƒh“à‚̃{ƒbƒNƒX‚ɕϊ·‚·‚éƒCƒxƒ“ƒgƒnƒ“ƒhƒ‰‚ð’ljÁ‚µ‚Ü‚·B
C³Œã‚Ì Ujinn ‚ł̓OƒŠƒbƒh‚̶ã‚ɃJ[ƒ\ƒ‹‚ª•\ަ‚³‚ê‚Ü‚·B ㉺¶‰Eƒ{ƒ^ƒ“‚ÍŒg‘Ñ“d˜b‚Å‚à PDA ‚Å‚ ‚Á‚Ä‚àƒJ[ƒ\ƒ‹‚̈ړ®‚ÉŽg—p‚Å‚«‚Ü‚·B PDA ‚ł̓{ƒbƒNƒX‚ðƒ^ƒbƒv‚·‚邱‚ƂŃJ[ƒ\ƒ‹‚ªƒ{ƒbƒNƒX‚Ɉړ®‚µ‚Ü‚·B

‘I‘ð‹@”\‚ÌŽŸ‚ÍAƒ{ƒbƒNƒX‚ðÁ‚·‹@”\‚ðŽÀ‘•‚µ‚Ü‚·B ƒ{ƒbƒNƒX‚̓J[ƒ\ƒ‹‚ª‘I‘𒆂̃{ƒbƒNƒX‚ð‹N“_‚ÉÁ‚µ‚Ü‚·B ‚±‚̃vƒƒOƒ‰ƒ€‚ł̓J[ƒ\ƒ‹ˆÊ’u‚̃{ƒbƒNƒX‚Æ‚»‚ׂ̗̃{ƒbƒNƒX‚ÌF‚ð”äŠr‚µA“¯‚¶F‚̃{ƒbƒNƒX‚ª—×Ú‚µ‚Ä‚¢‚éꇂÍA‚»‚ÌF‚̃{ƒbƒNƒX‚ðÁ‹Ž‚µ‰æ–Ê‚ðXV‚µ‚Ü‚·B
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ujml PUBLIC "-//UIEVOLUTION//DTD UJML 1.4//EN" "ujml.dtd" [
<!ENTITY and "&&">
<!-- Colors -->
<!ENTITY SCORE_ITEM_FG "&_COLOR_WHITE;">
<!ENTITY SCORE_ITEM_BG "0xff000066">
<!-- Limits -->
<!ENTITY MAX_ROWS "8">
<!ENTITY MAX_COLS "8">
<!ENTITY MAX_COLORS "4">
<!ENTITY CLEARING_COLOR "&_COLOR_WHITE;">
<!ENTITY CLEARED_COLOR "&_COLOR_TRANSPARENT;">
]>
<ujml>
<application>
<state-machines>
<include file="ujlib/stack.ujml" state-machine="IntStack"/>
</state-machines>
<state-variables>
¥¥¥
<state-var name="sDelayedRemoveBoxes" type="boolean"/>
<state-var name="sDelayedSelectBox" type="boolean"/>
<state-var name="sRemoveColumns" type="boolean"/>
</state-variables>
<variables>
<var name="mTextHeight" type="int"/>
<var name="mScrHeight" type="int"/>
<var name="mScrWidth" type="int"/>
<var name="mBoxHeight" type="int"/>
<var name="mBoxWidth" type="int"/>
<var name="mColorMap" type="int" size="&MAX_COLORS;,2"/>
<var name="mRemoveBoxesFromColumn" type="boolean" size="&MAX_COLS;"/>
<var name="tBoxRow" type="int"/>
<var name="tBoxCol" type="int"/>
<var name="mColorMapIndex" type="int"/>
<var name="mColorMapBoxSize" type="int"/>
<var name="mCursorCol" type="int"/>
<var name="mCursorRow" type="int"/>
<var name="mNumBoxes" type="int"/>
<var name="mNumBoxesInColumn" type="int" size="&MAX_COLS;"/>
<var name="mBoxes" type="int" size="&MAX_ROWS;,&MAX_COLS;,2"/>
<var name="mColumnHasRemovableBoxes" type="boolean" size="&MAX_COLS;"/>
<!-- Globals used for removing columns -->
<var name="mNumBoxesCleared" type="int"/>
<var name="gI" type="int"/>
<var name="gCol" type="int"/>
<var name="gRow" type="int"/>
<var name="gSeed" type="int"/>
<var name="gAvailCol" type="int"/>
<var name="gRemoveColumnsDelay" type="int"/>
</variables>
<functions>
¥¥¥
<function name="checkBoxColor" type="void">
<parameters>
<var name="row" type="int"/>
<var name="col" type="int"/>
<var name="color" type="int"/>
</parameters>
<script>
if (color == mBoxes[ row ][ col ][ 0 ])
{
IntStack.push( row );
IntStack.push( col );
}
</script>
</function>
¥¥¥
<function name="selectBox" type="void">
<parameters>
<var name="row" type="int"/>
<var name="col" type="int"/>
</parameters>
<variables>
<var name="selectedColor" type="int"/>
<var name="selectedInnerColor" type="int"/>
<var name="numBoxesToBeRemoved" type="int"/>
<var name="i" type="int"/>
</variables>
<script>
<!-- don't allow the user to select a cleared or clearing box -->
if ((mBoxes[row][col][0] != &CLEARING_COLOR;) ∧
(mBoxes[row][col][0] != &CLEARED_COLOR;))
{
<!-- remember selected color -->
selectedColor = mBoxes[ row ][ col ][ 0 ];
selectedInnerColor = mBoxes[ row ][ col ][ 1 ];
<!-- put selected box on stack -->
IntStack.push( row );
IntStack.push( col );
<!-- find boxes of the selectec color to remove -->
while (IntStack.size() > 0)
{
<!-- process current box on the stack -->
col = IntStack.pop();
row = IntStack.pop();
<!-- mark the box to be cleared -->
mBoxes[ row ][ col ][ 0 ] = &CLEARING_COLOR;;
mBoxes[ row ][ col ][ 1 ] = &CLEARING_COLOR;;
repaintBox( row, col );
<!-- increment count of boxes to be cleared -->
numBoxesToBeRemoved = numBoxesToBeRemoved + 1;
<!-- mark column as having a box to be removed -->
mRemoveBoxesFromColumn[ col ] = true;
<!-- Now check neighboring boxes to see if they are the same
color -->
<!-- Check box above -->
if (row > 0)
{
checkBoxColor( row - 1, col, selectedColor );
}
<!-- Check box left -->
if (col > 0)
{
checkBoxColor( row, col - 1, selectedColor );
}
<!-- check box below -->
if (row < (&MAX_ROWS; - 1))
{
checkBoxColor( row + 1, col, selectedColor );
}
<!-- check box to the right -->
if (col < (&MAX_COLS; - 1))
{
checkBoxColor( row, col + 1, selectedColor );
}
}
<!-- Make sure the user selected a box that had neighbors of
the same color -->
if (numBoxesToBeRemoved > 1)
{
<!-- user selected a valid box, remove the marked boxes after
a slight delay -->
<!-- to show the user some feedback on which boxes are being
deleted -->
sDelayedRemoveBoxes = true;
}
else
{
<!-- user selected a box that has no neighbors of the same
color so back out -->
mBoxes[ row ][ col ][ 0 ] = selectedColor;
mBoxes[ row ][ col ][ 1 ] = selectedInnerColor;
repaintBox( row, col );
}
}
</script>
</function>
<function name="removeBoxes" type="void">
<variables>
<var name="row" type="int"/>
<var name="col" type="int"/>
<var name="availRow" type="int"/>
<var name="topBox" type="int"/>
<var name="thereAreRemovableBoxes" type="boolean"/>
</variables>
<script>
<!-- hide cursor -->
sCursor = false;
mNumBoxesCleared = 0;
gAvailCol = &MAX_COLS;;
col = &MAX_COLS; - 1;
<!-- for each column, check to see if we've marked it as having boxes
to remove -->
while (col > -1)
{
if (mRemoveBoxesFromColumn[ col ])
{
<!-- this column has boxes to be removed; remove them now -->
topBox = &MAX_ROWS; - mNumBoxesInColumn[ col ];
row = topBox;
while (row < &MAX_ROWS;)
{
if (mBoxes[ row ][ col ][ 0 ] == &CLEARING_COLOR;)
{
mNumBoxesCleared = mNumBoxesCleared + 1;
mBoxes[ row ][ col ][ 0 ] = &CLEARED_COLOR;;
mBoxes[ row ][ col ][ 1 ] = &CLEARED_COLOR;;
repaintBox( row, col );
availRow = row;
mNumBoxesInColumn[col] = mNumBoxesInColumn[col] - 1;
}
row = row + 1;
}
<!-- remove boxes in column -->
row = &MAX_COLS; - 1;
row = availRow - 1;
topBox = topBox - 1;
while (row > topBox)
{
if (mBoxes[ row ][ col ][ 0 ] != &CLEARED_COLOR;)
{
mBoxes[ availRow ][col][0] = mBoxes[row][col][ 0 ];
mBoxes[ availRow ][col][1] = mBoxes[row][col][ 1 ];
mBoxes[ row ][ col ][ 0 ] = &CLEARED_COLOR;;
mBoxes[ row ][ col ][ 1 ] = &CLEARED_COLOR;;
repaintBox( row, col );
repaintBox( availRow, col );
availRow = availRow - 1;
}
row = row - 1;
}
}
mRemoveBoxesFromColumn[ col ] = false;
if (mNumBoxesInColumn[ col ] == 0)
{
gAvailCol = col;
}
col = col - 1;
}
<!-- if there are empty columns, remove them; if gAvailCol is
less than &MAX_COLS;, then -->
<!-- there is at least one empty column -->
gCol = gAvailCol;
sRemoveColumns = gCol < &MAX_COLS;;
</script>
</function>
<function name="moveColumn" type="void">
<parameters>
<var name="fromCol" type="int"/>
<var name="toCol" type="int"/>
</parameters>
<variables>
<var name="row" type="int"/>
</variables>
<script>
while (row < &MAX_ROWS;)
{
mBoxes[ row ][ toCol ][ 0 ] = mBoxes[ row ][ fromCol ][ 0 ];
mBoxes[ row ][ toCol ][ 1 ] = mBoxes[ row ][ fromCol ][ 1 ];
mBoxes[ row ][ fromCol ][ 0 ] = &CLEARED_COLOR;;
mBoxes[ row ][ fromCol ][ 1 ] = &CLEARED_COLOR;;
repaintBox( row, fromCol );
repaintBox( row, toCol );
row = row + 1;
}
mNumBoxesInColumn[ toCol ] = mNumBoxesInColumn[ fromCol ];
mNumBoxesInColumn[ fromCol ] = 0;
</script>
</function>
¥¥¥
</functions>
<templates>
<template name="tBox">
<display>
<box>
<x> <eval>tBoxCol * mBoxWidth</eval> </x>
<y> <eval>tBoxRow * mBoxHeight + mTextHeight</eval> </y>
<width> <eval>mBoxWidth</eval> </width>
<height> <eval>mBoxHeight</eval> </height>
<fg> <eval>mBoxes[ tBoxRow ][ tBoxCol ][ 1 ]</eval> </fg>
<bg> <eval>mBoxes[ tBoxRow ][ tBoxCol ][ 0 ]</eval> </bg>
<box>
<x> <eval>mBoxWidth / 4</eval> </x>
<y> <eval>mBoxHeight / 4</eval> </y>
<width> <eval>mBoxWidth / 2</eval> </width>
<height> <eval>mBoxHeight / 2</eval> </height>
<fg> <eval>mBoxes[ tBoxRow ][ tBoxCol ][ 1 ]</eval> </fg>
<bg> <eval>mBoxes[ tBoxRow ][ tBoxCol ][ 1 ]</eval> </bg>
</box>
</box>
</display>
</template>
</templates>
<script>
¥¥¥
</script>
<display>
¥¥¥
</display>
<states>
<state var="sDelayedSelectBox">
<transition value="true">
<delay>200</delay>
<script>
selectBox( mCursorRow, mCursorCol );
sDelayedSelectBox = false;
</script>
</transition>
</state>
<state var="sBoxes" index="*,*">
<transition value="true">
<display>
<expand template="tBox"/>
</display>
</transition>
</state>
<state var="sCursor">
<transition value="true">
<display>
<box>
<y> <eval>mTextHeight</eval> </y>
<width> <eval>mBoxWidth * &MAX_COLS;</eval> </width>
<height> <eval>mBoxHeight * &MAX_ROWS;</eval> </height>
<fg>&_COLOR_TRANSPARENT;</fg>
<bg>&_COLOR_TRANSPARENT;</bg>
<event name="onselect">
<script>
setCursor( _getIntProperty( &_VALUE_INT_ONSELECT_Y_REL; ) / mBoxHeight,
_getIntProperty( &_VALUE_INT_ONSELECT_X_REL; ) / mBoxWidth );
sDelayedSelectBox = true;
</script>
</event>
</box>
<box>
<x> <eval>mCursorCol * mBoxWidth + mBoxWidth / 2 - 2</eval>
</x>
<y> <eval>(mCursorRow * mBoxHeight) + mTextHeight + 2</eval>
</y>
<width> <eval>4</eval> </width>
<height> <eval>mBoxHeight - 4</eval> </height>
<event name="onselect">
<accelerators> <key>FIRE</key> </accelerators>
<script>
selectBox( mCursorRow, mCursorCol );
</script>
</event>
</box>
<box>
<x> <eval>mCursorCol * mBoxWidth + 2</eval> </x>
<y> <eval>(mCursorRow * mBoxHeight) + mTextHeight +
mBoxHeight / 2 - 2</eval> </y>
<width> <eval>mBoxWidth - 4</eval> </width>
<height> <eval>4</eval> </height>
<event name="onselect">
<accelerators> <key>LEFT</key> </accelerators>
<script>
setCursor( mCursorRow,
(mCursorCol+&MAX_COLS;-1) % &MAX_COLS; );
</script>
</event>
</box>
<box>
<x> <eval>mCursorCol * mBoxWidth + mBoxWidth / 2 - 2</eval>
</x>
<y> <eval>(mCursorRow * mBoxHeight) + mTextHeight +
mBoxHeight / 2 - 2</eval> </y>
<width> <eval>4</eval> </width>
<height> <eval>4</eval> </height>
<bg>
<eval>mBoxes[ mCursorRow ][ mCursorCol ][ 1 ]</eval>
</bg>
<event name="onselect">
<accelerators> <key>RIGHT</key> </accelerators>
<script>
setCursor( mCursorRow, (mCursorCol + 1) % &MAX_COLS; );
</script>
</event>
</box>
<box>
<event name="onselect">
<accelerators> <key>UP</key> </accelerators>
<script>
if (mCursorRow == 0)
{
<!-- move to bottom of previous column -->
setCursor( &MAX_ROWS; - 1,
(mCursorCol + &MAX_COLS; - 1) %
&MAX_COLS; );
}
else
{
<!-- move to previous row -->
setCursor( mCursorRow - 1, mCursorCol );
}
</script>
</event>
</box>
<box>
<event name="onselect">
<accelerators> <key>DOWN</key> </accelerators>
<script>
if (mCursorRow == (&MAX_ROWS; - 1))
{
<!-- move to top of next column -->
setCursor( 0, (mCursorCol + 1) % &MAX_COLS; );
}
else
{
<!-- move to next row -->
setCursor( mCursorRow + 1, mCursorCol );
}
</script>
</event>
</box>
<box>
<x> <eval>mCursorCol * mBoxWidth</eval> </x>
<y> <eval>(mCursorRow * mBoxHeight) + mTextHeight</eval> </y>
<width> <eval>mBoxWidth</eval> </width>
<height> <eval>mBoxHeight</eval> </height>
<fg>&_COLOR_TRANSPARENT;</fg>
<bg>&_COLOR_TRANSPARENT;</bg>
<event name="onselect">
<accelerators> <key>FIRE</key> </accelerators>
<script>
selectBox( mCursorRow, mCursorCol );
</script>
</event>
</box>
</display>
</transition>
</state>
<state var="sDelayedRemoveBoxes">
<transition value="true">
<delay>400</delay>
<script>
sDelayedRemoveBoxes = false;
removeBoxes();
</script>
</transition>
</state>
<state var="sRemoveColumns">
<transition value="true">
<delay>
<eval>gRemoveColumnsDelay</eval>
</delay>
<script>
gRemoveColumnsDelay = 0;
if (mNumBoxesInColumn[ gCol ] > 0)
{
<!-- this column is not empty so move it to the empty
available column -->
moveColumn( gCol, gAvailCol );
gAvailCol = gAvailCol + 1;
gRemoveColumnsDelay = 200;
}
gCol = gCol + 1;
<!-- reset self -->
_clear_state( sRemoveColumns );
sRemoveColumns = gCol < &MAX_COLS;;
</script>
</transition>
<transition value="false">
<script>
sCursor = true;
<!-- reset self -->
gRemoveColumnsDelay = 0;
_clear_state( sRemoveColumns );
</script>
</transition>
</state>
<state var="sStart">
¥¥¥
</state>
</states>
</application>
</ujml>
ƒtƒ@ƒCƒ‹F ujinn4.ujml
‚±‚ê‚Å—×Ú‚·‚铯F‚̃uƒƒbƒN‚ðÁ‚¹‚邿‚¤‚ɂȂè‚Ü‚µ‚½F

ƒ{ƒbƒNƒX‚ðÁ‚·ƒƒWƒbƒN‚ÌŽÀ‘•‚ÍŽŠ‚Á‚ÄŠÈ’P‚Å‚·B ŽÀ‘••û–@‚ÉŠÖ‚µ‚Ä‚Í ujinn4.ujml “à‚Ì UJML ƒ\[ƒX‚ðŠm”F‚µ‚Ä‚‚¾‚³‚¢B ujinn4.ujml ‚ł̓{ƒbƒNƒX‚ðÁ‚·ƒR[ƒh‚̂ق©Adelay •t‚«‚̃Xƒe[ƒg‚ð—˜—p‚µA ƒ{ƒbƒNƒX‚ðÁ‹Ž‚µ—ñ‚ð¶‚ɃVƒtƒg‚·‚éۂ̈—‚ðƒAƒjƒ[ƒVƒ‡ƒ“•\ަ‚µ‚Ä‚¢‚Ü‚·B ‚Ü‚½ƒXƒ^ƒbƒN‹@”\‚ðÄ—˜—p‰Â”\‚È UJML ‚Ì•”•i‚Æ‚µ‚ÄŽÀ‘•‚µ‚Ä‚¢‚Ü‚·B ƒXƒ^ƒbƒN‚ɂ‚¢‚Ă͎Ÿ‚ÌÍ‚Åà–¾‚µ‚Ü‚·B
UJML ‚ªŠJ”‚³‚ꂽŽå‚È——R‚Ì1‚‚ÉuƒvƒƒOƒ‰ƒ}[‚É‚æ‚éŽÀ‘•‚ð1‰ñ‚É—¯‚߂Ȃª‚çƒ}ƒ‹ƒ`ƒvƒ‰ƒbƒgƒtƒH[ƒ€‘Ήž‚ð‰Â”\‚É‚·‚év‚ª‚ ‚è‚Ü‚·BƒR[ƒh‚ÌÄ—˜—p‚ðŽÀŒ»‚·‚é‚É‚ÍÄ—˜—p‰Â”\‚È UJML ƒRƒ“ƒ|[ƒlƒ“ƒg‚ÌŠJ”‚ªd—v‚È‰Û‘è‚Æ‚È‚Á‚Ä‚«‚Ü‚·B
UJML ‚̃o[ƒWƒ‡ƒ“ 1.5 ‚ÍAJava ƒNƒ‰ƒX‚â COM ƒIƒuƒWƒFƒNƒg‚̂悤‚ÈÄ—˜—p‰Â”\‚ȃRƒ“ƒ|[ƒlƒ“ƒg‚ÌŠJ”‚É’¼Ú‘Ήž‚µ‚Ä‚¢‚Ü‚¹‚ñB‚µ‚©‚µ <state-machine> —v‘f‚ª UJML ‚ÌŒø—¦“I‚ÈÄ—˜—p‚É_“î‚ɑΉž‚µ‚Ä‚¢‚Ü‚·[5]B
<state-machine> ‚Æ <include> —v‘f‚ɂ‚¢‚Ă͂̂¿‚Ù‚Çà–¾‚µ‚Ü‚·B
ŽŸ‚̃Tƒ“ƒvƒ‹ƒR[ƒh‚Í Ujinn ‚ÅŽg—p‚µ‚½A<state-machine> ‚ð—˜—p‚µ‚½’Pƒ‚ÈÄ—˜—p‰Â”\‚ȃXƒ^ƒbƒN‚̈ê—á‚Å‚·F
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ujml PUBLIC "-//UIEVOLUTION//DTD UJML 1.4//EN" "../ujml.dtd" [
<!ENTITY % include SYSTEM "include.ujmc">
%include;
]>
<ujml>
<partition>
<state-machine name="IntStack" access="export">
<variables>
<var name="mItems" type="int" size="&STACK_MAX_ITEMS;"/>
<var name="mTop" type="int"/>
</variables>
<functions>
<function name="push" type="int" visibility="public">
<parameters>
<var name="item" type="int"/>
</parameters>
<script>
mItems[ mTop ] = item;
mTop = mTop + 1;
</script>
<return>
<eval>mTop</eval>
</return>
</function>
<function name="pop" type="int" visibility="public">
<variables>
<var name="item" type="int"/>
</variables>
<script>
if (mTop > 0)
{
mTop = mTop - 1;
item = mItems[ mTop ];
}
</script>
<return>
<eval>item</eval>
</return>
</function>
<function name="size" type="int" visibility="public">
<return>
<eval>mTop</eval>
</return>
</function>
</functions>
</state-machine>
</state-machines>
</partition>
</ujml>
ƒtƒ@ƒCƒ‹Fujlib/stack.ujml
ŽŸ‚ÉA‰æ–Êã•”‚Ì“¾“_‚ðXV‚·‚é‹@”\‚ð’ljÁ‚µ‚Ü‚·B
¥¥¥
<ujml>
<application>
<state-variables>
¥¥¥
<state-var name="sScores" type="boolean"/>
<state-var name="sDelayedUpdateScores" type="boolean"/>
</state-variables>
<variables>
¥¥¥
<var name="mScore" type="int"/>
<var name="mHighScore" type="int"/>
<var name="mTotalBoxesCleared" type="int"/>
<var name="mLevelNumber" type="int"/>
¥¥¥
</variables>
<functions>
¥¥¥
<function name="updateScores" type="void">
<script>
sDelayedUpdateScores = true;
</script>
</function>
¥¥¥
<function name="repaint" type="void">
<variables>
<var name="col" type="int"/>
</variables>
<script>
while (col < &MAX_COLS;)
{
repaintColumn( col );
col = col + 1;
}
updateScores();
</script>
</function>
¥¥¥
<function name="setup" type="void">
<script>
<!-- initialize global values based on the game grid size -->
mBoxWidth = mScrWidth / &MAX_COLS;;
mBoxHeight = (mScrHeight - mTextHeight) / &MAX_ROWS;;
mNumBoxes = &MAX_ROWS; * &MAX_COLS;;
<!-- reset scoring counters -->
mScore = 0;
mTotalBoxesCleared = 0;
mLevelNumber = 1;
<!-- move selected box to upper left corner -->
mCursorRow = 0;
mCursorCol = 0;
sCursor = false;
sCursor = true;
</script>
</function>
<function name="clearScores" type="void">
<script>
mScore = 0;
mHighScore = 0;
updateScores();
</script>
</function>
¥¥¥
</functions>
¥¥¥
<states>
<state var="sDelayedUpdateScores">
<transition value="true">
<delay>10</delay>
<script>
sScores = false;
sScores = true;
sDelayedUpdateScores = false;
</script>
</transition>
</state>
<state var="sScores">
<transition value="true">
<display>
<box>
<width> <eval>mScrWidth</eval> </width>
<height> <eval>mTextHeight</eval> </height>
<fg>&SCORE_ITEM_BG;</fg>
<bg>&SCORE_ITEM_BG;</bg>
<label>
<text>
<strcat>
<eval>mScore</eval>
<val>/</val>
<eval>mHighScore</eval>
<val> | </val>
<eval>mLevelNumber</eval>
<val> | </val>
<eval>mTotalBoxesCleared</eval>
<val>/</val>
<eval>mNumBoxes</eval>
<val> |</val>
</strcat>
</text>
<x>2</x>
<fg>&SCORE_ITEM_FG;</fg>
</label>
</box>
</display>
</transition>
</state>
¥¥¥
<state var="sRemoveColumns">
<transition value="true">
¥¥¥
</transition>
<transition value="false">
<script>
<!-- update score -->
mScore = mScore + (mNumBoxesCleared * (mNumBoxesCleared - 1));
mTotalBoxesCleared = mTotalBoxesCleared + mNumBoxesCleared;
updateScores();
sCursor = true;
<!-- reset self -->
gRemoveColumnsDelay = 0;
_clear_state( sRemoveColumns );
</script>
</transition>
</state>
¥¥¥
</states>
</application>
</ujml>
ƒtƒ@ƒCƒ‹F ujinn5.ujml

updateScores() ŠÖ”‚ÍAƒXƒe[ƒg•Ï” sDelayedUpdatesScores ‚ð true ‚Éݒ肵‚Ä‚¢‚é‚ɉ߂¬‚È‚¢“_‚É’–Ú‚µ‚ĉº‚³‚¢B‚±‚̃Xƒe[ƒg‘JˆÚ‚ÍA<delay> —v‘f‚ðŽg‚Á‚ÄŽÀۂ̃XƒRƒAXV‚ð’x‰„‚³‚¹‚Ä‚¢‚Ü‚·B‚±‚ê‚͉æ–Êã‚Ì2‚‚̓Ɨ§‚µ‚½•”•ª‚𓯎ž‚ÉÄ•`‰æ‚·‚邱‚Æ‚ð”ð‚¯‚é‚½‚ß‚És‚Á‚Ä‚¢‚Ü‚·BÄ•`‰æ‚ð•½s‚µ‚Äs‚Á‚Ä‚µ‚Ü‚¤‚ÆA’x‚¢ƒfƒoƒCƒXã‚ʼnæ–Ê‚ÌÄ•`‰æ‚ªŒ€“I‚É’x‚‚È‚Á‚Ä‚µ‚Ü‚¤‚©‚ç‚Å‚·B
UIE Player ‚ÍAƒXƒe[ƒgƒ}ƒVƒ“‚ɃfƒBƒXƒvƒŒƒCƒXƒe[ƒg‚ª’ljÁ‚Ü‚½‚Í휂³‚ꂽ‚±‚Ƃɂæ‚Á‚Ä –³Œø‚ƂȂÁ‚½•”•ª‚ÌÄ•`‰æ‚ðŬŒÀ‚É—¯‚߂悤‚Æ‚µ‚Ü‚·BUIE Player ‚Í•¡”‚Ì–³Œø‚ȉæ–ʗ̈æ‚ð1‚‚̖³Œø‚ȗ̈æ‚É“‡‚µ‚Ü‚·B‚à‚µ‚»‚̂悤‚È–³Œø—̈悪ŒÝ‚¢‚©‚ç—£‚ê‚Ä‚¢‚éê‡AUIE Player‚Í—¼•û‚̗̈æ‚ðŠÜ‚Þ‹éŒ`—̈æ‚ðÄ•`‰æ‚µ‚Ü‚·B‚»‚Ì‚½‚ßA•K—vˆÈã‚ÌÄ•`‰æ‚ª”¶‚µ‚Ä‚µ‚Ü‚¢‚Ü‚·BƒfƒBƒŒƒC‚ðŽg‚¤‚±‚Ƃɂæ‚èA2‚‚̗̈æ‚ð“Æ—§‚µ‚ÄÄ•`‰æ‚·‚邱‚Æ‚ª‰Â”\‚ɂȂè‚Ü‚·B‚»‚ÌŒ‹‰ÊAƒpƒtƒH[ƒ}ƒ“ƒX‚ªŒ€“I‚ɉü‘P‚³‚ê‚Ü‚·BUjinn ‚̂悤‚ȃOƒŠƒbƒhƒx[ƒX‚̃Q[ƒ€‚Å‚ÍA–³Œø‚ȉæ–ʗ̈悪‘å‚«‚¢‚±‚Ƃɂæ‚Á‚Ä‘½‚‚̃fƒBƒXƒvƒŒƒCƒXƒe[ƒg‚ÌÄ•`‰æ‚ª•K—v‚ƂȂ邽‚ßA‚±‚̂悤‚ȃeƒNƒjƒbƒN‚ª•K—v‚ƂȂè‚Ü‚·B
ƒƒ‚F ˆÊ’u“I‚É—£‚ꂽƒfƒBƒXƒvƒŒƒCƒXƒe[ƒg‚Ì•\ަ‚ð“Æ—§‚µ‚Äs‚¤‚É‚Í <delay> ‚ðŽg‚¢‚Ü‚·B
ŽŸ‚Ì•ÏX‚Å‚ÍAƒOƒŠƒbƒh‚ªŠ®‘S‚ɃNƒŠƒA‚³‚ꂽꇂâA ƒNƒŠƒA‚Å‚«‚éƒOƒ‹[ƒv‚ª‘¶Ý‚µ‚È‚¢ê‡‚̃`ƒFƒbƒN‚ðs‚¢‚Ü‚·B
¥¥¥
<ujml>
<application>
<state-variables>
¥¥¥
<state-var name="sGameOver" type="boolean"/>
<state-var name="sDelayedEndGameCheck" type="boolean"/>
<state-var name="sMessage" type="boolean"/>
</state-variables>
¥¥¥
<states>
¥¥¥
<state var="sRemoveColumns">
<transition value="true">
¥¥¥
</transition>
<transition value="false">
<script>
<!-- update score -->
mScore = mScore + (mNumBoxesCleared * (mNumBoxesCleared - 1));
mTotalBoxesCleared = mTotalBoxesCleared + mNumBoxesCleared;
<!-- Check to see if the end of the game has been reached -->
sDelayedEndGameCheck = true;
<!-- reset self -->
gRemoveColumnsDelay = 0;
_clear_state( sRemoveColumns );
</script>
</transition>
</state>
<state var="sDelayedEndGameCheck">
<transition value="true">
<delay>100</delay>
<variables>
<var name="fGameOver" type="boolean"/>
</variables>
<script>
<!-- see if the end of the game has been reached. Either all boxes have been removed -->
<!-- or it is not possible to remove any more boxes. -->
if (mTotalBoxesCleared == mNumBoxes)
{
<!-- we have a winner! all boxes have been removed. -->
mScore = mScore + (mScore / 4);
mMessage = _strcat( "Level cleared!
Bonus: ", _strcat( mScore / 4, "." ) );
sMessage = true;
if (mScore > mHighScore)
{
mHighScore = mScore;
}
fGameOver = true;
}
else
{
<!-- determine if there are removable boxes -->
if (!areBoxesRemovable())
{
<!-- there are no more selectable boxes so the game is over -->
mScore = mScore - (mNumBoxes - mTotalBoxesCleared);
mMessage = _strcat( "No more moves.
Penalty: ", _strcat( mNumBoxes - mTotalBoxesCleared, "." ) );
sMessage = true;
if (mScore > mHighScore)
{
mHighScore = mScore;
}
fGameOver = true;
}
}
updateScores();
<!-- repaint cursor -->
sCursor = false;
sCursor = true;
sDelayedEndGameCheck = false;
sGameOver = fGameOver;
</script>
</transition>
</state>
<state var="sGameOver">
<transition value="true">
<script>
sCursor = false;
</script>
</transition>
</state>
<state var="sMessage">
<transition value="true">
<display>
<multi-label>
<text><eval>mMessage</eval> </text>
<x>10</x>
<y>10</y>
<width><eval>mScrWidth - 20</eval> </width>
<height><eval>mScrHeight - 20</eval></height>
<bg>&_COLOR_WHITE;</bg>
<event name="onselect">
<accelerators> <key>FIRE</key> </accelerators>
<script>
sMessage = false;
start();
</script>
</event>
</multi-label>
</display>
</transition>
</state>
</states>
</application>
</ujml>
ƒtƒ@ƒCƒ‹F ujinn6.ujml

‚±‚ê‚Å Ujinn ƒQ[ƒ€‚ÌŠî‘b‚ªŠ®¬‚µ‚Ü‚µ‚½B ‚µ‚©‚µƒ†[ƒUƒIƒvƒVƒ‡ƒ“‚Æ‚µ‚ÄuˆÙ‚Ȃ郌ƒxƒ‹‚ð—V‚ÔvuƒOƒŠƒbƒhƒTƒCƒY‚ð•ÏXvuF”‚ð•ÏXvu“¯‚¶ƒŒƒxƒ‹‚ð‚à‚¤ˆê‰ñ—V‚Ôv‚Æ‚¢‚Á‚½‹@”\‚ðŠg’£‚Å‚«‚Ü‚·B
‚±‚ê‚ç‚̃IƒvƒVƒ‡ƒ“‚ðŽw’è‰Â”\‚É‚·‚邽‚ß‚ÉAƒƒCƒ“ƒƒjƒ…[‚ƃIƒvƒVƒ‡ƒ“•ÏXƒ_ƒCƒAƒƒOƒ{ƒbƒNƒX‚ð’ljÁ‚·‚邱‚Ƃɂµ‚Ü‚·Bƒƒjƒ…[‚Í‘¼‚̃AƒvƒŠƒP[ƒVƒ‡ƒ“‚Å‚à–𗧂‰”\«‚ª‚‚¢‚Ì‚ÅA<state-machine> ‚ðŽg‚Á‚ÄÄ—˜—p‰Â”\‚È UJML ‚Æ‚µ‚ÄŽÀ‘•‚µ‚Ü‚·F
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ujml PUBLIC "-//UIEVOLUTION//DTD UJML 1.4//EN" "../ujml.dtd" [
<!ENTITY % include SYSTEM "include.ujmc">
%include;
<!ENTITY HIGHLIGHT_VISIBLE "-1">
<!ENTITY HIGHLIGHT_FIRE_SELECT_EVENT "-2">
<!ENTITY MENU_MAX_ITEMS "6">
]>
<ujml>
<partition>
<state-machines>
<include file="include.ujml" state-machine="Event"/>
<state-machine name="Menu" access="export">
<state-variables>
<state-var name="sMenu" type="boolean"/>
<state-var name="sHighlight" type="int"/>
<state-var name="sMenuItems" type="boolean" size="&MENU_MAX_ITEMS;"/>
</state-variables>
<variables>
<var name="mHandler" type="string"/>
<var name="mScrWidth" type="int"/>
<var name="mScrHeight" type="int"/>
<var name="mX" type="int"/>
<var name="mY" type="int"/>
<var name="mWidth" type="int"/>
<var name="mItemHeight" type="int"/>
<var name="mNumItems" type="int"/>
<var name="mCaptions" type="string" size="&MENU_MAX_ITEMS;"/>
<var name="mItemIndex" type="int"/>
<var name="mCommands" type="int" size="&MENU_MAX_ITEMS;"/>
<var name="mCurItemOffsetY" type="int"/>
<var name="mCurItem" type="int"/>
<var name="mAttributes" type="int" size="&MENU_ATTRIBUTES;"/>
</variables>
<functions>
<function name="selectItem" type="void">
<parameters>
<var name="item" type="int"/>
</parameters>
<script>
mCurItem = item;
mCurItemOffsetY = mCurItem * mItemHeight;
Event.setParam( 0, mCommands[ mCurItem ] );
Event.fireEventNow( &EVENT_SELECTING;, mHandler );
_clear_state( sHighlight );
sHighlight = &HIGHLIGHT_FIRE_SELECT_EVENT;;
</script>
</function>
<function name="Highlight_show" type="void">
<script>
_clear_state( sHighlight );
sHighlight = &HIGHLIGHT_VISIBLE;;
</script>
</function>
<function name="Highlight_move" type="void">
<parameters>
<var name="delta" type="int"/>
</parameters>
<script>
mCurItem = (mCurItem + delta + mNumItems) % mNumItems;
mCurItemOffsetY = mCurItem * mItemHeight;
Event.setParam( 0, mCommands[ mCurItem ] );
Event.fireEventNow( &EVENT_HIGHLIGHTING;, mHandler );
Highlight_show();
Event.setParam( 0, mCommands[ mCurItem ] );
Event.fireEvent( &EVENT_HIGHLIGHTED;, mHandler);
</script>
</function>
<function name="setAttribute" type="void" visibility="public">
<parameters>
<var name="attribute" type="int"/>
<var name="color" type="int"/>
</parameters>
<script>
mAttributes[ attribute ] = color;
</script>
</function>
<function name="getAttribute" type="int" visibility="public">
<parameters>
<var name="attribute" type="int"/>
</parameters>
<variables>
<var name="retval" type="int"/>
</variables>
<script>
if (attribute &_GTE; 0)
{
retval = mAttributes[ attribute ];
}
else if (attribute == &MENU_ATTR_X;)
{
retval = mX - mAttributes[ &MENU_ATTR_BORDER_THICKNESS; ];
}
else if (attribute == &MENU_ATTR_Y;)
{
retval = mY - mAttributes[ &MENU_ATTR_BORDER_THICKNESS; ];
}
else if (attribute == &MENU_ATTR_WIDTH;)
{
retval = mWidth + mAttributes[ &MENU_ATTR_BORDER_THICKNESS; ] * 2;
}
else if (attribute == &MENU_ATTR_HEIGHT;)
{
retval = mItemHeight * mNumItems +
mAttributes[ &MENU_ATTR_BORDER_THICKNESS; ] * 2;
}
</script>
<return>
<eval>retval</eval>
</return>
</function>
<function name="setVisible" type="void" visibility="public">
<parameters>
<var name="visible" type="boolean"/>
</parameters>
<variables>
<var name="item" type="int"/>
</variables>
<script>
_clear_state( sMenu );
sMenu = visible;
if (visible)
{
while (item < mNumItems)
{
<!-- allow client to alter colors before paiting item -->
Event.setParam( 0, mCommands[ mCurItem ] );
Event.fireEventNow( &EVENT_PAINTING;, mHandler );
mItemIndex = item;
_clear_state( sMenuItems[ item ] );
sMenuItems[ item ] = true;
item = item + 1;
}
Highlight_show();
}
else
{
while (item < mNumItems)
{
_clear_state( sMenuItems[ item ] );
item = item + 1;
}
_clear_state( sHighlight );
}
</script>
</function>
<function name="getVisible" type="boolean" visibility="public">
<return>
<eval>sMenu</eval>
</return>
</function>
<function name="center" type="void" visibility="public">
<script>
mX = (mScrWidth - mWidth) / 2;
mY = (mScrHeight - mNumItems * mItemHeight) / 2;
</script>
</function>
<function name="initialize" type="void" visibility="public">
<parameters>
<var name="handler" type="string"/>
</parameters>
<script>
setVisible( false );
mScrWidth = _getIntProperty( &_PROPERTY_INT_SCREEN_WIDTH; );
mScrHeight = _getIntProperty( &_PROPERTY_INT_SCREEN_HEIGHT; );
mHandler = handler;
mWidth = 0;
mItemHeight = _text_height( 0, 0, 0 );
mNumItems = 0;
mCurItemOffsetY = 0;
mCurItem = 0;
setAttribute( &MENU_ATTR_ITEM_FG;, &_COLOR_BLACK; );
setAttribute( &MENU_ATTR_ITEM_BG;, &_COLOR_WHITE; );
setAttribute( &MENU_ATTR_BORDER;, &_COLOR_GRAY; );
setAttribute( &MENU_ATTR_BG;, &_COLOR_BLACK; );
setAttribute( &MENU_ATTR_HIGHLIGHT_FG;, &_COLOR_WHITE; );
setAttribute( &MENU_ATTR_HIGHLIGHT_BG;, 0xff9999ff );
setAttribute( &MENU_ATTR_SELECTED_FG;, &_COLOR_WHITE; );
setAttribute( &MENU_ATTR_SELECTED_BG;, 0xff6666cc );
mX = 3;
mY = mX;
setAttribute( &MENU_ATTR_BORDER_THICKNESS;, mX );
</script>
</function>
<function name="add" type="int" visibility="public">
<parameters>
<var name="caption" type="string"/>
<var name="command" type="int"/>
</parameters>
<script>
mCaptions[ mNumItems ] = caption;
mCommands[ mNumItems ] = command;
mNumItems = mNumItems + 1;
mWidth = _max( mWidth, _text_width( caption, 0, 0, 0 ) + 8 );
</script>
<return>
<eval>mNumItems - 1</eval>
</return>
</function>
<function name="update" type="void" visibility="public">
<parameters>
<var name="id" type="int"/>
<var name="caption" type="string"/>
<var name="evt" type="int"/>
</parameters>
<execute>
<set var="mCaptions">
<index>
<eval>id</eval>
</index>
<ref var="caption"/>
</set>
<set var="mCommands">
<index>
<eval>id</eval>
</index>
<eval>evt</eval>
</set>
</execute>
</function>
<function name="highlight" type="void" visibility="public">
<parameters>
<var name="id" type="int"/>
</parameters>
<script>
mCurItem = id % mNumItems;
mCurItemOffsetY = mCurItem * mItemHeight;
Event.setParam( 0, mCommands[ mCurItem ] );
Event.fireEventNow( &EVENT_HIGHLIGHTING;, mHandler );
if (getVisible())
{
Highlight_show();
}
Event.setParam( 0, mCommands[ mCurItem ] );
Event.fireEvent( &EVENT_HIGHLIGHTED;, mHandler );
</script>
</function>
<function name="setPosition" type="void" visibility="public">
<parameters>
<var name="x" type="int"/>
<var name="y" type="int"/>
</parameters>
<script>
mX = x + mAttributes[ &MENU_ATTR_BORDER_THICKNESS; ];
mY = y + mAttributes[ &MENU_ATTR_BORDER_THICKNESS; ];
</script>
</function>
</functions>
<templates>
<template name="Item">
<display>
<label>
<text>
<eval>mCaptions[ mItemIndex ]</eval>
</text>
<x>3</x>
<fg>
<eval>mAttributes[ &MENU_ATTR_ITEM_FG; ]</eval>
</fg>
</label>
</display>
</template>
</templates>
<states>
<state var="sMenu">
<transition value="true">
<display>
<!-- catch all unwanted events, especially clicking outside the
boundary of the menu -->
<box>
<width><eval>mScrWidth</eval></width>
<height><eval>mScrHeight</eval></height>
<fg>&_COLOR_TRANSPARENT;</fg>
<bg>&_COLOR_TRANSPARENT;</bg>
<event name="onselect">
<accelerators>
<key>FIRE</key>
<key>LEFT</key>
<key>RIGHT</key>
<key>UP</key>
<key>DOWN</key>
<key>0</key>
<key>1</key>
<key>2</key>
<key>3</key>
<key>4</key>
<key>5</key>
<key>6</key>
<key>7</key>
<key>8</key>
<key>9</key>
</accelerators>
<script>
</script>
</event>
</box>
<box>
<x>
<eval>mX - mAttributes[ &MENU_ATTR_BORDER_THICKNESS; ]</eval>
</x>
<y>
<eval>mY - mAttributes[ &MENU_ATTR_BORDER_THICKNESS; ]</eval>
</y>
<width>
<eval>mWidth + 2 * mAttributes[ &MENU_ATTR_BORDER_THICKNESS; ]</eval>
</width>
<height>
<eval>(mItemHeight * mNumItems) + 2 * mAttributes[ &MENU_ATTR_BORDER_THICKNESS; ]</eval>
</height>
<fg>
<eval>mAttributes[ &MENU_ATTR_BORDER; ]</eval>
</fg>
<bg>
<eval>mAttributes[ &MENU_ATTR_BG; ]</eval>
</bg>
<box>
<x>
<eval>mAttributes[ &MENU_ATTR_BORDER_THICKNESS; ]</eval>
</x>
<y>
<eval>mAttributes[ &MENU_ATTR_BORDER_THICKNESS; ]</eval>
</y>
<width>
<eval>mWidth</eval>
</width>
<height>
<eval>(mItemHeight * mNumItems)</eval>
</height>
<fg>
<eval>mAttributes[ &MENU_ATTR_ITEM_BG; ]</eval>
</fg>
<bg>
<eval>mAttributes[ &MENU_ATTR_ITEM_BG; ]</eval>
</bg>
</box>
</box>
</display>
</transition>
</state>
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<state var="sMenuItems" index="*">
<transition value="true">
<display>
<box>
<x>
<eval>mX</eval>
</x>
<y>
<eval>mY + _state_index() * mItemHeight</eval>
</y>
<width>
<eval>mWidth</eval>
</width>
<height>
<eval>mItemHeight</eval>
</height>
<fg>&_COLOR_TRANSPARENT;</fg>
<bg>
<eval>mAttributes[ &MENU_ATTR_ITEM_BG; ]</eval>
</bg>
<event name="onselect">
<script>
selectItem( _state_index() );
</script>
</event>
<expand template="Item"/>
</box>
</display>
</transition>
</state>
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<state var="sHighlight">
<transition value="&HIGHLIGHT_VISIBLE;">
<display>
<box>
<x>
<eval>mX</eval>
</x>
<y>
<eval>mY + mCurItemOffsetY</eval>
</y>
<width>
<eval>mWidth</eval>
</width>
<height>
<eval>mItemHeight</eval>
</height>
<fg>
<eval>mAttributes[ &MENU_ATTR_HIGHLIGHT_BG; ]</eval>
</fg>
<bg>
<eval>mAttributes[ &MENU_ATTR_HIGHLIGHT_BG; ]</eval>
</bg>
<event name="onselect">
<accelerators>
<key>FIRE</key>
</accelerators>
<execute>
<eval>selectItem( mCurItem )</eval>
</execute>
</event>
<label>
<text>
<eval>mCaptions[ mCurItem ]</eval>
</text>
<x>3</x>
<fg>
<eval>mAttributes[ &MENU_ATTR_HIGHLIGHT_FG; ]</eval>
</fg>
</label>
</box>
<box>
<event name="onselect">
<accelerators>
<key>DOWN</key>
</accelerators>
<execute>
<eval>Highlight_move( 1 )</eval>
</execute>
</event>
</box>
<box>
<event name="onselect">
<accelerators>
<key>UP</key>
</accelerators>
<execute>
<eval>Highlight_move( 0 - 1 )</eval>
</execute>
</event>
</box>
<box>
<event name="onselect">
<accelerators>
<key>
<eval>mCurItem + 1</eval>
</key>
</accelerators>
<execute>
<eval>selectItem( mCurItem )</eval>
</execute>
</event>
</box>
</display>
</transition>
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<transition value="&HIGHLIGHT_FIRE_SELECT_EVENT;">
<display>
<box>
<x>
<eval>mX</eval>
</x>
<y>
<eval>mY + mCurItemOffsetY</eval>
</y>
<width>
<eval>mWidth</eval>
</width>
<height>
<eval>mItemHeight</eval>
</height>
<fg>
<eval>mAttributes[ &MENU_ATTR_SELECTED_BG; ]</eval>
</fg>
<bg>
<eval>mAttributes[ &MENU_ATTR_SELECTED_BG; ]</eval>
</bg>
<label>
<text>
<eval>mCaptions[ mCurItem ]</eval>
</text>
<x>3</x>
<fg>
<eval>mAttributes[ &MENU_ATTR_SELECTED_FG; ]</eval>
</fg>
</label>
</box>
</display>
<delay>500</delay>
<script>
Event.setParam( 0, mCommands[ mCurItem ] );
Event.fireEvent( &EVENT_SELECTED;, mHandler );
</script>
</transition>
</state>
</states>
</state-machine>
</state-machines>
</partition>
</ujml>
ƒtƒ@ƒCƒ‹F menu.ujml
ŽŸ‚ÉAUjinn ‚Ƀƒjƒ…[‚ð‘g‚Ýž‚݂܂·F
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ujml PUBLIC "-//UIEVOLUTION//DTD UJML 1.4//EN" "ujml.dtd" [
<!ENTITY % include SYSTEM "ujlib/include.ujmc">
%include;
<!-- Colors -->
<!ENTITY SCORE_ITEM_FG "&_COLOR_WHITE;">
<!ENTITY SCORE_ITEM_BG "0xff000066">
<!-- Limits -->
<!ENTITY MAX_ROWS "8">
<!ENTITY MAX_COLS "8">
<!ENTITY MAX_COLORS "16">
<!ENTITY CLEARING_COLOR "&_COLOR_WHITE;">
<!ENTITY CLEARED_COLOR "&_COLOR_TRANSPARENT;">
<!-- Popup -->
<!ENTITY POPUP_HIDDEN "-1">
<!ENTITY POPUP_NULL "0">
<!ENTITY POPUP_MAIN_MENU "1">
<!ENTITY POPUP_MESSAGE "4">
<!-- Main Menu -->
<!ENTITY MENU_NEW "Next Level">
<!ENTITY MENU_RESTART "Replay Level">
<!ENTITY MENU_DONE "Done">
<!-- Events events -->
<!ENTITY ON_START "1">
<!ENTITY ON_NEXT_LEVEL "2">
<!ENTITY ON_GOTO_MENU "3">
<!ENTITY ON_NULL "4">
<!ENTITY ON_RESTART "5">
]>
<ujml>
<application>
<state-machines>
<include file="ujlib/stack.ujml" state-machine="IntStack"/>
<include file="ujlib/event.ujml" state-machine="Event"/>
</state-machines>
<state-variables>
<state-var name="sFnKeys" type="boolean"/>
<state-var name="sBoxes" type="boolean" size="&MAX_ROWS;,&MAX_COLS;"/>
<state-var name="sCursor" type="boolean"/>
<state-var name="sPopup" type="int"/>
<state-var name="sScores" type="boolean"/>
<state-var name="sDelayedUpdateScores" type="boolean"/>
<state-var name="sDelayedRemoveBoxes" type="boolean"/>
<state-var name="sDelayedSelectBox" type="boolean"/>
<state-var name="sRemoveColumns" type="boolean"/>
<state-var name="sStart" type="boolean"/>
<state-var name="sRestart" type="boolean"/>
<state-var name="sGameOver" type="boolean"/>
<state-var name="sDelayedEndGameCheck" type="boolean"/>
</state-variables>
<variables>
<var name="mTextHeight" type="int"/>
<var name="mScrHeight" type="int"/>
<var name="mScrWidth" type="int"/>
<var name="mBoxHeight" type="int"/>
<var name="mBoxWidth" type="int"/>
<var name="mColorMap" type="int" size="&MAX_COLORS;,2"/>
<var name="mRemoveBoxesFromColumn" type="boolean" size="&MAX_COLS;"/>
<var name="tBoxRow" type="int"/>
<var name="tBoxCol" type="int"/>
<var name="mMessage" type="string"/>
<var name="mColorMapIndex" type="int"/>
<var name="mColorMapBoxSize" type="int"/>
<!-- persistent variables -->
<var name="mNumRows" type="int"/>
<var name="mNumCols" type="int"/>
<var name="mNumColors" type="int"/>
<var name="mScore" type="int"/>
<var name="mHighScore" type="int"/>
<var name="mTotalBoxesCleared" type="int"/>
<var name="mLevelNumber" type="int"/>
<var name="mCursorCol" type="int"/>
<var name="mCursorRow" type="int"/>
<var name="mNumBoxes" type="int"/>
<var name="mNumBoxesInColumn" type="int" size="&MAX_COLS;"/>
<!-- game board -->
<var name="mBoxes" type="int" size="&MAX_ROWS;,&MAX_COLS;,2"/>
<var name="mColumnHasRemovableBoxes" type="boolean" size="&MAX_COLS;"/>
<!-- mSavedXXX variables are used to restart the current game -->
<var name="mSavedBoxes" type="int" size="&MAX_ROWS;,&MAX_COLS;,2"/>
<var name="mSavedColumnHasRemovableBoxes" type="boolean" size="&MAX_COLS;"/>
<!-- end of persistent variables -->
<!-- Globals used for removing columns -->
<var name="mNumBoxesCleared" type="int"/>
<var name="gI" type="int"/>
<var name="gCol" type="int"/>
<var name="gRow" type="int"/>
<var name="gSeed" type="int"/>
<var name="gAvailCol" type="int"/>
<var name="gRemoveColumnsDelay" type="int"/>
</variables>
<functions>
<function name="repaintPopup" type="void">
<variables>
<var name="temp" type="int"/>
</variables>
<script>
temp = sPopup;
sPopup = &POPUP_HIDDEN;;
sPopup = temp;
</script>
</function>
…
</functions>
<templates>
…
</templates>
<script>
…
</script>
<display>
…
</display>
<states>
<state var="sFnKeys">
<transition value="true">
<display>
<fn>
<text>Options</text>
<event name="onselect">
<accelerators>
<key>F2</key>
<key>POUND</key>
<key>STAR</key>
</accelerators>
<variables>
<var name="temp" type="int"/>
</variables>
<script>
temp = sPopup;
sPopup = &POPUP_HIDDEN;;
if (temp == &POPUP_MAIN_MENU;)
{
sPopup = &POPUP_NULL;;
}
else if (temp == &POPUP_NULL;)
{
sPopup = &POPUP_MAIN_MENU;;
}
else
{
<!-- an options menu is being displayed; restart the game with new settings -->
start();
}
</script>
</event>
</fn>
</display>
</transition>
</state>
¥¥¥
<state var="sPopup">
<transition value="&POPUP_NULL;">
<script>
Menu.setVisible( false );
</script>
</transition>
<transition value="&POPUP_MAIN_MENU;">
<script>
Menu.initialize( "menu" );
Menu.add( "&MENU_NEW;", &ON_NEXT_LEVEL; );
Menu.add( "&MENU_RESTART;", &ON_RESTART; );
Menu.add( "&MENU_DONE;", &ON_NULL; );
Menu.center();
Menu.setVisible( true );
</script>
</transition>
<transition value="&POPUP_MESSAGE;">
<display>
<box>
<x>
<eval>2</eval>
</x>
<y>
<eval>2</eval>
</y>
<width>
<eval>mScrWidth - 4</eval>
</width>
<height>
<eval>mScrHeight - 4</eval>
</height>
<bg>&_COLOR_DARKGRAY;</bg>
<multi-label>
<text>
<ref var="mMessage"/>
</text>
<x>2</x>
<y>2</y>
<width>
<eval>mScrWidth - 8</eval>
</width>
<height>
<eval>_max( mScrHeight - (mTextHeight * 2) - 4, mTextHeight * 2 )</eval>
</height>
<fg>&_COLOR_WHITE;</fg>
<bg>&_COLOR_DARKGRAY;</bg>
</multi-label>
</box>
</display>
<script>
Menu.initialize( "menu" );
Menu.add( "&MENU_RESTART;", &ON_RESTART; );
Menu.add( "&MENU_NEW;", &ON_NEXT_LEVEL; );
Menu.center();
Menu.setVisible( true );
</script>
</transition>
</state>
<state var="Event.sEvent" index="&EVENT_SELECTED;">
<transition value="menu">
<variables>
<var name="command" type="int"/>
</variables>
<script>
Menu.setVisible( false );
command = Event.getParam( 0 );
if (command == &ON_GOTO_MENU;)
{
sPopup = &POPUP_MAIN_MENU;;
}
else if (command == &ON_START;)
{
start();
}
else if (command == &ON_RESTART;)
{
restart();
}
else if (command == &ON_NEXT_LEVEL;)
{
mScore = 0;
mHighScore = 0;
mLevelNumber = mLevelNumber + 1;
start();
}
else if (command == &ON_NULL;)
{
sPopup = &POPUP_NULL;;
}
</script>
</transition>
</state>
¥¥¥
<state var="sDelayedEndGameCheck">
<transition value="true">
<delay>100</delay>
<variables>
<var name="fGameOver" type="boolean"/>
</variables>
<script>
<!-- see if the end of the game has been reached. Either all boxes have been removed -->
<!-- or it is not possible to remove any more boxes. -->
if (mTotalBoxesCleared == mNumBoxes)
{
<!-- we have a winner! all boxes have been removed. -->
mScore = mScore + (mScore / 4);
mMessage = _strcat( "Level cleared!
Bonus: ", _strcat( mScore / 4, "." ) );
sPopup = &POPUP_MESSAGE;;
if (mScore > mHighScore)
{
mHighScore = mScore;
}
fGameOver = true;
}
else
{
<!-- determine if there are removable boxes -->
if (!areBoxesRemovable())
{
<!-- there are no more selectable boxes so the game is over -->
mScore = mScore - (mNumBoxes - mTotalBoxesCleared);
mMessage = _strcat( "No moves.
Penalty: ", _strcat( mNumBoxes - mTotalBoxesCleared, "." ) );
sPopup = &POPUP_MESSAGE;;
if (mScore > mHighScore)
{
mHighScore = mScore;
}
fGameOver = true;
}
}
updateScores();
<!-- repaint cursor -->
sCursor = false;
sCursor = true;
sDelayedEndGameCheck = false;
sGameOver = fGameOver;
</script>
</transition>
</state>
¥¥¥
</states>
<--Menu goes on top of z-order -->
<state-machines>
<include file="ujlib/menu.ujml" state-machine="Menu"/>
</state-machines>
</application>
</ujml>
ƒtƒ@ƒCƒ‹F ujinn7.ujml

’x‚¢ƒfƒoƒCƒX‚ł̓Q[ƒ€ŠJŽnŽž‚̉æ–Ê‚ÌÄ•`‰æ‚ÉŽžŠÔ‚ª‚©‚©‚è‚Ü‚·B Š®—¹‚É”•b‚ð—v‚·‚é‰Â”\«‚ª‚‚¢‚±‚Æ‚ª‚í‚©‚Á‚Ä‚¢‚鈗‚É‚ÍA ‰æ–ʂɃrƒW[ƒJ[ƒ\ƒ‹iˆ—’†ƒCƒ“ƒWƒP[ƒ^j‚ð’ljÁ‚µ‚Ü‚·B
ƒrƒW[ƒJ[ƒ\ƒ‹‚Í‘¼‚̃AƒvƒŠƒP[ƒVƒ‡ƒ“‚Å‚àŽg‚¤‰Â”\«‚ª‘å‚Ȃ̂ÅA Ä—˜—p‰Â”\‚È <state-machine> ‚Æ‚µ‚ÄŽÀ‘•‚·‚邱‚Ƃɂµ‚Ü‚·B
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ujml PUBLIC "-//UIEVOLUTION//DTD UJML 1.4//EN" "../ujml.dtd" [
<!ENTITY % include SYSTEM "include.ujmc">
%include;
<!ENTITY BUSY_FACE "0xff0000ff">
<!ENTITY BUSY_HANDS "0xff00ffff">
<!ENTITY BUSY_BG "0xfff000066">
<!ENTITY BUSY_BORDER "2">
<!ENTITY BUSY_HAND_THICKNESS "4">
<!ENTITY BUSY_ANIMATE_FRAME_CNT "4">
]>
<ujml>
<partition>
<state-machines>
<include file="include.ujml" state-machine="Linker"/>
<state-machine name="Busy" access="export">
<state-variables>
<state-var name="sAnimate" type="boolean"/>
<state-var name="sAnimateTick" type="boolean"/>
</state-variables>
<variables>
<var name="mScrWidth" type="int"/>
<var name="mScrHeight" type="int"/>
<var name="mTextHeight" type="int"/>
<var name="mAnimateFrame" type="int"/>
<var name="mSize" type="int"/>
<var name="mX" type="int"/>
<var name="mY" type="int"/>
<var name="mLittleHandX" type="int" size="&BUSY_ANIMATE_FRAME_CNT;"/>
<var name="mLittleHandY" type="int" size="&BUSY_ANIMATE_FRAME_CNT;"/>
<var name="mLittleHandWidth" type="int" size="&BUSY_ANIMATE_FRAME_CNT;"/>
<var name="mLittleHandHeight" type="int" size="&BUSY_ANIMATE_FRAME_CNT;"/>
<var name="mBigHandX" type="int" size="&BUSY_ANIMATE_FRAME_CNT;"/>
<var name="mBigHandY" type="int" size="&BUSY_ANIMATE_FRAME_CNT;"/>
<var name="mBigHandWidth" type="int" size="&BUSY_ANIMATE_FRAME_CNT;"/>
<var name="mBigHandHeight" type="int" size="&BUSY_ANIMATE_FRAME_CNT;"/>
</variables>
<functions>
<function name="centerText" type="int">
<parameters>
<var name="text" type="string"/>
</parameters>
<return>
<eval>(mScrWidth - _text_width( text, 0, 0, 0 )) / 2</eval>
</return>
</function>
<function name="initialize" type="void" visibility="public">
<script>
mScrWidth = _getIntProperty( &_PROPERTY_INT_SCREEN_WIDTH; );
mScrHeight = _getIntProperty( &_PROPERTY_INT_SCREEN_HEIGHT; );
mTextHeight = _text_height( 0, 0, 0 );
mSize = _max( _min( mScrWidth, mScrHeight ) / &BUSY_HAND_THICKNESS;, 40 );
mX = (mScrWidth - mSize) / 2;
mY = (mScrHeight - mSize) / 2;
mLittleHandX[ 0 ] = mX + mSize / 2 - &BUSY_HAND_THICKNESS; / 2;
mLittleHandY[ 0 ] = mY + mSize / 2;
mLittleHandWidth[ 0 ] = mSize / 2 - &BUSY_HAND_THICKNESS; * 2;
mLittleHandHeight[ 0 ] = &BUSY_HAND_THICKNESS;;
mBigHandX[ 0 ] = mX + mSize / 2 - &BUSY_HAND_THICKNESS; / 2;
mBigHandY[ 0 ] = mY + &BUSY_HAND_THICKNESS;;
mBigHandWidth[ 0 ] = &BUSY_HAND_THICKNESS;;
mBigHandHeight[ 0 ] = mSize / 2;
mLittleHandX[ 1 ] = mX + mSize / 2 - &BUSY_HAND_THICKNESS; / 2;
mLittleHandY[ 1 ] = mY + mSize / 2;
mLittleHandWidth[ 1 ] = mSize / 2 - &BUSY_HAND_THICKNESS; * 2;
mLittleHandHeight[ 1 ] = &BUSY_HAND_THICKNESS;;
mBigHandX[ 1 ] = mX + mSize / 2 - &BUSY_HAND_THICKNESS; / 2;
mBigHandY[ 1 ] = mY + mSize / 2;
mBigHandWidth[ 1 ] = mSize / 2 - &BUSY_HAND_THICKNESS;;
mBigHandHeight[ 1 ] = &BUSY_HAND_THICKNESS;;
mLittleHandX[ 2 ] = mX + mSize / 2 - &BUSY_HAND_THICKNESS; / 2;
mLittleHandY[ 2 ] = mY + mSize / 2;
mLittleHandWidth[ 2 ] = mSize / 2 - &BUSY_HAND_THICKNESS; * 2;
mLittleHandHeight[ 2 ] = &BUSY_HAND_THICKNESS;;
mBigHandX[ 2 ] = mX + mSize / 2 - &BUSY_HAND_THICKNESS; / 2;
mBigHandY[ 2 ] = mY + mSize / 2;
mBigHandWidth[ 2 ] = &BUSY_HAND_THICKNESS;;
mBigHandHeight[ 2 ] = mSize / 2 - &BUSY_HAND_THICKNESS;;
mLittleHandX[ 3 ] = mX + mSize / 2 - &BUSY_HAND_THICKNESS; / 2;
mLittleHandY[ 3 ] = mY + mSize / 2;
mLittleHandWidth[ 3 ] = mSize / 2 - &BUSY_HAND_THICKNESS; * 2;
mLittleHandHeight[ 3 ] = &BUSY_HAND_THICKNESS;;
mBigHandX[ 3 ] = mX + &BUSY_HAND_THICKNESS;;
mBigHandY[ 3 ] = mY + mSize / 2;
mBigHandWidth[ 3 ] = mSize / 2 - &BUSY_HAND_THICKNESS;;
mBigHandHeight[ 3 ] = &BUSY_HAND_THICKNESS;;
</script>
</function>
<function name="show" type="void" visibility="public">
<script>
mAnimateFrame = 0;
sAnimate = true;
</script>
</function>
<function name="hide" type="void" visibility="public">
<script>
sAnimate = false;
</script>
</function>
</functions>
<states>
<state var="sAnimate">
<transition value="true">
<display>
<box>
<x>
<eval>mX - &BUSY_BORDER;</eval>
</x>
<y>
<eval>mY - &BUSY_BORDER;</eval>
</y>
<width>
<eval>mSize + &BUSY_BORDER; * 2</eval>
</width>
<height>
<eval>mSize + &BUSY_BORDER; * 2</eval>
</height>
<fg>&BUSY_BG;</fg>
<bg>&BUSY_BG;</bg>
<oval>
<x>
<eval>&BUSY_BORDER;</eval>
</x>
<y>
<eval>&BUSY_BORDER;</eval>
</y>
<width>
<eval>mSize</eval>
</width>
<height>
<eval>mSize</eval>
</height>
<fg>&BUSY_FACE;</fg>
<bg>&BUSY_FACE;</bg>
</oval>
</box>
</display>
<script>
sAnimateTick = true;
</script>
</transition>
<transition value="false">
<script>
sAnimateTick = false;
</script>
</transition>
</state>
<state var="sAnimateTick">
<transition value="true">
<display>
<box>
<x>
<eval&g