具有更具体范围python的随机整数

时间:2016-10-26 15:03:37

标签: python python-3.x random

我正在尝试设计一种基本的战舰风格游戏,船只在5x5板上占用2个空间。

我正在随机生成其中一个坐标并尝试随机生成第二个坐标,使其位于最后一个数字的1个空格内。这是我的代码

coordinate1x = random.randint(0,4)
coordinate1y = random.randint(0,4)
coordinate1 = [coordinate1x, coordinate1y]

coordinate2x = random.randint(coordinate1x, coordinate1x + 1)
coordinate2y = random.randint(coordinate1y, coordinate1y + 1)
coordinate2 = [coordinate2x, coordinate2y]

battleship_location = [coordinate1, coordinate2]

我很难找到获得正确数字的逻辑。

任何帮助都非常适合

1 个答案:

答案 0 :(得分:0)

有两个决定:

  1. 是否水平或垂直放置船
  2. 将两个单元格中的第一个放在网格上的位置。
  3. 船的方向可以是:

    [ ][ ]
    

    或:

    [ ]
    [ ]
    

    两者中的左/最顶部是在第二选择中选择的单元格。为了确保您不会超出边界,可以为第一个单元格选择的范围对于水平船舶是这样的(Y可以选择,N不是):< / p>

    Y Y Y Y N
    Y Y Y Y N
    Y Y Y Y N
    Y Y Y Y N
    Y Y Y Y N
    

    对于垂直船舶:

    Y Y Y Y Y 
    Y Y Y Y Y 
    Y Y Y Y Y 
    Y Y Y Y Y 
    N N N N N
    

    以下是建议的代码:

    # choose whether to place the ship vertically or not
    is_vertical = random.randint(0,1)
    # choose the first cell from a range that depends on the chosen direction
    cell1 = [random.randint(0, 3+is_vertical), random.randint(0,4-is_vertical)]
    # copy the coordinates
    cell2 = cell1[:]
    # add 1 to the x or y coordinate, depending on the chosen direction 
    cell2[is_vertical] += 1
    
    battleship_location = [cell1, cell2]
    
    print(battleship_location)