Пишем игру Питон на Python ;). Часть 2

В предыдущей части, мы научили питона двигаться. Теперь чуть усложним задачу: раскидаем по игровому полю еду, и в том случае если питон её съедает, то питон растёт. В результате получится что-то вроде:

Что делаем сначала? А сначала инициируем массив с едой, где будет храниться координаты еды, и её тип. В зависимости от типа еды, ёё цвет будет разным. Так-же определим массив с доступными цветами еды, и количество еды доступной на поле одномоментно:

.

foods=[]    # массив координат с едой
max_foods=3 # сколько еды может быть одновременно на поле
color_food=[(100,200,150),(200,100,150),(140,20,150)]

Далее напишем функцию, которая генерирует распределение еды на поле случайным образом. При генерации проверяется, совпадение координат с телом питона — нужно не допустить генерацию «внутри» питона. Сюда же поместим и отрисовку сгенерированной еды:

# Генерируем и отрисовываем еду для питона
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. А именно добавим проверку совпадения координат головы питона с координатами еды. Если совпадение есть — то еду удаляем, а хвост удлиняем (т.е. фактически не удаляем при движении)

 #проверяем: если голова совпадает с какойто едой, то еду удаляем, а жопу не удяляем
        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}")

Код результат, можно скачать здесь

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.