>初心者向けぷちスク講座

1.「HelloWorld」

まずは"pgs1_0.exe"と同じフォルダにある"start.txt"をメモ帳などのテキストエディタで開きます。
[編集] メニューの [すべて選択] をクリックしてから[編集] メニューの [削除] をクリックします。

そして、次のように入力します。

@mes "HelloWorld"
@pause

[ファイル] メニューの [上書き保存] をクリックして保存します。
"pgs1_0.exe"をダブルクリックして起動します。


起動するとこのように表示されます。

1行目の@mes命令はウィンドウに文字を表示する命令です。
2行目の@pause命令はマウスで左クリックされるか[スペース]キー、[Enter]キーが押されるまで待機する命令です。

@mes命令のようにパラメータが必要な命令では命令語とパラメータの間に必ず半角スペース" "を入れるようにしてください(※全角スペース" "ではエラーになります)。

このように実行ファイルと同じフォルダの"start.txt"へ命令を書いていく事でゲームを作っていきます。

2.「変数について」

変数とは数値や文字のデータを入れておく箱のようなものです。
ゲームで使う色々なデータを変数に入れておいたり取り出して計算したりするのに使います。

ぷちスクでは変数を操作するのに主に二つの命令があります。
@int命令と@str命令です。
@int命令は変数を数値として扱い、@str命令は変数を文字列として扱います。

例)
@int %0, =, 7

最初のパラメータは代入先の変数です。この命令では必ず、最初のパラメータに変数を指定します。
変数は"%"に変数の番号をつけたもので、変数の番号は0から99までです。つまり、ぷちスクで使用
できる変数の数は100個までとなります。

二つめのパラメータは演算子といって、代入先の変数に対してどのように計算、処理するかを指定します。

@int命令で利用できる主な演算子はこちらです。

=  代入
+  加算(足す)
-  減算(引く)
*  乗算(かける)
/  除算 (割る)
\ 剰余(割り算の余り)

三つめのパラメータには代入先の変数を処理するのに必要な数値や変数を指定します。
上の例では%0の変数に数字の7を入れるということになります。

次は文字列の操作です。

例)
@str %0, =, "主人公"

こちらでは%0の変数に"主人公"という文字列を代入します。

@str命令で利用できる主な演算子はこちらです。
=  文字を代入
+  文字をつなげる

@int命令、@str命令共に扱う変数は同じものなので数値として処理するのか
文字として処理するのかで二つの命令を使い分けて使用します。

3.「ラベルとジャンプ」

先頭の1文字が"*"の行はラベルとして認識されます。
ラベルはスクリプトのある1行に名前をつけて@goto命令などの命令が実行された時に移動する先の目印として使います。
ラベルは一つのスクリプトにつき1000個まで置くことができます。

例)
    @goto *test
    @mes "メッセージ1"
*test
    @mes "メッセージ2"
    @pause

@goto命令は指定したラベルに移動する命令です。
上の例の場合、最初の行の@goto命令でスクリプトがラベル*testまで移動するので"メッセージ1"は表示されずに"メッセージ2"だけが表示されます。

あと、注意ですがぷちゲースクリプト付属の"readme.txt"にも書かれているように以下のような場合は必ずラベルと@goto命令の間に@wait命令を置く必要があります。

誤)
*loop
    @goto *loop

正)
*loop
    @wait 10
    @goto *loop

@wait命令は一定時間処理を止めて待機する命令です。

なぜループの間に@wait命令が必要かというと、@wait命令は本来の待機する機能だけでなく、Windowsに必要な処理をさせる役割もあるのです。
ですから@wait命令がない場合には、CPUがスクリプトのループ処理だけを休みなく処理し続けてしまうため、Windowsが操作しづらい状態になってしまうのです。
こうなった場合、ウィンドウの[×]を何度か押し終了させるか、タスクマネージャなどでぷちスクのプログラムを強制的に終了させる必要があります。

4.「条件で分岐する」

@goto命令は指定したラベルに移動しますが移動のみなので複雑な処理はできません。
そこで、@if命令や@ifs命令を使うことで、条件が合った場合にだけラベルに移動させることができるようになります。

例)
    @int %0, =, 0
*main
    @int %0, +, 1
    @if %0, =, 10, *test
    @wait 10
    @goto *main
