EBS3 – Lv補正の追加、作戦補正の修正

捨て身が強すぎるので修正しました。
あと使い道がなかった突撃、集中を少しだけ上方修正。

・機体レベル補正
 Lvによりステータス合計上限値、各ステータス上限値が変更に

・作戦補正
 突撃の速度補正を0.01倍上昇
 集中の命中補正を+10、速度補正を0.1倍減少
 捨て身の攻撃補正を0.4倍減少

・コードの修正
 MVCにほぼ対応しました(探索以外)
 使いにくかった機体関連を修正

そろそろ正式公開としてもいいかもしれない。。。

EBS3 – 命中・回避関連の計算の変更

命中ステが弱すぎたので・・・
ステータスの計算方法を以下のように変更しました。

速度ポイント(SP_P)
SP_P = SP + 防具SP – 武器重量(WG)
命中ポイント(MT_P)
MT_P = MT * 1.5 + 武器MT * 1.6

また、命中率の計算を以下のように変更しました。
命中率% = MT_P – 敵SP_P(命中率下限:1%)
(公開情報を更新しました。)

以前は以下の条件だったので、命中捨てステでも問題なかったんですよね。
MT_P = MT + 武器MT
命中率% = MT_P – 敵SP_P(命中率下限:5%)

命中率下限が5%なのも問題ですし、命中が回避を上回らない状態がずっと続いていました。

解決策:もっとステ・武器の命中力(の係数)を上げるか、防具の回避を下げる

防具の回避を下げると、軽鎧が今でも弱いのに鉄くずができあがってしまいます。
というわけで係数を上げました。

また絶対的に強いステータスが出てくるのであればまた変更します。

それではでは。

EBS3 – 新機体作製、機体変更追加

注意点としては、機体変更は治療中の場合できません。
新機体作製は300万Gくらい必要です。

次は宣戦布告解禁ですね。(多分)

(内容)
新機体作製、機体変更を追加。
捨て身の作戦攻撃修正を2.0倍に修正。
装備に重量(WG)を正式追加。武器装備時に速度に反映される。
メンテナンスモードを追加。

EBS3 – 今後の予定

コンセプトは以下の3点。
・多vs多の戦略シミュレーション
・“最強”は要らない
・“THINK”(考え、行動せよ)

コンセプトを生かしつつ面白くするには?
(といってもメインコンテンツを停止している状態でどうするのか)
基本格子は出来上がってる(つもりだ)から、ゲーム性を向上させる方策を。

予定を順番に書いていこう。

1・個人 複数機体の所持を可能に、機体交換時間等設定。
 主に勢力での戦闘時に切り替え。休戦時は機体いつも同じだろうし。

2・勢力 宣戦布告の解禁
 21時~24時の間戦争可能にする。

3・勢力マップ インフラ整備率、インフラ破壊率等を設定する。
 インフラによって回復(補給)が早くなったり遅くなったりする。破壊率はマップでの戦闘時に増加する。破壊率を回復するには国費が必要。
 インフラ効率=インフラ整備率%(MAX100)×(100-インフラ破壊率%(MAX100))
 だいたいインフラ整備率50、破壊率0で休戦時の回復率と同等にすべきか?
 浸透戦術、撤退戦術等できるように。(人数に任せて押すだけでは勝てないようにすべき。)

4・勢力 三大臣の設定、三大臣に国費の割り当て可能に。
 インフラ整備や補修、要塞設置や強化などを任命された三大臣が作業できるようになる。
 総帥の仕事が多すぎるために追加する予定。
 案:司令官、参謀、情報統制官(時代設定がかなり近代だからこんな感じ?)

ここまでできたらコードをいったん書き直して、
cakePHPで使えるコードを一般公開します。

予定・亡命制限追加
 国籍有の場合も亡命可能に、ただし連続した国籍変更は不可能にする予定。

予定・連絡帳
 管理者に対する不具合の連絡帳。
 改造案の投稿用にも使いたい。・・・MODみたいな方式ができればいいんだけど。

予定・会議室
 国や個人間でのやりとりに必要だと思われる。全体にも可。

