私はタイトルを語る方法はあまりよくありませんでした。申し訳ありませんが、それは意味がない/誤解を招く。フィールドのフィールドの範囲内のチェック
注 - "ボート" は3 Oの互いに隣接配列であるので、
_|O|_ _|_|_
_|O|_ O|O|O
|O| | |
は船です。
私はランダムなスペースにn個のボートを生成するリスト(n x n)(リストを扱うリスト)を持っています。私は、ボート同士が隣り合ったり、コーナーに触れたり、お互いの上に乗ることを望んでいません。当然長いことになったように
if board[y - 2][x] == 'O' or board[y + 2][x] == 'O' ...
とを、:
Aは、ボートは、このの静脈に別のボートの上に終わるだろうかどうかをチェックしようとしました。
私は時々フィールドにない座標をチェックしていたので、範囲外のエラーが出ました。
したがって、インデックスの範囲外に出ることなくあらゆる方向にボートをチェックできる方法はありますか?
さらに、ボートを作る方法に関するアイデアはお互いに隣り合っていないのですか?
ボートの世代のためのコードはここにある:あなたがポイントの隣人を検査するために、あまりにも退屈な繰り返しのロジックを訴えるよう
from random import *
side = int(input())
game_state = []
def generate_initial_state():
for i in range(side):
game_state.append([])
for j in range(side):
game_state[i].append('.')
for i in range(side):
# Generate boat origin on random coordinates within the game board,
# if there's a boat already, generate new ones
y_cor = randint(0, side-1)
x_cor = randint(0, side-1)
while game_state[y_cor][x_cor] == 'O':
y_cor = randint(0, side - 1)
x_cor = randint(0, side - 1)
# Direct chooses if the boat will be generated up, down, or sideways
direct = randint(1, 4)
cycle = 0
while cycle < 3:
# Generates a boat going from origin in one direction,
# if the boat would end outside the board, chooses a different direction
if direct == 1:
if y_cor + 2 >= side:
direct = randint(1, 4)
else:
game_state[y_cor + cycle][x_cor] = 'O'
cycle += 1
elif direct == 2:
if x_cor + 2 >= side:
direct = randint(1, 4)
else:
game_state[y_cor][x_cor + cycle] = 'O'
cycle += 1
elif direct == 3:
if y_cor - 2 < 0:
direct = randint(1, 4)
else:
game_state[y_cor - cycle][x_cor] = 'O'
cycle += 1
elif direct == 4:
if x_cor - 2 < 0:
direct = randint(1, 4)
else:
game_state[y_cor][x_cor - cycle] = 'O'
cycle += 1
for i in range(side):
print(*game_state[i])
は「だから、私は生成されるフィールドのフィールド(n×nの)を持っているN 『で長さ3の船』あなたは正確であることができますか? 「フィールド」とは何ですか? 「ボート」とは何ですか?これを[配列]でタグ付けしましたが、実際に配列を扱っていますか? –
投稿を編集しましたが、私は実際に配列を使って作業しています。何らかの理由でここに「フィールドのフィールド」と呼んでいます。また、ボートが今よりはっきりしていることを願っています。戦艦を考えて、ボードに乗せたボートを持っています。 –
いいえ。あなたは、あなたが働いていることについて*具体的である必要があります。私はあなたが戦艦ゲームを作ろうとしていることを知っている、私は尋ねる、**あなたは実際にどのようなデータ構造**を持っています。 **あなたは配列で作業していますか?それは私のようには見えません。 'list'オブジェクトを使って作業しているようです。あなたは[mcve]を提供する必要があります。 –