2007年03月06日

【講座】HSPたまひよ塾 - 特別編「指定した年月の日数を得る」

はーい。たまひよ塾、久方ぶりの復活です。悠黒は生きてます。

1~3月は個人的に毎年忙しく、体調不良な時期でもあって、
わりと息を潜めて過ごしてますが、最近メルマガに貢献してないのと、
ゆめゆめゆうかさんが風邪でダウンしちゃってるなんてこともあり、
ピンチヒッター的に登場してみました。

さてさて、以下はカレンダーを作るときなどに便利なスクリプトです。
変数 y に西暦年を、変数 m に月を入れ、「*ymdays」ルーチンを呼び出すと、
指定した年月の日数を変数 d に入れて返します。
;----------------------------------------
repeat 8
y=2000+cnt :m=2 :gosub *ymdays
mes ""+y+"年"+m+"月の日数="+d
loop
stop
*ymdays
; 指定された年(西暦)月の日数を返します。
;
d=31
if m=2 { d=28
if (y\4)=0 { d=29
if ((y\100)=0)&((y\400)!0) :d=28
}
}
if (m=4)|(m=6)|(m=9)|(m=11) :d=30
return
;----------------------------------------
来年は閏年(うるう年)。もちろん、その計算もバッチリ入ってます。
ちなみに閏年の判定条件は以下の通り。

・西暦が400で割り切れる年はうるう年である。
・400で割り切れない場合、西暦が100で割り切れる年はうるう年ではない。
・100で割り切れない場合、西暦が4で割り切れる年はうるう年である。
・4で割り切れない場合、うるう年ではない。

今回は、何となーくワンポイントテクニック的な解説になりましたな。
それでは皆さま、また会う日まで。御機嫌よう~ン(^^)/~

(悠黒喧史)

投稿者 usuaji : 21:25

2006年09月12日

【講座】HSPたまひよ塾 - 第14回「アラームで音を鳴らす」

どうも、悠黒です。
今回は、前回で習った mmload, mmplay命令による音の出し方を使って、
実用的なアラーム機能をスクリプトでつくってみましょう。

まずは、鳴らす音データが必要です。サウンドレコーダーで録音し、
WAVファイルとして保存しておきましょう。
ファイル名は「JikanDesu.wav」としてください。

以下のスクリプトを入力します。
;----------------------------------------
title "シンプルアラーム"
mmload "JikanDesu.wav"
input h
input m
pos 72,2 :mes "時"
pos 72,26 :mes "分"
repeat
ch=gettime(4)
cm=gettime(5)
if h=ch and m=cm {
mmplay 0 :h=0 :m=0
}
wait 100
loop
;----------------------------------------
mmload, mmplay命令についての説明は、前回講座を参照してね。

3~4行目のinput命令でウィンドウ内に入力ボックスを表示して、
変数h,mにユー
ザーから指定時刻を入力させます。
hには"時"、mには"分"を入力します。

8~9行目のgettime命令によって現在時刻を変数ch,cmに取得します。
chには現在の"時"、cmには現在の"分"が入ります。
repeat ~ loop のループ中でこれを繰り返し、if文で絶えずチェック
します。指定時刻と現在時刻が一致したと判定されるとmmplay命令で
音を出す仕組みです。
さてここで問題。音を出した直後に変数h,mを0にしているのは、
なぜでしょう?
考えてみてね(^^)
ここで、ちょっとだけヒントを。
「h=0 :m=0」を外して実行してみると、何かわかるかもしれませんねぇ。

音データが自分で作れない人は、こちらからダウンロードしてもOKです。
http://www.hspcenter.com/hsptvm/archives/JikanDesu.wav

ではまた(^^)/~

(悠黒喧史)

投稿者 usuaji : 00:00

2006年08月17日

【講座】HSPたまひよ塾 - 第13回「音を鳴らしてみよう」

ひさかたぶりの登場、悠黒です。
さて今回は、たまひよの基本にたちかえり、HSPで音を鳴らす方法につい
て初歩から解説します。