予定・他
 ・まともな登録画面の設定。
 ・トップ画面のデザイン、設定。
 ・機体画像の一覧を可能に。画像を時代背景に合ったものに変える。
 ・このゲームの時代背景の設定。
 ・レベルによるステータス上限の設定。ステータス上限の大幅上昇。ステータス合計上限値の上昇。
  (現状Lv200程度(一時間以内)で能力カンストが可能。簡単すぎるかもしれない。やることないと言われてます。)
 ・装備の命中補正の上昇、または計算式の命中補正を上方修正。
  (防御捨て型が弱すぎるため。防御捨て→命中捨て→回避捨て→防御捨て…で三すくみを作りたい。)
 ・表示、機能の再編
  (わからない機能が多すぎるんだよ!!と)
 ・説明書の追加
  (初見殺しが多いです。はい。)

優先度低・勢力 部隊設置
 その部隊のみでのチャット等が可能に。連携用。
 国民の場合任意に作成、解散は総帥が可能。

優先度低・市場
 出品して一定時間の間、誰でも(自分を除く)装備を買えるように。
 出品不可品等も設定予定。
 (扱いが難しすぎる。。)

コメントがあったら検討して追加します。
もし、ゲーム性がぶち壊された場合は誰の案であってもなかったことにします。

EBS3 – 探索、ボスマップ追加

探索にクリア報酬が欲しいと言われたので、
最終マップ(初心者:5F、中級者:10F)をボスマップに変更しました。

ボスは1ランク以上上のモンスターがでてきます。
挑戦してみてください。

最終マップはこんな感じ(テストサーバーにて)
キャプチャ

コメントもついてます。どうみてもDQ・・・
キャプチャ2

EBS3 – PRG風探索完成

EBS3の探索(RPG風)完成しました!

キーボードのAWSD入力で移動ができます。
ずいぶんサクサク動けるようになったので、ミニゲームらしくなりました。

宝箱は宝箱の座標の上にいけば拾うボタンが出てきます。
モンスターも自動判定で出てきます。
キャプチャ2

ただ、キーボード入力が早すぎると、
データの送受信が上手くできないのでエラーが出ます。
キャプチャ

それと新ダンジョン「中級者の森」も実装しておきました。
お楽しみください。

※注意
探索はJavaScriptが必須です。ONにしてください。動きません。
Google Chrome(42.0.2311.135 m)、IE(11.0.9600.17728)、Firefox(最新版)で動作を確認しました。
開発はGoogle Chromeで行っています。
Internet Explorerは8以上を推奨します。多分それ以下だと動きません。

EBS3 – 探索の表示改変案策定中(RPG風)

RPG風に画面遷移しない探索を考え中です。
キーボードてカチカチやりながらできると、ヒマつぶしとして面白くなりそう。
↓現状はこんな感じ(Gif動画なのでクリックしてどうぞ)
gyazo

あとは追加したいのは・・・
・キーボードで移動
・確率でモブ出現
・宝箱を空ける
・出口到達で階層移動
ですね。
普通に探索として遊べる感じで。

コードはcanvas(HTML5)とJavaScriptで書いています。
動けばOKとかいう考え方なのでスパゲッテイなやつです。
(最初imgとpositionでやってたら重すぎたので、現状にしました)

