[pygame] 워미- 니블클론게임 - 2

서희찬·2021년 4월 17일
0


계속 해서 다음 함수들을 써내려가자 !

사과가 나타날 위치 결정하기

def getRandomLocation():
    return {'x':random.randint(0,CELLWIDTH-1),'y':random.randint(0,CELLHEIGHT-1)}

게임 종료 화면

def showGameOverScreen():
    gameOverFont = pygame.font.Font("freesansbold.ttf",150)
    gameSurf = gameOverFont.render("Game",True,WHITE)
    overSurf = gameOverFont.render("Over",True, WHITE)
    gameRect = gameSurf.get_rect()
    overRect = overSurf.get_rect()
    gameRect.midtop = (WINDOWWIDTH/2,10)
    overRect.midtop = (WINDOWWIDTH/2,gameRect.height + 10 + 25)

    DISPLAYSURF.blit(gameSurf,gameRect)
    DISPLAYSURF.blit(overSurf,overRect)
    drawPressKeyMsg()
    pygame.display.update()
 pygame.time.wait(500)
 checkForKeyPress() # 이벤트 큐에 들어있는 모든 키 입력을 삭제한다.

 while True :
     if checkForKeyPress():
         pygame.event.get() #clear event queue
         return 

Game Over 화면에 글씨를 보이고 플레이어가 너무 빨리 눌러서 화면을 못보는 것을 방지하기 위해 time.wait() 함수를 호출해서 0.5초를 기다린다.

다음 checkForKeyPress() 를 호출해서 showGameOverScreen() 함수를 호출한 다음 누른 키가 있으면 모두 큐에서 지운다.

이렇게 화면을 잠깐 멈추고 키 이벤트를 모두 없애는 이유는 플레이어가 마지막에 키를 눌렀지만 너무 늦게 눌러 벽에 부딪힌 후 눌러 벌레가 죽은 뒤 눌러서 showGameOverScreen() 함수를 호출 후 누른 상태라면 바로 게임을 시작하면 플레이어는 놀랄테니 멈춰줘야한다!

그리기 함수

점수

def drawScore(score):
    scoreSurf = BASICFONT.render('Score : %s' %(score),True,WHITE)
    scoreRect = scoreSurf.get_rect()
    scoreRect.topleft = (WINDOWWIDTH - 120, 10)
    DISPLAYSURF.blit(scoreSurf,scoreRect)

벌레

def drawWorm(wormCoords):
    for coord in wormCoords:
        x = coord['x'] * CELLSIZE
        y = coord['y'] * CELLSIZE
        wormSegmentRect = pygame.Rect(x,y,CELLSIZE,CELLSIZE)
        pygame.draw.rect(DISPLAYSURF,DARKGREEN,wormSegmentRect)
        wormInnerSegmentRect = pygame.Rect(x+4,y+4,CELLSIZE - 8, CELLSIZE - 8)
        pygame.draw.rect(DISPLAYSURF,GREEN,wormInnerSegmentRect)

벌레 몸통에 해당하는 각 마디를 초로색 상자로 그린다! for문은 wormCoords 딕셔너리의 리스트에 대해 반복문을 수행한다.
그림을 그릴때는 픽셀 좌표계가 편하므로 CELLSIZE를 곱해서 픽셀 좌표계로 변환하고 있다.

벌레의 각 마디의 크기는 CELLSIZE이므로 너비와 높이에 모두 이 값을 넣어준다.
밝은/어두운 초록색을 그려 마디를 더 예쁘게 꾸민다.
각 픽셀에 대해 4픽셀 들어와 있으므로 높이와 너비는 -8이여야한다!

사과

def drawApple(coord):
   x = coord['x'] * CELLSIZE
   y = coord['y'] * CELLSIZE
   appleRect = pygame.Rect(x,y,CELLSIZE,CELLSIZE)
   pygame.draw.rect(DISPLAYSURF,RED,appleRect)

격자

def drawGrid():
    for x in range(0,WINDOWWIDTH,CELLSIZE): #세로선을 그린다. 
        pygame.draw.line(DISPLAYSURF,DARKGRAY,(x,0),(x,WINDOWHEIGHT))
    for y in range(0,WINDOWHEIGHT,CELLSIZE):
        pygame.draw.line(DISPLAYSURF,DARKGRAY,(0,y),(WINDOWWIDTH,y))

pygame.draw.line() 으로 가로선과 세로선을 그릴 수 있다.
for문을 사용하지 않는다면....32번 호출해야겠즤..?
range(시작,끝,간격) 이다 !
반복문을 쓰면 쓸데없는 시간을 많이 아낄 수 있다.

if __name__ == "__main__":
    main()

메인함수를 호출해줌으로서 끝이 났다.

이제 다음 포스트에서 전체 코드와 플레이 영상을 보여주겠다.

profile
부족한 실력을 엉덩이 힘으로 채워나가는 개발자 서희찬입니다 :)

0개의 댓글