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

あとは追加したいのは・・・
・キーボードで移動
・確率でモブ出現
・宝箱を空ける
・出口到達で階層移動
ですね。
普通に探索として遊べる感じで。
コードは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> </td><td><input type=button onclick='change_map(0,-1);' value='▲'></td><td> </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> </td><td><input type=button onclick='change_map(0,1);' value='▼'></td><td> </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>
