계속 해서 다음 함수들을 써내려가자 !
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()
메인함수를 호출해줌으로서 끝이 났다.
이제 다음 포스트에서 전체 코드와 플레이 영상을 보여주겠다.