音を鳴らす前に、まずは鳴らす音のデータを取りましょう。
パソコンにマイクをつないで、Windowsのスタートメニューから、
プログラム→アクセサリ→エンターテイメント→サウンド レコーダー
と選択し、サウンド レコーダーを起動します。

サウンドレコーダーは、赤い[●]ボタンをクリックすると録音開始、
黒い[■]ボタンで録音完了します。
マイクに向かって、自分の声でも、飼い猫の「ニャー」でも何でも
よいので、録音してみましょう。
録音できたら、ファイルメニューの「名前をつけて保存」で、
音声をファイルとして保存します。
ファイル名は「test.wav」としてください。

以下のスクリプトを組んで早速鳴らしてみましょう。
;----------------------------------------
mmload "test.wav",0
mmplay 0
;----------------------------------------
mmload命令は、指定した番号のバッファに音声ファイルを読み込みます。
mmplay命令は、指定した番号のバッファにある音声を再生します。

このスクリプトがうまく動かせたら今度は、複数の音声を、
複数のバッファに読み込ませて試してみましょう。

(悠黒喧史)

投稿者 usuaji : 00:00

2006年06月20日

【講座】HSPたまひよ塾 - 第12回「キャラクターの移動(2)」

さて、たまひよ塾も連載10回を越える、この時に、前回の疑問符に答えを
提示するつわものが現れました。

【メールより転載】

buffer 2 :picload "onitama.jpg"
screen 0,640,480
repeat 200
pos 2*cnt,180
gcopy 2,0,0,120,120
wait 1
color 255,255,255
if cnt!=199:boxf 2*cnt,180,2*cnt+2,180+120
loop

boxf 命令を使って、画像移動後に残る矩形の部分を白塗りしてみました。
また、画像の異動が荒いために、がくがくしていたのを
1回の移動距離を短くすることによって、動きをスムーズにしました。
また、2*cnt というように動きがなめらかになるようにした結果、
動きが遅くなりましたので、wait 10→ wait 1 として待ち時間を
短くしました。
ループの最後にも、画像の左端の一部を削除していましたので
if cnt!=199 という条件を付けました。
これでOKでしょうか。
(矢野重文さん)

矢野さん、たまひよ塾へのお便りありがとうございます。
色々と工夫しましたね。プログラムは工夫しながら作り上げていくことが
すごく大事です。
命令の位置を変えたりする試行錯誤もすてき、動きをスムーズにしようと
いう思いもナイスです。
boxf命令を使うアイデアがよかったですね。ほとんど正解です。

ではでは前回の解答編、まいりましょうか。

キャラクター画像移動時の残像を消すには、boxf命令を使って残像の残る
範囲を塗りつぶします。


画像:onitama.jpg
http://www.hspcenter.com/hsptvm/archives/onitama.jpg
(WEBブラウザで表示後、右クリックで画像を保存。)

▼サンプルスクリプト1
;----------------------------------------
buffer 2 :picload "onitama.jpg"
screen 0,640,480
color 255,255,255
repeat 50
x=8*cnt :y=180
pos x,180 :gcopy 2,0,0,120,120
boxf x,180,x+7,y+119
wait 10
loop
;----------------------------------------
一つ移動先にコピーする度に残像が残るわけですが、
さらにカンペキを目指すならこれも見えないようにすることができます。
それにはredraw命令を使います。
redraw命令は画面の更新を制御する命令です。

▼サンプルスクリプト2
;----------------------------------------
buffer 2 :picload "onitama.jpg"
screen 0,640,480
color 255,255,255
repeat 50
redraw 0
x=8*cnt :y=180
pos x,180 :gcopy 2,0,0,120,120
boxf x,180,x+7,y+119
wait 10
redraw 1
loop
;----------------------------------------
redraw 0 (描画モード0) と指定すると gcopy命令が実行されても仮想画
面を書き換えるだけで、実際の画面には反映されず、
redraw 1 (描画モード1) と指定すると、書き換えた画面が実際の画面に
も反映されます。
こうすると完璧に画像もチラつかせずに移動させることができます。

