実現したいこと
list()の2次元配列を用いて、RPGのワールドマップを表現しようとしています。2次元配列の中身は数値です。
- 草原=0
- 村 = 1
- 道 = 100
[ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]
みたいな感じです。
想定しているやり方
- 初期化処理として2次元配列を全て0埋めして、縦10、横10の2次元配列を作成します。
- 1.で作成した2次元配列を矩形で4つに分割して、エリアを作ります。エリア内には必ず1つの村を作成します。
- 村と村との最短距離を計算して、道で繋ぎます。
教えて欲しい部分
受け取った2次元配列を矩形に分割して、対応する範囲の座標全てを格納して、リストで返すような関数を作成したいです。
def get_rect(x): # ... # ... 処理内容 # ... return upper_right, upper_left, under_rigth, under_left # 左上、右上、左下、右下の矩形に対応する各々の座標を全てリストに含めて返して欲しい x = [[0 for x in range(10)] for y in range(10)] upper_right, upper_left, under_rigth, under_left = get_rect(x)
色々やってみたのですが、なかなか出来ません...どうかご教授下さい。
環境
- python3.6.1
- windows10
(追記しました)私が書いたコード
from pprint import PrettyPrinter def get_rect(maps, h, w): upper_left = [(x, y) for x in range(w) for y in range(h)] upper_right = [(x, y) for x in range(w, len(maps[0])) for y in range(h)] under_left = [(x, y) for x in range(w) for y in range(h, len(maps))] under_right = [(x, y) for x in range(w, len(maps[0])) for y in range(h, len(maps))] return upper_right, upper_left, under_right, under_left # 左上、右上、左下、右下の矩形に対応する各々の座標を全てリストに含めて返して欲しい if __name__ == '__main__': pp = PrettyPrinter(indent=4) x = [[0 for x in range(10)] for y in range(10)] height = len(x) // 2 width = len(x[0]) // 2 upper_right, upper_left, under_right, under_left = get_rect(x, height, width) pp.pprint(upper_left) pp.pprint(upper_right) pp.pprint(under_left) pp.pprint(under_right)
矩形の取り方が何通りもありますが、そこはランダムに扱うのでしょうか?
コメントありがとうございます!矩形は画像のように、常に真ん中で取れたら嬉しいです。また、矩形で取った範囲を更に4分割して...とかも出来れば尚嬉しいです。
マップは常に正方形なのですか?また、一辺の長さが奇数のときはどうするのです?
言われてみれば、常に正方形では無いです。ダンジョンのマップ生成にも使おうと思っているので、可変で出来れば嬉しいです。また、いっぺんの長さが奇数の場合、半分に割り切ってしまって構わないです。後出し後出しで本当にすみません!
座標を格納したリストを返すのだったら、半分に割り切ってしまうという戦略は取れないかと。常に片方に偏らせてはダメなのですか?
全然OKです!ある程度均等な感覚で村を生成出来れば良いので、多分偏っても平気です!
ちなみにご自身ではどんなコードを組んでみましたか?
書いたコードを追記しました。あの、お見せするために少し編集していたら、なんか出来たかもしれません...w
それは何よりです。一応私なりに作ってみているので、完成したら投稿します。
おお!本当にありがとうございます!凄く凄く助かります。
回答1件
あなたの回答
tips
プレビュー