노는게 제일 좋습니다.
pygame 키입력으로 이동해 상자먹기 본문
원코드 출처 http://inventwithpython.com/downloads/
키입력을 추가함.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 | import pygame,sys,random from pygame.locals import * pygame.init() mainClock = pygame.time.Clock() WINDOWWIDTH = 400 WINDOWHEIGHT= 400 windowSurface = pygame.display.set_mode( (WINDOWWIDTH, WINDOWHEIGHT), 0, 32 ) pygame.display.set_caption('Practice keyboardInput') BLACK = (0,0,0) GREEN = (0,255,0) WHITE = (255,255,255) foodCounter = 0 NEWFOOD = 40 FOODSIZE = 20 player = pygame.Rect(300,150,50,50) foods = [] for i in range(0,20): foods.append( pygame.Rect( random.randint(0, WINDOWWIDTH - FOODSIZE), random.randint(0, WINDOWHEIGHT - FOODSIZE), FOODSIZE, FOODSIZE) ) moveLeft=False moveRight = False moveUp = False moveDown = False MOVESPEED = 6 while True: for event in pygame.event.get(): if event.type == QUIT: pygame.quit() sys.exit() if event.type == KEYDOWN: if event.key == K_LEFT or event.key == ord('a'): moveRight = False moveLeft = True if event.key == K_RIGHT or event.key == ord('d'): moveRight = True moveLeft = False if event.key == K_UP or event.key == ord('w'): moveUp = True moveDown = False if event.key == K_DOWN or event.key == ord('s'): moveUp = False moveDown = True if event.type == KEYUP: if event.key == K_ESCAPE: pygame.quit() sys.exit() if event.key == K_LEFT or event.key == ord('a'): moveLeft = False if event.key == K_RIGHT or event.key == ord('d'): moveRight = False if event.key == K_UP or event.key == ord('w'): moveUp = False if event.key == K_DOWN or event.key == ord('s'): moveDown = False if event.key == ord('x'): player.top = random.randint(0, WINDOWHEIGHT - player.height ) player.left = random.randint(0, WINDOWWIDTH - player.width ) if event.type == MOUSEBUTTONUP: foods.append(pygame.Rect(event.pos[0], event.pos[1], FOODSIZE, FOODSIZE)) foodCounter += 1 if foodCounter >= NEWFOOD: foodCounter = 0 foods.append(pygame.Rect(random.randint(0, WINDOWWIDTH-FOODSIZE) , random.randint(0, WINDOWHEIGHT-FOODSIZE) , FOODSIZE, FOODSIZE)) windowSurface.fill(BLACK) if moveDown and player.bottom < WINDOWHEIGHT: player.top += MOVESPEED if moveUp and player.top > 0: player.top -= MOVESPEED if moveLeft and player.left > 0 : player.left -= MOVESPEED if moveRight and player.right < WINDOWWIDTH: player.left += MOVESPEED pygame.draw.rect(windowSurface, WHITE, player) for food in foods[:]: if player.colliderect(food): foods.remove(food) for i in range(len(foods)): pygame.draw.rect(windowSurface, GREEN, foods[i]) pygame.display.update() mainClock.tick(40) | cs |
구조는 대강 이렇다.
키 이벤트 확인
-> 마우스 이벤트 확인
-> foodCounter가 NEWFOOD보다 크면 상자 하나 추가
-> 캐릭터 이동시키기
-> 캐릭터와 상자 충돌했으면 상자 삭제
-> 화면 표시하기
mainClock.tick(n)
반복문을 초당 n번만 실행하도록 함. 1초가 지나기전 n번 실행했으면, 잠시 프로그램 멈춤
만약 time.sleep()을 사용한다면, 컴퓨터의 성능에 따라 결과가 달라짐.
**** 이벤트 타임과 특성이 정리된 링크. 아래 내용들을 포함하고 있음.
http://pygame.org/ftp/contrib/input.html
키보드 이벤트
1) attribute
key : event는 key attribute를 가지며, 이는 어느키가 눌렸는지에 대한 정보를 갖고있다.
키를 지정하기 위해서는 상수 변수(EX:K_LEFT)를 사용하거나, odr()함수에 키를 써넣어 ASCII값을 얻는다.(EX:ord('s'))
mod : mod attribute로는 쉬프트, 컨트롤, 알트나 다른 키를 같이 눌렀는지 알 수 있다.
2) type : 위 코드에서 나온 이벤트 type에는 KEYDOWN과 KEYUP이 있음. 위 두개 attribute는 두 type에 모두 있음(비슷)
마우스 이벤트 - MOUSEMOTION 의 attribute
1) pos : 윈도우에서 마우스의 좌표를 나타내는 (x,y)튜플을 반환
pos[0]에는 x좌표가, pos[1]에는 y좌표가 있음
2) rel : 마지막 MOUSEMOTION 이벤트 후에 얼마나 움직였는지, 즉 상대적인 위치를 알려준다.
마우스 이벤트 - MOUSEBUTTONUP, MOUSEBUTTONDOWN의 attribute
1) pos : 버튼이 눌렸을 때 마우스의 좌표를 나타내는 (x,y)튜플
2) button : 어떤 버튼을 눌렸는지 알려줌. 정수값으로 각 버튼을 나타냄.
1 : 왼쪽버튼 / 2 : 가운데버튼 / 3 : 오른쪽버튼 / 4. 스크롤휠 위쪽 / 5.스크롤휠 아래쪽
colliderect() 메소드
두 그림이 충돌했는지 알려준다.
대상1.colliderect(대상2)
'Python > 기타 공부' 카테고리의 다른 글
python two-dimensional array (0) | 2016.08.21 |
---|---|
pygame 스프라이트와 사운드 입히기 (5) | 2016.02.08 |
이벤트 받아 움직이며 상자 먹기 (0) | 2016.02.07 |
pygame 사각형 직선이동 애니메이션 (0) | 2016.02.07 |
pygame엔진 Hello world (0) | 2016.02.06 |