*test
    @mes "変数の値が10になりました。"
    @pause

上の例は変数%0に数値を1づつ足していき、変数が10になった時にメッセージを表示して終了を待ちます。
@if命令の最初のパラメータと三つめのパラメータは判定に使用する数値や変数です。
二つめのパラメータは条件式で、一つめと三つめのパラメータをどのように判定するかを指定します。

@if命令で利用できる条件式
=   等しい
!   等しくない
<   小さい
<=  等しいか小さい
>   大きい
>=  等しいか大きい
&  AND
|   OR

このように@int命令などと組み合わせて使用することで、ゲーム内で複雑な処理をさせることができるようになります。

続いて@ifs命令ですが、これも@str命令と同じく判定を数値ではなく文字列で行います。

例)
    @ifs %0, =, "name", *Label

@ifs命令で利用できる条件式
=   等しい
!   等しくない

上の例では変数%0が文字列"name"と同じであれば*Labelに移動します。

5.「サブルーチンの呼び出し」

@goto、@if命令に続いて、@gosub、@return命令について説明します。
@gosub命令は@goto命令と同じく、指定したラベルに移動するのですが、移動する際に現在のスクリプト位置を記憶してからラベル位置に移動します。
そして、次に@return命令のある行まできた時に記憶していた呼び出し元の次の行に戻ってスクリプトは処理を続けます。

例)
    @int %0, =, 20
*main
    @gosub *damage
    @if %0, >, 0,*main
    @end
*damage
    @int %0, -, 1
    @cls
    @mes %0
    @pause
    @return

@end命令はスクリプトを終了する命令です。
@cls命令はゲーム画面をクリアする命令です。

上の例では変数%0を1ずつ減らして表示する*damegeというサブルーチンを変数%0が0以下になるまで繰り返し呼び出します。

このように同じような処理を何度もする場合など、毎回スクリプトを書いていくとスクリプトのサイズが大きくなり効率がよくありません。ですから、よく使う汎用的な処理を@gosub命令で呼び出して利用することで、スクリプトサイズを抑え、修正などをしやすくするのです。

例)
    @int %0, =, 20
*main
    @gosub *damage
    @if %0, >, 0,*main
    @end
*damage
    @int %0, -, 1
    @gosub *puthp
    @return
*puthp
    @cls
    @mes %0
    @pause
    @return

このようにサブルーチン内から別のサブルーチンを呼び出すネスティングも可能です。
ネスティングを利用することでより複雑な処理を効率よく行うことができるようになります。

6.「繰り返す」

ぷちゲースクリプトには同じ処理を決められた回数繰り返す専用の命令がありませんが、@int命令、@if命令、@goto命令を組み合わて使用することで、決められた回数、同じ処理を繰り返し行うことができます。

例)
    @int %0, =, 0
*loop
    @mes "繰り返しテスト"
    @int %0, +, 1
    @if %0, <, 10,*loop
    @pause
    @end

上の例では変数%0が10になるまで1ずつ加算して10回、文章の表示を繰り返します。

7.「入力について」

次にゲームに欠かせないのが入力です。
ぷちゲースクリプトではキーボードとマウスの入力状態を読み出すことができます。
主にこれらの情報は@int命令で取得します。

入力状態の取得に利用できる演算子はこちらです。

stick     基本キー情報
key     キーコード入力状態
mousex  マウスX座標
mousey  マウスY座標

基本キー情報では代入先の変数に以下のキー番号が代入されます。

1    カーソルキー左
2    カーソルキー上
4    カーソルキー右
8    カーソルキー下
16   スペース
32   Enter
64   Ctrl
128  ESC
256  マウス左ボタン
512  マウス右ボタン
1024  TAB

複数のキーが同時に押されている場合はキー番号が加算された状態で代入されます。

例)
*main
    @int %0, stick, 0
    @draw 0
    @cls
    @mes %0
    @draw 1
    @wait 5
    @goto *main

@draw命令は画面の更新を一時的にOFFにする命令です。
@draw 0、@draw 1の間に表示命令を置くことで画面のちらつきを抑えます。

上の例では押されたキー番号が左上に表示されます。
また、標準では押したままのキー情報は取得できないようになっていますが、@int命令の三つめのパラメータにキー番号を指定することでキーを押したままでも状態を取得できるようになります。

