26 システム変数ってなに??

簡単に言うと、自動的に取得してくれる変数の値の事です

例えば今日の日にちを取得したい場合は
「$day」の変数の中に今日の日付が入っています
他にも、マウスの位置などが取得されます

早速実行してみましょう

#top
!cls1
$s=$second
$s+190
!color $second,$s,$s
現在
$y=$year
$m=$month
$d=$day
$h=$hour
$m=$minute
$s=$second
!mes
$y

$m

$d

$h

$m

$s

です
!endmes
tt
!goto #top

システム変数一覧

mousex マウスのX座標を取得
mousey マウスのY座標を取得
year 西暦を取得
month 月を取得
day 日付を取得
hour 時を取得
minute 分と取得
second 秒を取得
$dispx PCの画面(X軸)の大きさを取得
$dispy PCの画面(Y軸)の大きさを取得
$cnt !repeatの回数を取得します

このシステム変数の「$dispx」等を使用すれば、フルスクリーンもどきも可能です^^;


27 マウスで何かやってみよう

システム変数の続きで、マウスの座標取得を利用して・・・

単純な物を作ってみましょう

$bar=__________
#top
!color 0,0,0
_________________________________________________________________________________________________________________________
!color 255,255,255
!txtpos $mousex,400
$bar
t
!goto #top

マウスの移動に合わせて、バーが移動します
ブロック崩しの原型だと思えば、後は自分で作成できますよね?
それだけの技術は、既に身に付いたはずですよ?

ボールの反射などの計算も、一度やってみましたが快適に作動しました
だから、大丈夫です

あたり判定のコツは、バーの表示が「400」である事と
文字の大きさが23である事ですね

この場合は半角なので「$mousex」から「$mousex」プラス5*23
までの間がバーの範囲になるはずです


ブロック崩しなんて面倒だと思っていたら、パチンコを作成された方が・・・(汗)
曲線の計算、反射、自動マップ作成方法が知りたい方は
Soft Fruitの「link」で、ひろさわ氏のHPを紹介していますから
是非そこからDLして研究しましょう
(ひろさわ氏はみなさんの研究用にPackAresを使用しないで公開されています)


28 キーボードの判定

使いこなせば便利なコマンドが「!key $_____」です

簡単に特徴をいえばマウスに頼らない操作が可能になります

キーの判定?

!key $test
#key
!cls
$test
!goto #key

変数「$test」には押したボタン名が反映されます
「→」を押せば「right」と表示されたはずですね?

「→」と「↑」を同時に押した場合は「rightup」と表示されます
覚え方としては「右上」で・・・

「↓」と「←」を同時に押した場合は「leftdown」と表示されます
覚え方としては「左下」です(笑)

日本語で覚え易いようにしました^^



試しに「!key」を使ってみましょう

方向キーを押すと、bmpが移動します
!key $key
$speed=5
$x=300
$y=220
test1.jpg
test1.bmp
#test
!chrpos $x,$y
*
!if $key=right
$x+$speed
!endif
!if $key=left
$x-$speed
!endif
!if $key=up
$y-$speed
!endif
!if $key=down
$y+$speed
!endif
!goto #test

はい、これだけです
キャラ画像を動かすのはコレだけで動きます
簡単ですよね?

方向を押したら「$y」や「$x」から、「$speed」の分だけ座標をずらしているのです


気が付いたかと思いますが、「!key」コマンドは一度実行すれば
「!keyoff」で止めるまでずっと判定を行います
特に害は無いですが、不必要な時はオフにしておく事をお勧めします


ところでどのキーがどれになるのか?
という疑問もあると思うので対応表です
実際のキー !keyで設定した変数に
代入される内容
up
right
down
left
Ctrl ctrl
スペース space
TAB tab
エスケープ esc
「→」と「↑」(右上) rightup
「→」と「↓」(右下) rightdown
「←」と「↓」(左下) leftdown
「←」と「↑」(左上) leftup
左クリック rclick
右クリック lclick

日本語で考えてそのまま英語にすればOKですよ

ココまで到達した方の場合は「!msel」よりも
「!key」を使ってクリッカブルマップを作成した方が安定した物が作れます
「!msel」は急ぎで作ったままほったらかして自信が無いので^^;
その為の「!key」です(笑)


29 他のファイルを起動

Aresには他のプログラムに頼って、ファイルなどを開くコマンドがあります