<!--[if IE]><script type='text/javascript' src='/home/rei-farms/www/js/excanvas.js'></script><![endif]--><table class=border><tr><td style='position: relative; width: 336px; height: 336px;'><canvas id='hunt_map' width='336' height='336' style='width: 336px; height: 336px; background: url(/home/rei-farms/www/img/ebs/map/off.png);'></canvas>
</td>
<td valign=top style='width: 200px;'>移動コマンド
<table style='margin: auto;'>
<form method=POST><tr><td>&nbsp;</td><td><input type=button onclick='change_map(0,-1);' value='▲'></td><td>&nbsp;</td></tr>
<tr><td><input type=button onclick='change_map(-1,0);' value='◀'></td><td><input type=button value='■' onclick='location.href="/home/rei-farms/www/ebs/hunt";'></td><td><input type=button onclick='change_map(1,0);' value='▶'></td></tr>
<tr><td>&nbsp;</td><td><input type=button onclick='change_map(0,1);' value='▼'></td><td>&nbsp;</td></tr>
<input type=hidden name=x><input type=hidden name=y></form></table>
<hr>
ステータス
<table style='margin: auto;'>
<tr><th>HP</th><td><img src='/home/rei-farms/www/img/ebs/hp_blue.gif' width='95' height='8' title='3210/3210'></td></tr><tr><th>EN</th><td><img src='/home/rei-farms/www/img/ebs/hp_blue.gif' width='95' height='8' title='540/540'></td></tr></table><hr>
<input type=button value='このマップから脱出する' onclick='location.href="/home/rei-farms/www/ebs/hunt_exit";'><br></td><td><textarea id='text' cols=100 rows=30></textarea></td></tr></table>
</td></tr></table>

<script type="text/javascript">
<!--
// Map Set
var id_x = 3;
var id_y = -5;
var base_x = 3 - 10;
var base_y = -5 - 10;

// Img Set
var img_off = '/home/rei-farms/www/img/ebs/map/off.png';
var img_on = '/home/rei-farms/www/img/ebs/map/on.png';
var img_my = '/home/rei-farms/www/img/ebs/noimg.png';
var img_box = '/home/rei-farms/www/img/ebs/map/box.png';
var img_str = '/home/rei-farms/www/img/ebs/map/stair.png';

// Load Maps
var mapData = [
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1],
[1,1,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1],
[1,1,1,1,1,0,1,1,1,0,0,0,0,0,1,1,1,1],
[1,1,1,1,1,0,1,1,1,1,1,1,9,1,1,1,1,1],
[1,1,2,1,0,0,1,0,0,0,0,0,0,0,1,1,1,1],
[0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0],
[0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0],
[0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0],
[0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0]
];

// Load Views
var mapView = [
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0],
[0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
];

// function
window.onload = function ()
{
    // Read
    read_map(id_x, id_y);
}

// change
function change_map(mx, my)
{
    var vx = id_x + mx;
    var vy = id_y + my;
    
    // X
    if(-5 > vx)
    {
        vx = -5;
    }
    else if(12 < vx)
    {
        vx = 12;
    }
    // Y
    if(-6 > vy)
    {
        vy = -6;
    }
    else if(10 < vy)
    {
        vy = 10;
    }
    
    // Change
    var x = vx - -5;
    var y = vy - -6;
    if(y in mapData)
    {
        if(x in mapData[y])
        {
            if(mapData[y][x] >= 1 && Math.sqrt(Math.pow(mx, 2)+Math.pow(my, 2)) == 1 &&(id_x != vx || id_y != vy))
            {
                id_x = vx;id_y = vy;
                base_x += mx;base_y += my;
                //
                read_map(id_x, id_y);
            }
        }
    }
}

// read
function read_map(mx, my)
{
    // Map Set
    var map = document.getElementById('hunt_map');
    if(!map){return false;}
    var ctx = map.getContext('2d');
    ctx.clearRect(0, 0, map.width, map.height);
    
    // リスト化
    var i = 0;
    var map_imgs = [];
    var map_xys = [];
    for(var vy = (my - 10); vy <= (my + 10); vy++)
    {
        var y = vy - -6;
        for(var vx = (mx - 10); vx <= (mx + 10); vx++)
        {
            var x = vx - -5;
            
            // str読み込み
            var str = 0;
            if(y in mapData)
            {
                if(x in mapData[y])
                {
                    str = mapData[y][x];
                }
            }
            if(x < 0 || y < 0 || str == 0){continue;}
            
            // Image
            var img_src = null;
            if(vx == mx && vy == my)
            {
                img_src = img_my;
            }
            else if(y in mapView)
            {
                if(x in mapView[y])
                {
                    // View化
                    if(Math.abs(mx - vx) <= 3 && Math.abs(my - vy) <= 3)
                    {
                        mapView[y][x] = 1;
                    }
                    
                    // Str
                    if(mapView[y][x] == 0){continue;}
                    
                    // 土地
                    map_imgs[i] = new Image();
                    map_imgs[i].src = img_on;
                    map_xys[i] = vx + ',' + vy;
                    i++;
                    
                    if(str == 9)
                    {
                        img_src = img_str;
                    }
                    else if(str == 2)
                    {
                        img_src = img_box;
                    }
                }
            }
            
            // 
            if(img_src)
            {
                map_imgs[i] = new Image();
                map_imgs[i].src = img_src;
                map_xys[i] = vx + ',' + vy;
                i++;
            }
        }
    }
    
    //
    document.getElementById('text').value = null;
    var loadedCount = 1;
    for(var i in map_imgs)
    {
        map_imgs[i].addEventListener('load', function() {
            if (loadedCount == map_imgs.length)
            {
                for(var j in map_imgs)
                {
                    var xys = map_xys[j].split(',');
                    var x = (xys[0] - id_x + 10) * 16;
                    var y = (xys[1] - id_y + 10) * 16;
                    ctx.drawImage(map_imgs[j], x, y, 16, 16);
                    document.getElementById('text').value += x + "," + y + "!";
                }
            }
            loadedCount++;
        }, false);
    }
}//-->
</script>