(悠黒喧史)

投稿者 usuaji : 23:12

2006年06月06日

【講座】HSPたまひよ塾 - 第11回「キャラクターの移動?」

今回は、画像のコピーを応用したテクニック。キャラクター画像を画面の
左側から右側へ移動させてみましょう。
前回同様「onitama.jpg」という画像を使います。
以下の画像はスクリプトを実行するフォルダと同じフォルダに置いてくだ
さい。


画像:onitama.jpg
http://www.hspcenter.com/hsptvm/archives/onitama.jpg
(WEBブラウザで表示後、右クリックで画像を保存。)

▼サンプルスクリプト
;----------------------------------------
buffer 2 :picload "onitama.jpg"
screen 0,640,480
repeat 50
pos 8*cnt,180
gcopy 2,0,0,120,120
wait 10
loop
;----------------------------------------
repeat~loop命令のシステム変数cntで、キャラクター画像をコピーする
座標を指定し、gcopy命令でキャラクター画像をそこにコピーしています。

このサンプルスクリプト、実はまだ未完成です。
実行するとキャラクター移動の際に画像の一部が残像として残ってしまう
のです。
この残像を消すにはどうしたらいいでしょう?
解答は次回に示しますが、それまでにいろいろと考えてみてください(^^)
それでは、また。

(悠黒喧史)

投稿者 usuaji : 13:27

2006年04月30日

【講座】HSPたまひよ塾 - 第10回「画像をコピーしてみよう」

今回も画像を使うスクリプト、画像をコピーする方法について解説します。
応用するとシューティングゲームやアクションゲームなど、
スピードの要求されるゲームに利用されるテクニックです。

前回も使った「onitama.jpg」という画像を使って解説しましょう。
以下の画像はスクリプトを実行するフォルダと同じフォルダに
置いてください。

画像:onitama.jpg
http://www.hspcenter.com/hsptvm/archives/onitama.jpg
(WEBブラウザで表示後、右クリックで画像を保存。)

▼サンプルスクリプト
;----------------------------------------
picload "onitama.jpg"
pos 320,180
gcopy 0,0,0,120,120
;----------------------------------------
gcopy命令を使うと、画面の一部を切り取って、
別の場所にコピーすることができます。
指定するパラメータは、次のようになっています。

gcopy コピー元のウィンドウID,コピー元のX座標,Y座標,
コピーするXサイズ,Yサイズ

もう一つ、応用したスクリプトを書いてみましょう。
;----------------------------------------
picload "onitama.jpg"
repeat 5
pos 120*cnt,180
gcopy 0,0,0,120,120
loop
;----------------------------------------
repeat~loop命令は、これまでにも何度か使いましたね。
いろいろと試して、実行してみてください。
ではまた。

(悠黒喧史)

投稿者 usuaji : 22:52

2006年04月08日

【講座】HSPたまひよ塾 - 第9回「画像を表示してみよう」

画像を表示するには、picload命令を使います。
まず表示する画像を用意してください。デジカメで撮った画像、ペイント
で描いた画像など、何でもいいですよ。HSPでは、BMP、GIF、JPG、ICOと
いった形式の画像を読み込むことができます。
ここでは仮に「onitama.jpg」というファイル名の画像を表示するとしま
しょう。
画像はスクリプトを実行するフォルダと同じフォルダに置いてください。


画像:onitama.jpg
http://www.hspcenter.com/hsptvm/archives/onitama.jpg
(WEBブラウザで表示後、右クリックで画像を保存。)

;----------------------------------------
picload "onitama.jpg"
;----------------------------------------
たった一行、とーってもカンタンですね。
画面サイズも画像サイズに初期化されて表示されます。

ではもう一つ。
;----------------------------------------
pos 260,180
picload "onitama.jpg",1
;----------------------------------------
posは第3回「位置を指定しよう」にも出ました。これから表示する画像の
座標を指定しています。
picload命令のパラメータに1を指定すると、画面を初期化せずに画像をそ
のまま表示処理します。座標を指定して画像表示する場合には
必ずパラメータに1を指定してください。