ワードで作成したドキュメントや、インターネット上のファイルなど
ウインドウズ上で作動する、様々な物に対応しているので
自分のサイトへのショートカットを作ってみたり
自動的にダウンロードを開始する様なスクリプトも作成できます

では簡単なところで、ホームページを開いてみましょう

!open http://softfruit.hp.infoseek.co.jp/
!stop

コレだけです
「!open」の後に、開きたいファイル名を入力すれば実行されます
関連付けされていないファイルは、開く事が出来ません
ご了承ください


30 画面を保存??

これは、ユーザーの希望によって付けた機能で
私自身もイマイチ利用価値が分かっていませんが

実行画面をそのままBMP画像として保存できます

あいうえお
abcdefg
123456789
!screensave テストです
!end

このスクリプトを実行すると
「テストです.bmp」というBMP画像が作成されます

この場合、必ず上書き保存になりますが
変数で名前が変化するようにすれば連番にも出来ますよね


31 画面サイズの変更

ちょっとだけ変化の欲しい方に?

ウインドウサイズの変更はまあオマケです^^
コマンドも簡単♪
!screen $dispx,$dispy
システム変数を使って画面サイズを変更しました
!end

以上!!^^;


32 リピートとループともう一つ?

凄く便利で・・・でも実験中です

今までは一定の範囲のスクリプトを何度も実行する時
「#_____」と「!goto #_____」を使ってましたよね?

でもファイルサイズが大きいとジャンプに時間が掛かるのは
中級の終わりで説明しました

でもこの2つの命令を使えば簡単で早いですよ
!repeat
!screen $x,$y
$x+40
$y+30
!if $x>$dispx
!break
!endif
!loop
おわり
tt
!end

書く量が増えてるし、コマンドも増えてるから面倒・・・と思われるかもしれませんね


では「!goto」の説明をしましょう
「!goto」で指定されたラベルを探す方法は単純です
一番上からラベル名に当てはまる行を、全部順番に探しているのです

当然スクリプトが複雑に、長くなると探すのに時間が掛かります


しかし「!repeat」の場合は違います
「!repeat」が命令された行を覚えて「!loop」まで実行
その後さっき覚えた行に直接戻るので探す時間のロスがないのです

条件を満たせば「!break」でリピートを中断させます

この3つを使えば今までよりも、快適に作動する物が作成可能です



もう一つの使い方?

毎回「!break」を書くのも馬鹿らしいですよね?
回数を指定してリピートさせる事が出来ます
$test=0
!repeat 30
$test+1
!loop
$test
$cnt
おわり
!stop

一瞬で終わりますがちゃんと30回リピートを行ってます
リピートの回数は「$cnt」というシステム変数に取得されます

では何故「$test」は30で「$cnt」は31なのでしょうか?
簡単に言えば「$test」はゼロから始まって、「$cnt」は1回目、2回目と数えるからです


残念ながらこの命令は一重にしか使えません(ネストは1)
リピートの中にリピートを入れたりするとおかしくなるので
「!goto」&「#_____」と併用してください


33 行って帰ってくる命令?

帰ってくる「!goto」

ちょっとあっちに行って、直ぐ帰ってきて実行して
またさっきの所に行って・・・続きに帰ってきて

と思った事はありませんか?

ではサンプルを見てみましょう
$test=0
$test+1
!gosub #1
!gosub #2
!gosub #3
!gosub #4
さて答えは幾つでしょう^^?
tttt
!mes
答えは
$test
です
!endmes
!stop
#4
$test*2
$test-9
!return
#3
$test+1
!return
#2
$test+1
$test+$test
!return
#1
$test*$test
!return

答えから言ってしまうと1です
順を追って説明しましょう

@「!gosub #1」で$test=1×1が行われています
A「!gosub #2」で$test=1+1が行われ、次に$test×$testされています
B「!gosub #3」で$test=4+1されて
C「!gosub #4」で$test=5*2-9になっています

だから答えは1なんですよ^^

コレだけを見ると使えないコマンドのような気がしますよね?
でも2回以上使う複雑なスクリプトの塊には
「!gosub」で飛んだほうが能率的なのです

次は気合いを入れてください
ホントに時間があるときにでも^^;

応用とその向こう側!?

