私はPythonのクラスにはかなり新しいです。私は戦艦ゲームをコーディングしているうちに、コンピュータの船の位置とコンピュータの攻撃座標のランダムx、y座標を選択することに問題がありました。私は、関数の1つでローカル変数として乱数を生成するか、クラス属性またはインスタンス属性として乱数を生成するかについて混乱します。Python Battleship乱数生成器
最初はインスタンス属性(下記)を作成すると思っていましたが、rand_xが定義されていません。私は乱数を生成する戦艦の機能を作成しようとしましたが、呼び出される度に同じ座標の組が返されました。ランダムな数のローカル変数を作成するためにこれを行う唯一の方法はありますか?私はランダムジェネレータを複数回使用するので、そのコードを繰り返さなくていいといいでしょう。
ご理解いただきありがとうございます。
編集:乱数関数でコードを追加し、ランダム関数のsize
をself.size
に置き換えました。
たとえば、Battleship(4,2,0,0)はhitlist
の中のランダムな番号を使用したい[[2,1]、[2,1]]のhitlist
を私に与えるかもしれません。
import random
hitlist=[]; #a global variable
class Battleship(object):
""" Ship object container. A game where the user tries to destroy the enemy's ships User tries to guess computer's position x and y """
def __init__(self, size, numberships,position_x,position_y):
self.position_x=position_x
self.position_y=position_y
self.numberships=numberships
self.size = size
def plotships(self,r):
"""input is integer coordinates for ships and output is an array of arrays with battleship locations CREATES THE HITLIST DONT REPEAT"""
print('plotships function running')
for i in range(self.numberships):
hitlist.append(r) #random number from function randomness
print(hitlist)
return hitlist
def randomness(self):
rand_x=random.choice(range(self.size))
rand_y=random.choice(range(self.size))
randcoord=[rand_x,rand_y]
return randcoord
#Game Interface
size=int(input('Gameboard size'))
numberships=int(input('Waiting for Number of enemy ships'))
b=Battleship(size,numberships,0,0)
random=b.randomness() #create a random x y coordinate
b.plotships(random) #create a hitlist
は 'インポートしていることを確認しますランダム。 'random.randint(0、self.size - (wtvはあなたのx範囲です)'と 'random.randint(0、self.size - (wtvはあなたのy範囲です)'を使ってみてください ' –
あなたはあなたの[編集] –
@ Imtiaz Raqibこれは100%の問題ですが、これ以上のことは考えていませんが、安全な乱数ジェネレータコール(IE: 'os.urandom')。敵があなたの艦隊Admiral @ st4rgutの位置を予測するのを見たくないだけです。 –