![見出し画像](https://assets.st-note.com/production/uploads/images/80639132/rectangle_large_type_2_88096946709bd1dda04d3dca94344cc6.jpeg?width=1200)
自動生成マップ(バイオーム搭載)
![](https://assets.st-note.com/img/1655166684140-UOV0yeehZP.png?width=1200)
マップを3タイプの気候帯に分割
・熱帯
・温帯+乾燥帯
・冷帯
それぞれの気候帯でマップの色分けの比率を変更する
・熱帯:海が少ないが浅瀬が広い、草原と森が広い、森は高木と低木が混じる、山の高い場所は雪になる
・温帯+乾燥帯:砂と草原が広く森は高木、低木、の他に一部が草になる
・冷帯:海が多く砂、草原が狭く、森、山が広い、森は低木がなく一部が草になる、山は氷で覆われ、高い場所は雪になる
マップを書き換えるタイミングで緯度レベル、高度→地形+ランダム変化を加えることで各バイオームにあった地形、植生を生成する
t:出力用テーブル
e:赤道(equator)
a:北極、南極(arctic, antarctic)
c:地形カラー
i:マップブロック位置
h:マップ高度
b:バイオーム変換関数
// HTML出力
function viewmap(sz,mp){
var t=[], e=mp.length/2, a=e/3, c1=e-2a, c2=e+2a, c3=e-a, c4=e+a, c=['#00f','#0ff','#ff0','#0c0','#0f0','#090','#990','#0cf','#fff'];
var b=function(_i){
var h=mp[_i];
if (i<c1 || c2<i){
return h<100 ? c[0]
: h<120 ? c[1]
: h<140 ? c[2]
: h<160 ? c[3]
: h<220 ? Math.random()<0.05 ? c[3] :Math.random()<0.02 ? c[4] : c[5]
: h<250 ? c[7] : c[8]
}else if( i<c3 || c4<i){
return h<70 ? c[0]
: h<90 ? c[1]
: h<130 ? c[2]
: h<160 ? Math.random()<0.05 ? c[4] : c[3]
: h<240 ? Math.random()<0.1 ? c[3]:Math.random()<0.1 ? c[4] : c[5]
: h<250 ? c[6] : c[8]
}else{
return h<50 ? c[0]
: h<80 ? c[1]
: h<110 ? c[2]
: h<130 ? c[3]
: h<240 ? Math.random()<0.1 ? c[4] : c[5]
: h<250 ? c[6] : c[8]
};
};
for( var i=mp.length; i--;){
t.push( "<td id={i} bgcolor={c} width={s} height={s}></td>".replace( /{(.*?)}/g, function(m,$1){
return { "i":i, "s":10, "c":b(i) }[$1]
}) );
i%sz==0 && t.push("</tr><tr>");
}
document.body.innerHTML="<table border=0 style='border-collapse:collapse;'><tr>"+t.reverse().join("")+"</td></table>";
}
この記事が気に入ったらサポートをしてみませんか?