(悠黒喧史)

投稿者 usuaji : 14:24 | コメント (0)

2006年03月22日

【講座】HSPたまひよ塾 - 第8回「ボタンを置いてみよう」

今回はボタンを出してみます。皆さんが普段からよく、
[はい]とか[いいえ]とか[OK]とか[キャンセル]とか、
クリックしているWindowsのあのボタンです。
ボタンを出すには文字通り「button」命令を使います。
;----------------------------------------

a=0
pos 100,100 :button "1足すぞ",*tobu1
pos 100,130 :button "5足してみる",*tobu2
pos 100,160 :button "10足そう",*tobu3
stop

*tobu1
a=a+1
goto *ans

*tobu2
a=a+5
goto *ans

*tobu3
a=a+10

*ans
mes "変数aは"+a+"です"
stop

;----------------------------------------
button命令は、「"」で囲まれた文字列をボタン名として指定し、
次にジャンプ先としてラベルを指定します。
ボタンが押されると、指定されたラベルにジャンプする仕組みです。

(悠黒喧史)

投稿者 usuaji : 23:53

2006年03月03日

【講座】HSPたまひよ塾 - 第7回「もし~だったら~をしろ!」

今回は、条件によってプログラム処理の流れを変更する方法。
条件判断を行なう命令「if」の使い方を解説します。
ちなみに「if」は日本語にすると「もし」という意味。スクリプトでは
次のように書きます。

;----------------------------------------
a=13
if a>10 :goto *abc
mes "変数aは10以下だね。"
stop

*abc
mes "変数aは11以上だね。"
;----------------------------------------

2行目のif文の「a>10」の部分を条件式といいます。
if文に処理がきたときに、ここに書いた条件の通りであれば、
「:」のあとの命令が実行されます。ここでは goto命令でラベル「*abc」
のある6行目にジャンプします。
条件に外れていた場合は、何もせずに次の行に処理がいきます。
すなわち、ここでは3行目の mes命令が実行され、「変数aは10以下ね。」
と表示して、次の行でプログラム処理が「stop」となります。

1行目で変数aには13を入れているので、このままスクリプトを実行すると
条件は満たされ、結果は・・まあ、試してみてください。
一度そのまま試して、その後は、1行目の変数aに入れる数をいろいろ変え
て再度試してみてね。

(悠黒喧史)

投稿者 usuaji : 02:01

2006年02月07日

【講座】HSPたまひよ塾 - 第6回「変数を使ってみよう - その2」

今回は配列変数について解説します。
配列変数というのは、一つの変数名に通し番号をつけた複数の変数です。
複数の変数なら例えば a, b, c で三つ。それでいいじゃん。なんて思う
かもしれませんが、配列変数には次のようなメリットがあります。

・通し番号を指定して内容を参照できる
・通し番号には、さらに変数を指定できる

具体的には次のような使い方になります。
;----------------------------------------
dim a,3 ; 変数aの配列を3個分用意する
a(0)=11 ; 変数aの配列0番に11を入れる
a(1)=37 ; 変数aの配列1番に37を入れる
a(2)=59 ; 変数aの配列2番に59を入れる
repeat 3
mes "変数aの"+cnt+"番は"+a(cnt)
loop
;----------------------------------------
配列変数は、変数名にカッコ()をつけて、その中に通し番号を書きます。

ちなみに2~4行目はもうちょっと楽チンに
;----------------------------------------
a=11,37,59
;----------------------------------------
などと書くこともできたりします。

配列変数は、同じような目的の変数を10個くらい使う場合などに、
とても便利に使えます。
(例:RPGのパーティメンバーのステータスなど)
上記の例ではたった3個の変数ですが、これが10個とか20個になると、
同じ処理のスクリプトを変数の数だけ組まなきゃならなくなって大変な
手間になります。配列変数を使い、同じ処理のスクリプトは一つにして
repeat~loop命令で囲ってしまえば、スクリプトをとてもシンプルに
まとめることができるでしょう。

