기본 콘텐츠로 건너뛰기

[pygame] Cannon 게임 프로젝트 2 - 기본 구조와 키보드, 마우스 처리

 제작로그 2 - pygame 의 기본구조 

import pygame
 
SCREEN_X = 800    #게임창 x 크기
SCREEN_Y = 600    #게임창 y 크기
 
screen = pygame.display.set_mode((SCREEN_X,SCREEN_Y)) #게임 윈도우 생성
background = pygame.Surface(screen.get_size())        #게임 화면을 그릴 surface
 
done=True
 
while done:        #이 루프를 벗어나면 게임이 종료됨
    ev = pygame.event.get()
    for event in ev:
        if event.type ==pygame.QUIT:     #창의 종료버튼이 눌렸을때 게임종료
            done = False     
        if event.type == pygame.MOUSEBUTTONUP:
            pass
        if event.type == pygame.MOUSEMOTION:    #마우스를 움직이고 있음
            print(pygame.mouse.get_pos())    #현재 마우스 커서의 위치를 구함
        if event.type == pygame.KEYDOWN:        #키보드의 키가 눌렸음
            if event.key == pygame.K_r:       # 'r' 키가 눌렸음
                pass
            if event.key == pygame.K_s:         # 's' 키가 눌렸음
                pass
        break
 
    keys=pygame.key.get_pressed() #키보드가 눌렸는지 확인
    if keys[pygame.K_LEFT]: #왼쪽 화살표 키가 눌렸을 경우
        pass
    if keys[pygame.K_RIGHT]: #오른쪽 화살표 키가 눌렸을 경우
        pass
    if keys[pygame.K_SPACE]: #스페이스바 키가 눌렸을 경우
        pass
 
    #적과 아군 캐릭터 표현. 점수 표현은 이곳에서
 
    screen.blit(background,(0,0)) #background 의 화면을 스크린에 복사
    pygame.display.flip()         #화면에 표시함

pygame 으로 게임을 만들때 소스는 위와 같은 기본 구조를 갖게 됩니다. 

소스에 간단한 주석을 달아 놨으니 보시면 쉽게 내용을 파악하실 수 있을 겁니다.

기본적으로 while 루프를 돌면서 게임이 계속 실행되며 위의 while 문을 벗어나면 게임이 종료되는 구조입니다.

따라서 게임에서 캐릭터 이동 등의 모든 구현은 while 루프 안에서 이루어 집니다.

>

마우스와 키보드의 입력은 pygame.event.get() 함수로 이벤트를 처리하는 것이 일반적이지만, 게임에서 키보드를 누르고 있을때 계속 작동하고 떼었을때 멈추는 구현을 위해서는 pygame.key.get_pressed()  함수를 이용해서 직접 키 값을 처리 하는게 쉽습니다. 

키코드의 값은 https://www.pygame.org/docs/ref/key.html 를 참고 하세요.

 

댓글

이 블로그의 인기 게시물

pygame 에서 이미지 회전하는 방법

 pygame 에서 transform.rotate 를 사용해서 이미지를 회전시켜 보면 생각과는 달리 요상하게 회전합니다.    따라서 이를 해결해 보고자 검색해 보다 다음 링크를 찾았습니다. https://stackoverflow.com/questions/4183208/how-do-i-rotate-an-image-around-its-center-using-pygame/54714144 위 링크를 보면 파이게임의 이미지 회전이 왜 그렇게 이상한지 알 수 있고 답변하신 분이 blitRotate 라는 함수를 만들어 놓아서 이용할 수 있습니다.  제 소스에 가져와서 테스트를 해 봤는데 제 생각대로 회전 하더군요.  def blitRotate(image, pos, originPos, angle):       #calcaulate the axis aligned bounding box of the rotated image     w, h       = image.get_size()     box        = [pygame.math.Vector2(p) for p in [(0, 0), (w, 0), (w, -h), (0, -h)]]     box_rotate = [p.rotate(angle) for p in box]     min_box    = (min(box_rotate, key=lambda p: p[0])[0], min(box_rotate, key=lambda p: p[1])[1])     max_box    = (max(box_rotate, key=lambda p: p[0])[0], max...

모닝 JA 엔진오일 교환. 보쉬필터 구입

요즘은 주행거리가 1만km 가 안되다보니 1년에 한번씩 엔진오일을 교환하고 있습니다.  1년에 한번이라 그냥 오토큐에서 교환을 했었지만 오토큐의 오일교환 가격이 너무 오른데다가 이젠 보증도 끝났기 때문에 오일과 필터를 구입해서 공임나라로 갔습니다.  > 오일은 kixx g1 fe 1L x 3 을 구입하고 필터는 보쉬제품으로 구입했습니다.   A3003 이 에어필터이고 O0356 이 오일필터 입니다. 기아의 순정부품보단 조금 가격이 저렴합니다.  > 오랜만에 공임나라 갔는데 교환공임이 17000원 이네요. 물가가 오른만큼 오일교환 비용도 예전보다 좀 올랐네요.  필터 품번도 기록해 둘겸 올려 봅니다. ^^;

antix linux 업데이트시 GPG Error

 최근에 가장 가벼운 리눅스를 검색해서 antix 리눅스를 설치해서 테스트 해 보고 있습니다. 역시 가볍긴 가볍더군요. 생각보단 패키지 구성도 괜찮아 보였고요.    설치후 좀 써보고 업데이트를 하는데 GPG Error 가 발생했습니다. GPG 키 관련 문제인것 같아서 검색해 보니 antixforum에 답이 있었습니다.  https://www.antixforum.com/forums/topic/how-to-fix-expired-gpg-key-error/   간단히 적어보자면... http://repo.antixlinux.com/bookworm/pool/main/a/antix-archive-keyring/antix-archive-keyring_20019.5.0_all.deb 위 파일을 받은 다음에 터미널에서... sudo dpkg -i antix-archive-keyring_20019.5.0_all.deb 을 실행해서 설치해 주면 됩니다.    그런다음 업데이트를 시도해 보면 잘 됩니다.