import os
import pygame
pygame.init()
screen_x=1920
screen_y=1020
screen=pygame.display.set_mode((screen_x,screen_y))
pygame.display.set_caption("pygame")
clock=pygame.time.Clock()
current_path=os.path.dirname(__file__)
image_path=os.path.join(current_path,"images")
background=pygame.image.load(os.path.join(image_path,"background.png"))
stage=pygame.image.load(os.path.join(image_path,"stage.png"))
stage_size=stage.get_rect().size
stage_y=stage_size[1]
character=pygame.image.load(os.path.join(image_path,"character.png"))
character_size=character.get_rect().size
character_x=character_size[0]
character_y=character_size[1]
character_x_pos=(screen_x/2)-(character_x/2)
character_y_pos=screen_y-character_y-stage_y
character_to_x=0
character_speed=15
weapon1=pygame.image.load(os.path.join(image_path,"weapon1.png"))
weapon1_size=weapon1 . get_rect().size
weapon1_x=weapon1_size[0]
weapon1s=[]
weapon1_speed=22.5
weapon2=pygame.image.load(os.path.join(image_path,"weapon2.png"))
weapon2_size=weapon2.get_rect().size
weapon2_x=weapon2_size[0]
weapon2s=[]
weapon2_speed=10
weapon3=pygame.image.load(os.path.join(image_path,"weapon3.png"))
weapon3_size=weapon3.get_rect().size
weapon3_x=weapon3_size[0]
weapon3s=[]
weapon3_speed=2
weapon_select=0
ball_images=[pygame.image.load(os.path.join(image_path,"ball1.png")),pygame.image.load(os.path.join(image_path,"ball2.png")),pygame.image.load(os.path.join(image_path,"ball3.png")),pygame.image.load(os.path.join(image_path,"ball4.png"))]
ball_speed_y=[-40,-35,-30,-25]
balls=[]
balls.append({"pos_x":50,"pos_y":50,"image_index":0,"to_x":5 ,"to_y" :- 10,"init_speed_y":ball_speed_y[0]})
weapon1_to_remove=-1
weapon2_to_remove=-1
weapon3_to_remove=-1
ball_to_remove=-1
running=True
while running:
dt=clock.tick(150)
for event in pygame.event.get():
if event.type==pygame.QUIT:
running=False
if event.type==pygame.KEYDOWN:
if event.key==pygame.K_LEFT:
character_to_x+=-1*character_speed
if event.key==pygame.K_RIGHT:
character_to_x+=character_speed
if event.key==pygame.K_w:
weapon_select=0
if event.key==pygame.K_a:
weapon_select=1
if event.key==pygame.K_d:
weapon_select=2
if event.key==pygame.K_SPACE:
if weapon_select==0:
weapon1_x_pos=character_x_pos+character_x/2-weapon1_x/2
weapon1_y_pos=character_y_pos
weapon1s.append([weapon1_x_pos,weapon1_y_pos])
if weapon_select==1:
weapon2_x_pos=character_x_pos+character_x/2-weapon2_x/2
weapon2_y_pos=character_y_pos
weapon2s.append([weapon2_x_pos,weapon2_y_pos])
if weapon_select==2:
weapon3_x_pos=character_x_pos+character_x/2-weapon3_x/2
weapon3_y_pos=character_y_pos
weapon3s.append([weapon3_x_pos,weapon3_y_pos])
if event.type==pygame.KEYUP:
if event.key==pygame.K_LEFT:
character_to_x=0
if event.key==pygame.K_RIGHT:
character_to_x=0
character_x_pos+=character_to_x
if character_x_pos<0:
character_x_pos=0
if character_x_pos>screen_x-character_x:
character_x_pos=screen_x-character_x
weapon1s=[[w1[0],w1[1]-weapon1_speed]for w1 in weapon1s]
weapon1s=[[w1[0],w1[1]]for w1 in weapon1s if w1[1]>0]
weapon2s=[[w2[0],w2[1]-weapon2_speed]for w2 in weapon2s]
weapon2s=[[w2[0],w2[1]]for w2 in weapon2s if w2[1]>250]
weapon3s=[[w3[0],w3[1]-weapon3_speed]for w3 in weapon3s]
weapon3s=[[w3[0],w3[1]]for w3 in weapon3s if w3[1]>600]
for ball_index,ball_value in enumerate(balls):
ball_x_pos=ball_value["pos_x"]
ball_y_pos=ball_value["pos_y"]
ball_image_index=ball_value["image_index"]
ball_size=ball_images[ball_image_index].get_rect().size
ball_x=ball_size[0]
ball_y=ball_size[1]
if ball_x_pos<0 or ball_x_pos>screen_x-ball_x:
ball_value["to_x"]=-1*ball_value["to_x"]
if ball_y_pos>screen_y-stage_y-ball_y:
ball_value["to_y"]=ball_value["init_speed_y"]
else:
ball_value["to_y"]+=0.5
ball_value["pos_x"]+=ball_value["to_x"]
ball_value["pos_y"]+=ball_value["to_y"]
character_rect=character.get_rect()
character_rect.left=character_x_pos
character_rect.top=character_y_pos
for ball_index,ball_value in enumerate(balls):
ball_x_pos=ball_value["pos_x"]
ball_y_pos=ball_value["pos_y"]
ball_image_index=ball_value["image_index"]
ball_rect=ball_images[ball_image_index].get_rect()
ball_rect.left=ball_x_pos
ball_rect.top=ball_y_pos
if character_rect.colliderect(ball_rect):
running=False
break
for weapon1_index,weapon1_value in enumerate(weapon1s):
weapon1_x_pos=weapon1_value[0]
weapon1_x_pos=weapon1_value[1]
weapon1_rect=weapon1.get_rect()
weapon1_rect.left=weapon1_x_pos
weapon1_rect.top=weapon1_y_pos
if weapon1_rect.colliderect(ball_rect):
weapon1_to_remove=weapon1_index
ball_to_remove=ball_index
if ball_image_index<3:
ball_width=ball_rect.size[0]
ball_height=ball_rect.size[1]
small_ball_rect=ball_images[ball_image_index+1].get_rect()
small_ball_width=small_ball_rect.size[0]
small_ball_height=small_ball_rect.size[1]
balls.append({"pos_x":ball_x_pos+ball_width/2-small_ball_width/2,"pos_y":ball_y_pos+ball_height/2-small_ball_height/2,"image_index":ball_image_index+1,"to_x":-5,"to_y":-10,"init_speed_y":ball_speed_y[ball_image_index+1]})
balls.append({"pos_x":ball_x_pos+ball_width/2-small_ball_width/2,"pos_y":ball_y_pos+ball_height/2-small_ball_height/2,"image_index":ball_image_index+1,"to_x":5,"to_y":-10,"init_speed_y":ball_speed_y[ball_image_index+1]})
break
for weapon2_index,weapon2_value in enumerate(weapon2s):
weapon2_x_pos=weapon2_value[0]
weapon2_x_pos=weapon2_value[1]
weapon2_rect=weapon2.get_rect()
weapon2_rect.left=weapon2_x_pos
weapon2_rect.top=weapon2_y_pos
if weapon2_rect.colliderect(ball_rect):
weapon2_to_remove=weapon2_index
ball_to_remove=ball_index
if ball_image_index<3:
ball_width=ball_rect.size[0]
ball_height=ball_rect.size[1]
small_ball_rect=ball_images[ball_image_index+1].get_rect()
small_ball_width=small_ball_rect.size[0]
small_ball_height=small_ball_rect.size[1]
balls.append({"pos_x":ball_x_pos+ball_width/2-small_ball_width/2,"pos_y":ball_y_pos+ball_height/2-small_ball_height/2,"image_index":ball_image_index+1,"to_x":-5,"to_y":-10,"init_speed_y":ball_speed_y[ball_image_index+1]})
balls.append({"pos_x":ball_x_pos+ball_width/2-small_ball_width/2,"pos_y":ball_y_pos+ball_height/2-small_ball_height/2,"image_index":ball_image_index+1,"to_x":5,"to_y":-10,"init_speed_y":ball_speed_y[ball_image_index+1]})
break
for weapon3_index,weapon3_value in enumerate(weapon3s):
weapon3_x_pos=weapon3_value[0]
weapon3_x_pos=weapon3_value[1]
weapon3_rect=weapon3.get_rect()
weapon3_rect.left=weapon3_x_pos
weapon3_rect.top=weapon3_y_pos
if weapon3_rect.colliderect(ball_rect):
weapon3_to_remove=weapon3_index
ball_to_remove=ball_index
if ball_image_index<3:
ball_width=ball_rect.size[0]
ball_height=ball_rect.size[1]
small_ball_rect=ball_images[ball_image_index+1].get_rect()
small_ball_width=small_ball_rect.size[0]
small_ball_height=small_ball_rect.size[1]
balls.append({"pos_x":ball_x_pos+ball_width/2-small_ball_width/2,"pos_y":ball_y_pos+ball_height/2-small_ball_height/2,"image_index":ball_image_index+1,"to_x":-5,"to_y":-10,"init_speed_y":ball_speed_y[ball_image_index+1]})
balls.append({"pos_x":ball_x_pos+ball_width/2-small_ball_width/2,"pos_y":ball_y_pos+ball_height/2-small_ball_height/2,"image_index":ball_image_index+1,"to_x":5,"to_y":-10,"init_speed_y":ball_speed_y[ball_image_index+1]})
break
if ball_to_remove>-1:
del balls[ball_to_remove]
ball_to_remove=-1
if weapon1_to_remove>-1:
del weapon1s[weapon1_to_remove]
weapon1_to_remove=-1
if weapon2_to_remove>-1:
del weapon2s[weapon2_to_remove]
weapon2_to_remove=-1
if weapon3_to_remove>-1:
del weapon3s[weapon3_to_remove]
weapon3_to_remove=-1
screen.blit(background,(0,0))
for index,value in enumerate(balls):
ball_x_pos=value["pos_x"]
ball_y_pos=value["pos_y"]
ball_image_index=value["image_index"]
screen.blit(ball_images[ball_image_index],(ball_x_pos,ball_y_pos))
for weapon1_x_pos,weapon1_y_pos in weapon1s:
screen.blit(weapon1,(weapon1_x_pos,weapon1_y_pos))
for weapon2_x_pos,weapon2_y_pos in weapon2s:
screen.blit(weapon2,(weapon2_x_pos,weapon2_y_pos))
for weapon3_x_pos,weapon3_y_pos in weapon3s:
screen.blit(weapon3,(weapon3_x_pos,weapon3_y_pos))
screen.blit(stage,(0,screen_y-stage_y))
screen.blit(character,(character_x_pos,character_y_pos))
pygame.display.update()
pygame.quit()
무기를 추가해서 다음과 같은 코드를 짰는데 정작 공이 무기에 닿았을 때는 아무일도 없고 다른 데 있을 때 발사하면 쪼개지네요......왜이러는걸까요?