|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
04.03.2021, 14:53 | #1 |
Новичок
Джуниор
Регистрация: 04.03.2021
Сообщений: 1
|
помогите пожалуйста,я не могу сделать стрельбу в разные стороны,я новичок в python,и надеюсь на помощь))
вот сама игра,тут и изображения и сам код
import pygame import random import time import math from os import path img_dir = path.join(path.dirname(__file__), 'img1') snd_dir = path.join(path.dirname(__file__), 'snd1') w = 1300 h = 680 FPS = 60 a = -10 b = 15 x = 10 y = 10 # Задаем цвета WHITE = (255, 255, 255) BLACK = (0, 0, 0) RED = (255, 0, 0) GREEN = (0, 255, 0) BLUE = (0, 0, 255) YELLOW = (255, 255, 0) # Создаем игру и окно pygame.init() pygame.mixer.init() screen = pygame.display.set_mode((w, h)) pygame.display.set_caption("Битва за землю") clock = pygame.time.Clock() class Player(pygame.sprite.Sprite): def __init__(self): pygame.sprite.Sprite.__init__(self) self.image = pygame.transform.scale(player_img, (50, 50)) self.image.set_colorkey(WHITE) self.rect = self.image.get_rect() self.rect.centerx = w - 400 self.rect.bottom = h - 400 self.speedx = 0 def update(self): self.speedx = 0 mouse = pygame.mouse.get_pressed() keystate = pygame.key.get_pressed() if keystate[pygame.K_a]: self.image = pygame.transform.rotate(player_img, 90) self.image.set_colorkey(WHITE) self.speedx = -2 self.rect.x += self.speedx if keystate[pygame.K_d]: self.image = pygame.transform.rotate(player_img, -90) self.image.set_colorkey(WHITE) self.speedx = 3 self.rect.x += self.speedx self.rect.y += self.speedx if keystate[pygame.K_w]: self.image = pygame.transform.rotate(player_img, 360) self.image.set_colorkey(WHITE) self.speedx = 3 if keystate[pygame.K_s]: self.image = pygame.transform.rotate(player_img, 180) self.image.set_colorkey(WHITE) self.speedx = -3 self.rect.y -=self.speedx def shoot(self): bullet = Bullet(self.rect.centerx, self.rect.centery) all_sprites.add(bullet) bullets.add(bullet) shoot_sound.play() class Mob(pygame.sprite.Sprite): def __init__(self): pygame.sprite.Sprite.__init__(self) self.image = pygame.transform.scale(mob1_img, (100, 100)) self.image.set_colorkey(BLACK) self.rect = self.image.get_rect() self.rect.x = random.randrange(w - self.rect.width) self.rect.y = random.randrange(h - self.rect.height) self.rectx = random.randrange(90, 270) self.recty = random.randrange(270, 360) self.speedy = random.randrange(-8, 8) self.speedx = random.randrange(-3, 3) def update(self): self.rect.x += self.speedx self.rect.y += self.speedy if self.rect.top > h + 10 or self.rect.left < -25 or self.rect.right > w + 20: self.rect.x = random.randrange(w - self.rect.width) self.rect.y = random.randrange(h - self.rect.height) self.rect.x = random.randrange(180, 270) self.rect.y = random.randrange(270, 360) self.speedy = random.randrange(-8, 8) class Bullet(pygame.sprite.Sprite): def __init__(self, x, y): pygame.sprite.Sprite.__init__(self) self.image = pygame.transform.scale(bullet_img, (10, 30)) self.image.set_colorkey(BLACK) self.rect = self.image.get_rect() self.rect.bottom = y self.rect.bottom = x self.rect.centerx = x self.rect.centery = y self.speedx = 0 self.speedy = -10 def update(self): self.rect.x += self.speedx self.rect.y += self.speedy # убить, если он заходит за верхнюю часть экрана if self.rect.bottom < 0: self.kill() background = pygame.image.load(path.join(img_dir , "bg.jpg")).convert() background_rect = background.get_rect() player_img = pygame.image.load(path.join(img_dir , "sprite1.png")).convert() bullet_img = pygame.image.load(path.join(img_dir , "bullet.png")).convert() mob1_img = pygame.image.load(path.join(img_dir , "mob1.png")).convert() # Загрузка мелодий игры shoot_sound = pygame.mixer.Sound(path.join(snd_di r, 'piw1.mp3')) all_sprites = pygame.sprite.Group() player = Player() mobs = pygame.sprite.Group() bullets = pygame.sprite.Group() all_sprites.add(player) for i in range(8): m = Mob() all_sprites.add(m) mobs.add(m) # Цикл игры running = True while running: # Держим цикл на правильной скорости clock.tick(FPS) # Ввод процесса (события) for event in pygame.event.get(): # проверка для закрытия окна if event.type == pygame.QUIT: running = False elif event.type == pygame.KEYDOWN: if event.key == pygame.K_SPACE: player.shoot() # Обновление all_sprites.update() hits = pygame.sprite.groupcollide(mobs, bullets, True, True) for hit in hits: m = Mob() all_sprites.add(m) mobs.add(m) # Проверка, РЅРµ ударил ли РјРѕР± РёРіСЂРѕРєР° hits = pygame.sprite.spritecollide(player, mobs, False) if hits: running = False # Рендеринг screen.fill(BLACK) screen.blit(background, background_rect) all_sprites.draw(screen) # После отрисовки всего, переворачиваем экран pygame.display.flip() pygame.quit() Последний раз редактировалось Kostra231; 04.03.2021 в 14:59. |
05.03.2021, 18:02 | #2 |
Участник клуба
Регистрация: 03.06.2009
Сообщений: 1,834
|
а потом ещё прикрутить фичу, чтоб за угол стрелять...
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Пожалуйста помогите, я новичок. | SanYoka998 | Общие вопросы по Java, Java SE, Kotlin | 2 | 13.12.2017 06:54 |
не могу сделать web страницу под разные мониторы | subbota | HTML и CSS | 4 | 06.08.2010 12:05 |
Очень срочно критически мало времени Пожалуйста, очень надеюсь на вашу помощь. Задачки на Паскале | VADOS2009-1 | Помощь студентам | 0 | 03.06.2009 00:00 |
помогите пожалуйста,не могу сделать.срочняк! | дайкири | Паскаль, Turbo Pascal, PascalABC.NET | 4 | 10.01.2009 16:43 |
Народ,помогите пожалуйста.Объект и иерархию не могу сделать | KirILLA90 | Помощь студентам | 1 | 18.12.2008 20:09 |