Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Ai
- 타자연습게임
- 부에노비스타 소셜클럽
- 매트로폴리탄
- 운석피하기 게임
- openAI
- 나는 매트로폴리탄 미술관 경비원입니다.
- 단어가 품은 세계
- comfyui
- 에르난 디아스
- Gym
- 타이핑 몬스터
- 황선엽
- 아무도 없는 숲속에서
- 나는 스물일곱 2등 항해사입니다.
- 게임개발
- 쿠바전통음악
- 숨결이 바람이 될 때
- 트렌드코리아2025
- gymnasium
- pygame
- Stable diffusion
- 시집
- frozen lake
- 고양이발 살인사건
- 타이핑좀비
- Python
- 어른의 행복은 조용하다
- 운석 피하기 게임
- 인생의 해상도
Archives
- Today
- Total
스푸79 기록 보관소
운석 피하기 게임 개발(5)- 배경 넣기(feat. ChatGPT) 본문
오늘은 기존 코드에 배경을 추가할 생각이다.
여러 개의 별이 위에서 아래로 흐르는 배경을 넣어서
우주 공간에서 속도감 있게 움직이는 효과를 줄 생각이다.
깔끔하게 ChatGPT에게 물어보면서 개발에 시작 하겠다.
ChatGPT가 보여준 코드는 아래와 같다.
class Star:
def __init__(self):
self.x = random.randint(0, screen_width)
self.y = random.randint(-20, screen_height)
self.speed = random.randint(1, 5)
self.size = random.randint(1, 2)
def move(self):
self.y += self.speed
if self.y > screen_height:
self.y = random.randint(-20, -10)
self.x = random.randint(0, screen_width)
self.speed = random.randint(1, 5)
self.size = random.randint(1, 2)
def draw(self, screen):
pygame.draw.circle(screen, white, (self.x, self.y), self.size)
stars = [Star() for _ in range(100)]
..중략..
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# 화면 채우기 (배경색)
screen.fill(black)
# 별 그리기 및 이동
for star in stars:
star.move()
star.draw(screen)
ChatGPT코드를 바로 실행해 보았다.
역시 갓GPT...
코드는 크게 수정할 부분은 없어 보인다.
코드를 보면 100개의 별을 생성하고
화면 끝까지 이동한 경우
다시 위치를 시작 위치로 y값을 바꾼 후 x값은 랜덤하게 바꾸도록 처리했다.
self.size = random.randint(1, 5)
이 부분만 최대값을 5에서 2로 변경했다.
그리고 너무 속도가 일정한 것 같다는 생각이 들어 25퍼센트의 확률로 아주 빠른 별이 지나가도록 처리했다.
기존 main.py와 enviroment.py와 연계되서 작동될 수 있도록 코드를 조금 더 수정했다.
아래 코드를 보자.
enviroment.py에 배경 별 생성과 관련된 전역변수를 추가했다.
import os
class Enviroment:
.. (중략) ..
TOTAL_STARS_COUNT = 101 #최대 생성 갯수
MIN_STARS_SPEED = 1 #일반 별 최소 속도
MAX_STARS_SPEED = 3 #일반 별 최대 속도
UTRLA_STARS_SPEED = 6 #빠른 별 속도
UTRLA_SPEED_CHANCE = 25 #빠른 별 생성하는 확률
.. (중략) ..
아래는 main.py 코드 수정한 부분이다.
멤버변수 self.background에 Background 클래스를 개체를 선언했다.
배경으로 별이 처리되려면 메인 캐릭터보다 먼저 그려져야 해서 순서는 background가 먼저 draw되도록 처리했다.
.. (중략) ..
from background import Background #배경 처리를 위한 Background 클래스 import
class Main():
def __init__(self):
... (중략) ...
self.background = Background() #Main 클래스에 background 멤버변수 선언
def play(self):
while self.running:
.. (중략) ..
self.screen.fill(env.BLACK)
self.background.draw(self.screen) # 별이 메인캐릭터보다 먼저 그려지도록 처리
self.player_sprites.draw(self.screen)
.. (중략) ..
아래 background.py 전체 코드이다. 하드코딩을 배제하기 위해 전역변수를 많이 활용했다.
import pygame
import random
from enviroment import Enviroment as env
class Background:
def __init__(self):
self.stars = [Star() for _ in range(env.TOTAL_STARS_COUNT)]
def draw(self, screen):
for star in self.stars:
star.move()
star.draw(screen)
class Star:
def __init__(self):
self.x = random.randint(0, env.WIDTH)
self.y = random.randint(-10, env.HEIGHT)
self.speed = random.randint(env.MIN_STARS_SPEED, env.MAX_STARS_SPEED)
self.size = 1
def move(self):
self.y += self.speed
if self.y > env.HEIGHT:
self.y = random.randint(-10, -5)
self.x = random.randint(0, env.WIDTH)
self.speed = self.init_stars()
def init_stars(self):
if random.randint(1, env.UTRLA_SPEED_CHANCE) == 1:
speed = env.UTRLA_STARS_SPEED
else:
speed = random.randint(env.MIN_STARS_SPEED, env.MAX_STARS_SPEED)
return speed
def draw(self, screen):
pygame.draw.circle(screen, env.WHITE, (self.x, self.y), self.size)
최종 실행한 결과는 아래와 같다.
'게임공작소' 카테고리의 다른 글
운석 피하기 게임 개발(7)- 운석 처리(2) (0) | 2024.08.28 |
---|---|
운석 피하기 게임 개발(6)- 운석 처리(1) (1) | 2024.08.26 |
운석 피하기 게임 개발(4)- 전역변수 설정 (0) | 2024.08.23 |
운석 피하기 게임 개발(3)- 움직임과 Frame (feat. ChatGPT) (1) | 2024.08.21 |
운석 피하기 게임 개발(2)- 기본화면 (feat. ChatGPT) (0) | 2024.08.19 |