Пишем игру Питон на Python ;). Часть 3
Продолжаем начатое. Добавим в игру увеличение скорости если питон ест, и подсчет очков. Добавим переменные:
1 2 3 4 5 6 |
... speed=500; # начальная скорость питона increase_speed=10; # размер увеличения скорости при удачной еде score=0; # набранные очки в результате игры score_color=(100,100,50) # цвет очков ... |
Интересный момент работы с таймером. По умолчанию time.time() отдает данные в секундах целые числа, и доли секунд в цифрах после запятой. Для того чтобы соответственно удобно считать миллисекунды, значения нужно умножать на 1000. Изменим код:
1 2 3 4 5 6 7 8 |
start_time=time.time()*1000 ... while running: if (time.time()*1000-start_time)>speed: start_time=time.time()*1000 Draw_foods(screen) Draw_python(screen) ... |
А теперь изменим функцию Draw_python, добавив отрисовку количества очков, а так-же увеличение скорости и количества очков при поедании:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
... global score,speed .. for element in foods: if [element[0],element[1]] == head_coor: del_tail=False foods.remove(element) speed=speed-increase_speed # увеличиваем скорость питона score=score+element[0] # увеличиваем очки в зависимости от типа сожранного ... # Рисую набранные очки pygame.draw.rect(screen,(0,0,0),(width_field,0,width_field+300,100)) img = font.render(f'Очки: {score}', True, score_color) screen.blit(img, (width_field+10, 20)) ... |
Добавим еще штрих — сделаем реакцию на столкновение со стенами поля, а именно чтоб питон переходил на левый край при столкновении с правым и т.д.,
1 2 3 4 5 6 7 8 9 |
... if (head_coor[0]>size_x): head_coor[0]=1; if (head_coor[1]>size_y): head_coor[1]=1; if (head_coor[0]<0): head_coor[0]=size_x; if (head_coor[1]<0): head_coor[1]=size_y; ... |
Теперь не хватает последнего: проигрыша в случае столкновения головы с хвостом. Объявим глобальный цикл в котором будет крутится игра, в нём разместим цикл игры. При проигрыше выводим вопрос «Вы проиграли хотите еще (Y/N)» Если игрок выбирает Y, то из глобального цикла не выходим, иначе покидаем глобальный цикл.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
gloop=True while gloop: # глобальный цикл pygame.init() ... font = pygame.font.SysFont(None, 24) while running: # цикл игры if (time.time()*1000-start_time)>speed: start_time=time.time()*1000 ... # здесь оказываемся когда проиграли... pygame.draw.rect(screen,(200,100,5),(50,50,width_field-50,100)) img = font.render(f'Вы проиграли. Сыграем еще партию? (Y/N)', True, score_color) screen.blit(img, (100, 80)) pygame.display.flip() pygame.display.update() running = True while running: for event in pygame.event.get(): if event.type == pygame.KEYDOWN: if event.key == pygame.K_y: moved_direction_x = 0 moved_direction_y = 0 speed=500 score=0 gloop=True running=False if event.key == pygame.K_n: gloop=False running = False print("нормально вышли") |
Окончательную версию игры можно скачать здесь