무료
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결파이썬 무료 강의 (활용편1) - 추억의 오락실 게임 만들기 (3시간)
import pygame에서 계속 오류가 발생해요
cmd에서 import pygame했을 때는 오류없이 제대로 됐는데 Vs code에서 import pygame을 하면 이런 오류가 계속해서 발생합니다.어떻게 해야되나요?Exception has occurred: ModuleNotFoundError No module named 'pygame' File "C:\Users\User\Desktop\PythonWorkspace\pygame_basic\1_create_frame.py", line 1, in <module> import pygame ModuleNotFoundError: No module named 'pygame'
- 미해결파이썬 무료 강의 (활용편1) - 추억의 오락실 게임 만들기 (3시간)
무기 Y포지션 speed 감소
무기 위치 조정 할 때, weapone의 y 좌표를 줄여 나감으로 위로 쏘아 올리는 건 이해 하는데, 만약 weapones에 [[10,50],[10,40]]이라는 무기 포지션이 있다면, 아래 코드를 만나서 (speed가 10이라면)weapons=[[w[0],w[1]-weapone-speed] for w in weapons10,50 ->10,40이 되고 아래 코드를 만나서 for weapone_x_pos, weapone_y_pos in weapones: screen.blit(weapone,(weapone_x_pos, weapone_y_pos))10,40을 그려주고 다시 weapons=[[w[0],w[1]-weapone-speed] for w in weapons 이 코드로 올라가서 10,30이 되고 또 10,30을 그려주고 이걸 반복하는 건가요..? *리스트의 첫 번째 인덱스로 (10,40)이 되어 그려주고 두번째 인덱스로 넘어가서 (10,30)이 되어 그려주고 이걸 반복할 것 같은데 첫 번째 인덱스의 weapone-speed가 계속 반복 되는 게 이해가 안되요ㅠㅠ*제 질문이 이해가 안가실 것 같기는 한데 이런 고민 해 보신 분 없으실까요?
- 미해결파이썬 무료 강의 (활용편1) - 추억의 오락실 게임 만들기 (3시간)
pygame 공부
강의로 맛을 보시고 더 깊에 공부하고 싶으면 따로 공부를 해야한다고 하셨는데 pygame을 어디서 공부하나요? ㅠ
- 미해결파이썬 무료 강의 (활용편1) - 추억의 오락실 게임 만들기 (3시간)
마지막 부분 스프라이트가 맨 왼쪽에 위치해있습니다
(screen_width / 2) - (screen_width / 2) 했는데 캐릭터가 맨 왼쪽에 있습니다
- 미해결파이썬 무료 강의 (활용편1) - 추억의 오락실 게임 만들기 (3시간)
공 쪼개기 문제
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() 무기를 추가해서 다음과 같은 코드를 짰는데 정작 공이 무기에 닿았을 때는 아무일도 없고 다른 데 있을 때 발사하면 쪼개지네요......왜이러는걸까요?
- 미해결파이썬 무료 강의 (활용편1) - 추억의 오락실 게임 만들기 (3시간)
실행시 글자가 깨집니다.
코드 실행시 터미널 부분에 글자가 깨져서 나옵니다. 인코딩을 변경하여 진행하면, 실행이 안되고요...
- 미해결파이썬 무료 강의 (활용편1) - 추억의 오락실 게임 만들기 (3시간)
키보드 이벤트 오류
- import pygame pygame.init() screen_width = 480 screen_height = 640 screen = pygame.display.set_mode((screen_width, screen_height)) pygame.display.set_caption("Nado game") background = pygame.image.load("C:/Users/james/OneDrive - YutouCat/바탕 화면/python_workspace/ppygame_basic/background.png") character = pygame.image.load("C:/Users/james/OneDrive - YutouCat/바탕 화면/python_workspace/ppygame_basic/character.png") character_size = character.get_rect().size character_width = character_size[0] character_height = character_size[1] character_x_pos = (screen_width / 2) - (character_width / 2) character_y_pos = screen_height - character_height to_x = 0 to_y = 0 running = True while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False if event.type == pygame.KEYDOWN: if event.key == pygame.K_LEFT: to_x -= 5 elif event.key == pygame.K_RIGHT: to_x += 5 elif event.key == pygame.K_UP: to_y -= 5 elif event.key == pygame.K_DOWN: to_y += 5 if event.type == pygame.KEAUP: if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT: to_x = 0 elif event.key == pygame.K_UP or event.key == pygame.K_DOWN: to_y = 0 character_x_pos += to_x character_y_pos += to_y screen.blit(background, (0, 0)) screen.blit(character, (character_x_pos, character_y_pos)) pygame.display.update() <-- pygame.quit <--- 이줄이 오류나요
- 미해결파이썬 무료 강의 (활용편1) - 추억의 오락실 게임 만들기 (3시간)
스크린의 높이를 680으로 설정했을 때 오류?
제가 코드를 짤 때 실수로 스크린의 높이를 680으로 설정해 놓고 만들었었는데 이때 똥의 의미지가 화면 밑에 계속해서 쌓이는 현상이 일어났었습니다. 그래서 똥의 이미지를 계속해서 밑으로 내려가게끔 해보았는데 이러한 상황에서 똥의 이미지가 스크린 하단에서 멈춰 있었습니다. 그리고 스크린 높이를 다시 640으로 수정하니 이러한 상황이 없어졌습니다. 이러한 현상이 일어나는 이유를 알 수 있을까요??? 그리고 항상 좋은 강의 잘 듣고 있습니다. 감사합니다.
- 미해결파이썬 무료 강의 (활용편1) - 추억의 오락실 게임 만들기 (3시간)
pygame.time.get_ticks() 질문있습니다.
프로그램중 이부분이 이해가 안갑니다. 강사님은 두번째 줄처럼 프로그램하셨는데 start_ticks() 에도 pygame.time.get_ticks()이 들어있는데 왜 pygame.time.get_ticks()에서 pygame.time.get_ticks()을 왜 빼주는것인지요? 첫번째 줄처럼 프로그램해도 출력은 똑같은데 왜 두번째 줄처럼 하시는지 알수있을까요?
- 미해결파이썬 무료 강의 (활용편1) - 추억의 오락실 게임 만들기 (3시간)
캐릭터의 이동
이거는 왜 안되나요 ...! to_x, to_y없이 그대로 좌표에 가감을 해주면 KEY UP 조건을 생각할 필요 없이 바로바로 캐릭터가 움직일 수 있지 않나요,,.?
- 미해결파이썬 무료 강의 (활용편1) - 추억의 오락실 게임 만들기 (3시간)
적(똥)과 케릭터가 충돌했을 때 게임 오버가 뜨게 만들려고..
적(똥)과 케릭터가 충돌했을 때 게임 오버가 뜨게 만들려고 game_fount = pygame.font.Font(None, 40) gameover = game_fount.render(('game over'), True, (255, 255, 255)) 이렇게 게임 초기화 부분에 만들고 if character_rect.colliderect(enemy_rect): screen.blit(gameover, ((screen_width / 2), (screen_height / 2))) 충돌시 게임 오버 뜨도록 넣어봤는데 충돌인식이 안되는것같아요
- 미해결파이썬 무료 강의 (활용편1) - 추억의 오락실 게임 만들기 (3시간)
시작을 하기에 앞서...
1. pygame 설치를 따로 받아야하는건가요? 2. 아니라면 import pygame을 하였을 때 PS C:\Users\rlagu\Desktop\python> & C:/Users/rlagu/AppData/Local/Programs/Python/Python39/python.exe "c:/Users/rlagu/Desktop/파이썬 활용/pygame_basic/1_create_frame.py" Traceback (most recent call last): File "c:\Users\rlagu\Desktop\파이썬 활용\pygame_basic\1_create_frame.py", line 1, in <module> ModuleNotFoundError: No module named 'pygame' 이렇게 나오는데 어떻게 해야하는지 궁금합니다. 3. pip install pygame 이라고 치면 pip : 'pip' 용어가 cmdlet, 함수, 스크립트 파일 또는 실행할 수 있는 프로그램 이름으로 인식되지 않습니다. 이름이 정확한지 확인하고 경로가 포함된 경우 경로가 올바른지 검증한 다음 다시 시도하십시오. 위치 줄:1 문자:1 + pip install pygame + ~~~ + CategoryInfo : ObjectNotFound: (pip:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException 이렇게 나오는데 어떻게 해야할지 ..ㅜㅜ
- 미해결파이썬 무료 강의 (활용편1) - 추억의 오락실 게임 만들기 (3시간)
이미지 배경을 투명하게 하려면?
버블 이미지를 다운로드 받아서 그림판에서 '투명하게 처리' 를 선택하여 다른 이름으로 저장했는데 투명해지지가 않네요. 아시는 분 계신가요?
- 미해결파이썬 무료 강의 (활용편1) - 추억의 오락실 게임 만들기 (3시간)
파이게임이 실행은 되는데....
파이게임이 실행되긴 하는데 screen width가 자동완성도 안되고 오류가 나요ㅠㅠ
- 미해결파이썬 무료 강의 (활용편1) - 추억의 오락실 게임 만들기 (3시간)
실행이 안됩니다.
작성한 코드 import pygame pygame.init() # 초기화 (반드시 필요) # 화면 크기 설정 screen_width = 480 # 가로 크기 screen_height = 640 # 세로 크기 screen = pygame.display.set_mode((screen_width, screen_height)) # 화면 타이틀 설정 pygame.display.set_caption("dddd") # 게임 이름 # FPS clock = pygame.time.Clock() # 배경 이미지 불러오기 background = pygame.image.load("C:/Users/zxc65/OneDrive/바탕 화면/PythonWorkspace/pygame_basic/background.png") # 캐릭터(스프라이트) 불러오기 character = pygame.image.load("C:/Users/zxc65/OneDrive/바탕 화면/PythonWorkspace/pygame_basic/character.png") character_size = character.get_rect().size # 이미지의 크기를 구해옴 character_width = character_size[0] # 캐릭터의 가로 크기 character_height = character_size[1] # 캐릭터의 세로 크기 character_x_pos = (screen_width / 2) - (character_width / 2) # 화면 가로의 절반 크기에 해당하는 곳에 위치 (가로) character_y_pos = screen_height - character_height # 화면 세로 크기 가장 아래에 해당하는 곳에 위치 (세로) # 이동할 좌표 to_x = 0 to_y = 0 # 이동 속도 character_speed = 0.6 # 적 캐릭터 enemy = pygame.image.load("C:/Users/zxc65/OneDrive/바탕 화면/PythonWorkspace/pygame_basic/enemy.png") enemy_size = enemy.get_rect().size # 이미지의 크기를 구해옴 enemy_width = enemy_size[0] # 캐릭터의 가로 크기 enemy_height = enemy_size[1] # 캐릭터의 세로 크기 enemy_x_pos = (screen_width / 2) - (enemy_width / 2) # 화면 가로의 절반 크기에 해당하는 곳에 위치 (가로) enemy_y_pos = (screen_height / 2) - (enemy_height / 2) # 화면 세로 크기 가장 아래에 해당하는 곳에 위치 (세로) # 이벤트 루프 running = True # 게임이 진행중인가? while running: dt = clock.tick(60) # 게임화면의 초당 프레임 수를 설정 for event in pygame.event.get(): # 어떤 이벤트가 발생하였는가? if event.type == pygame.QUIT: # 창이 닫히는 이벤트가 발생하였는가? running = False # 게임이 진행중이 아님 if event.type == pygame.KEYDOWN: # 키가 눌러졌는지 확인 if event.key == pygame.K_LEFT: # 캐릭터를 왼쪽으로 to_x -= character_speed # to_x = to_x - 5 elif event.key == pygame.K_RIGHT: # 캐릭터를 오른쪽으로 to_x += character_speed elif event.key == pygame.K_UP: # 캐릭터를 위로 to_y -= character_speed elif event.key == pygame.K_DOWN: # 캐릭터를 아래로 to_y += character_speed if event.type == pygame.KEYUP: # 방향키를 때면 멈춤 if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT: to_x = 0 elif event.key == pygame.K_UP or event.key == pygame.K_DOWN: to_y = 0 character_x_pos += to_x * dt character_y_pos += to_y * dt # 가로 경계값 처리 if character_x_pos < 0: character_x_pos = 0 elif character_x_pos > screen_width - character_width: character_x_pos = screen_width - character_width # 세로 경계값 처리 if character_y_pos < 0: character_y_pos = 0 elif character_y_pos > screen_height - character_height: character_y_pos = screen_height - character_height # 충돌 처리를 위한 rect 정보 업데이트 character_rect = character.get_rect() character_rect.left = character_x_pos character_rect.top = character_y_pos enemy_rect = enemy.get.rect() # enemy_rect.left = enemy_x_pos # enemy_rect.top = enemy_y_pos # 충돌 체크 if character_rect.colliderect(enemy_rect): print("충돌했어요") running = False screen.blit(background, (0, 0)) # 배경 그리기 screen.blit(character, (character_x_pos, character_y_pos)) # 캐릭터 그리기 screen.blit(enemy, (enemy_x_pos, enemy_y_pos)) # 적 그리기 pygame.display.update() # 게임화면을 다시 그리기 # pygame 종료 pygame.quit() 터미널 출력 File "c:/Users/zxc65/OneDrive/바탕 화면/PythonWorkspace/pygame_basic/6_collision.py", line 88, in <module> enemy_rect = enemy.get.rect() AttributeError: 'pygame.Surface' object has no attribute 'get' PS C:\Users\zxc65\OneDrive\바탕 화면\PythonWorkspace> 싱행을 하면 꺼집니다 5.frame per second py는 작동 잘됩니다. 틀린 부분이 있으면 지적 부탁드립니다. 또는 자체의 문제라면 이 진도까지의 파일 부탁드립니다. email: dbxbqm6531@gmail.com (영어로 한글 자판 그대로 유튜브6531@gmail.com)
- 미해결파이썬 무료 강의 (활용편1) - 추억의 오락실 게임 만들기 (3시간)
똑같이 따라 쳤는데 오류가 생겨요
나도코딩님처럼 똑같이 쳤는데 NameError: name 'ball_to_remove' is not defined 이런 오류가 떠여 도와주세요 ㅠㅠ import os import pygame ######################################################### # 기본 초기화 (반드시 해야 하는 것들) pygame.init() # 초기화 (반드시 필요) # 화면 크기 설정 screen_width = 640 # 가로 크기 screen_height = 480 # 세로 크기 screen = pygame.display.set_mode((screen_width, screen_height)) # 화면 타이틀 설정 pygame.display.set_caption("서준이의 게임2") #게임 이름 # FPS clock = pygame.time.Clock() ######################################################### # 1. 사용자 게임 초기화 (배경 화면, 게임 이미지, 좌표, 속도, 폰트 등) current_path = os.path.dirname(__file__) # 현재 파일의 위치 반환 image_path = os.path.join(current_path, "images") # 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_height = stage_size[1] # 스테이지의 높이 위에 캐릭터를 두기 위해 사용 # 캐릭터 만들기 character = pygame.image.load(os.path.join(image_path, "character.png")) character_size = character.get_rect().size character_width = character_size[0] character_height = character_size[1] character_x_pos =(screen_width /2) - (character_width /2) character_y_pos = screen_height - character_height - stage_height # 캐릭터 이동 방향 character_to_x = 0 # 캐릭터 이동 속도 character_speed = 5 # 무기 만들기 weapon = pygame.image.load(os.path.join(image_path, "weapon.png")) weapon_size = weapon.get_rect().size weapon_width = weapon_size[0] # 무기는 한 번에 여러 발 발사 가능 weapons = [] # 무기 이동 속도 weapon_speed = 10 # 공 만들기 (4개 크기에 대해 따로 처리) ball_images = [ pygame.image.load(os.path.join(image_path, "balloon1.png")), pygame.image.load(os.path.join(image_path, "balloon2.png")), pygame.image.load(os.path.join(image_path, "balloon3.png")), pygame.image.load(os.path.join(image_path, "balloon4.png"))] # 공 크기에 따른 최초 스피드 ball_speed_y = [-18, -15, -12, -9] # index 0, 1, 2, 3 에 해당하는 값 # 공들 balls= [] # 최초 발생하는 큰 공 추가 balls.append({ "pos_x" : 50, # 공의 x 좌표 "pos_y" : 50, # 공의 y 좌표 "img_idx" : 0, # 공의 이미지 인덱스 "to_x": 3, # x축 이동방향, -3 이면 왼쪽으로, 3 이면 오른쪽으로 "to_y": -6, # y축 이동방향, "init_spd_y": ball_speed_y[0]})# y 최초 속도 # 사라질 무기, 공 정보 저장 변수 weapon_to_remove = -1 ball_to_remvoe = -1 running = True while running: dt = clock.tick(60) # 2. 이벤트 처리 (키보드, 마우스 등) 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 -= character_speed elif event.key == pygame.K_RIGHT: # 캐릭터를 오른쪽으로 character_to_x += character_speed elif event.key == pygame.K_SPACE: # 무기 발사 weapon_x_pos = character_x_pos + (character_width / 2) - (weapon_width / 2) weapon_y_pos = character_y_pos weapons.append([weapon_x_pos, weapon_y_pos]) if event.type == pygame.KEYUP: if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT: character_to_x = 0 # 3. 게임 캐릭터 위치 정의 character_x_pos += character_to_x if character_x_pos < 0: character_x_pos = 0 elif character_x_pos > screen_width - character_width: character_x_pos = screen_width - character_width # 무기 위치 조정 # 100, 200 -> 180, 160, 140, ... # 500, 200 -> 180, 160, 140, ... weapons = [ [w[0], w[1] - weapon_speed] for w in weapons] # 무기 위치를 위로 # 천장에 닿은 무기 없애기 weapons = [ [w[0], w[1]] for w in weapons if w[1] > 0] # 공 위치 정의 for ball_idx, ball_val in enumerate(balls): ball_pos_x = ball_val["pos_x"] ball_pos_y = ball_val["pos_y"] ball_img_idx = ball_val["img_idx"] ball_size = ball_images[ball_img_idx].get_rect().size ball_width = ball_size[0] ball_height = ball_size[1] # 가로벽에 닿았을 때 공 이동 위치 변경 (튕겨 나오는 효과) if ball_pos_x < 0 or ball_pos_x > screen_width - ball_width: ball_val["to_x"] = ball_val["to_x"] * -1 # 세로 위치 # 스테이지에 튕겨서 올라가는 처리 if ball_pos_y >= screen_height - stage_height - ball_height: ball_val["to_y"] = ball_val["init_spd_y"] else: # 그 외의 모든 경우에는 속도를 증가 ball_val["to_y"] += 0.5 ball_val["pos_x"] += ball_val["to_x"] ball_val["pos_y"] += ball_val["to_y"] # 4. 충돌 처리 # 캐릭터 rect 정보 업데이트 character_rect = character.get_rect() character_rect.left = character_x_pos character_rect.top = character_y_pos for ball_idx, ball_val in enumerate(balls): ball_pos_x = ball_val["pos_x"] ball_pos_y = ball_val["pos_y"] ball_img_idx = ball_val["img_idx"] # 공 rect 정보 업데이트 ball_rect = ball_images[ball_img_idx].get_rect() ball_rect.left = ball_pos_x ball_rect.top = ball_pos_y # 공과 캐릭터 충돌 처리 if character_rect.colliderect(ball_rect): running = False break # 공과 무기들 충돌 처리 for weapon_idx, weapon_val in enumerate(weapons): weapon_pos_x = weapon_val[0] weapon_pos_y = weapon_val[1] # 무기 rect 정보 업데이트 weapon_rect = weapon.get_rect() weapon_rect.left = weapon_pos_x weapon_rect.top = weapon_pos_y # 충돌 체크 if weapon_rect.colliderect(ball_rect): weapon_to_remove = weapon_idx # 해당 무기 없애기 위한 값 설정 ball_to_remove = ball_idx # 해당 공 없애기 위한 값 설정 break # 충돌된 공 or 무기 없애기 if ball_to_remove > -1: del balls[ball_to_remove] ball_to_remove = -1 if weapon_to_remove > -1: del weapons[weapon_to_remove] weapon_to_remove = -1 # 5. 화면에 그리기 screen.blit(background, (0, 0)) for weapon_x_pos, weapon_y_pos in weapons: screen.blit(weapon, (weapon_x_pos, weapon_y_pos)) for idx,val in enumerate(balls): ball_pos_x = val["pos_x"] ball_pos_y = val["pos_y"] ball_img_idx = val["img_idx"] screen.blit(ball_images[ball_img_idx], (ball_pos_x, ball_pos_y)) screen.blit(stage, (0, screen_height - stage_height)) screen.blit(character, (character_x_pos, character_y_pos)) pygame.display.update() pygame.quit()
- 미해결파이썬 무료 강의 (활용편1) - 추억의 오락실 게임 만들기 (3시간)
배경색이 안 나와요
나도 코딩님처럼 띄어쓰기랑 다 똑같이 했을 때 오류가 떠서 23번째랑 25번째 줄 띄어쓰기 안 하고 했어요 그렇게 하면 오류는 없는데 실행했을 때 배경색이 안 나와요. 그리고 열었던 걸 닫을때 색이 나와요.. 어떻게 해야 되나요? import pygame pygame.init() # 초기화 (반드시 필요) # 화면 크기 설정 screen_width = 480 # 가로 크기 screen_height = 640 # 세로 크기 screen = pygame.display.set_mode((screen_width, screen_height)) # 화면 타이틀 설정 pygame.display.set_caption("서준 game") #게임 이름 # 배경 이미지 불러오기 background = pygame.image.load("C:\\Users\\방지후\\Desktop\\방서준\\서준 코딩\\pygame_basic\\새 폴더\\background.png") # 이벤트 루프 running = True while running: for event in pygame.event.get(): # 어떤 이벤트가 발생하였는가? if event.type == pygame.QUIT: # 창이 닫히는 이벤트가 발생하였는가? running = False # 게임이 진행중이 아님 screen.blit(background, (0,0)) # 배경 그리기 pygame.display.update() # 게임화면을 다시 그리기! 반드시 # pygame 종료 pygame.quit()
- 미해결파이썬 무료 강의 (활용편1) - 추억의 오락실 게임 만들기 (3시간)
import pygame 실행이 안 돼요
pip install game 안 돼서 다른 분이 알려주신대로 py -m pip install pymongo --user 쳐서 처음 터미널 부분은 넘기고 그 다음에 import pygame 까지 나도코딩님이랑 똑같이 입력하고 실행했는데 터미널창에 아무것도 뜨지 않아요. 그냥 그대로 계속 따라가서 8분 5초에 있는 거까지 다 입력하고 실행했는데 창이 안 떠서 질문드립니다. 도와주세요 ㅠㅠ
- 미해결파이썬 무료 강의 (활용편1) - 추억의 오락실 게임 만들기 (3시간)
Error
weapon_rect = weapon.get_rect() AttributeError: 'list' object has no attribute 'get_rect' 무기를 쓰려고 SPACE를 누르면 게임이 종료된 후 위에 에러가 나오는데 무슨 뜻인지 모르겠습니다 도와주세요 !
- 미해결파이썬 무료 강의 (활용편1) - 추억의 오락실 게임 만들기 (3시간)
weapon
무기를 나오게 하려고 SPACE를 누르면 게임이 종료됩니다 밑에 오류라고 나오는데 뭐가 틀린 지 모르겠습니다