プログラミング言語 PG0.5
ライブラリ リファレンス
--
■はじめに
PG0はプログラミング学習を目的としたプログラミング言語です。
PG0.5はPG0を拡張したプログラミング言語です。

以下のライブラリのリファレンスになります。
・画面描画API (screen.pg0)
・数値処理API (math.pg0)
・文字列API (string.pg0)
・入出力API (io.pg0)
・通信API (net.pg0)

■制限事項
本ライブラリには以下の制限があります。
・動作環境はPG0(Web版)およびPG0(Windows版)です。
・デバイスやWebブラウザによって動作速度、描画速度が異なる場合があります。
・サウンド再生についてはiOSではセキュリティ制限のため機能しない場合があります。
・各APIの仕様は今後変更される可能性があります。

■画面描画API (screen.pg0)

以下のインポート文により利用することができます。
#import("lib/screen.pg0")

startScreen(width, height, option)
	[説明]
		スクリーンを開始します。
		Webブラウザ上に指定したサイズのスクリーンを表示します。
	[引数]
		width - 画面の幅(数値)
		height - 画面の高さ(数値)
		option - オプションを連想配列で指定します。
					{"color": 16進数のカラーコード(文字列), "fit": 画面サイズに合わせるかのフラグ(数値)}
	[戻り値]
		0

sleep(time)
	[説明]
		一定時間処理を停止します。
	[引数]
		time - 停止する時間をミリ秒を数値で指定します。
	[戻り値]
		0

time()
	[説明]
		現在時刻(UTC)を取得します。
	[引数]
		なし
	[戻り値]
		1970年1月1日 00:00:00からの経過ミリ秒を数値で返します。

timeString(time, format)
	[説明]
		時間を日時文字列にフォーマットします。
	[引数]
		time - 1970年1月1日 00:00:00からの経過ミリ秒を数値
		format - 日時フォーマット。省略時はロケールに従った文字列にフォーマットされます。
					YYYY - 年
					MM or M - 月
					DD or D - 日
					hh or h - 時
					mm or m - 分
					ss or s - 秒
	[戻り値]
		日時文字列

startOffscreen()
	[説明]
		オフスクリーンを開始して、画面表示をオフスクリーンに描画します。
	[引数]
		なし
	[戻り値]
		0

endOffscreen()
	[説明]
		オフスクリーンを終了して、オフスクリーンの内容を画面に描画します。
	[引数]
		なし
	[戻り値]
		0

startMask(option)
	[説明]
		マスク描画モードを開始します。
		マスク描画モード中は描画した領域のみが残り、それ以外の部分は透明になります。
	[引数]
		option - オプションを連想配列で指定します。
					{"destination": マスクの場所(文字列)}
					"out"を指定すると描画した領域が透明になります。
	[戻り値]
		0

endMask()
	[説明]
		マスク描画モードを終了します。
	[引数]
		なし
	[戻り値]
		0

clearRect(x, y, width, height)
	[説明]
		指定領域の描画を透明化します。
	[引数]
		x - 左上の水平座標(数値)
		y - 左上の垂直座標(数値)
		width - 幅(数値)
		height - 高さ(数値)
	[戻り値]
		0

drawLine(x1, y1, x2, y2, option)
	[説明]
		直線を描画します。
	[引数]
		x1 - 開始の水平座標(数値)
		y1 - 開始の垂直座標(数値)
		x2 - 終了の水平座標(数値)
		y2 - 終了の垂直座標(数値)
		option - オプションを連想配列で指定します。
					{"width": 線幅(数値), "color": 16進数のカラーコード(文字列)}
	[戻り値]
		0

drawRect(x, y, width, height, option)
	[説明]
		四角を描画します。
	[引数]
		x - 左上の水平座標(数値)
		y - 左上の垂直座標(数値)
		width - 幅(数値)
		height - 高さ(数値)
		option - オプションを連想配列で指定します。
					{"width": 線幅(数値), "color": 16進数のカラーコード(文字列), "fill": 塗りつぶし(数値)}
					塗りつぶしに1を設定すると指定された色で四角を塗りつぶします。
	[戻り値]
		0

