2017-09-07 15 views
0

学校プロジェクトで数字の一致するゲームを作成するように求められました。私は乱数でいっぱいのグリッドを生成することができましたが、それらをペアにして一致させる必要があります。どんな助けでも大歓迎です。ここに私のコードは、これまでです:グリッドにランダムな整数のペアを生成する(2D配列)python

はデフ遊ぶ(): 輸入ランダム

sizeofgrid() 

board = [] 

showboard = [] 

for row in range(gridsize): 
    board.append([]) 
    for column in range(gridsize): 
     board[row].append(random.randint(0, 9)) 

def print_board(board): 
    for row in board: 
     print(' '.join([str(i) for i in row])) 

showboard = [['O' for _ in range(gridsize)] for _ in range(gridsize)] 

print_board(showboard) 
print_board(board) 
+0

各番号が2つだけになりますか?または、必要に応じて頻繁に繰り返される0〜9の数字が、それぞれ偶数で終わりますか? –

+0

はい、私はグリッドの周りのランダムな位置に配置されている各番号の2つが必要です。それについて考えてみると、グリッドの塗りつぶしには0から多くのものが必要です(グリッドのサイズはユーザーが選択します)。私は明らかにグリッド内に偶数のスペースしか存在しないことを確かめました。 –

答えて

1

一つのアプローチは、必要な数の半分を生成し、そのリストを倍増するかもしれません。次に、希望の値をシャッフルし、グリッドにリサイズします。

from random import randint, shuffle 

size = 4 # must be even 
pairs = size**2/2 

pool = range(pairs) * 2 
# [0, 1, 2, 3, 4, 5, 6, 7, 
# 0, 1, 2, 3, 4, 5, 6, 7] 

shuffle(pool) 

grid = [pool[i:i+size] for i in range(0, size**2, size)] 
# [[4, 5, 0, 7], [1, 7, 3, 5], [2, 1, 2, 6], [4, 0, 3, 6]] 
+0

助けてくれてありがとう、私はそれを行くだろう。 –

0

あなたのアプローチを変更する必要があります。 2つのうちの1つを試すことができます:

  1. 空のボードから始めます。乱数を生成し、 ランダムな場所をボード上に生成します。 に空のスロットが2回見つかるまで、再生成を続けます。両方の場所に乱数を入れてください。

    for _ in range(width * height // 2): 
        number = pick_random_number() 
        loc1 = find_random_empty_spot() 
        board[loc1.row][loc1.col] = number 
        loc2 = find_random_empty_spot() 
        board[loc2.row][loc2.col] = number 
    
  2. いくつの位置を記入する必要があるかを計算します。 N/2 乱数を生成し、各乱数をリストに2回入れます。今度は リストをシャッフルし、ボード上にループして、リストを からボードに挿入します。

    num_picks = width * height // 2 
    picks = [] 
    
    for _ in range(num_picks): 
        number = pick_random_number() 
        picks.extend([number, number]) 
    
    random.shuffle(picks) 
    
    for row in range(height): 
        for col in range(width): 
         board[row][col] = picks.pop() 
    

これらのアプローチのどちらかは、あなたが望むペアの行動を取得します。どちらを選ぶかは、慰めの問題です。

+0

助けてくれてありがとう、どのようにランダムな位置を生成するつもりですか?私は座標を使うでしょうか? –

+0

それは一つの方法です。 'range(width)'と 'range(height)'にランダムなintを生成します。 –

+0

ご協力ありがとうございます。 –

関連する問題