制作物プロジェクト活動DTM有志活動ブログアドベントカレンダーアドカレ2019アドカレ2018アドカレ2017アドカレ2016アドカレ2015アドカレ2014アドカレ2013お問い合わせ会員向けページホームアドベントカレンダーアドカレ20191日目:ローグライクのダンジョン自動生成を作るアドカレ2019アドベントカレンダー1日目:ローグライクのダンジョン自動生成を作る2019年12月1日はじめに今日からRCCアドベントカレンダーが始まります。記念すべき1日目は、1回生のふかだが担当します。大学から情報系の勉強を始めました。ゲーム、面白いですよね。僕はとあるゲームにはまりすぎて、高校時代は勉強そっちのけでプレイしていました。実力と運のバランスが良いゲームは何度もやりたくなります。このようなリプレイ性の高いゲームの例として、ローグライクがあります。ローグライクとはゲームジャンルの一つです。日本だと「不思議のダンジョンシリーズ」で有名ですね。代表例として、トルネコの大冒険や風来のシレンなどが挙げられます。「1000回遊べるRPG」というキャッチコピーで知られた、これらのゲーム。かの有名な「ドラゴンクエスト」も、ウルティマやウィザードリィを参考に作られたものであるのと同様に、「不思議のダンジョンシリーズ」にも原点があります。不思議のダンジョンシリーズの例ローグライクの原点は、1980年に初版が公表された「ローグ」というダンジョン探索型のRPGです。このとき既に、入るたびに変わる地形・ターン性・死んだらおしまいといった基本的なルールは固まっていました。当時のコンピュータゲームは制約が多く、ボリュームが限られていました。そんな中、飽きられにくく、リプレイ性の高いゲームを目指したので、多くの要素をランダム化しています。画期的だったのは、ダンジョン自動生成だと思います。地形の変化は、アイテムの入手機会の変動などとは異なり、ビジュアル面の新鮮さが期待できます。これは「1000回遊べるRPG」というキャッチコピーを如実に表しているように思います。今回、Javaでこれを作ってみました。大きく3つのパートに分けられます。マップを分割する部屋を生成する部屋同士をつなげる1.マップを分割する部屋が重ならないようにするために、まずはマップをいくつかの区画に分割します。親区画を縦に分割して、小さいほうをListにaddし、大きいほうを親区画にする関数を作ります。横の分割も同じように作って、これをそれぞれ交互に再帰呼び出しします。ある程度、親区画が小さくなったら、再帰処理から抜けます。2.部屋を生成する一つの区画に対して一つの部屋を生成します。大きさは、事前に決めた最大値・最小値に則ってランダムに決定します。このとき、最低限の通路の余白を考慮します。マップを分割したときに、Listで管理したことが生きてきます。違うということは、必ず隣接していることと同義です。2つの隣接した部屋から、通路のスタート地点をそれぞれ決定し、区画の境界目指して伸ばし、境界を通路化します。すべてのリストでこれを行えば、すべての部屋がつながることの保証されたダンジョンの完成です。(4.もう少し改良する)今のままだとダンジョンは1本道であるため、プレイヤーはその法則性にすぐ気づきます。プレイヤーには、どの道を進むか迷ってほしいところです。違う区画も隣接することを利用します。通路を追加したら、部屋が孤立しない範囲で通路を消去します。これでほんとに完成!例えばこんな感じおわりに完成したのはマップの枠組みだけです。ほかの部分も作成して、遊べるローグライクにしたいです。私はパソコンを触り始めてまだ1年弱ですが、2Dのゲーム制作は、プログラミングの基本文法を学ぶのに適していると思います。興味のあるゲームジャンルを調べてみて、作ってみてはいかがでしょうか。明日は2回生のチャムチャムさんです。サイバ...アドベントカレンダー27日目:Web開発についてこの記事はRCCアドベントカレンダー27日目の記事です。最強のペイントソフトです。理工学部都市システム工学科2回生のバイト戦士です。昨年はGitの勉強した話を書いたと思います。びわこ・くさつキャンパス」を拠点に活動している、コンピュータサークルです。(KC3)を主催するなど、対外的にも幅広く活動を行っています。制作物プロジェクト活動DTM有志活動ブログアドベントカレンダーアドカレ2019アドカレ2018アドカレ2017アドカレ2016アドカレ2015アドカレ2014アドカレ2013お問い合わせ会員向けページ。