-
카테고리
-
세부 분야
게임 프로그래밍
-
해결 여부
미해결
코드_질문드립니다.
21.08.18 17:48 작성 조회수 103
0
002_요리하기 코드를 실행하면
1. 다음 오류가 뜨며 창이 강제종료 되는데, 어떤 것이 문제인지 잘 모르겠습니다. [] => {} 라고 바꿔도 그대로 오류가 생깁니다.
자바독이미지딕셔너리[요리] = []
TypeError: 'pygame.Surface' object does not support item assignment
2. 코드에서 어떤 부분은
예시로 '전' 으로 작은따옴표가 쓰일 때가 있고 "전"이라고 큰따옴표가 쓰일 때도 있는데 어떤 차이인지 질문드립니다.
답변을 작성해보세요.
0
Hojun Lee
지식공유자2021.08.18
1. 이건 앞뒤로 코드를 모두 봐야 할 것 같습니다.
2. 주로 Python에서는 작은 따옴표를 많이 사용해요. 차이는 없습니다. 다만 회사에서는 아래와 같은 컨벤션이 있을 수 있어요. 그 규칙에 따라 코딩하시면 됩니다. 회사가 아니시라면 작은 따옴표를 권해드려요. :)
참고 링크 : https://brownbears.tistory.com/291
해콩순이
질문자2021.08.18
전체 코드입니다.
동족이미지 크기 및 위치는 제 pc 화면에 맞춰 일부 조정하였습니다!
그 이외에 바꾼 부분은 없습니다!!
import pygame as pg
def 스프라이트생성(이미지,위치):
스프라이트=pg.sprite.Sprite()
스프라이트.image=이미지
스프라이트.rect=스프라이트.image.get_rect()
스프라이트.rect.x, 스프라이트.rect.y=위치[0],위치[1]
return 스프라이트
pg.init()
실행여부=True
화면가로길이, 화면세로길이= 874,650
화면=pg.display.set_mode([화면가로길이,화면세로길이])
pg.display.set_caption('부족들의 마음을 요리로 사로잡아라!')
#색 지정
흰색=(255,255,255)
검은색=(0,0,0)
#글꼴 설정
글꼴= pg.font.SysFont('malgungothic',25)
#게임요소 초기화
경과시간=0
점수=0
시계=pg.time.Clock()
현재챕터=1
최종챕터=10
자바독상태="기본자세"
자바독인덱스=0 #이미지움직임 시간 관련, for 자연스러움 움직임
자바독움직임흐름=1
현재요리="사료"
현재요리상태="전"
요리초기위치=[424,248]
요리위치=[요리초기위치[0]-53, 요리초기위치[1]-30]
손님가로숫자=4
요리상태리스트=['전','후']
요리리스트=['사료','뼈다귀','물']
배경이미지= pg.image.load('C:\\Users\\강혜빈\\Desktop\\대학교\\대외활동\\제주코딩베이스캠프_2기\\PyGame\\My_PyGame\\003 부족들의 마음을 요리로 사로잡아라!_마인드 스톤\\img\\배경.png')
배경이미지=pg.transform.scale(배경이미지,(화면가로길이,화면세로길이))
챕터바이미지크기=(358,61)
챕터바이미지= pg.image.load('C:\\Users\\강혜빈\\Desktop\\대학교\\대외활동\\제주코딩베이스캠프_2기\\PyGame\\My_PyGame\\003 부족들의 마음을 요리로 사로잡아라!_마인드 스톤\\img\\챕터바.png')
챕터바이미지=pg.transform.scale(챕터바이미지,(챕터바이미지크기))
자바독이미지크기=(238,238)
자바독이미지딕셔너리={}
자바독이미지딕셔너리['기본자세']= pg.image.load('C:\\Users\\강혜빈\\Desktop\\대학교\\대외활동\\제주코딩베이스캠프_2기\\PyGame\\My_PyGame\\003 부족들의 마음을 요리로 사로잡아라!_마인드 스톤\\img\\자바독_기본자세.png')
자바독이미지딕셔너리=pg.transform.scale(자바독이미지딕셔너리['기본자세'],(자바독이미지크기))
#해당하는 요리이미지들을 딕셔너리에 넣는 코드
for 요리 in 요리리스트:
자바독이미지딕셔너리[요리] = []
for 인덱스 in range(3):
자바독요리중이미지=pg.image.load(f'C:\\Users\\강혜빈\\Desktop\\대학교\\대외활동\\제주코딩베이스캠프_2기\\PyGame\\My_PyGame\\003 부족들의 마음을 요리로 사로잡아라!_마인드 스톤\\img\\자바독_{요리}_요리중_{인덱스+1}.png')
자바독요리중이미지=pg.transform.scale(자바독요리중이미지,자바독이미지크기)
자바독이미지딕셔너리[요리].append(자바독요리중이미지)
주방테이블이미지크기=(668,173)
주방테이블이미지= pg.image.load('C:\\Users\\강혜빈\\Desktop\\대학교\\대외활동\\제주코딩베이스캠프_2기\\PyGame\\My_PyGame\\003 부족들의 마음을 요리로 사로잡아라!_마인드 스톤\\img\\주방-테이블.png')
주방테이블이미지=pg.transform.scale(주방테이블이미지,(주방테이블이미지크기))
요리이미지크기딕셔너리= {'사료':(106,61),'뼈다귀':(106,61),'물':(106,61)}
#요리재료에 따른 완성된 요리 저장 딕셔너리
요리이미지딕셔너리={}
for 요리상태 in 요리상태리스트:
요리이미지딕셔너리[요리상태]={}
#요리이미지딕셔너리 내 또 다른 딕셔너리
for 요리 in 요리리스트:
요리이미지딕셔너리[요리상태][요리]=pg.image.load(f'C:\\Users\\강혜빈\\Desktop\\대학교\\대외활동\\제주코딩베이스캠프_2기\\PyGame\\My_PyGame\\003 부족들의 마음을 요리로 사로잡아라!_마인드 스톤\\img\\{요리}_요리{요리상태}.png')
#키=밸류
요리이미지딕셔너리[요리상태][요리]=pg.transform.scale(요리이미지딕셔너리[요리상태][요리],요리이미지크기딕셔너리[요리])
요리스프라이트=스프라이트생성(요리이미지딕셔너리['전'][현재요리],요리위치)
동족이미지크기=1
동족음식생각중이미지=pg.image.load('C:\\Users\\강혜빈\\Desktop\\대학교\\대외활동\\제주코딩베이스캠프_2기\\PyGame\\My_PyGame\\003 부족들의 마음을 요리로 사로잡아라!_마인드 스톤\\img\\동족_음식-생각-중.png')
동족스프라이트리스트=[스프라이트생성(동족음식생각중이미지,(i*200+동족이미지크기,300*동족이미지크기)) for i in range(손님가로숫자)]
이미지움직임최대시간=0.2
이미지움직임시간=0
움직임최대횟수=3
움직임횟수=0
while 실행여부:
if 현재챕터<=최종챕터:
화면.blit(배경이미지,(0,0))
흐른시간=시계.tick(60)/1000
경과시간+=흐른시간
시간문자열='%02d : %02d'%(경과시간/60,경과시간%60)
경과시간글자=글꼴.render(시간문자열,True,검은색)
화면.blit(챕터바이미지,((화면가로길이-챕터바이미지크기[0])//2,7))
화면.blit(경과시간글자,(20,20))
챕터문자열=f'{현재챕터}챕터'
챕터글자=글꼴.render(챕터문자열,True,흰색)
화면.blit(챕터바이미지,((화면가로길이-14*len(챕터문자열)//2-10,20)))
점수문자열=f'{점수}점'
점수글자=글꼴.render(점수문자열,True,검은색)
화면.blit(점수글자,((화면가로길이-14*len(점수문자열))-30,20))
if 자바독상태=='기본자세':
화면.blit(자바독이미지딕셔너리[자바독상태],(321,85))
else:
화면.blit(자바독이미지딕셔너리[자바독상태][자바독인덱스],(321,85))
화면.blit(주방테이블이미지,(100,192))
for 동족스프라이트 in 동족스프라이트리스트:
화면.blit(동족스프라이트.image,동족스프라이트.rect)
for 인덱스,요리 in enumerate(요리리스트):
화면.blit(요리이미지딕셔너리['후'][요리],(460+90*인덱스,280-요리이미지딕셔너리['후'][요리].get_height()))
요리스프라이트.image = 요리이미지딕셔너리[현재요리상태][현재요리]
요리스프라이트.rect.x, 요리스프라이트.rect.y=요리위치[0],요리위치[1]
화면.blit(요리스프라이트.image,요리스프라이트.rect)
else:
화면.fill(흰색)
pg.display.update()
for 이벤트 in pg.event.get():
if 이벤트.type ==pg.QUIT:
실행여부=False
keys=pg.key.get_pressed()
if keys[pg.K_SPACE]:
if 자바독상태=='기본자세':
자바독상태=현재요리
else:
이미지움직임시간+=흐른시간
if 이미지움직임시간>= 이미지움직임최대시간:
이미지움직임시간=0
자바독인덱스+=자바독움직임흐름
if 자바독인덱스==0 or 자바독인덱스==len(자바독이미지딕셔너리[자바독상태])-1:
자바독움직임흐름*=-1
움직임횟수+=1
if 움직임횟수 >=움직임최대횟수:
현재요리상태='후'
else:
이미지움직임시간=0
자바독상태='기본자세'
자바독인덱스=0
자바독움직임흐름=1
움직임횟수=0
pg.display.quit()
답변 1