▷ Python의 pygame을 활용한 게임 만들기! (2)
어제 코딩한 부분에 이어서 오늘은 기본 메뉴가 나오는 화면을 코딩해보았다.
#시작 화면 메뉴
def mainmenu():
pygame.display.set_caption('같은 그림 찾기')
pygame.display.set_icon(pygame.image.load('image/img15.png'))
menu = True
while menu:
for event in pygame.event.get():
if event.type == pygame.QUIT:
quitgame()
gameDisplay.fill(WHITE)
gameDisplay.blit(titleImg, (120, 130))
Button(startImg, 280, 360, 60, 20, clickStartImg, 273, 358, main)
Button(quitImg, 445, 360, 60, 20, clickQuitImg, 440, 358, quitgame)
pygame.display.update()
clock.tick(15) #일정 주기로 화면 갱신
흰색바탕으로 화면을 채우고 타이틀이미지를 하나 넣어 가운데를 장식한 후 버튼 두개에 각자의 이미지를 넣고 버튼에 마우스를 올렸을때 이미지를 살짝 바꿔 표현하였다.
if __name__ == '__main__':
mainmenu()
처음 시작을 mainmenu 함수로 지정하여 먼저 시작되게끔 하였다.
현재 카카오프렌즈의 캐릭터 이미지를 8개를 넣어서 2쌍씩 들어가있게 해놓았다.
<-표시를 누르게되면 메인메뉴화면으로 넘어가게 구현을 해놓았고, QUIT(빨강)을 누르게 되면 종료되게 구현하였다.
게임이 시작되면 16개의 카드중 4장씩 4번 카드위치를 보여준 후 마우스를 이용하여 짝을 맞출 수 있게 되어있다.
#게임 메인화면
def main():
global FPSCLOCK, DISPLAYSURF
pygame.init()
FPSCLOCK = pygame.time.Clock()
DISPLAYSURF = pygame.display.set_mode((WINDOWWIDTH, WINDOWHEIGHT))
mousex = 0
mousey = 0 #마우스 이벤트 발생 좌표
pygame.display.set_caption('같은 그림 찾기')
pygame.display.set_icon(pygame.image.load('image/img15.png'))
mainBoard = getRandomizedBoard()
revealedBoxes = generateRevealedBoxesData(False)
firstSelection = None # 첫 클릭 좌표 저장
DISPLAYSURF.fill(BGCOLOR)
startGameAnimation(mainBoard)
while True:
mouseClicked = False
DISPLAYSURF.fill(BGCOLOR) # 전체 배경색
drawBoard(mainBoard, revealedBoxes)
Button(backImg,635, 280, 60, 20,clickBackImg , 630, 278, mainmenu)
Button(quitImg, 635, 360, 60, 20, clickQuitImg, 630, 358, quitgame)
for event in pygame.event.get(): #이벤트 처리 루프
if event.type == QUIT or (event.type ==KEYUP and event.key == K_ESCAPE):
pygame.quit()
sys.exit()
elif event.type == MOUSEMOTION:
mousex, mousey = event.pos
elif event.type == MOUSEBUTTONUP:
mousex, mousey = event.pos
mouseClicked = True
boxx, boxy = getBoxAtPixel(mousex, mousey)
if boxx != None and boxy != None:
# 마우스가 현재 박스 위에 있다.
if not revealedBoxes[boxx][boxy]: #닫힌 상자라면 하이라이트만!
drawHighlightBox(boxx,boxy)
if not revealedBoxes[boxx][boxy] and mouseClicked:
revealBoxesAnimation(mainBoard,[(boxx, boxy)])
revealedBoxes[boxx][boxy] = True #닫힌 상자+클릭-> 박스 열기
if firstSelection ==None : #1번 박스>좌표 기록
firstSelection = (boxx, boxy)
else: #1번 박스 아님>2번 박스>짝검사
icon1shape, icon1color = getPicAndNum(mainBoard, firstSelection[0], firstSelection[1])
icon2shape, icon2color = getPicAndNum(mainBoard, boxx, boxy)
if icon1shape !=icon2shape or icon1color != icon2color:
#서로 다름이면 둘 다 닫기
pygame.time.wait(1000) #1000 milliseconds = 1sec
coverBoxesAnimation(mainBoard, [(firstSelection[0], firstSelection[1]), (boxx, boxy)])
revealedBoxes[firstSelection[0]][firstSelection[1]]=False
revealedBoxes[boxx][boxy] =False
#짝이면
elif hasWon(revealedBoxes):
pygame.time.wait(2000)
#게임판 재설정
mainBoard = getRandomizedBoard()
revealedBoxes = generateRevealedBoxesData(False)
#잠깐 공개
drawBoard(mainBoard, revealedBoxes)
pygame.display.update()
pygame.time.wait(1000)
#게임 시작
startGameAnimation(mainBoard)
firstSelection = None #1번 박스 리셋
#화면을 다시 그린 다음 시간 지연을 기다린다..
pygame.display.update()
FPSCLOCK.tick(FPS)
마우스 포인터가 카드 위에 올라왔을 때 애니메이션을 구현하여 어느 위치에 있는지 파악하기가 무척 쉽다!
def drawHighlightBox(boxx, boxy): #테두리색 박스
left, top = leftTopCardsOfBox(boxx, boxy)
pygame.draw.rect(DISPLAYSURF, HIGHLIGHTCOLOR, (left - 5, top - 5, BOXSIZE + 10, BOXSIZE + 10), 4)
'개발_TIL' 카테고리의 다른 글
개발_TIL | 2022-04-28 (9) (0) | 2022.04.28 |
---|---|
개발_TIL | 2022-04-27 (8) (1) | 2022.04.27 |
개발_TIL | 2022-04-25 (6) (0) | 2022.04.26 |
개발_TIL | 2022-04-22 (5) (0) | 2022.04.22 |
개발_TIL | 2022-04-21 (4) (0) | 2022.04.21 |