• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

코드_질문드립니다.

21.08.18 17:48 작성 조회수 103

0

002_요리하기 코드를 실행하면

1. 다음 오류가 뜨며 창이 강제종료 되는데, 어떤 것이 문제인지 잘 모르겠습니다. [] => {} 라고 바꿔도 그대로 오류가 생깁니다.

    자바독이미지딕셔너리[요리] = []

TypeError: 'pygame.Surface' object does not support item assignment

2.  코드에서 어떤 부분은

예시로 '전' 으로 작은따옴표가 쓰일 때가 있고 "전"이라고 큰따옴표가 쓰일 때도 있는데 어떤 차이인지 질문드립니다.

답변 1

답변을 작성해보세요.

0

1. 이건 앞뒤로 코드를 모두 봐야 할 것 같습니다.

2. 주로 Python에서는 작은 따옴표를 많이 사용해요. 차이는 없습니다. 다만 회사에서는 아래와 같은 컨벤션이 있을 수 있어요. 그 규칙에 따라 코딩하시면 됩니다. 회사가 아니시라면 작은 따옴표를 권해드려요. :)

참고 링크 : https://brownbears.tistory.com/291

전체 코드입니다.

동족이미지 크기 및 위치는 제 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()