Заморозить определенные элементы в списке - PullRequest
0 голосов
/ 10 мая 2019

Я не знаю, как я могу сделать некоторые (не все) элементы замороженными в обычном списке.Я создаю бинарную головоломку в двумерном списке в Python.но я не знаю, как я могу сделать те, которые генерируются, неизменяемыми, поэтому, когда сьюер играет в игру, он не может изменить сгенерированные кусочки в головоломке.

извините за голландское кодирование.Я студент

Я не знаю, что попробовать.я думал о том, чтобы создать словарь с местами и позволить программе проверять каждый раз, когда suer меняет плитку в игре.но я не думаю, что это будет эффективно.

import random
import string

alfabet = list(string.ascii_uppercase)

def limit(number, mini, maxi):
    return max(min(maxi, number), mini)

def game(grootte):
    # maak speelveld
    speelveld = []
    for i in range(0, grootte):
        rij = []
        for x in range(0, grootte):
            rij.append('.')
        speelveld.append(rij)

# vul speelveld
for i in range(0, grootte+4):
    errorcheck = False
    while errorcheck == False:
        r_binairy = random.randint(0, 1)
        r_location_a = random.randint(0, grootte-1)
        r_location_b = random.randint(0, grootte-1)

        errorcheck = speelveld[limit(r_location_a+1, 0, grootte-1)][limit(r_location_b, 0, grootte-1)] and speelveld[limit(r_location_a+2, 0, grootte-1)][limit(r_location_b, 0, grootte-1)] != r_binairy and \
        speelveld[limit(r_location_a-1, 0, grootte-1)][limit(r_location_b, 0, grootte-1)] and speelveld[limit(r_location_a-2, 0, grootte-1)][limit(r_location_b, 0, grootte-1)] != r_binairy and \
        speelveld[limit(r_location_a+1, 0, grootte-1)][limit(r_location_b, 0, grootte-1)] and speelveld[limit(r_location_a-1, 0, grootte-1)][limit(r_location_b, 0, grootte-1)] != r_binairy and \
        speelveld[limit(r_location_a, 0, grootte-1)][limit(r_location_b+1, 0, grootte-1)] and speelveld[limit(r_location_a, 0, grootte-1)][limit(r_location_b+2, 0, grootte-1)] != r_binairy and \
        speelveld[limit(r_location_a, 0, grootte-1)][limit(r_location_b-1, 0, grootte-1)] and speelveld[limit(r_location_a, 0, grootte-1)][limit(r_location_b-2, 0, grootte-1)] != r_binairy and \
        speelveld[limit(r_location_a, 0, grootte-1)][limit(r_location_b-1, 0, grootte-1)] and speelveld[limit(r_location_a, 0, grootte-1)][limit(r_location_b+1, 0, grootte-1)] != r_binairy

    speelveld[r_location_a][r_location_b] = r_binairy

# print speelveld
def print_speelveld():
    print("\n")
    teller = 1
    print('         A', end="")
    for i in range(0, grootte-1):
        print(' ', format(alfabet[teller], '>6'), end="")
        teller += 1
    print("\n")
    teller = 1
    for i in speelveld:
        print(format(teller, ' <4'), "|", end="")
        for x in i:
            print('', format(x , '^5'), '|', end="")
        print('\n')
        teller += 1

# speel spel
bord_niet_vol = True

while bord_niet_vol == True:
    print_speelveld()
    for i in speelveld:
        for x in i:
            if x == '.':
                bord_niet_vol = True
            else:
                bord_niet_vol = False

    vak = input('\ngeef het volgende in: RIJ KOLOM GETAL. Als voorbeeld "A10" (Kolom A, Rij 1, Getal 0). Gebruik HOOFDLETTERS\n\ninvoer: ')
    invoer = list(vak)
    invoer[0] = alfabet.index(invoer[0])
    invoer[1] = int(invoer[1])-1
    invoer[2] = int(invoer[2])
    speelveld[invoer[1]][invoer[0]] = invoer[2]

Я бы хотел сделать эту случайно сгенерированную доску неизменной, кроме "."Сменный.Но они ДОЛЖНЫ быть изменяемы во второй раз, если пользователь допустил ошибку.

1 Ответ

0 голосов
/ 10 мая 2019

Я бы настроил словарь 'index:givenvalues', где значение - это список всех возможных значений (если не бесконечно!), Но там, где len(givenvalues) == 1, вставьте разрыв, чтобы предотвратить обновления.

...