-
카테고리
-
세부 분야
게임 프로그래밍
-
해결 여부
미해결
공 쪼개기 문제
22.08.22 16:55 작성 조회수 158
0
-
import osimport pygamepygame.init()screen_x=1920screen_y=1020screen=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().sizestage_y=stage_size[1]character=pygame.image.load(os.path.join(image_path,"character.png"))character_size=character.get_rect().sizecharacter_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_ycharacter_to_x=0character_speed=15weapon1=pygame.image.load(os.path.join(image_path,"weapon1.png"))weapon1_size=weapon1 . get_rect().sizeweapon1_x=weapon1_size[0]weapon1s=[]weapon1_speed=22.5weapon2=pygame.image.load(os.path.join(image_path,"weapon2.png"))weapon2_size=weapon2.get_rect().sizeweapon2_x=weapon2_size[0]weapon2s=[]weapon2_speed=10weapon3=pygame.image.load(os.path.join(image_path,"weapon3.png"))weapon3_size=weapon3.get_rect().sizeweapon3_x=weapon3_size[0]weapon3s=[]weapon3_speed=2weapon_select=0ball_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=-1weapon2_to_remove=-1weapon3_to_remove=-1ball_to_remove=-1running=Truewhile running:dt=clock.tick(150)for event in pygame.event.get():if event.type==pygame.QUIT:running=Falseif event.type==pygame.KEYDOWN:if event.key==pygame.K_LEFT:character_to_x+=-1*character_speedif event.key==pygame.K_RIGHT:character_to_x+=character_speedif event.key==pygame.K_w:weapon_select=0if event.key==pygame.K_a:weapon_select=1if event.key==pygame.K_d:weapon_select=2if event.key==pygame.K_SPACE:if weapon_select==0:weapon1_x_pos=character_x_pos+character_x/2-weapon1_x/2weapon1_y_pos=character_y_posweapon1s.append([weapon1_x_pos,weapon1_y_pos])if weapon_select==1:weapon2_x_pos=character_x_pos+character_x/2-weapon2_x/2weapon2_y_pos=character_y_posweapon2s.append([weapon2_x_pos,weapon2_y_pos])if weapon_select==2:weapon3_x_pos=character_x_pos+character_x/2-weapon3_x/2weapon3_y_pos=character_y_posweapon3s.append([weapon3_x_pos,weapon3_y_pos])if event.type==pygame.KEYUP:if event.key==pygame.K_LEFT:character_to_x=0if event.key==pygame.K_RIGHT:character_to_x=0character_x_pos+=character_to_xif character_x_pos<0:character_x_pos=0if character_x_pos>screen_x-character_x:character_x_pos=screen_x-character_xweapon1s=[[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().sizeball_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.5ball_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_poscharacter_rect.top=character_y_posfor 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_posball_rect.top=ball_y_posif character_rect.colliderect(ball_rect):running=Falsebreakfor 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_posweapon1_rect.top=weapon1_y_posif weapon1_rect.colliderect(ball_rect):weapon1_to_remove=weapon1_indexball_to_remove=ball_indexif 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]})breakfor 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_posweapon2_rect.top=weapon2_y_posif weapon2_rect.colliderect(ball_rect):weapon2_to_remove=weapon2_indexball_to_remove=ball_indexif 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]})breakfor 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_posweapon3_rect.top=weapon3_y_posif weapon3_rect.colliderect(ball_rect):weapon3_to_remove=weapon3_indexball_to_remove=ball_indexif 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]})breakif ball_to_remove>-1:del balls[ball_to_remove]ball_to_remove=-1if weapon1_to_remove>-1:del weapon1s[weapon1_to_remove]weapon1_to_remove=-1if weapon2_to_remove>-1:del weapon2s[weapon2_to_remove]weapon2_to_remove=-1if weapon3_to_remove>-1:del weapon3s[weapon3_to_remove]weapon3_to_remove=-1screen.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()무기를 추가해서 다음과 같은 코드를 짰는데 정작 공이 무기에 닿았을 때는 아무일도 없고 다른 데 있을 때 발사하면 쪼개지네요......왜이러는걸까요?
답변을 작성해보세요.
답변 0