今回は、たまひよ講座としては少し難しくなってきたかな~って感じが
しますが、第4~5回の講座を読み返すと理解が深まると思います。
がんばってついて来てね(^^)==3

(悠黒喧史)

投稿者 usuaji : 21:31

2006年01月14日

【講座】HSPたまひよ塾 - 第5回「繰り返す命令」

明けましてなんとやら。年頭の初回は、繰り返し命令のrepeat~loop命令
の使い方を解説します。
百聞は一見にしかず、次のスクリプトを入力して実行してみよう。
「明けましておめでたい」というメッセージを10個表示するはずだ。
;----------------------------------------

repeat 10
mes "明けましておめでたい"
loop

;----------------------------------------
repeat命令に繰り返す数を指定します。繰り返す回数を変えて試してみよ
う。
repeatとloop命令は必ずコンビで使います。
ところでrepeat~loop命令には変数cntというシステム変数が隠れていま
す。変数cntには自動的に繰り返される数がカウントされて入り、
必ず0からカウントされていきます。
つまり、10回繰り返せば、0⇒1⇒2⇒3⇒4⇒5⇒6⇒7⇒8⇒9という具合に
カウント数が順次入っていきます。
なので、次のようにスクリプトをちょっと書き換えると・・・
;----------------------------------------

repeat 10
mes "明けましておめでたい "+cnt
loop

;----------------------------------------
どうなるかな?結果は自分で試してみてね(^^)


(悠黒喧史)

投稿者 usuaji : 03:40

【講座】HSPたまひよ塾 - 第4回「変数を使ってみよう」

変数は、数値や文字などのデータを入れておく箱のようなものです。
;----------------------------------------
a=3
b=5
c="タマネギ"
d=a+b
e=a-b+10
mes "変数の中身を表示"
mes a
mes b
mes c
mes d
mes e
mes c+e+"個"
;----------------------------------------
計算して結果を別の変数に入れたり、mes命令で中身を表示することが
できます。

(悠黒喧史)

投稿者 usuaji : 03:39

【講座】HSPたまひよ塾 - 第3回「位置を指定しよう」

今回は、表示する位置を指定する命令「pos」を使ってみましょう。
;----------------------------------------

pos 200,230
mes "たぶん真ん中らへんに表示されます"

;----------------------------------------
初期のウィンドウ内の画面の位置は、左上から横0~639、縦0~479という
範囲の数で指定することができます。
この横位置のことをX座標、縦位置のことをY座標といいます。
pos命令でX座標、Y座標をいろいろ変えて試してみてね。

(悠黒喧史)

投稿者 usuaji : 03:37

【講座】HSPたまひよ塾 第2回

「よくある初心者ミス」

 命令や、命令とパラメータの間のスペース、文字列を囲む " ' , など
の記号を全角文字で記述してしまうことがよくあります。

;----------------------------------------

mes ”HSPのたまごからひよこを目指せ!”

;----------------------------------------

 これは実行しても文法エラーになります。
 HSPでは命令は全て半角の英数字で記述します。「同じように入力した
のに動かないよ~」となっている場合は、ほとんどがこのパターンに
陥ってますので、注意しましょう。

(悠黒喧史)

投稿者 usuaji : 03:36

【講座】HSPたまひよ塾 第1回

「文章を表示しよう」

悠黒喧史です。

 今回から始まる「HSPたまひよ塾」は初心者を対象にしたHSP入門講座。

 短いスクリプトの例で、シンプルに解説する「3分クッキング」みたい
なコーナーです。

 さて、初回はたった1行のスクリプトですよ。

;----------------------------------------

mes "HSPのたまごからひよこを目指せ!"

;----------------------------------------

 HSPスクリプトエディタに入力できたらF5キーでスクリプトを実行して
みましょう。mes命令は、画面に文字を表示する命令です。

 表示する内容をいろいろと変えて試してみてね。

(悠黒喧史)

投稿者 usuaji : 03:34