drawCircle(x, y, radiusX, option)
	[説明]
		円を描画します。
	[引数]
		x - 円の中心の水平座標(数値)
		y - 円の中心の垂直座標(数値)
		radiusX - 水平方向の半径(数値)
		option - オプションを連想配列で指定します。
					{"width": 線幅(数値), "color": 16進数のカラーコード(文字列), "fill": 塗りつぶし(数値), "radius_y": 垂直方向の半径(数値), "rotation": 円の傾き(ラジアン), "start": 円が始まるX軸から時計回りの角度(ラジアン), "end": 円の終わるX軸から時計回りの角度(ラジアン), "close": 円弧の両端を繋ぐ(数値)}
					塗りつぶしに1を設定すると指定された色で円を塗りつぶします。
					radius_yを省略した場合はradiusXと同じ半径になります。
					closeに1を設定すると円弧の両端を直線で繋ぎます。
	[戻り値]
		0

drawPolyline(coordinates, option)
	[説明]
		いくつかの座標で繋がった一連の直線を描画します。
	[引数]
		coordinates - 座標の配列
						例) drawPolyline({{100, 100}, {200, 100}, {150, 50}}, {"close": 1}) // 三角形
		option - オプションを連想配列で指定します。
					{"width": 線幅(数値), "color": 16進数のカラーコード(文字列), "fill": 塗りつぶし(数値), "close": 1の場合は最後の線と最初の線を繋げる(数値)}
	[戻り値]
		0

drawFill(x, y, color)
	[説明]
		指定座標の色を指定の色で塗りつぶします。
		隣接するピクセルを辿って指定の色で塗りつぶします。
	[引数]
		x - 塗りつぶしを開始する水平座標(数値)
		y - 塗りつぶしを開始する垂直座標(数値)
		color - 16進数のカラーコード(文字列)
	[戻り値]
		0

drawScroll(x, y)
	[説明]
		画面をスクロールします。
		画面からはみ出た領域は逆側に表示されます。
	[引数]
		x - スクロールする水平の移動量(数値)
		y - スクロールする垂直の移動量(数値)
	[戻り値]
		0

createImage(x, y, width, height, option)
	[説明]
		指定領域の画像を作成します。
		戻り値を使ってdrawImage()で描画することができます。
	[引数]
		x - 左上の水平座標(数値)
		y - 左上の垂直座標(数値)
		width - 幅(数値)
		height - 高さ(数値)
		option - オプションを連想配列で指定します。
					{"id": 既存のイメージID(数値)}
					idを指定した場合は既存の画像を置き換えます。
	[戻り値]
		イメージID

drawImage(id, x, y, option)
	[説明]
		指定イメージIDの画像を描画します。
	[引数]
		id - イメージID
		x - 左上の水平座標(数値)
		y - 左上の垂直座標(数値)
		option - オプションを連想配列で指定します。
					{"width": 幅(数値), "height": 高さ(数値), "angle": 角度(ラジアン), "alpha": 透明度(数値)}
					幅と高さの片方のみを指定した場合、もう片方は元の画像のサイズになります。
					透明度は0.0~1.0の間で指定します。
	[戻り値]
		0

drawText(text, x, y, option)
	[説明]
		テキストを描画します。
	[引数]
		text - 描画するテキスト(文字列)
		x - 開始の水平座標(数値)
		y - 開始の垂直座標(数値)
		option - オプションを連想配列で指定します。
					{"width": 線幅(数値), "color": 16進数のカラーコード(文字列), "fill": 塗りつぶし(数値), "fontstyle": フォントスタイル(文字列), "fontsize": フォントサイズ(数値), "fontface": フォント(文字列)}
					fillはデフォルトは1で、0を指定すると中抜き文字の描画になります。
					フォントスタイルはnormal、bold、italic、obliqueのいずれかを指定します。
	[戻り値]
		0

