HSP | むか~し作り途中であきらめたデジタル時計 (その1)
HSP | むか~し作り途中であきらめたデジタル時計
title "起動中..."
onerror *error ; 念のため#module "Setting_Data_Save_Module"
#deffunc SettingDataLoad str filename
exist filename
if strsize=-1 {
mode@=1
smooth@=0
separate@=1
SettingWindow@=0
} else {
notesel buf
noteload filename
repeat noteinfo(0)
noteget val,cnt
split val,"=",variable,data
switch variable
case "mode"
mode@=int(data)
swbreak
case "smooth"
smooth@=int(data)
swbreak
case "separate"
separate@=int(data)
swbreak
case "SettingWindow"
SettingWindow@=int(data)
swbreak
swend
loop
}
return
#deffunc SettingDataSave str filename
buf="mode="+mode@+"\nsmooth="+smooth@+"\nseparate="+separate@+"\nSettingWindow="+SettingWindow@
notesel buf : notesave filename
return
#global
SettingDataLoad "SaveDataFile"buffer 1 ; 背景 用
y1=-1 : y2=480
repeat 206
colors=255*cnt/206
color colors,colors,colors
line -1,y1,639,y1
line -1,y2,639,y2
y1+ : y2-
loop
color 255,255,200 : boxf 0,205,640,274buffer 2 ; 時間を示す枠
color 0,0,1 : boxf
color 255,255,0
line 1,206,638,206
line 638,206,638,273
line 638,273,1,273
line 1,273,1,206buffer 3,68,68*24 ; ~時 用
color 0,0,1 : boxf
font msgothic,68
color 0,0,0 : pos 0,5
repeat 24
if cnt<10 : hours="0"+cnt : else : hours=""+cnt
mes hours
loopbuffer 4,68,68*60 ; ~分・~秒 用
color 0,0,1 : boxf
font msgothic,68
color 0,0,0 : pos 0,5
repeat 60
if cnt<10 : minutes_seconds="0"+cnt : else : minutes_seconds=""+cnt
mes minutes_seconds
loopbuffer 5,68/2,68 ; 「:」 用
color 0,0,1 : boxf
font msgothic,68
color 0,0,0 : pos 0,5
mes ":"buffer 6 ; 切れ線
color 0,0,1 : boxf
color 0,0,0
line 73,0,73,480
line 97,0,97,480
line 175,0,175,480
line 199,0,199,480
line 277,0,277,480screen 100,,,6 ; 設定画面
title "設定画面"
syscolor 15 : boxf
font msgothic,20 : color : pos 0,0 : mes "詳細設定"
objmode 2 : font msgothic,12
objsize 119,24 : pos 0,22 : chkbox "エコノミーモード",mode
objsize 157,24 : pos 0,48 : chkbox "スムーズに数字を動かす",smooth
objsize 157,24 : pos 0,74 : chkbox "切れ線を入れる",separatebuffer 101 ; 背景 用 (エコノミー時用)
pos 0,0 : gzoom 320,240,1,0,0,640,480,1buffer 102 ; 時間を示す枠 (エコノミー時用)
color 0,0,1 : boxf
color 255,255,0
line 0,103,318,103
line 318,103,318,136
line 318,136,0,136
line 0,136,0,103buffer 103,68/2,68*24/2 ; ~時 用 (エコノミー時用)
pos 0,0 : gzoom 68/2,68*24/2,3,0,0,68,68*24,1buffer 104,68/2,68*60/2 ; ~分・~秒 用 (エコノミー時用)
pos 0,0 : gzoom 68/2,68*60/2,4,0,0,68,68*60,1buffer 105,68/2/2,68/2 ; 「:」 用 (エコノミー時用)
pos 0,0 : gzoom 68/2/2,68/2,5,0,0,68/2,68,1buffer 106 ; 切れ線 (エコノミー時用)
color 0,0,1 : boxf
color 0,0,0
line 36,0,36,240
line 48,0,48,240
line 87,0,87,240
line 99,0,99,240
line 138,0,138,240buffer 200
; 新しいウィンドウで設定画面を出したところから
; メインウィンドウに移し替えたときなど用に、
; 画面を暗くする前の状態の画像を入れる場所screen 0
onexit *SettingWindowClose
*start
if mode=0 {
width 640,480
title "デジタル時計 - 通常モード"
*main_n
redraw 0
gmode 0,640,480
pos 0,0 : gcopy 1,0,0,640,480 ; 背景
gmode 4,640,480,256 : color 0,0,1
if separate=1 : pos 0,0 : gcopy 6,0,0,640,480
; 何時?
if smooth=1 {
gettime4=gettime(4)
if hours_pos<68*(gettime4-3) and hours_pos>=68*(gettime4-4) : hours_pos+5
if hours_pos<68*(gettime4-4) or hours_pos>68*(gettime4-3) : hours_pos=68*(gettime4-3)
} else {
hours_pos=68*(gettime(4)-3)
}
pos 0,0 : gcopy 3,0,hours_pos,68,limit(68*24-hours_pos,0,480)
if hours_pos>=68*(0-4) and hours_pos<68*(2-2) : gcopy 3,0,hours_pos+24*68,68,68*24-hours_pos-24*68
if hours_pos>68*(21-4) and hours_pos<68*(23-2) : gcopy 3,0,hours_pos-24*68,68,68*24-hours_pos+24*68
; 何分?
if smooth=1 {
gettime5=gettime(5)
if minutes_pos<68*(gettime5-3) and minutes_pos>=68*(gettime5-4) : minutes_pos+5
if minutes_pos<68*(gettime5-4) or minutes_pos>68*(gettime5-3) : minutes_pos=68*(gettime5-3)
} else {
minutes_pos=68*(gettime(5)-3)
}
pos 102,0 : gcopy 4,0,minutes_pos,68,limit(68*60-minutes_pos,0,480)
if minutes_pos>=68*(0-4) and minutes_pos<68*(2-2) : gcopy 4,0,minutes_pos+60*68,68,68*60-minutes_pos-60*68
if minutes_pos>68*(57-4) and minutes_pos<68*(59-2) : gcopy 4,0,minutes_pos-60*68,68,68*60-minutes_pos+60*68
; 何秒?
if smooth=1 {
gettime6=gettime(6)
if seconds_pos<68*(gettime6-3) and seconds_pos>=68*(gettime6-4) : seconds_pos+5
if seconds_pos<68*(gettime6-4) or seconds_pos>68*(gettime6-3) : seconds_pos=68*(gettime6-3)
} else {
seconds_pos=68*(gettime(6)-3)
}
pos 204,0 : gcopy 4,0,seconds_pos,68,limit(68*60-seconds_pos,0,480)
if seconds_pos>=68*(0-4) and seconds_pos<68*(2-2) : gcopy 4,0,seconds_pos+60*68,68,68*60-seconds_pos-60*68
if seconds_pos>68*(57-4) and seconds_pos<68*(59-2) : gcopy 4,0,seconds_pos-60*68,68,68*60-seconds_pos+60*68
もう一度書きますが、使うときはコメントとかください。そして、これはむか~しに作ったものなのでバグがあるかもしれません。