EBS3 – 探索完成・追加、作戦補正変更

EBS3の探索が完成しました!

とりあえず、ダンジョン「初心者の森」を初期設定しました。
あんまり難易度も高くないし、出てくるMobも弱め。
宝箱から初期装備(第2進化)がでてきます。
キャプチャ

キャプチャ2

作成補正を以下の通りに変更しました。(詳細はhttp://rei-farms.jp/ebs/info_open)
作戦名 必要Lv *AT *DEF +MT *SP その他
通常攻撃 0 1 1 0 1
突撃 5 1.1 0.8 0 1
防御 18 0.8 1.5 0 1
ヒットアンドアウェイ 60 0.9 1 5 1.1
集中 120 0.9 1 20 0.9
捨て身 200 1.5 0 0 1
見切り 250 0.8 0.5 10 1.3
全力 300 1 1 5 1 WP NUM×2, WP EN×2

EBS時代の補正値に戻しました。
強すぎた防御を緩和、ほぼ倍数での計算になっています。

それではでは。

EBS3 – 探索作成中、あとはMob出現と宝箱の設定のみ

マップは今の所こんな感じになってます。
キャプチャ
どうやら、風来のシレンに似てるようです。

EBS3のメインコンテンツは戦争(勢力)です。
ただ、人が集まらないとただの色塗りゲーになるので、
人がいない時間帯でも楽しく(?)遊んでもらえるようにしたいと思ってます。

ダンジョンクリアで経験値やゴールドも貰えるようにする予定です。
「レアアイテムもダンジョンで拾える!」
「レアMobに会える!」(Exp、Goldいっぱい+レアアイテム獲得の可能性)
とかを画策してます。

MMO・・・というよりMOか。

ただし、単純に強い武器が拾える、または単純に強くなれるのではなく、
戦争での選択肢を増やせるようなコンテンツにしていきたいですね。

次のブログで完成報告、公開できるようがんばります。

EBS3 – 探索自動マップ生成完成

作成中だった「自動マップ生成」が完成しました!
完全にダンジョン

コードは上下・左右の2種類で分けて書いています。(1種類にしたい)
なかなか時間がかかりましたが、これで探索ができそうです。

戦闘モジュール化もしたので、歩いていたら確率でMobが出てきます。
あとは出口。マップ中のどこか1つに設置する。
レアが入っている宝箱も作りたい・・・!

コードは今の所以下のようになってます。使う人いないと思うけどどうぞ。

            $html_hunt .= "マップ生成<br>";
            
            // 基礎データ設定
            $HRM = []; // Map
            $HRM2 = []; // 通路専用
            
            // 部屋数、大きさ決定
            $set_num = mt_rand(3,10);
            $set_width = mt_rand(10,12);
            $set_base = []; // 部屋の位置:$set_base["$x,$y"] = $i;
            $set_room = []; // 部屋の位置、大きさ:$set_room[$i] = "$x_st,$y_st!$x_wd,$y_wd";
            $set_root = []; // ルート設定:"$x1_st,$y1_st!$x1_ed,$y1_ed?$x2_st,$y2_st!$x2_ed,$y2_ed"; // 2本あり
            
            // 基礎マップを生成
            $x_set = $y_set = null;
            $x_bef = $y_bef = null;
            $set_rand = null;
            for($i=0; $i<$set_num; $i++)
            {
                // 配置設定
                $x_set = $x_set = null;
                if($i == 0) // 初期設定
                {
                    $x_set = 0;
                    $y_set = 0;
                }
                else
                {
                    // 配置検索
                    $set_check = 0;
                    while(1)
                    {
                        // キー検索
                        $set_base_rand = mt_rand(0, count($set_base)-1);
                        $key = array_search($set_base_rand, $set_base);
                        
                        // 空き地検索地設定
                        $pos = explode(",", $key);
                        $x = $x_bef = $pos[0];
                        $y = $y_bef = $pos[1];
                        
                        // 検索開始
                        $while_n = 0;
                        while(1)
                        {
                            $set_rand = mt_rand(0, 3);
                            switch($set_rand)
                            {
                                case 0: // 上
                                $str = ($x) . ',' . ($y+1);
                                if(!isset($set_base[$str]))
                                {
                                    $x_set = $x;
                                    $y_set = $y+1;
                                    $set_check = 1;
                                }
                                break;
                                case 1: // 右
                                $str = ($x+1) . ',' . ($y);
                                if(!isset($set_base[$str]))
                                {
                                    $x_set = $x+1;
                                    $y_set = $y;
                                    $set_check = 1;
                                }
                                break;
                                case 2: // 下
                                $str = ($x) . ',' . ($y-1);
                                if(!isset($set_base[$str]))
                                {
                                    $x_set = $x;
                                    $y_set = $y-1;
                                    $set_check = 1;
                                }
                                break;
                                case 3: // 左
                                $str = ($x-1) . ',' . ($y);
                                if(!isset($set_base[$str]))
                                {
                                    $x_set = $x-1;
                                    $y_set = $y;
                                    $set_check = 1;
                                }
                                break;
                            }
                            
                            // break
                            if($set_check){break 2;}
                            if($while_n > 5){break;}
                            $while_n++;
                        }
                    }
                }
                
                // 位置
                $set_base["$x_set,$y_set"] = $i;
                
                // 部屋大きさ
                $x_room = mt_rand($set_width/3, $set_width - 3);
                $y_room = mt_rand($set_width/3, $set_width - 3);
                $x_st = mt_rand(1, $set_width - $x_room - 2);
                $y_st = mt_rand(1, $set_width - $y_room - 2);
                $x_wd = $x_room;
                $y_wd = $y_room;
                $set_room[$i] = "$x_st,$y_st!$x_wd,$y_wd";
                
                // 設定
                $x_room_bs = $set_width * $x_set + $x_st;
                $y_room_bs = $set_width * $y_set + $y_st;
                for($n=0; $n<=$x_wd; $n++)
                {
                    for($o=0; $o<=$y_wd; $o++)
                    {
                        $keys = ($x_room_bs + $n) .','. ($y_room_bs + $o);
                        $HRM[$keys] = 1;
                    }
                }
                
                // ルート設定
                if($i != 0) // $set_rand : 0上,1右,2下,3左
                {
                    // 設定
                    $b_room = explode("!", $set_room[$set_base_rand]);
                    $b_st = explode(",", $b_room[0]);
                    $b_wd = explode(",", $b_room[1]);
                    $b_pos = explode(",", array_search($set_base_rand, $set_base));
                    
                    $n_room = explode("!", $set_room[$i]);
                    $n_st = explode(",", $n_room[0]);
                    $n_wd = explode(",", $n_room[1]);
                    $n_pos = explode(",", array_search($i, $set_base));
                    
                    switch($set_rand)
                    {
                        case 0: // 上(b下、n上)
                            $u_st_x = $b_pos[0]*$set_width + mt_rand(0, $b_wd[0]) + $b_st[0];
                            $u_st_y = $b_pos[1]*$set_width + $b_st[1] + $b_wd[1];
                            $d_st_x = $n_pos[0]*$set_width + mt_rand(0, $n_wd[0]) + $n_st[0];
                            $d_st_y = $n_pos[1]*$set_width + $n_st[1];
                            $a_ed_y = $n_pos[1]*$set_width - 1;
                        break;
                        case 1: // 右
                            $l_st_x = $b_pos[0]*$set_width + $b_st[0] + $b_wd[0];
                            $l_st_y = $b_pos[1]*$set_width + mt_rand(0, $b_wd[1]) + $b_st[1];
                            $r_st_x = $n_pos[0]*$set_width + $n_st[0];
                            $r_st_y = $n_pos[1]*$set_width + mt_rand(0, $n_wd[1]) + $n_st[1];
                            $a_ed_x = $n_pos[0]*$set_width - 1;
                        break;
                        case 2: // 下
                            $u_st_x = $n_pos[0]*$set_width + mt_rand(0, $n_wd[0]) + $n_st[0];
                            $u_st_y = $n_pos[1]*$set_width + $n_st[1] + $n_wd[1]; // 0まで上に
                            $d_st_x = $b_pos[0]*$set_width + mt_rand(0, $b_wd[0]) + $b_st[0];
                            $d_st_y = $b_pos[1]*$set_width + $b_st[1]; // 0まで下に
                            $a_ed_y = $b_pos[1]*$set_width - 1;
                        break;
                        case 3: // 左
                            $l_st_x = $n_pos[0]*$set_width + $n_st[0] + $n_wd[0];
                            $l_st_y = $n_pos[1]*$set_width + mt_rand(0, $n_wd[1]) + $n_st[1];
                            $r_st_x = $b_pos[0]*$set_width + $b_st[0];
                            $r_st_y = $b_pos[1]*$set_width + mt_rand(0, $b_wd[1]) + $b_st[1];
                            $a_ed_x = $b_pos[0]*$set_width - 1;
                        break;
                    }
                    
                    if($set_rand == 0 || $set_rand == 2)
                    {
                        print "({$i}と" . ($set_base_rand) . ")基準線 y={$a_ed_y}<br>";
                        print "上開始座標({$u_st_x},{$u_st_y})<br>";
                        print "下開始座標({$d_st_x},{$d_st_y})<br>";
                        
                        // 横線作成
                        if($u_st_x != $d_st_x)
                        {
                            $hl_st = $hl_ed = null;
                            if($u_st_x > $d_st_x)
                            {
                                $hl_st = $d_st_x;
                                $hl_ed = $u_st_x;
                            }
                            elseif($u_st_x < $d_st_x)
                            {
                                $hl_st = $u_st_x;
                                $hl_ed = $d_st_x;
                            }
                            
                            // 追加
                            for($n=$hl_st; $n<=$hl_ed; $n++)
                            {
                                $HRM["{$n},{$a_ed_y}"] = 1;
                                $HRM2["{$n},{$a_ed_y}"] = 1;
                            }
                        }
                        
                        // 縦線作成(上)
                        for($n=$u_st_y; $n<=$a_ed_y; $n++)
                        {
                            $HRM["{$u_st_x},{$n}"] = 1;
                            $HRM2["{$u_st_x},{$n}"] = 1;
                        }
                        
                        // 縦線作成(下)
                        for($n=$a_ed_y; $n<=$d_st_y; $n++)
                        {
                            $HRM["{$d_st_x},{$n}"] = 1;
                            $HRM2["{$d_st_x},{$n}"] = 1;
                        }
                    }
                    elseif($set_rand == 1 || $set_rand == 3)
                    {
                        print "({$i}と" . ($set_base_rand) . ")基準線 x={$a_ed_x}<br>";
                        print "左開始座標({$l_st_x},{$l_st_y})<br>";
                        print "右開始座標({$r_st_x},{$r_st_y})<br>";
                        
                        // 上線作成
                        if($l_st_y != $r_st_y)
                        {
                            $hl_st = $hl_ed = null;
                            if($l_st_y > $r_st_y)
                            {
                                $hl_st = $r_st_y;
                                $hl_ed = $l_st_y;
                            }
                            elseif($l_st_y < $r_st_y)
                            {
                                $hl_st = $l_st_y;
                                $hl_ed = $r_st_y;
                            }
                            
                            // 追加
                            for($n=$hl_st; $n<=$hl_ed; $n++)
                            {
                                $HRM["{$a_ed_x},{$n}"] = 1;
                                $HRM2["{$a_ed_x},{$n}"] = 1;
                            }
                        }
                        
                        // 横線作成(左)
                        for($n=$l_st_x; $n<=$a_ed_x; $n++)
                        {
                            $HRM["{$n},{$l_st_y}"] = 1;
                            $HRM2["{$n},{$l_st_y}"] = 1;
                        }
                        
                        // 横作成(右)
                        for($n=$a_ed_x; $n<=$r_st_x; $n++)
                        {
                            $HRM["{$n},{$r_st_y}"] = 1;
                            $HRM2["{$n},{$r_st_y}"] = 1;
                        }
                    }
                }
            }
            
            // 表示
            print "部屋の数{$set_num}個、部屋の大きさ{$set_width}<br>";
            
            foreach($set_base as $key => $val)
            {
                print "{$key}=>{$val}<br>";
            }
            print "<br>";
            //print_r($set_room);
            //print "<br>";
            
            //
            foreach($HRM as $key => $val)
            {
                print "{$key}<br>";
            }
            
            // div
            $div = 10;
            $div_base = 300;
            foreach($set_room as $key => $val)
            {
                // タイプ取得
                $type = explode("!", $val); // 0st,1wd
                $pos = explode(",", $type[0]);
                $wd = explode(",", $type[1]);
                
                // 基礎キー取得
                $base_key = explode("," ,array_search($key, $set_base));
                
                // 設定
                
                // 表示
                $pos_x = ($pos[0] + $set_width * $base_key[0]) * $div + $div_base;
                $pos_y = ($pos[1] + $set_width * $base_key[1]) * $div + $div_base;
                $wd_x = ($wd[0]) * $div;
                $wd_y = ($wd[1]) * $div;
                // 基礎設定
                $bp_x = ($set_width * $base_key[0]) * $div + $div_base;
                $bp_y = ($set_width * $base_key[1]) * $div + $div_base;
                $bs_x = $set_width * $div;
                $bs_y = $set_width * $div;
                
                // 表示
                print "<div style='position: absolute; left: {$pos_x}px; top: {$pos_y}px; width: {$wd_x}px; height: {$wd_y}px; background-color: red; z-index: 1;'>$key</div>\n";
                // 基礎表示
                print "<div style='position: absolute; left: {$bp_x}px; top: {$bp_y}px; width: {$bs_x}px; height: {$bs_y}px; background-color: blue; z-index: 0;'>$key</div>\n";
            }
            
            // HRM
            foreach($HRM as $key => $val)
            {
                // 設定
                $hrm_pos = explode(",", $key);
                
                // 表示
                $hrm_pos_x = $hrm_pos[0] * $div + $div_base;
                $hrm_pos_y = $hrm_pos[1] * $div + $div_base;
                print "<div style='position: absolute; left: {$hrm_pos_x}px; top: {$hrm_pos_y}px; width: {$div}px; height: {$div}px; background-color: gray; z-index: 2;' title='{$hrm_pos[0]},{$hrm_pos[1]}'></div>\n";
            }
            
            // HRM2
            foreach($HRM2 as $key => $val)
            {
                // 設定
                $hrm_pos = explode(",", $key);
                
                // 表示
                $hrm_pos_x = $hrm_pos[0] * $div + $div_base;
                $hrm_pos_y = $hrm_pos[1] * $div + $div_base;
                print "<div style='position: absolute; left: {$hrm_pos_x}px; top: {$hrm_pos_y}px; width: {$div}px; height: {$div}px; background-color: red; z-index: 3;' title='{$hrm_pos[0]},{$hrm_pos[1]}'></div>\n";
            }