Рассмотрим поля Gameboard 8×8. Как бы вы это представляли? А как насчет самого обычного и памяти, которое когда -либо голодного решения когда -либо? Массив массивов, верно? Или список списков в Python.
gameboard = [8 * ["*"] for _ in range(8)] gameboard
[['*', '*', '*', '*', '*', '*', '*', '*'], ['*', '*', '*', '*', '*', '*', '*', '*'], ['*', '*', '*', '*', '*', '*', '*', '*'], ['*', '*', '*', '*', '*', '*', '*', '*'], ['*', '*', '*', '*', '*', '*', '*', '*'], ['*', '*', '*', '*', '*', '*', '*', '*'], ['*', '*', '*', '*', '*', '*', '*', '*'], ['*', '*', '*', '*', '*', '*', '*', '*']]
Теперь мы можем добавить два игрока P1 и P2, чтобы повеселиться, верно?
gameboard[0][5] = "P1" gameboard[7][3] = "P2" gameboard
[['*', '*', '*', '*', '*', 'P1', '*', '*'], ['*', '*', '*', '*', '*', '*', '*', '*'], ['*', '*', '*', '*', '*', '*', '*', '*'], ['*', '*', '*', '*', '*', '*', '*', '*'], ['*', '*', '*', '*', '*', '*', '*', '*'], ['*', '*', '*', '*', '*', '*', '*', '*'], ['*', '*', '*', '*', '*', '*', '*', '*'], ['*', '*', '*', 'P2', '*', '*', '*', '*']]
Вы бы угадали, что здесь не так?
Например, представьте, что вы хотели бы создать двухмерный обширный мир, где игроки могут бродить бесплатно.
Вы не хотите в конечном итоге выделять 1 млн * 1 мс сетку только для двух игроков. Это довольно глупо, не так ли? Можем ли мы сделать лучше, хотя?
Да, мы, конечно, можем.
players = { (1,5): "P1", (7,1): "P2" }
Вот и все! Вам не нужно больше. Всего две записи для хранения координат и атрибутов игрока. В этом конкретном случае я просто (AB) использовал DictionAry, потому что мне было лень делать особый класс.
Вы можете отобрать свою доску за один раз:
def render_board(players, width=8, height=8, empty_field=" * "): for x in range(height): for y in range(width): character = players.get((x,y), empty_field) print(character, end="") print() render_board(players=players)
* * * * * * * * * * * * * P1 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * P2 * * * * * *
Вы даже можете обрезать свой вид. Смотрите, Игрок2 здесь нет.
render_board(players, 7,7)
* * * * * * * * * * * * P1 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
А теперь для чего -то более массивного. Или, возможно, не так массово, так как я не собираюсь делать ваш экран разъединяться для слишком большого количества страниц.
render_board(players, 60,20,".")
............................................................ .....P1...................................................... ............................................................ ............................................................ ............................................................ ............................................................ ............................................................ .P2.......................................................... ............................................................ ............................................................ ............................................................ ............................................................ ............................................................ ............................................................ ............................................................ ............................................................ ............................................................ ............................................................ ............................................................ ............................................................
К настоящему времени вы должны получить идею. Если вы были заинтригованы, вы можете немного поиграть, инкапсулируя Gameboard в отдельный класс, с некоторым графическим интерфейсом, чтобы получить больше удовольствия.
- Почему я позаботился о понимании списка в начале простого?
[["*"] * 8 ] * 8
- Для координат в моем дикте я использовал кортеж , не список Анкет Почему?
- Что означает print (“*”,) ? Почему мне пришлось использовать его вместо простой печати (“*”)
- Я написал это Статья в jupyterlab? Что это такое?
- О чем мы говорим в редкой матрице?
Напишите свои ответы в разделе комментариев.
Надеюсь, вам понравилась эта статья. Если вы жаждете чего -то совершенно другого, вы можете прочитать мой онлайн -роман Суверенный
Оригинал: “https://dev.to/hanpari/cheap-representation-of-sparse-matrix-in-python-or-any-other-language-2i7e”