measureText(text, option)
	[説明]
		テキストの描画サイズを取得します。
	[引数]
		text - テキスト(文字列)
		option - オプションを連想配列で指定します。
					{"fontstyle": フォントスタイル(文字列), "fontsize": フォントサイズ(数値), "fontface": フォント(文字列)}
					フォントスタイルはnormal、bold、italic、obliqueのいずれかを指定します。
	[戻り値]
		描画サイズ
		{"width": 幅, "height": 高さ}

rgbToPoint(x, y)
	[説明]
		指定座標の色を取得します。
	[引数]
		x - 水平座標(数値)
		y - 垂直座標(数値)
	[戻り値]
		RGBの配列
		{"r": 赤を示す255までの数値, "g": 緑を示す255までの数値, "b": 青を示す255までの数値}

rgbToHex(rgb)
	[説明]
		RGBの配列を16進数のカラーコードに変換します。
	[引数]
		rgb - RGBの配列
				{"r": 赤を示す255までの数値, "g": 緑を示す255までの数値, "b": 青を示す255までの数値}
				キーの大文字小文字は区別しません。
	[戻り値]
		16進数のカラーコード(文字列)

hexToRgb(hex)
	[説明]
		16進数のカラーコードをRGBの配列に変換します。
	[引数]
		hex - 16進数のカラーコード(文字列)
	[戻り値]
		RGBの配列
		{"r": 赤を示す255までの数値, "g": 緑を示す255までの数値, "b": 青を示す255までの数値}

inTouch()
	[説明]
		タッチ位置を返します。
	[引数]
		なし
	[戻り値]
		タッチ状態
		{"x": 水平座標, "y": 垂直座標, "touch": タッチ状態, "button": ボタン, "pos": {{水平座標, 垂直座標}, ...}}
		タッチ状態が0の場合は現在はタッチされておらず、最終のタッチ座標になります。
		buttonは0が左クリック、1が真ん中(ホイール)クリック、2が右クリックになります。
		posはマルチタッチの座標が入ります。

inKey(key)
	[説明]
		キーボード入力を返します。
	[引数]
		key - 押されているか確認するキー文字列を指定します。
				配列で指定した場合は配列内のすべてのキー文字列が押されているか確認します。
				キー文字列はJavaScriptのKeyboardEvent.keyと同値になります。
	[戻り値]
		引数が指定されていない場合は、押されているキー文字列の配列を返します。
		引数が文字列で指定されている場合は、キーが押されている場合は1を返し、押されていない場合は0を返します。
		引数が配列で指定された場合はすべてのキーが押されている場合は1を返し、押されていないキーがある場合は0を返します。

playSound(note, start, end, volume = 1)
	[説明]
		指定された周波数を指定した時間再生します。
	[引数]
		note - 周波数(数値)
				文字列を指定した場合は対応する周波数に変換されます。後ろに数字を入れるとオクターブになります。
				'C', 'C#', 'D', 'D#', 'E', 'F', 'F#', 'G', 'G#', 'A', 'A#', 'B'
				オクターブを省略した場合は4になります。フラット(b)には対応していません。
					例) playSound("C4", 0, 500)
		start - 鳴り始めるまでの時間のミリ秒(数値)
		end - startからの再生の長さのミリ秒(数値)
		volume - ボリューム、省略時は1(数値)
	[戻り値]
		0

