/
vasandi
/
Codingplus
Обзор
Документация
Войти
/
vasandi
/
Codingplus
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
Shoot/main.py
128 строк
5 KB
Андрей Васильченко
add pygame examples
02 окт 2024, 13:22
02 окт 2024, 13:22
dc94fdd
Код
Авторство
О чём код?
import pygame as pg import math from load_res import * def blit_rotate(win, image, topleft, angle): rotated_image = pg.transform.rotate(image, angle) new_rect = rotated_image.get_rect(center=image.get_rect(topleft=topleft).center) win.blit(rotated_image, new_rect) pg.init() fps = 60 win_w = 800 win_h = 600 window = pg.display.set_mode((win_w, win_h)) clock = pg.time.Clock() bg = pg.image.load("res/bg.png").convert_alpha() bg = pg.transform.scale(bg, (win_w, win_h)) strelok_image = pg.image.load("res/strelok1.png").convert_alpha() strelok = pg.transform.scale(strelok_image, (strelok_image.get_width() // 4, strelok_image.get_height() // 4)) strelok_rect = strelok.get_rect() strelok_rect.centerx = 50 strelok_rect.centery = 50 strelok_speed = 5 bullet_image = pg.image.load("res/bullet1.png").convert_alpha() bullet = pg.transform.scale(bullet_image, (bullet_image.get_width() // 12, bullet_image.get_height() // 12)) bullet_rect = bullet.get_rect() bullet_rect.centerx = strelok_rect.centerx bullet_rect.centery = strelok_rect.centery bullet_speed = 15 bullet_flying = False bullet_angle = 0 zombie1 = loadZombie1() zombie1_frame_cnt = 0 zombie1_rect = zombie1[0].get_rect() zombie1_rect.centerx = win_w - zombie1_rect.width zombie1_rect.centery = win_h // 2 zombie1_speed = 1 explosion = loadExplosion() explosion_frame_cnt = 0 explosion_rect = explosion[0].get_rect() explosion_rect.centerx = zombie1_rect.centerx explosion_rect.centery = zombie1_rect.centery explosion_play = False running = True while running: for event in pg.event.get(): if event.type == pg.QUIT: running = False key_pressed = pg.key.get_pressed() mouse_pressed = pg.mouse.get_pressed() mouse_x, mouse_y = pg.mouse.get_pos() rel_x, rel_y = mouse_x - strelok_rect.x, mouse_y - strelok_rect.y angle = (180 / math.pi) * -math.atan2(rel_y, rel_x) if key_pressed[pg.K_UP]: rad_alfa = angle * (math.pi / 180) strelok_rect.centerx += strelok_speed * math.cos(rad_alfa) strelok_rect.centery -= strelok_speed * math.sin(rad_alfa) if key_pressed[pg.K_DOWN]: rad_alfa = angle * (math.pi / 180) strelok_rect.centerx -= strelok_speed * math.cos(rad_alfa) strelok_rect.centery += strelok_speed * math.sin(rad_alfa) window.blit(bg, (0, 0)) blit_rotate(window, strelok, (strelok_rect.x, strelok_rect.y), angle) relz_x, relz_y = strelok_rect.x - zombie1_rect.x, \ strelok_rect.y - zombie1_rect.y anglez = (180 / math.pi) * -math.atan2(relz_y, relz_x) rad_alfa = anglez * (math.pi / 180) zombie1_rect.centerx += zombie1_speed * math.cos(rad_alfa) zombie1_rect.centery -= zombie1_speed * math.sin(rad_alfa) if zombie1_frame_cnt + 1 > fps: zombie1_frame_cnt = 0 blit_rotate(window, zombie1[zombie1_frame_cnt // 3], (zombie1_rect.x, zombie1_rect.y), 90 - anglez) zombie1_frame_cnt += 1 if mouse_pressed[0] and not bullet_flying: blit_rotate(window, bullet, (bullet_rect.x, bullet_rect.y), angle) bullet_angle = angle bullet_flying = True if bullet_flying: rad_alfa = bullet_angle * (math.pi / 180) bullet_rect.centerx += bullet_speed * math.cos(rad_alfa) bullet_rect.centery -= bullet_speed * math.sin(rad_alfa) blit_rotate(window, bullet, (bullet_rect.x, bullet_rect.y), bullet_angle) if bullet_rect.centerx > win_w or bullet_rect.centery > win_h: bullet_flying = False bullet_rect.centerx = strelok_rect.centerx bullet_rect.centery = strelok_rect.centery elif bullet_rect.centerx < 0 or bullet_rect.centery < 0: bullet_flying = False bullet_rect.centerx = strelok_rect.centerx bullet_rect.centery = strelok_rect.centery if bullet_rect.colliderect(zombie1_rect): bullet_flying = False bullet_rect.centerx = strelok_rect.centerx bullet_rect.centery = strelok_rect.centery explosion_play = True explosion_frame_cnt = 0 explosion_rect.centerx = zombie1_rect.centerx explosion_rect.centery = zombie1_rect.centery if explosion_play: if explosion_frame_cnt + 1 > fps: explosion_frame_cnt = 0 explosion_play = False window.blit(explosion[explosion_frame_cnt // 5], explosion_rect) explosion_frame_cnt += 1 pg.display.flip() clock.tick(fps) pg.quit()