ちなみに「!gosub」の説明の為に最初に作ったのは
下のサンプルです^^;
力入れすぎましたが、面白いとおもいますよ
!title !gosubの例
円の半径を入力してください
!inputbox $r,2
面積の求める角度を360度以内で入力してください
t
t
t
!inputbox $r,2
面積の求める角度を90度以内で入力してください
!inputbox $angle,2
!gosub #cal
!mes
半径
$r
cmで角度
$angle
の場合の面積は約
$area
平方cmです
!endmes
間違っていましたか?
#top2
!selpos 30,200
!sel 2
はい間違ってました,#no
いいえ合ってました,#ok

#ok
よかったです^^
では作成頑張って下さい
!stop

#no
!text 50
そうですか・・・では今度はあなたの番です
!mes
!text 0
tt
半径
$r
cmの円だとした場合の
!endmes
次の白い部分の面積を求めよ
!gosub #grph
!goto #grph2
!stop

#cal
$pie=314159
$area=$r
$area*$r
$area*$pie
$area/360
$area*$angle
$area/100000
!gosub #grph
!return

#grph
$x=400
$y=140
!line 400,290,$x,$y
!line 400,290,550,290
!repeat 10
!point $x,$y
$x+4
$y+1
!loop
!repeat 20
!point $x,$y
$x+2
$y+1
!loop
!repeat 40
!point $x,$y
$x+1
$y+1
!loop
!loop
!repeat 20
!point $x,$y
$x+1
$y+2
!loop
!repeat 10
!point $x,$y
$x+1
$y+4
!loop
$x=550
$y=290
!return

#grph2
!repeat 10
!line 400,290,$x,$y
$x-4
$y-1
!loop
!repeat 20
!line 400,290,$x,$y
$x-2
$y-1
!loop
!repeat 40
!line 400,290,$x,$y
$x-1
$y-1
!loop
!loop
!repeat 20
!line 400,290,$x,$y
$x-1
$y-2
!loop
!repeat 10
!line 400,290,$x,$y
$x-1
$y-4
!loop
tttt
!fsize 60
!fmode 2,255,150,150
冗談ですよ^^;
!stop

異常に長いサンプルですが、今までやってきた事が分れば
理解できるはずです

面白い計算も行っているので是非理解してください


簡単な補足説明をします

「!gosub」とはある意味「!repeat」と「!goto」に似ています

「!repeat」の様に場所を記録したままで、「!goto」の様にジャンプします
戻る時は「!return」のコマンドです


このサンプルでは二重しか使用しませんでしたが
ネストは9(九重)まで使用可能です

「!gosub」して飛んだ先で、更に「!gosub」をすればジャンプします
2つ目に飛んだ先から「!return」をすれば
最初にジャンプした場所の続きから読み取り
そこで「!return」をするとジャンプする前の行に戻ります

非常に説明し難いですが、使えば何とかなるとは思います
もし分らなければHPで質問してください


34 メモリの解放

どんな機能?

簡単に言えばよくあるメモリクリーナーの機能です
物理メモリをRAMの10%だけ解放します

コマンドは「!ramfree」ですよ^^

え?使い道ですか?
余り考えてなかったですし・・・

個人的には最低でも15%くらい解放したいのですが、低スペックマシンだと重そうなので(笑)

HPのお持ち帰り用に、ちょっとしたプレゼントとして
用意すれば良いかもしれません^^

じゃあ適当なサンプルです
!title らむふり 1.00
!screen 136,0
!txtpos 0,0
#top
!cls
$x=2
!ramfree
!repeat 65
ttt
b
$x+2
!line $x,2,$x,16
!loop
ttt
!goto #top

複数起動させるとひどい事になるので気を付けて下さい(笑)

「!key」の機能と組み合わせれば、クリックでHPが開くようにも出来ますね^^


35 最後にメニュー?

なぜ今ごろ?

理由は簡単♪セーブなんて大きなゲームじゃないと使わないからです
無意味なコマンド教えるより、作成に役立つ事を優先して説明しました
では、最後のコマンドです^^
!menu 1
!stop

これはメニューを出しっぱなしのコマンドです
!menu 2
!stop

これは出たり引っ込んだりします(笑)

注意点:「!menu」を一度設定すると、再設定は出来ません

最後はこれで終わりです
お疲れ様でした〜♪


これでほとんど全ての機能がわかった筈です
細かいテクニックは忘れ易いと思うので、復習も大切ですね?
それでは、頑張ってくださいね