playMusic(notes, option)
	[説明]
		複数の周波数を連続で再生します。
	[引数]
		notes - noteの配列
				{note, length, volume}
				noteを文字列で指定した場合は対応する周波数に変換されます。後ろに数字を入れるとオクターブになります。
				'C', 'C#', 'D', 'D#', 'E', 'F', 'F#', 'G', 'G#', 'A', 'A#', 'B'
				オクターブを省略した場合は4になります。フラット(b)には対応していません。
					例) playMusic({{"C4", 500}, {"D4", 500}, {"E4", 500}})
				volumeは省略可能です。

				配列に以下のキーと値を設定すると特別な意味になります。
				start: 開始位置、複数の音を同時に鳴らす場合には開始位置を0にして別の音を設定します。
					例) playMusic({{"C4", 800}, {"start": 0}, {"E4", 800}, {"start": 0}, {"G4", 800}})
				volume: これより後のボリューム
		option - オプションを連想配列で指定します。
					{"repeat": 繰り返しフラグ(数値)}
	[戻り値]
		0

bgm(notes, option)
	[説明]
		BGMを再生します。
		再生中のBGMがあれば停止してから、指定したnotesを繰り返し再生します。
		playSound()やplayMusic()で鳴らしている効果音は停止しません。
		notesを省略した場合はBGMを停止します。
			例) bgm({{"C4", 500}, {"E4", 500}, {"G4", 500}})
			例) bgm() // BGMを停止
	[引数]
		notes - playMusic()と同じ形式のnoteの配列、省略可
		option - オプションを連想配列で指定します。
					{"repeat": 繰り返しフラグ(数値)}
					省略時は1(繰り返す)。0を指定すると1回だけ再生します。
	[戻り値]
		0

stopSound()
	[説明]
		再生されているサウンドをすべて停止します。
		bgm()で再生中のBGMも停止します。
	[引数]
		なし
	[戻り値]
		0

■数値処理API (math.pg0)

以下のインポート文により利用することができます。
#import("lib/math.pg0")

abs(num)
	[説明]
		絶対値を返します。
	[引数]
		num - 変換する数値
	[戻り値]
		絶対値

atan(num)
	[説明]
		アークタンジェントをラジアン単位で返します。
	[引数]
		num - 変換する数値
	[戻り値]
		引数のアークタンジェント

atan2(y, x)
	[説明]
		原点から点(x, y)への角度をラジアン単位で返します。
		x軸の正方向からの角度で、-π~πの範囲になります。
			例) atan2(1, 1) // 0.785... (45度)
	[引数]
		y - 垂直方向の値
		x - 水平方向の値
	[戻り値]
		角度(ラジアン)

cos(num)
	[説明]
		コサインを返します。
	[引数]
		num - 数値
	[戻り値]
		引数のコサイン

exp(num)
	[説明]
		自然対数の底(e)のnum乗を返します。
	[引数]
		num - 数値
	[戻り値]
		自然対数の底(e)のnum乗

log(num)
	[説明]
		自然対数を返します。
	[引数]
		num - 数値
	[戻り値]
		自然対数

random(seed)
	[説明]
		乱数を返します。
		seedを指定すると、そのシードから始まる再現可能な乱数列に切り替えて最初の値を返します。
		以降のrandom()は同じ乱数列を続けます。
		seedを一度も指定していない場合は毎回異なる乱数を返します。
	[引数]
		seed - 乱数のシード(数値または文字列)、省略可
	[戻り値]
		0以上1未満の乱数

sign(num)
	[説明]
		数値の符号が正か負かを表すフラグを返します。
	[引数]
		num - 数値
	[戻り値]
		1 - 正
		-1 - 負
		0 - ゼロ

sin(num)
	[説明]
		サインを返します。
	[引数]
		num - 数値
	[戻り値]
		引数のサイン

sqrt(num)
	[説明]
		平方根を返します。
	[引数]
		num - 数値
	[戻り値]
		平方根

tan(num)
	[説明]
		タンジェントを返します。
	[引数]
		num - 数値
	[戻り値]
		引数のタンジェント

pow(base, exponent)
	[説明]
		数値を累乗した値を返します。
	[引数]
		base - 底となる数値
		exponent - 累乗する指数
	[戻り値]
		数値を累乗した値

