Python Pygame:在指定的棋盘上生成x个随机和不同的坐标
对于一个小型rpg游戏,我会创建一个包含特定数值的棋盘 让我介绍一个例子:Python Pygame:在指定的棋盘上生成x个随机和不同的坐标,python,python-3.x,Python,Python 3.x,对于一个小型rpg游戏,我会创建一个包含特定数值的棋盘 让我介绍一个例子: board=[[0,0,0,15,0,0,0,0,0,0], [0, 0, 15, 0, 15, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 15, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 15, 0, 0, 0, 0, 15, 0], [0, 0, 0, 0, 0,
board=[[0,0,0,15,0,0,0,0,0,0],
[0, 0, 15, 0, 15, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 15, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 15, 0, 0, 0, 0, 15, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 15, 0, 0, 0, 0, 0, 15, 0, 0],
[0, 0, 0, 0, 0, 15, 0, 0, 15, 0],
[15, 0, 15, 15, 0, 0, 0, 0, 0, 0]]
这是一个10乘10的电路板,13乘以15
为了得到这个结果,我使用了一个程序,在电路板上给出随机坐标
b2x=[]
b2y=[]
对于范围(B)中的i:
x=random.randint(0,L-1)
y=random.randint(0,H-1)
b2x.append(x)
b2y.追加(y)
董事会[x][y]=15
打印('x:',x'和y:',y)
这里一个明显的问题是我们可以得到两个相似的坐标,这将减少一个值的总数
事实上,在第一个例子的电路板中,我没有得到我向程序询问15个值时得到的值的数量,它返回我13个
因此,我尝试在不进行坐标检查的情况下解决这个问题,这似乎现在无法正常工作
范围内j的(len(bo2x)):
如果(x==b2x[j-1])和(y==b2y[j-1]):
i-=1#影响范围(B)中的for i循环
完整代码如下:
b2x=[]
b2y=[]
对于范围(B)中的i:
x=random.randint(0,L-1)
y=random.randint(0,H-1)
对于范围内的j(len(bo2x)):
如果(x==b2x[j-1])和(y==b2y[j-1]):
i-=1#影响范围(B)中的for i循环
b2x.append(x)
b2y.追加(y)
董事会[x][y]=15
打印('x:',x'和y:',y)
因此,在多次尝试后,没有任何更改:
随机生成
x:5和y:4
x:1和y:3
x:7和y:7
x:7和y:5
x:0和y:7
x:0和y:1
x:6和y:2
x:3和y:6
x:9和y:4
x:5和y:9
x:6和y:8
x:6和y:7
x:3和y:6
x:3和y:7
x:7和y:5
[在0.2秒内完成]
如您所见,行x:7和y:5
以及行x:3和y:6
在生成中出现两次
有人能帮我达到预期的结果吗
预期结果(概念):
x:5和y:4
x:1和y:3
x:7和y:7
x:7和y:5
x:0和y:7
x:0和y:1
x:6和y:2
x:3和y:6
x:9和y:4
x:5和y:9
x:6和y:8
x:6和y:7
x:3和y:6
这条线已经存在了!
x:3和y:7
x:7和y:5
这条线已经存在了!
x:1和y:3
x:9和y:4
董事会:
[[0, 15, 15, 0, 0, 0, 0, 15, 0, 0],
[0, 0, 0, 15, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 15, 15, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 15, 0, 0, 0, 0, 15],
[0, 0, 15, 0, 0, 0, 0, 15, 15, 0],
[0, 0, 0, 0, 0, 15, 0, 15, 0, 0],
[0, 0, 0, 15, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 15, 0, 0, 0, 0, 0]]
您想创建一个LxB板
L,H=10,10
这可以通过一行代码实现:
board=[[0]*L表示范围内(H)]
您希望将某个数字在板上的不同位置放置15次。生成随机坐标,但如果编号已分配给索引字段,则跳过坐标:
count=15
数字=15
b=[]
当计数>0时:
x、 y=random.randint(0,L-1),random.randint(0,H-1)
如果板[y][x]!=编号:
板[y][x]=编号
b、 附加((x,y))
计数-=1
对于板中的行:
打印(行)
印刷品(b)
通过询问如何生成随机数列表而不重复,您可以将问题缩短90%。。。这里有一个答案:它对坐标有用吗?我不知道它如何解决这个问题:它是创建不重复的随机数,而不是不重复的随机坐标…可能是@Edhyjox的重复,好吧,这里是,没有完全相同的答案。我的意思是,找一点,不要试图被人用勺子喂answers@Edhyjox我想你需要索引元组。我知道你不再需要它们了,那么b
就没用了。