Пишем игру Питон на Python ;). Часть 2
В предыдущей части, мы научили питона двигаться. Теперь чуть усложним задачу: раскидаем по игровому полю еду, и в том случае если питон её съедает, то питон растёт. В результате получится что-то вроде:
Что делаем сначала? А сначала инициируем массив с едой, где будет храниться координаты еды, и её тип. В зависимости от типа еды, ёё цвет будет разным. Так-же определим массив с доступными цветами еды, и количество еды доступной на поле одномоментно:
.
1 2 3 4 |
foods=[] # массив координат с едой max_foods=3 # сколько еды может быть одновременно на поле color_food=[(100,200,150),(200,100,150),(140,20,150)] |
Далее напишем функцию, которая генерирует распределение еды на поле случайным образом. При генерации проверяется, совпадение координат с телом питона — нужно не допустить генерацию «внутри» питона. Сюда же поместим и отрисовку сгенерированной еды:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# Генерируем и отрисовываем еду для питона def Draw_foods(screen): for i in range(max_foods-len(foods)): # массив с едой всегда должен быть "полон" while True: # цикл генерации еды. Генерируем до тех пор пока сгенерированные координаты не устроят нас x=random.randint(0,size_x)+1 y=random.randint(0,size_y)+1 food_type = random.randint(0, len(color_food) - 1) if [x,y] not in python_body: break; foods.insert(0,[x,y,food_type]) print(f"Нагенерировали еды: {foods}, теперь её нарисуем"); for element in foods: coors=[element[0]*step_x-step_x/2,element[1]*step_y-step_y/2] pygame.draw.circle(screen,color_food[element[2]],coors,radius/2) |
Далее чуть изменим функцию отрисовки движения питона Draw_python. А именно добавим проверку совпадения координат головы питона с координатами еды. Если совпадение есть — то еду удаляем, а хвост удлиняем (т.е. фактически не удаляем при движении)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#проверяем: если голова совпадает с какойто едой, то еду удаляем, а жопу не удяляем del_tail = True for element in foods: if [element[0],element[1]] == head_coor: del_tail=False foods.remove(element) if del_tail==True: # зарисовываю черным жопу element=python_body[len(python_body) - 1] coors=[element[0]*step_x-step_x/2,element[1]*step_y-step_y/2] pygame.draw.circle(screen,(0,0,0),coors,radius) # удаляю последний элемент хвоста python_body.pop(-1) print(f"удалили жопу:{python_body}") |
Код результат, можно скачать здесь