max(a, b, ...)
	[説明]
		引数の中で最も大きい値を返します。
		配列を渡した場合はその要素が比較の対象になります。
			例) max(1, 5, 3) // 5
			例) max({4, 2, 9}) // 9
	[引数]
		a, b, ... - 数値または数値の配列
	[戻り値]
		最大値

min(a, b, ...)
	[説明]
		引数の中で最も小さい値を返します。
		配列を渡した場合はその要素が比較の対象になります。
	[引数]
		a, b, ... - 数値または数値の配列
	[戻り値]
		最小値

floor(num)
	[説明]
		数値以下で最大の整数を返します(切り捨て)。
			例) floor(2.7) // 2
			例) floor(-2.7) // -3
	[引数]
		num - 数値
	[戻り値]
		整数

ceil(num)
	[説明]
		数値以上で最小の整数を返します(切り上げ)。
			例) ceil(2.1) // 3
			例) ceil(-2.1) // -2
	[引数]
		num - 数値
	[戻り値]
		整数

round(num)
	[説明]
		数値を四捨五入した整数を返します。
			例) round(2.5) // 3
			例) round(-2.5) // -2
	[引数]
		num - 数値
	[戻り値]
		整数

hypot(x, y)
	[説明]
		2辺の長さから斜辺の長さ(x*x + y*y の平方根)を返します。
			例) hypot(3, 4) // 5
	[引数]
		x - 数値
		y - 数値
	[戻り値]
		斜辺の長さ

■文字列API (string.pg0)

以下のインポート文により利用することができます。
#import("lib/string.pg0")

trim(str)
	[説明]
		文字列の前後をトリミングする。
		トリミング対象は空白(" ")、タブ("\t")、改行、全角空白などの空白文字(JavaScriptのtrimと同じ)となる。
	[引数]
		str - トリミングする文字列
	[戻り値]
		トリミングされた文字列

to_lower(str)
	[説明]
		英文字列を小文字に変換する。
	[引数]
		str - 小文字に変換する文字列
	[戻り値]
		小文字に変換された文字列

to_upper(str)
	[説明]
		英文字列を大文字に変換する。
	[引数]
		str - 大文字に変換する文字列
	[戻り値]
		大文字に変換された文字列

str_match(ptn, str)
	[説明]
		ワイルドカードを使って、文字列を比較する。
		「*」で任意の複数文字列に一致し、「?」で任意の一文字に一致する。
		大文字と小文字は区別しない。
	[引数]
		ptn - 比較元のパターン(こちらにワイルドカードを指定する)
		str - 比較する文字列
	[戻り値]
		一致した場合は1を返し、一致しない場合は0を返す。

substring(str, begin, length = -1)
	[説明]
		文字列から部分文字列を抽出する。
	[引数]
		str - 抽出対象の文字列
		begin - 開始インデックス
			(負数は文字列の末尾からのインデックスとなる)
		length - 抽出する長さ(負数は末尾までの長さとなる)
	[戻り値]
		抽出された部分文字列

in_string(str, search, from = 0)
	[説明]
		文字列内の指定文字列の位置を検索する。
	[引数]
		str - 検索対象の文字列
		search - 検索する文字列
		from - 検索を開始するインデックス(負数は0として扱う)
	[戻り値]
		見つかった文字列のインデックスを返す。
		見つからない場合は -1 を返す。

split(str, separator)
	[説明]
		区切り文字列で文字列を分割する。
	[引数]
		str - 分割対象の文字列
		separator - 区切り文字列(空文字列を指定すると1文字ずつに分割する)
	[戻り値]
		分割した文字列が入った配列

■入出力API (io.pg0)

以下のインポート文により利用することができます。
#import("lib/io.pg0")

println(line)
	[説明]
		標準出力に一行出力
	[引数]
		line - 出力文字列
	[戻り値]
		0

wait(ms)
	[説明]
		指定したミリ秒だけプログラムを待たせる
		画面ライブラリは不要で、停止ボタンで中断できる
	[引数]
		ms - 待ち時間(ミリ秒)
	[戻り値]
		0

