□投稿者/ よしくん。 -(2002/01/08(Tue) 12:55:28)
□U R L/ |
>mokaさん いくつか修正しました。
*マップの読み込みはあったほうがいいですね。配列の使い方で苦戦しましたが、読みこめるようになりました。また、名前を変更してセーブが出来る様にもなりました。読み込みの時にエラー処理をしたほうがいいのでしょうが、ここは使うかたの優しさに期待して・・・。
*色の指定は面倒なので止めました・・・が、最初のほうで0〜4までの色を配列に入れたので、ここを変更すればできます。
*初期化はあまり必要性を感じません(エディタで実行を終了して、また実行しなおせばいいので)が、なんとなく流れの中で作っちゃいました。また、画像への保存は上手く利用すればアイコンエディタになりそうな気もしますね。
そのほか簡単なエラー処理をしてます。あちこち修正したので分かりにくくなってます。もし、動作不具合があったら教えてもらえると嬉しいです。
―――――――――――――――――――――――――――――――――――― {マップエディタに挑戦}
{初期化} パレット幅=24。 パレット高さ=24。 パレットスペースX=3。 パレットスペースY=3。
{ここの変数を変えると色を自由に指定できます} 色#0=白色。 色#1=青色。 色#2=緑色。 色#3=黄色。 色#4=赤色。 {---------------------}
ペン色=黒色。ペン太さ=2。 描画フラグ=0。{1ならファイルをロードして、マップを描画}
{メニューの作成} メニューを、メニュー作成。 メニューに、新規作成を、メニュー追加。 メニューに、マップをセーブを、メニュー追加。 メニューに、終了を、メニュー追加。 {メニューのイベント} 新規作成の、イベントを、初期化イベントに、設定。 マップをセーブの、イベントを、セーブイベントに、設定。 終了の、イベントを、終了イベントに、設定。
新規作成フラグ=0。 「枠の大きさを指定してください。」と、尋ねる。 枠の幅=それ。 枠の高さ=それ。 もし、それ=0ならば、 ( 枠の幅=24。 枠の高さ=24。 )。 「外部からファイルを読みこみますか?」と、二択。 もし、それが、はいならば、ロードイベントへ、飛ぶ。 もし、それが、いいえならば、読みこみフラグ=0。
*初期設定 もし、新規作成フラグ=1ならば、 ( 「枠の大きさを指定してください。」と、尋ねる。 枠の幅=それ。 枠の高さ=それ。 もし、それ=0ならば、 ( 枠の幅=24。 枠の高さ=24。 )。 )。 白色で、画面クリア。 「横に何マス作りますか?」と、尋ねる。 もし、それ=0ならば、初期設定へ、飛ぶ。 横マス=それ。 「縦に何マス作りますか?」と、尋ねる。 もし、それ=0ならば、初期設定へ、飛ぶ。 縦マス=それ。
*描画 {母艦の設定} もし、パレット幅×5+30<枠の幅×横マス+10ならば、 母艦の、幅は、枠の幅×横マス+10。 違えば、 母艦の、幅は、パレット幅×5+30。 母艦の、高さは、枠の高さ×縦マス+パレット高さ+25 白色で、画面クリア。 {パレットを作る} 塗り色=色#0。 (5,5)から、(パレット幅+5,パレット高さ+5)へ、四角形。 (5+パレットスペースX,5+パレットスペースY)へ、移動。 文字色=黒色。 「0」と、表示。
塗り色=色#1。 (10+パレット幅,5)から、(パレット幅×2+10,パレット高さ+5)へ、四角形。 (10+パレット幅+パレットスペースX,5+パレットスペースY)へ、移動。 文字色=白色。 「1」と、表示。
塗り色=色#2。 (15+パレット幅×2,5)から、(パレット幅×3+15,パレット高さ+5)へ、四角形。 (15+パレット幅×2+パレットスペースX,5+パレットスペースY)へ、移動。 文字色=黒色。 「2」と、表示。
塗り色=色#3。 (20+パレット幅×3,5)から、(パレット幅×4+20,パレット高さ+5)へ、四角形。 (20+パレット幅×3+パレットスペースX,5+パレットスペースY)へ、移動。 「3」と、表示。
塗り色=色#4。 (25+パレット幅×4,5)から、(パレット幅×5+25,パレット高さ+5)へ、四角形。 (25+パレット幅×4+パレットスペースX,5+パレットスペースY)へ、移動。 文字色=白色。 「4」と、表示。
{エディタのフォームを作る。} フォームの高さ=5+パレット高さ+10 {横線を引く} カウンタ=0 (縦マス+1)回( (5,フォームの高さ+カウンタ×枠の高さ)へ、移動。 (5+横マス×枠の幅、フォームの高さ+カウンタ×枠の高さ)へ、線。 カウンタ=カウンタ+1 )。 {縦線を引く} カウンタ=0 (横マス+1)回( (5+カウンタ×枠の幅,フォームの高さ)へ、移動。 (5+カウンタ×枠の幅、フォームの高さ+縦マス×枠の高さ)へ、線。 カウンタ=カウンタ+1 )。 {最初の色は1} ペン色=色#1。 塗り色=色#1。
{もし、外部からファイルを読んでなければ、配列の初期化。全て0にする} もし、読みこみフラグ=0ならば、 ( カウンタ=0 (横マス×縦マス)回( マップ#カウンタ=0 カウンタ=カウンタ+1 )。 )。 もし、描画フラグ=1ならば、 ロードファイル描画イベントへ、飛ぶ。 描画フラグ=0。
{メイン} *メインラベル 母艦の、マウス押した時を、マウスイベントに、設定。 待機。 *マウスイベント {パレットの選択} もし、(マウスX>=5)かつ(マウスX<=パレット幅+5)かつ(マウスY>=5)かつ(マウスY<=パレット高さ+5) ならば、( 塗り色=色#0。 ペン色=色#0。 )。 もし、(マウスX>=10+パレット幅)かつ(マウスX<=パレット幅×2+10)かつ(マウスY>=5)かつ(マウスY<=パレット高さ+5) ならば、( 塗り色=色#1。 ペン色=色#1。 )。 もし、(マウスX>=15+パレット幅×2)かつ(マウスX<=パレット幅×3+15)かつ(マウスY>=5)かつ(マウスY<=パレット高さ+5) ならば、( 塗り色=色#2。 ペン色=色#2。 )。 もし、(マウスX>=20+パレット幅×3)かつ(マウスX<=パレット幅×4+20)かつ(マウスY>=5)かつ(マウスY<=パレット高さ+5) ならば、( 塗り色=色#3。 ペン色=色#3。 )。 もし、(マウスX>=25+パレット幅×4)かつ(マウスX<=パレット幅×5+25)かつ(マウスY>=5)かつ(マウスY<=パレット高さ+5) ならば、( 塗り色=色#4。 ペン色=色#4。 )。 {フォームの選択} もし、(マウスX>=5)かつ(マウスY>=フォームの高さ)かつ(マウスX<=5+枠の幅×横マス)かつ(マウスY<=フォームの高さ+枠の高さ×縦マス) ならば、( X座標=整数((マウスX-5)÷枠の幅) Y座標=整数((マウスY-フォームの高さ)÷枠の高さ) (5+X座標×枠の幅+ペン太さ,フォームの高さ+Y座標×枠の高さ+ペン太さ)から、(5+X座標×枠の幅+枠の幅-ペン太さ+1,フォームの高さ+Y座標×枠の高さ+枠の高さ-ペン太さ+1)へ、四角形。 場所=X座標+Y座標×横マス。 もし、塗り色=色#0ならば、 マップ#場所=0 もし、塗り色=色#1ならば、 マップ#場所=1 もし、塗り色=色#2ならば、 マップ#場所=2 もし、塗り色=色#3ならば、 マップ#場所=3 もし、塗り色=色#4ならば、 マップ#場所=4 )。 メインラベルへ、飛ぶ。
*セーブイベント カウンタ=0。 出力マップ=「」。 縦マス回( 横マス回( 出力マップ=出力マップ&マップ#カウンタ。 もし、(カウンタ+1)%横マス=0ならば、 出力マップ=出力マップ&「\n」。{改行文字の追加。} 違えば、 出力マップ=出力マップ&「,」。 カウンタ=カウンタ+1 )。 )。 「txt」の、書込ファイル選択。 もし、それ=「」ならば、 ( {エラー処理。↓警告文が出ない?} エラーを警告。 「ファイルはセーブされてません。」と、言う。 メインラベルへ、飛ぶ。 )。 出力マップを、それへ、保存。 待機。
*ロードイベント {2次元配列から1次元配列に変換する処理} 横マス=0。 縦マス=0。 横マスフラグ=0。 カウンタ=0。
描画フラグ=1。 「txt」の、読込ファイル選択。 もし、それ=「」ならば、ロードイベントへ、飛ぶ。 それを、開く。 バッファ=それ。 バッファを、反復( もし、横マスフラグ=0ならば、 ( 表示列=それ。 表示列の、文字数。 横マス数=それ。 )。 カウンタ=カウンタ+1 )。 横マス=(横マス数+1)÷2。 縦マス=カウンタ。 バッファを、「s/,/\n/g」で、正規表現置換。 バッファ=それ。 カウンタ=0 (横マス×縦マス)回( マップ#カウンタ=バッファ#カウンタ。 カウンタ=カウンタ+1 )。 読みこみフラグ=1。 描画へ、飛ぶ。
*初期化イベント 「初期化していいですか?」と、二択。 もし、それが、はいならば、 ( 新規作成フラグ=1。 読みこみフラグ=0。 ペン色=黒色。 初期設定へ、飛ぶ。 )。 もし、それが、いいえならば、 メインラベルへ、飛ぶ。 *ロードファイル描画イベント {読みこんだファイルの描画} 描画フラグ=1。 カウンタ=0。 (横マス×縦マス)回( ペン色=色#(マップ#カウンタ)。 塗り色=色#(マップ#カウンタ)。 X座標=カウンタ%横マス。 Y座標=整数(カウンタ÷横マス)。 (5+X座標×枠の幅+ペン太さ,フォームの高さ+Y座標×枠の高さ+ペン太さ)から、(5+X座標×枠の幅+枠の幅-ペン太さ+1,フォームの高さ+Y座標×枠の高さ+枠の高さ-ペン太さ+1)へ、四角形。 カウンタ=カウンタ+1 )。 メインラベルへ、飛ぶ。
*終了イベント 「終了していいですか?」と、二択。 もし、それが、はいならば、 終わり。 もし、それが、いいえならば、 メインラベルへ、飛ぶ。 |
|