HSP | むか~し作り途中であきらめたデジタル時計 (その1)

HSP | むか~し作り途中であきらめたデジタル時計

入りきらないので分割します。→ その2
むか~しに作ったものなので最近公開しているものよりクソだとは思いますが…一応公開。
これはマジで、無断で使用しないでください。
使いたい場合は必ずコメントなどで知らせてから改造などしてください。かなり苦労してここまで作ったんで。(今の私が作れば苦労しないかもしれませんが…それでもコメントぐらいください。)

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,274

buffer 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,206

buffer 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
loop

buffer 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
loop

buffer 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,480

screen 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 "切れ線を入れる",separate

buffer 101 ; 背景 用 (エコノミー時用)
pos 0,0 : gzoom 320,240,1,0,0,640,480,1

buffer 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,103

buffer 103,68/2,68*24/2 ; ~時 用 (エコノミー時用)
pos 0,0 : gzoom 68/2,68*24/2,3,0,0,68,68*24,1

buffer 104,68/2,68*60/2 ; ~分・~秒 用 (エコノミー時用)
pos 0,0 : gzoom 68/2,68*60/2,4,0,0,68,68*60,1

buffer 105,68/2/2,68/2 ; 「:」 用 (エコノミー時用)
pos 0,0 : gzoom 68/2/2,68/2,5,0,0,68/2,68,1

buffer 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,240

buffer 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

もう一度書きますが、使うときはコメントとかください。そして、これはむか~しに作ったものなのでバグがあるかもしれません。