saveValue(key, value)
	[説明]
		値を保存します。
		保存する値には数値、文字列、配列を指定します。
		値はWebブラウザに保存されます。
		スクリプトの保存場所を変更すると値は初期化されます。
		・新規ファイル - 共通領域
		・ローカルファイル - ローカルファイル名をキーとして保存
		・オンラインファイル - オンラインのcidをキーとして保存
	[引数]
		key - キー
		value - 保存する値
	[戻り値]
		0

loadValue(key)
	[説明]
		保存した値を読み出します。
	[引数]
		key - キー
	[戻り値]
		保存した値。保存されていない場合は0

removeValue(key)
	[説明]
		保存した値を削除します。
	[引数]
		key - キー
	[戻り値]
		0

get_clipboard()
	[説明]
		クリップボードのテキストを取得する。
	[引数]
		なし
	[戻り値]
		クリップボードのテキスト

set_clipboard(text)
	[説明]
		クリップボードにテキストを設定する。
	[引数]
		text - テキスト
	[戻り値]
		成功すると1、失敗すると0を返す。

■通信API (net.pg0)

以下のインポート文により利用することができます。
#import("lib/net.pg0")

同じプログラム(オンラインに保存した同じ cid のプログラム)を開いている人同士で、
値を送り合うことができます。オンライン対戦のゲームなどに使います。
・オンラインに保存したプログラムでだけ使えます(保存すると cid が付きます)。
・同じ cid のプログラム同士でだけつながります。別のプログラムとはつながりません。
・送った値はサーバーには保存されず、同じ部屋のほかの人に届くだけです。
・プログラムが終わる(停止ボタンを含む)と、部屋から出ます。
・送れる値の大きさと回数には上限があります(初期設定では1回16KBまで、1秒に60回まで)。
	上限を超えた分は送られず、コンソールにお知らせが出ます。

例: 2人で座標を送り合う
	#import("lib/net.pg0")
	#import("lib/io.pg0")
	me = netJoin()
	if (me == 0) {
		println("つながりませんでした")
		exit
	}
	while (netCount() < 2) {
		wait(100)
	}
	x = 100 * me
	netSend({"x": x})
	while (netAvailable() == 0) {
		wait(100)
	}
	m = netReceive()
	println(m["from"] + "番の人の x は " + m["data"]["x"])

netJoin(room, players)
	[説明]
		部屋に入る。部屋に入るか失敗するまで待つ(最大10秒)。
		同じ cid・同じ部屋名の人とつながる。
		部屋名を省略する(または "" にする)と、人数がそろっていない部屋に自動で入る。
		自動の部屋は一度人数がそろうと、ほかの人は入らない。
		部屋名を決めておくと、友だち同士で同じ部屋に入れる。
		部屋がいっぱいのとき、netClose() で締め切られているときは入れない。
		プログラムがオンラインに保存したものと同じでないと入れない(保存していない変更があれば保存してから、
		新しい版が保存されていれば開き直してから実行する)。
		すでに部屋に入っているときは、前の部屋から出てから入る。
		Web 版では、スマホで別のアプリに切り替えるなどして接続が切れても、60 秒以内(サーバーの設定)に戻れば
		その間に送られた値と一緒に同じ部屋に戻る(相手には伝わらない)。戻れなければ netId() が 0 になる。
	[引数]
		room - 部屋名(省略可、32文字まで)
		players - 部屋の人数(省略時は2、2〜8)。部屋を最初に作った人の値が使われる。
	[戻り値]
		自分のプレイヤー番号(1, 2, ...)。入れなかったときは0。
		番号は部屋に入った順に、空いているいちばん小さい番号になる。
		入れなかったときは、理由がコンソールに表示される。

netLeave()
	[説明]
		部屋から出る。
	[引数]
		なし
	[戻り値]
		0