例)
*main
    @int %0, stick, 15
    @draw 0
    @cls
    @mes %0
    @draw 1
    @wait 5
    @goto *main

先ほどの例ではカーソルキーを押したままではキー番号が一瞬しか表示されませんがこの例では押したままでもカーソルキーの状態が表示されます。

次にキーコード入力状態について説明します。
@int命令のkey演算子はキーの状態を個別に取得します。
指定したキーコードのキーが押されていれば1、押されていなければ0を変数に代入します。

例)
*main
    @int %0, key, 90
    @draw 0
    @cls
    @mes %0
    @draw 1
    @wait 5
    @goto *main

この例では[z]キー(キーコード90)の状態を表示します。

キーコードの一覧はこちら↓をご覧ください。
キーコード一覧

演算子mousex、mouseyはゲーム画面内のマウスの座標を取得するものです。

例)
*main
    @int %0, mousex
    @int %1, mousey
    @draw 0
    @cls
    @mes %0
    @mes %1
    @draw 1
    @wait 5
    @goto *main

この例ではマウスのX座標、Y座標を表示します。

次に@input命令について説明します。
@input命令はスクリプトを一時的に中断して画面中央に入力ボックスを表示して待機します。
そして、[Enter]キーが押されて入力が確定すると入力ボックスに入力した内容を変数に代入します。

例)
    @mes "主人公の名前を入力してください。"
    @str %0, =, "主人公"
    @input %0
    @str %0, +, "さんこんにちは!"
    @mes %0
    @pause

この例では"主人公"という文字列を初期状態としてプレイヤーに名前を入力させて、入力後に名前を表示します。

@input命令は@if命令、@ifs命令などを組み合わせて使用することでパスワードの入力判定などの処理を作ることができます。

最後に@pause命令について補足の説明です。
@pause命令は標準ではマウスで左クリックされるか[スペース]キー、[Enter]キーが押されるまで待機しますが、上記の基本キー情報と同じキー番号を指定することで特定のキーが押されるまで待機するようにできます。

8.「乱数について」

乱数はランダムに決められた整数の乱数値を発生させます。
乱数の取得には@int命令のrnd演算子を使用します。

例)
    @int %0, rnd, 10
    @mes %0
    @pause

この例では変数%0に0から9までの乱数を代入し表示します。
このように@int命令の三つめのパラメータに上限の値を指定することで、0から上限-1までの乱数を取得することができます。

例)
    @int %0, rnd, 3
    @if %0, =, 0, *course_a
    @if %0, =, 1, *course_b
    @if %0, =, 2, *course_c
*course_a
    @mes "今日の天気は晴れです。"
    @goto *quit
*course_b
    @mes "今日の天気はくもりです。"
    @goto *quit
*course_c
    @mes "今日の天気は雨です。"
    @goto *quit
*quit
    @pause
    @end

このように乱数を使うことで遊ぶたびに違う展開をするゲームを作ることができます。

9.「選択肢」

ぷちゲースクリプトのバージョン1.0.2から追加された@sel命令について説明します。
@sel命令は選択肢を表示して入力を待ち、選択された時に対応したラベルへ移動する命令です。

例)
    @font 2, 16, 0
    @color 255, 255, 255
    @cls 0, 0, 0
    @mes "ぷちスクは楽しいですか?"
    @sel "楽しい", *answer1, "ふつう", *answer2, "楽しくない", *answer3
*answer1
    @mes "楽しんでいただけて嬉しいです(^ ^)。"
    @goto *quit
*answer2
    @mes "そうですね。ふつうが一番です。"
    @goto *quit
*answer3
    @mes "そうですか…。"
    @mes "楽しんでいただけるようにがんばります。"
*quit 
    @pause
    @end


実行するとこのように表示されます。

@font命令は表示する文字の種類や大きさを設定する命令です。
@color命令は表示する文字の色を設定します。
@cls命令ではゲーム画面をクリアする色を指定することができます。

このように@sel命令を使用するとプレイヤーに選択させて分岐する処理を簡単に作ることができます。

次にキャンセル機能とカーソル文字の変更を説明します。
@selmode命令でキャンセルの有無と選択カーソルの文字を変更することができます。

