2008年5月13日 星期二

Pygame : 小圖形的移動

下面這段code簡介了如何利用pygame來讓使用者操作一個小圖形讓它在某個範圍內移動, 利用這樣的概念我們就可以做出很簡單的小遊戲.


# -*- coding: utf8 -*-

import sys,pygame
from pygame.locals import *

'''
顯示畫面大小
'''

MAP_Y_AXIS = 30
MAP_X_AXIS = 30

IMAGE_X_LEN = 20
IMAGE_Y_LEN = 20

MAP_X_LEN = IMAGE_X_LEN * MAP_X_AXIS
MAP_Y_LEN = IMAGE_Y_LEN * MAP_Y_AXIS

'''
初始畫遊戲地圖
'''
game_map = []
for y in range(MAP_Y_AXIS):
row = []
for x in range(MAP_X_AXIS):
row.append(0)
game_map.append(row)
'''
畫出圖形
'''
def draw_image(pos):
square = pygame.Surface((IMAGE_X_LEN,IMAGE_Y_LEN)) #建立移動的圖形, 大小20x20的方塊
square.fill((255,255,255)) #圖形的顏色(r,g,b)
game_display.blit(square, (pos[0]*IMAGE_X_LEN,pos[1]*IMAGE_Y_LEN)) #把圖形畫在game_display上, 座標為(move[0],move[1])
'''
圖形移動判斷
'''
def move_image(pos, move):
if pos[0] + move[0] >= 0 and pos[0] + move[0] < MAP_X_AXIS:
pos[0] += move[0]
if pos[1] + move[1] >= 0 and pos[1] + move[1] < MAP_Y_AXIS:
pos[1] += move[1]
return pos

pygame.init() #初始化pygame
game_display = pygame.display.set_mode((MAP_X_LEN,MAP_Y_LEN)) #設定遊戲的顯示螢幕大小
clock = pygame.time.Clock()

move = [0,0]
pos = [0,0] #目前的座標

while 1:
move = [0,0] #每次的移動

clock.tick(10) #設定執行的頻率

'''
結束遊戲
'''
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()

keys = pygame.key.get_pressed() #取得按鍵

'''
判斷按下的按鍵
'''
if keys[K_RIGHT]:
move[0] = 1
if keys[K_LEFT]:
move[0] = -1
if keys[K_DOWN]:
move[1] = 1
if keys[K_UP]:
move[1] = -1
'''
畫面更新
'''
pos = move_image(pos,move) #移動圖形到某個座標上

game_display.fill((0,0,0)) #背景黑色
draw_image(pos) #畫圖形
pygame.display.flip() #更新畫面



上面這段code大致上都有註解, 簡單的講解一下流程 :
  1. 宣告畫面大小的變數
  2. 初始化pygame, 畫面大小, 以及畫面顯示的clock
  3. 執行迴圈, 每次取得按下的按鍵
  4. 更新圖片的位址, 畫下圖形, 更新畫面

P.S. 這個程式裡面的game_map變數沒有用到, 利用這個程式延伸遊戲時, 可以紀錄目前某個座標所在的物件為何.

沒有留言: