Это старая версия документа!
Создадим игру «Сокобан». Sokoban — логическая игра-головоломка, в которой игрок передвигает ящики по лабиринту, показанному в виде плана, с целью поставить все ящики на заданные конечные позиции. Только один ящик может быть передвинут за раз, причём герой игры — «кладовщик» — может только толкать ящики, но не тянуть их.
Отображать игру будем на TFT дисплее, управлять кладовщиком будем с помощью кнопок. Игровое поле разобьем на клетки 16 на 16 пикселей. Разрешение дисплея 128 на 160 пикселей. Получается 8 на 10 клеток. Отображать графику будем с помощью спрайтов — маленьких картинок. Мы уже подготовили набор спрайтов, в который входят картинка для стены, ящика, цели и кладовщика. Их нужно загрузить во внутреннюю память микроконтроллера.
Начнем с построения игрового поля — лабиринта. Нужно описать в каких клетках есть стена, а в каких нет. Проще всего это сделать с помощью двумерного массива. Число 1 будет обозначать наличие стены, а 0 — ее отсутствие.
from machine import Pin, SPI from tft import TFT_GREEN _init() machine.freq(160000000) dc = Pin(4, Pin.OUT) #a0 cs = Pin(2, Pin.OUT) rst = Pin(5, Pin.OUT) spi = SPI(1, baudrate=40000000, polarity=0, phase=0) # TFT object, this is ST7735R green tab version tft = TFT_GREEN(128, 160, spi, dc, cs, rst, rotate=0) Map = [ [1,1,0,1,1,1,0,1], [0,1,1,1,1,1,1,0], [1,1,0,0,0,1,1,1], [0,1,0,1,0,1,0,1], [0,1,0,0,0,1,0,1], [1,1,1,1,0,0,0,1], [1,0,0,0,0,0,0,1], [1,0,0,0,1,0,0,1], [1,0,0,0,1,1,1,1], [1,1,1,1,1,0,0,0] ] # init TFT tft.initr() tft.clear(tft.COLOR_BLACK) #b, g, r x = 0 y = 0 for row in Map: for col in row: if col: tft.draw_bmp(x * 16, y * 16,'brick.bmp') x+=1 x=0 y+=1