例)
    @font 2, 16, 0
    @color 255, 255, 255
    @cls 0, 0, 0
    @selmode 1, ">"
    @mes "選択するかキャンセルしてみてください。"
    @sel "はい", *yes, "いいえ", *no
    @mes "キャンセルされました。"
    @goto *quit
*yes
    @mes "はいが選択されました。"
    @goto *quit
*no
    @mes "いいえが選択されました。"
*quit 
    @pause
    @end

例のようにキャンセル機能がオン(1)の場合はマウスの右クリックか[Esc]キーが押されると選択をキャンセルしてスクリプトは次の行へ移動します。
そして、二つめのパラメータで選択肢のカーソル文字(標準では"●")を変更しています。
指定できるカーソル文字は全角文字で1文字です。

10.「画像の表示」

画像の表示には@pic命令を使います。
@pic命令は指定した画像ファイルをロードしてゲーム画面に表示する命令です。

例)
    @cls
    @pic "bg.gif"
    @pos 32, 32
    @pic "pgs1_0i.gif"
    @pause


実行するとこのようになります。

@pos命令は文字や画像の表示位置を変更します。

この例では必要ありませんが、はじめに@cls命令で画面をクリアします。
そして、画像ファイル"bg.gif"を表示して、次にX座標32、Y座標32の位置に"pgs1_0i.gif"を表示します。
@pic命令で読み込める画像の種類はBMP、JPEG、GIF、PNGです。

画像の一部を透過させる場合はペイントソフトなどで透過画像を作成します。
Windoows付属の古いペイントツールでは透過画像の保存はできないので、他のペイントソフトで作成してください。
筆者が主に使用しているペイントソフトは「AzPainter2」(フリーソフト)です。
画像を保存する時にGIF、PNG形式を選択すると透過色を指定するダイアログが表示されるので透過色を指定してから保存します。

次に以前にも少し説明しましたが、ゲーム画面を繰り返し書き換える場合は、@draw 0と@draw1の間に画像表示命令を書くことで画面のちらつきを抑えます。
@draw 0はゲーム画面の更新を一時的にオフにし、@draw 1で画面を更新します。

例)
*loop
    @draw 0
    @cls
    @pic "bg.gif"
    @int %0, rnd, 288
    @int %1, rnd, 208
    @pos %0, %1
    @pic "pgs1_0i.gif"
    @draw 1
    @wait 50
    @goto *loop

"bg.gif"を背景に"pgs1_0i.gif"をランダムな位置に繰り返し表示します。

・2016年5月追記

ぷちゲースクリプトのバージョン1.0.5から追加された@cload、@cput命令について説明します。
@cload命令は画像ファイルをチップ画像としてバッファにロードする命令です。
@cput命令はチップ番号に対応したバッファ内の画像を現在の位置に表示する命令です。

例)
    @cload "bg.gif",32,32
    @pos 64,64
    @cput 0
    @pause

まず@cload命令でファイル名とチップ画像のサイズを指定して画像を専用のバッファにロードします。
ロード時に指定したチップサイズで画像を分割する形でチップ番号が自動的に割り振られます。
次に@cput命令で0番のチップ画像をX座標64、Y座標64の位置に表示します。
@cload命令で読み込める画像の種類はBMP、JPEG、GIF、PNGです。
ロードした画像のRGB値がすべて0(完全な黒)のドットは透過して表示します。
@cput命令は画像をあらかじめバッファにロードしてから表示するので、@pic命令
よりも高速に表示されるのでアクションゲーム等、スピードが必要なゲームで利用できます。

続いて、ぷちゲースクリプトのバージョン1.0.6から追加された@pload、@pput命令について説明します。
@pload命令は画像ファイルを指定した番号のバッファにロードする命令です。
@pput命令はバッファ番号に対応した画像を現在の位置に表示する命令です。

例)
    @pload "bg.gif",0
    @pos 0,0
    @pput 0,0
    @pause

まず@pload命令でファイル名の画像を指定した番号のバッファにロードします。
次に@pput命令で0番のバッファ内の画像をX座標0、Y座標0の位置に表示します。
指定できるバッファの番号は0-7までです。
@pload命令で読み込める画像の種類はBMP、JPEG、GIF、PNGです。
@pput命令では第2パラメータに0以外の数値を指定するとRGB値がすべて0(完全な黒)のドットを透過して表示します。
こちらも@cload、@cput命令と同様に画像をバッファにロードしてから表示するので@pic命令よりも高速に表示されます。

11.「BGMと効果音の再生」

音楽をBGMとして繰り返し再生するには@bgm命令を使用します。
@bgm命令は指定したファイルをBGMとして繰り返して再生します。
再生できるメディアファイルの形式はWAV、AIFF、AU、MIDIです。

例)
    @bgm "bgm.mid"
*loop
    @wait 5
    @goto *loop

"bgm.mid"が見つからないとエラーになりますので、再生するBGMファイルを実行ファイルと同じフォルダにコピーして"bgm.mid"と名前を変更するか、スクリプトのファイル名の部分を書き換えてください。

ゲームの途中でBGMを停止するには、ファイル名を省略して@bgm命令を置きます。

例)
    @bgm "bgm.mid"
*loop
    @wait 5
    @int %0, stick
    @ifs %0, !, 0, *stop
    @goto *loop
*stop
    @bgm
    @goto *loop

なにかキーが押されるとBGMを停止します。

続いて、効果音を再生するには@sound命令を使います。
@sound命令は基本的に@bgm命令と同じですが、こちらは繰り返さずに1回だけ再生します。
再生できるメディアファイルの形式も@bgm命令と同じくWAV、AIFF、AU、MIDIです。

例)
    @bgm "bgm.mid"
*loop
    @wait 5
    @int %0, stick
    @ifs %0, !, 0, *stop
    @goto *loop
*stop
    @sound "se.wav"
    @goto *loop

なにかキーを押すと効果音を鳴らします。

BGMでMIDIファイルを再生している時に同じMIDI形式のファイルを効果音として再生する事はできません。

MP3形式について
非公式ですが、ぷちゲースクリプトではWindows版の実行ファイル(pgs1_0.exe)でのみ@bgm命令、@sound命令ともにMP3形式のファイルを再生することができます。
但し、ライセンス上の問題が発生する可能性があるので基本的に推奨していません。
※HSPLet版では再生できません。

12.「セーブとロード」

ぷちゲースクリプトでは100個ある変数をひとつのファイルにまとめて保存する@save命令があります。

例)
    @int %0, =, "7"
    @str %1, =, "主人公"
    @save "test"

@save命令では保存するファイル名(拡張子不要)を指定する必要があります。
保存に成功すると"指定したファイル名.txt"というファイル名で変数を保存します。

@save命令を使用する際、ファイル名を"start"と指定してしまわないように注意してください。こうしてしまうとゲームの実行に必要な"start.txt"が上書きされてしまい、以後ゲームが実行できなくなってしまいます(この問題については今後、対応したいと思います)。※バージョン1.0.3で修正されました。

次にファイルから変数を読み出す@load命令です。

例)
    @load "test"
    @mes %0
    @mes %1
    @pause

先ほどの例を実行した後に同じフォルダでこの例を実行すると、前のスクリプトで変数に代入した値が表示されます。

セーブ、ロードが成功したかどうかは@int命令のstat演算子で取得できます。

例)
    @load "test"
    @int %10, stat
    @if %10, =, 0, *success
    @if %10, =, -1, *failure
*success
    @mes "ロードに成功しました。"
    @goto *quit
*failure
    @mes "ロードに失敗しました。"
*quit
    @pause
    @end

この例ではロードの成否の結果を表示するだけですが、stat演算子による判定を使用することでロードするファイルが見つからないときはゲームが初めての起動であると判定することができるようになります。

次にWindows版実行ファイル(pgs1_0.exe)では上記の説明のとおり指定したファイル名でテキスト形式でファイルを保存しますが、HSPLet版ではCookieという特別な領域にデータが保存されます。
Cookieとはブラウザで使用するデータを読み書きする機能で、ブラウザでCookieを削除すると保存したセーブデータも消えてしまいます。
ブラウザ終了と同時にCookieを削除する設定になっている場合などには注意してください。

また、HSPLet版ではデータのサイズ等によっては正常にデータが保存できない可能性がありますのでHSPLet版でゲームを公開する場合は十分動作テストを行ってから公開するようにしてください。

