import pygame
import sys
import random
import time
from pygame.locals import *
# Pygame 초기화
pygame.init()
# 화면 크기 설정
WIDTH = 1000
HEIGHT = 600
# 디스플레이 생성 및 설정
display = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Title")
clock = pygame.time.Clock()
# 색상 배열 (사용되지 않음)
col_arr = [(255, 0, 0), (0, 255, 0), (0, 0, 255)]
col = 0
# 게임 실행 여부 플래그
run = True
# 카메라 위치 (사용되지 않음)
cam_pos = [0, 0]
# 공의 초기 위치, 속도, 가속도, 크기 설정
ball_pos = [100, 300]
ball_v = 0
ball_a = 0
ball_size = 10
# 시간 및 점수 초기화 (사용되지 않거나 수정됨)
t = 0
point = 0
# 벽 배열 초기화
wall_arr = []
# 메인 게임 루프
while run:
# 프레임 레이트 설정 (60 FPS)
clock.tick(60)
# 화면 초기화
display.fill((0, 0, 0))
# 이벤트 처리
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False # 게임 종료
#_________
#___________
# 일정 시간마다 벽 생성
if point % 30 == 0:
# 벽은 화면 오른쪽 끝에서 생성되어 왼쪽으로 이동
wall_x = WIDTH
wall_y = random.randint(0, HEIGHT - 90)
wall_size = random.randint(10, 90)
wall_arr.append([wall_x, wall_y, wall_size])
# 삭제할 벽의 인덱스를 저장할 리스트
del_arr = []
# 벽 이동 및 그리기
for i in range(len(wall_arr)):
wall = wall_arr[i]
wall_rect = pygame.Rect(int(wall[0]), int(wall[1]), wall[2], wall[2])
pygame.draw.rect(display, (255, 255, 255), wall_rect)
wall[0] -= 10 # 벽을 왼쪽으로 이동
# 공과 벽의 충돌 감지
ball_rect = pygame.Rect(int(ball_pos[0] - ball_size), int(ball_pos[1] - ball_size), ball_size * 2, ball_size * 2)
if ball_rect.colliderect(wall_rect):
time.sleep(1) # 충돌 시 잠시 대기
run = False # 게임 종료
# 벽이 화면 밖으로 나가면 삭제 목록에 추가
if wall[0] + wall[2] <= 0:
del_arr.append(i)
# 화면 밖으로 나간 벽 삭제
for i in reversed(del_arr):
del wall_arr[i]
# 점수 증가 (현재는 프레임당 1점 증가)
point += 1
# 점수 표시
font = pygame.font.SysFont(None, 30)
score_text = font.render(str(point), True, (255, 255, 255))
display.blit(score_text, (100, 100))
# 화면 업데이트
pygame.display.update()
# 게임 종료 처리
pygame.quit()
sys.exit()
import pygame, sys
from pygame.locals import *
import random
import time
pygame.init()
WIDTH = 1000
HEIGHT = 600
display = pygame.display.set_mode((WIDTH,HEIGHT))
pygame.display.set_caption("Title")
clock = pygame.time.Clock()
col_arr = [(255, 0, 0),(0, 255, 0),(0, 0, 255)]
col = 0
run = True
cam_pos = [0,0]
ball_pos = [100,300]
ball_v = 0
ball_a = 0
t = 0
tJump = 0 #없애주세요!!!!!!!!!
point = 0
wall_arr = []
while run:
clock.tick(900)
display.fill((0,0,0))
'''
# 키 상태를 지속적으로 확인
keys = pygame.key.get_pressed()
if keys[pygame.K_DOWN]: # 예시로 아래 방향키로 설정
ball_a = -9.8
else:
ball_a = 9.8
'''
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
elif event.type == pygame.KEYDOWN:
ball_a = -9.8 # 아무 키나 눌렀을 때 가속도 변경
elif event.type == pygame.KEYUP:
ball_a = 9.8 # 키를 떼면 가속도를 원래 값으로 복원
ball_v += ball_a * 0.017
ball_pos[1] += ball_v * 0.017
if ball_pos[1] >600:
ball_pos[1] = 0
elif ball_pos[1] < 0:
ball_pos[1] = 600
pygame.draw.circle(display, (255,0,0), ball_pos, 10)
if pygame.time.get_ticks()%400==0:
wall_arr.append([1000,random.randint(0,600),random.randint(10,90)])
del_arr = []
for i in range(len(wall_arr)):
pygame.draw.rect(display, (255,255,255), (wall_arr[i][0],wall_arr[i][1],wall_arr[i][2],wall_arr[i][2]))
wall_arr[i][0] -= 1
if 100 >= wall_arr[i][0] >=0:
if ball_pos[1]-5<wall_arr[i][1]<ball_pos[1]+5:
time.sleep(5)
run = False
if wall_arr[i][0] <= 0:
del_arr.append(i)
for i in reversed(del_arr):
del wall_arr[i]
point += 1
font = pygame.font.SysFont(None,30)
myText = font.render(str(point), True, (255,255,255)) #(Text,anti-alias, color)
display.blit(myText, (100,100)) #(글자변수, 위치)
pygame.display.update()
pygame.quit()
sys.exit()
공 움직임 처리 과정
1.키를 누르면 공을 위로 가속
1. 키를 떼면 중력 적용
예) 키를 누르면 공의 가속도를 -9.8로 정함
키를 떼면 공의 가속도를 9.8로 정함
(y좌표가 반대로 작용하기 때문)
(이벤트: pygame.KEYDOWN
pygame.KEYUP)
2. 가속도에 따라 공의 속도 및 위치 업데이트
(공이 화면 밖으로 나가면 반대쪽에서 나타나도록 처리하면 더욱 좋아용)
3. 공 그리기(pygame.draw.circle())
```python
# 공의 초기 위치, 속도, 가속도, 크기 설정
ball_pos = [100, 300]
ball_v = 0
ball_a = 0
ball_size = 10
추가된 변수: ball_v, ball_a
다른 변수나 함수는 마음껏 추가하셔도 됩니다.