일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- Python
- HTML
- ndarray
- Sheety
- 파이썬
- Game
- 쉬티
- 프로젝트
- 오류
- API플랫폼
- 파싱
- twilio
- API
- 최저가
- Endpoint
- Pygame
- udemy
- 부트스트랩
- 웹크롤링
- Tequila
- 게임
- SMTP
- 프로그램
- 유데미
- 상태코드
- 계산기
- HTTP
- class
- 웹페이지
- phython
Archives
- Today
- Total
데이터 분석가
우주 외계인 침공 게임(Udemy Project 12) 본문
안녕하세요 !
이번 시간에는 space invader이라는 게임을 파이썬으로 구현해보겠습니다 !
https://elgoog.im/space-invaders/
사실 게임은 단순합니다
이전에 작성하였던 turtle race 게임 등등 제가 만들었던 게임과 유사하게 pygame을
이용해서 만들게 됩니다 !
일단 코드는 다음과 같습니다.
저는 player, alien 이미지를 지정 폴더에 업로드 후 이를 이용해
웹을 불러와 게임을 실행합니다.
일단 게임 코드는 이렇습니다
import pygame
import random
# 게임 화면 크기
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
# 색상 정의
WHITE = (255, 255, 255)
BLUE = (0, 0, 255)
YELLOW = (255, 255, 0)
# 플레이어 설정
PLAYER_WIDTH = 64
PLAYER_HEIGHT = 64
PLAYER_SPEED = 5
# 외계인 설정
ALIEN_WIDTH = 64
ALIEN_HEIGHT = 64
ALIEN_SPEED = 2
ALIEN_ROWS = 5
ALIEN_COLS = 8
# 레이저 설정
LASER_WIDTH = 10
LASER_HEIGHT = 30
LASER_SPEED = 8
# 초기화
pygame.init()
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption("Space Invaders")
clock = pygame.time.Clock()
# 이미지 로드
player_img = pygame.image.load("Rokect.png").convert_alpha()
alien_img = pygame.image.load("alien.png").convert_alpha()
# 플레이어 클래스
class Player(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
self.image = pygame.transform.scale(player_img, (PLAYER_WIDTH, PLAYER_HEIGHT))
self.rect = self.image.get_rect()
self.rect.x = SCREEN_WIDTH // 2 - PLAYER_WIDTH // 2
self.rect.y = SCREEN_HEIGHT - PLAYER_HEIGHT - 10
self.speed = PLAYER_SPEED
def update(self):
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT] and self.rect.x > 0:
self.rect.x -= self.speed
if keys[pygame.K_RIGHT] and self.rect.x < SCREEN_WIDTH - PLAYER_WIDTH:
self.rect.x += self.speed
# 외계인 클래스
class Alien(pygame.sprite.Sprite):
def __init__(self, x, y):
super().__init__()
self.image = pygame.transform.scale(alien_img, (ALIEN_WIDTH, ALIEN_HEIGHT))
self.rect = self.image.get_rect()
self.rect.x = x
self.rect.y = y
self.speed = ALIEN_SPEED
def update(self):
self.rect.x += self.speed
if self.rect.x <= 0 or self.rect.x >= SCREEN_WIDTH - ALIEN_WIDTH:
self.speed *= -1
self.rect.y += ALIEN_HEIGHT
# 레이저 클래스
class Laser(pygame.sprite.Sprite):
def __init__(self, x, y):
super().__init__()
self.image = pygame.Surface((LASER_WIDTH, LASER_HEIGHT))
self.image.fill(YELLOW)
self.rect = self.image.get_rect()
self.rect.x = x
self.rect.y = y
self.speed = LASER_SPEED
def update(self):
self.rect.y -= self.speed
if self.rect.y < 0:
self.kill()
# 게임 시작
def game():
all_sprites = pygame.sprite.Group()
aliens = pygame.sprite.Group()
lasers = pygame.sprite.Group()
player = Player()
all_sprites.add(player)
for row in range(ALIEN_ROWS):
for col in range(ALIEN_COLS):
alien = Alien(100 + col * (ALIEN_WIDTH + 10), 100 + row * (ALIEN_HEIGHT + 10))
all_sprites.add(alien)
aliens.add(alien)
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_SPACE:
laser = Laser(player.rect.centerx - LASER_WIDTH // 2, player.rect.y)
all_sprites.add(laser)
lasers.add(laser)
all_sprites.update()
# 외계인과 레이저 충돌 체크
hits = pygame.sprite.groupcollide(aliens, lasers, True, True)
for hit_aliens in hits.values():
for _ in hit_aliens:
new_alien = Alien(random.randint(0, SCREEN_WIDTH - ALIEN_WIDTH), random.randint(-500, -ALIEN_HEIGHT))
all_sprites.add(new_alien)
aliens.add(new_alien)
# 외계인이 플레이어에 도달하면 게임 종료
if pygame.sprite.spritecollide(player, aliens, True):
running = False
screen.fill(BLUE)
all_sprites.draw(screen)
pygame.display.flip()
clock.tick(60)
pygame.quit()
if __name__ == '__main__':
game()
플레이어는 방향키를 이용해 움직일 수 있고 스페이스 바를 이용해 공격을 합니다
그리고 외계인들이 플레이어에 닿기 전에 모두 제거를 해야합니다 !
다음과 같이 게임을 할 수 있습니다 !
조금 간단하게 구현을 하였는데, 설정을 조금 더 복잡하고 어렵게 할 수 있습니다 !
'유데미 부트캠프 프로젝트(Final)' 카테고리의 다른 글
변수 회귀분석을 통한 수익예측(Udemy final project) (0) | 2023.07.08 |
---|---|
주식 데이터 API 서비스 (Udemy project 13) (0) | 2023.07.02 |
MLB 선수들 데이터 스크래핑(Udemy Project 11) (0) | 2023.07.01 |
이미지 파일 색상 분석 (Udemy Project 10) (0) | 2023.06.30 |
PDF파일 음성 변환 Pdf2Voice (Udemy Project 9) (0) | 2023.06.29 |
Comments