2013年2月8日金曜日

時計

まずは簡単な時計です。グラフィック4ページを活かすことで、重ね合わせをほとんど意識することなく処理できています。

//----------------------------------------------------------------------------------------------
// 時計 / clock
//----------------------------------------------------------------------------------------------
// メイン / Main
int hour,min,sec
int hour0=-1,min0=-1,sec0=-1
int cx,cy,x,y
int wx,wy
width(0)
getWidth(wx,wy)
width(64,20)
switch deviceType()
    case 2:
    case 3:
    case 4:
        width(32,30)
endswitch
tcolor(-THWHITE,0,0,255)
cx=wx/2
cy=wy/2
//
vpriority(TPAGE,GPAGE2,GPAGE1,GPAGE0,GPAGE3)
vpage(B_TPAGE or B_GPAGE0 or B_GPAGE1 or B_GPAGE2 or B_GPAGE3,YES)
int gx=300,gy=400
int r=gx/2
//
setExitKey()
while (inkey()<>'!')
    getTime()
    if hour0<>hour then {
        // hour
        setBackGround(hour)
//        apage(GPAGE0):wipe()
//        gborder(3,-TGREEN,0,0,255)
//        lineWidth(6)
//        gcolor(-THRED,0,0,235)
//        calc_endPoint(r*2/3,hour,12)
//        line(cx,cy,x,y)
        hour0=hour
    }
    if min0<>min then {
        // min
        apage(GPAGE1):wipe()
        lineWidth(4)
        gcolor(-THMAGENTA,0,0,255)
        calc_endPoint(r,min,60)
        line(cx,cy,x,y)
        min0=min
        //
        // hour
        apage(GPAGE0):wipe()
        gborder(3,-TGREEN,0,0,255)
        lineWidth(6)
        gcolor(-THRED,0,0,235)
        calc_endPoint(r*2/3,hour*(60/12)+(min/12),60)
        // 60分割して1時間で60/12動かす
        // 60分で60/12動かす=1分で60/12/16=1/12動かす
        line(cx,cy,x,y)
    }
    if sec0<>sec then {
        locate(1,1):print using "%%:%%:%%",hour,min,sec
        // sec
        apage(GPAGE2):wipe()
        lineWidth(2)
        gcolor(-THYELLOW,0,0,255)
        calc_endPoint(r,sec,60)
        line(cx,cy,x,y)
        sec0=sec
    }
endwhile
end
//----------------------------------------------------------------------------------------------
// 関数 / Functions
//----------------------------------------------------------------------------------------------
func calc_endPoint(r;int,t;int,interval;int)
// r:半径 t:時間 interval:目盛りの間隔
    float cof = pi(2) / interval
    x = int( r * sin(cof * t)) + cx
    y = int(-r * cos(cof * t)) + cy
endfunc
func getTime()
    str tm$=time$
    hour=val(left$(tm$,2))
    min =val(mid$(tm$,4,2))
    sec =val(right$(tm$,2))
endfunc
func setBackGround(hour;int)
    str backGroundFname
    backGroundFname="girl4.jpg"
    if hour>= 0 and hour< 6 then backGroundFname="girl1.png"
    if hour>= 6 and hour<12 then backGroundFname="girl2.jpg"
    if hour>=12 and hour<18 then backGroundFname="girl3.png"
    apage(GPAGE3)
    wipe()
    imgLoad((wx-gx)/2,(wy-gy)/2,gx,gy,backGroundFname)
    //
    gcolor(-TCYAN,0,0,200)
    //circle(cx,cy,10,0,pi(2),NO,YES)
    circle(cx,cy,10,,,NO,YES):// V1.6
    blend(BlendModeXOR)
    //circle(cx,cy, 5,0,pi(2),NO,YES)
    circle(cx,cy, 5,,,NO,YES):// v1.6
    blend(BlendModeNormal)
endfunc
//----------------------------------------------------------------------------------------------
func setExitKey()
    str exit$
    if isLocalizeJapan() then {
        exit$="中断"
    } else {
        exit$="exit"
    }
    setFunctionKey(0,exit$,'!')
    displayFunctionKey(YES,0,0)
    kBackgroundAlpha(0.7)
endfunc
//--------------------------------------------------------------------------------------------


圧縮ファイル:XBclock.zip(画像ファイル入りなのでインポートが必要)

0 件のコメント:

コメントを投稿