netClose()
	[説明]
		部屋を締め切り、ほかの人がこれ以上入れないようにする。
		ゲームを始めるときに使うと、途中から人が入ってこない。
		席が空いていても、あとで誰かが出て席が空いても、入れなくなる。
		部屋にいる誰が呼んでもよく、元に戻すことはできない。
	[引数]
		なし
	[戻り値]
		締め切ったときは1、部屋に入っていないときは0。

	例: 2〜4人で遊ぶゲームで、1番の人が2人以上そろったら始める
		me = netJoin("", 4)
		if (me == 1) {
			while (netCount() < 2) {
				wait(100)
			}
			netClose()
			netSend("start")
		}

netId()
	[説明]
		自分のプレイヤー番号を取得する。
	[引数]
		なし
	[戻り値]
		自分のプレイヤー番号。部屋に入っていないとき(通信が切れたときを含む)は0。

netRoom()
	[説明]
		入っている部屋の名前を取得する。
		自動で入った部屋には "auto-" で始まる名前が付く。
	[引数]
		なし
	[戻り値]
		部屋の名前。部屋に入っていないときは ""。

netRooms()
	[説明]
		このプログラム(同じ cid)の部屋の一覧を取得する。部屋を選んで入るロビー画面に使う。
		部屋に入っていなくても、入っていても呼べる。サーバーの答えが来るまで待つ。
		一覧は作られた順(古い順)で、最大500部屋。誰もいなくなった部屋は消える。
		呼ぶたびにサーバーに問い合わせるので、毎フレームではなく数秒おきに呼ぶ。
	[引数]
		なし
	[戻り値]
		部屋ごとに {"room": 部屋名, "count": 人数, "max": 定員, "closed": 締め切り(0/1)} を並べた配列。
		部屋が1つもないときは {}。サーバーにつながらないときは0。

	例: 空きのある部屋を選んで入る
		rooms = netRooms()
		if (isType(rooms) != 3) {
			println("つながりませんでした")
			exit
		}
		for (i = 0; i < length(rooms); i++) {
			r = rooms[i]
			if (r["count"] < r["max"] && !r["closed"]) {
				me = netJoin(r["room"])
				break
			}
		}

netCount()
	[説明]
		部屋にいる人数(自分を含む)を取得する。
	[引数]
		なし
	[戻り値]
		人数。部屋に入っていないとき(通信が切れたときを含む)は0。

netPlayers()
	[説明]
		部屋にいる人のプレイヤー番号を取得する。
	[引数]
		なし
	[戻り値]
		プレイヤー番号の配列(小さい順)。例: {1, 2}

netSend(value, to)
	[説明]
		値を送る。値には数値、文字列、配列を指定できる。
		自分には届かない。
	[引数]
		value - 送る値
		to - 送り先のプレイヤー番号(省略すると部屋のほかの全員)
	[戻り値]
		送ったときは1、部屋に入っていないなど送れなかったときは0。

netAvailable()
	[説明]
		受け取って、まだ netReceive() で取り出していない値の数を取得する。
	[引数]
		なし
	[戻り値]
		値の数(最大1000。超えると古いものから捨てられる)

netReceive()
	[説明]
		受け取った値をいちばん古いものから1つ取り出す。
	[引数]
		なし
	[戻り値]
		{"from": 送った人のプレイヤー番号, "data": 送られた値} の配列。
		受け取った値がないときは0。

netLast(player)
	[説明]
		指定したプレイヤーから最後に受け取った値を取得する。
		netReceive() で取り出したかどうかに関係なく、いちばん新しい値を返す。
		毎回位置などを送り合うゲームでは、netReceive() を使わずにこれだけで相手の様子が分かる。
	[引数]
		player - プレイヤー番号
	[戻り値]
		最後に受け取った値。まだ受け取っていない、またはその人が部屋を出たときは0。

--
Copyright (C) 1996-2026 by Ohno Tomoaki. All rights reserved.
    WEB SITE: https://nakka.com/
    E-MAIL: [email protected]