13.「バイナリデータの操作」

ぷちゲースクリプトのバージョン1.0.5から追加された@bload、@peek、@poke命令について説明します。
@bload命令は指定したバイナリファイルをバッファにロードする命令です。
@peek命令は指定した変数にバッファから1バイト読み出します。
@poke命令はバッファの指定位置に1バイトを書き込みます。

  例)
      @bload "data.bin"
      @peek %0, 0
      @mes %0
      @poke 0, 99
      @peek %0, 0
      @mes %0
      @pause

上の例ではまず"data.bin"をバッファにロードして、次にバッファの最初の位置から1バイトを読み出して表示します。
それから同じ位置に数値の99を書き込んでから再び同じ位置の1バイト(99)を表示します。
バイナリデータのファイルを作成するには主に「Stirling」(フリーソフト)等のバイナリエディタ(ベクター様のサイトなどからダウンロードできます)を使用します。
※"pgs_pack.exe"で作成するパックファイルに含まれるバイナリファイルの拡張子は".bin"のみです。
※HSPLet版では内部でバイナリファイルの保存ができない為と安全面を考慮して現状ではスクリプトからバイナリデータの保存はできません。
RPGのマップデータ等の参照用としてご利用ください。

14.「作成したゲームの配布」

ゲームが完成したらインターネットなどで公開しましょう。
ぷちスクでは"readme.txt"にも書かれているとおり、公開するゲームにぷちゲースクリプトを使っている事を表示する必要はありません。
そして、個人や同人作品の場合は有料、無料にかかわらずぷちスク作者(naya)への連絡は不要です。
でも、もしよろしければnayaらぼ掲示板で報告していただけると嬉しいです。
また、テキストのみのゲームであれば、是非、nayaらぼ掲示板に投稿してみてください。
公開に必要なファイルはこちらです。

Windows版
    pgs1_0.exe
    start.txt
    その他、ゲームで使用する画像ファイルやメディアファイル
    readme.txt等、ゲームの説明書

これらのファイルを圧縮ソフトでひとつのファイルに圧縮して公開します。

HSPLet版
    hspini.jar
    hsplet.jar
    pgs1_0.html
    pgs1_0.jar
    start.txt
    その他、ゲームで使用する画像ファイルやメディアファイル

ブラウザで遊べるように直接インターネット上に公開する場合はこれらのファイルをそのままサーバーの同じ場所にアップロードします。

ぷちゲースクリプトのバージョン1.0.4からパックファイルに対応しました。
同じフォルダにある"start.txt"と画像ファイル、効果音ファイル、バイナリファイルを1つのファイルにまとめることができます。
パックファイルの場合は以下のファイルを公開します。

Windows版
    pgs1_0.exe
    start.dat
    ゲームで使用するBGMファイル(MIDIファイル等)
    readme.txt等、ゲームの説明書

HSPLet版
    hspini.jar
    hsplet.jar
    pgs1_0.html
    pgs1_0.jar
    start.dat
    ゲームで使用するBGMファイル(MIDIファイル等)

15.「最後に」

本講座ではぷちゲースクリプトの基本的な使い方を説明してきました。
ですが、本講座の説明だけではいきなりゲームを完成させるのは難しいかもしれません。

ですから、まずは掲示板の投稿スクリプトの数字の部分を変えてみたりしてゲームの難易度やプラスされる得点などを変えてみて色々試して遊んでみましょう。

それからスクリプトを一行ずつ"readme.txt"の命令の説明と見比べながらここではどのような処理が行われているのかというのを調べてみるといいでしょう。
そして、命令の説明を見ながら自分で試行錯誤しながら色々と試してみるのがゲームプログラミングが上達するいちばんの近道です。

最初はあせらずに簡単なものから初めて、少しずつ規模の大きなゲームを作っていきましょう。
そしてゲームが完成したら、掲示板に投稿したり、自作ゲームとして発表してみてください。

ぷちゲースクリプトでゲームを作って遊ぶ楽しさを少しでも感じていただけたら幸いです。
それでは、最後までご覧いただきありがとうございました。

Copyright © 2015-2024 nayaらぼ(新), All Rights Reserved.