Słownik list - plansza Gra w statki

0

Cześć, piszę dla siebie autorski projekt gry w statki.
Mam zmienną _BOARD_TEMPLATE chciałbym do niej wstawić "O" w zamian za** "-"** w miejsca, które wskazał użytkownik.
Input użytkownika przyjmuję w postaci następującej:
{'1': ['A2', 'A1', 'A3', 'A4'], '2': [('(B1', 'B2'), ('B3', 'B4'), ('C3', 'C4)')], '3': [], '4': []}.
Miejsca, w którym powinno znaleźć się "O" to: A2, A1, A3, A4, B1, B2, B3, B4
Jaką pętle muszę zastosować, aby osiągnąć wyżej opisany cel?

    _BOARD_TEMPLATE: dict = {
        " ": ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"],
        "A": ["-", "-", "-", "-", "-", "-", "-", "-", "-", "-"],
        "B": ["-", "-", "-", "-", "-", "-", "-", "-", "-", "-"],
        "C": ["-", "-", "-", "-", "-", "-", "-", "-", "-", "-"],
        "D": ["-", "-", "-", "-", "-", "-", "-", "-", "-", "-"],
        "E": ["-", "-", "-", "-", "-", "-", "-", "-", "-", "-"],
        "F": ["-", "-", "-", "-", "-", "-", "-", "-", "-", "-"],
        "G": ["-", "-", "-", "-", "-", "-", "-", "-", "-", "-"],
        "H": ["-", "-", "-", "-", "-", "-", "-", "-", "-", "-"],
        "I": ["-", "-", "-", "-", "-", "-", "-", "-", "-", "-"],
        "J": ["-", "-", "-", "-", "-", "-", "-", "-", "-", "-"],
    }
2

Iteruj sobie tak:

for key, value in _BOARD_TEMPLATE.items():
	# todo

I tam Masz dostęp do swojej tablicy.

2

Można też rozbić input użytkownika i edytować dicta w taki sposób:
_BOARD_TEMPLATE["A"][2] = "O"
Możliwości jest wiele.

1

Zawsze możesz posłużyć się też wbudowaną w słowniki metodą get()

_BOARD_TEMPLATE.get("A")[1] = '0'
    

Jak napisał forumowicz powyżej wszytko zależy od programisty.

2

Słownik list nie będzie dobry do reprezentowania planszy do gry w statki, ponieważ te mogą leżeć zarówno poziomo, w ramach jednej listy, jak i pionowo, w poprzek owych list. Wobec czego łatwiej będzie reprezentować planszę jako listę list, bo wówczas łatwiej reprezentować statki pionowe (jako [board[2][5], board[3][5], board[4][5]] zamiast [board['C'][5]. board['D'][5], board['E'][5]] - łatwiej operować na indeksach niż zakresach liter). Coś w rodzaju

>>> board = [['_'] * 10 for i in range(1, 11)]
>>> x, y = 'A3'
>>> x = ord(x.lower()) - 97
>>> y = int(y) - 1
>>> board[y][x] = 'O'
>>> board
[
    ['_', '_', '_', '_', '_', '_', '_', '_', '_', '_'],
    ['_', '_', '_', '_', '_', '_', '_', '_', '_', '_'],
    ['O', '_', '_', '_', '_', '_', '_', '_', '_', '_'],
    ['_', '_', '_', '_', '_', '_', '_', '_', '_', '_'],
    ['_', '_', '_', '_', '_', '_', '_', '_', '_', '_'],
    ['_', '_', '_', '_', '_', '_', '_', '_', '_', '_'],
    ['_', '_', '_', '_', '_', '_', '_', '_', '_', '_'],
    ['_', '_', '_', '_', '_', '_', '_', '_', '_', '_'],
    ['_', '_', '_', '_', '_', '_', '_', '_', '_', '_'],
    ['_', '_', '_', '_', '_', '_', '_', '_', '_', '_']
]
0

Dziękuję wszystkim za odpowiedź. Fajnie, że pomagacie. :D

1 użytkowników online, w tym zalogowanych: 0, gości: 1