pythonでゲームを作成することができるのですか?
このような疑問にお答えします。
pythonでゲームを作成することは可能です。
pythonでゲームを作成することができるライブラリとしては、【Pygame】があります。
Pygameをインストールする手順は下記のとおりです。
1 |
pip install pygame |
pythonプロンプトを起動し、下記のプログラムを実行して、importエラーが発生しなければインストール成功です。
1 |
import pygame |
ゲーム画面の実装方法
背景画像の読み込み、配置処理は以下のようになります。
1 2 3 |
# 背景画像 back_image = GameObject("background.png", width=400, height=300) back_image.fn_set_Rect(back_image.fn_get_Rect()) |
プレイヤー画像の読み込み、配置処理は以下のようになります。
1 2 3 4 |
# player画像 player_image = GameObject("character01.png", width=48, height=48) player_image.fn_set_Rect(player_pos) player_image.fn_set_area(area=(0, 0, 45, 45)) |
キャラクター画像、背景画像は以下のリンク先のものを使用しています。
今回は、キー操作とマウスポインタの状態に応じてキャラクターを制御します。
キー操作によるキャラクター制御は、以下になります。
矢印キーが押下されたときのキャラクターの動作について処理を記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# キーイベント press_key = pygame.key.get_pressed() if press_key[K_LEFT]: player_image.rect_obj.move_ip(-5, 0) press_index = fn_update_run_image(press_index) player_image.fn_set_area((player_image.width*press_index, player_image.height, player_image.width, player_image.height)) elif press_key[K_RIGHT]: player_image.rect_obj.move_ip(5, 0) press_index = fn_update_run_image(press_index) player_image.fn_set_area((player_image.width*press_index, player_image.height*2, player_image.width, player_image.height)) elif press_key[K_UP]: player_image.rect_obj.move_ip(0, -5) press_index = fn_update_run_image(press_index) player_image.fn_set_area((player_image.width*press_index, player_image.height*3, player_image.width, player_image.height)) elif press_key[K_DOWN]: player_image.rect_obj.move_ip(0, 5) press_index = fn_update_run_image(press_index) player_image.fn_set_area((player_image.width*press_index, 0, player_image.width, player_image.height)) else: pass |
マウスポインタによるキャラクター制御は、以下になります。
1 2 3 |
event.type == MOUSEMOTION: x, y = event.pos player_image.fn_set_Rect((x, y, x+player_image.width, y+player_image.height)) |
ソースコード全体は、以下になります。
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 102 103 104 105 106 107 108 109 110 111 112 113 114 115 |
# coding: utf-8 import pygame from pygame.locals import * import sys class GameObject: def __init__(self, filename, width, height): self.image_size = (width, height) self.width = width self.height = height self.image_obj = pygame.image.load(filename).convert_alpha() self.rect_obj = self.image_obj.get_rect() self.area = (0, 0, width, height) def fn_set_Rect(self, rect): self.rect_obj = pygame.Rect(rect) def fn_get_Rect(self): return self.rect_obj def fn_set_area(self, area): self.area = area def fn_get_area(self): return self.area def fn_update_run_image(press_index): if press_index == 0: press_index = 1 elif press_index == 1: press_index = 2 elif press_index == 2: press_index = 0 else: pass return press_index def fn_game_main(): disp_size = (400, 300) player_pos = (200, 150, 245, 195) pygame.init() pygame.display.set_mode(disp_size, 0, 32) screen = pygame.display.get_surface() pygame.display.set_caption("sample") # 背景画像 back_image = GameObject("background.png", width=400, height=300) back_image.fn_set_Rect(back_image.fn_get_Rect()) # player画像 player_image = GameObject("character01.png", width=48, height=48) player_image.fn_set_Rect(player_pos) player_image.fn_set_area(area=(0, 0, 45, 45)) press_index = 0 while True: # キーイベント press_key = pygame.key.get_pressed() if press_key[K_LEFT]: player_image.rect_obj.move_ip(-5, 0) press_index = fn_update_run_image(press_index) player_image.fn_set_area((player_image.width*press_index, player_image.height, player_image.width, player_image.height)) elif press_key[K_RIGHT]: player_image.rect_obj.move_ip(5, 0) press_index = fn_update_run_image(press_index) player_image.fn_set_area((player_image.width*press_index, player_image.height*2, player_image.width, player_image.height)) elif press_key[K_UP]: player_image.rect_obj.move_ip(0, -5) press_index = fn_update_run_image(press_index) player_image.fn_set_area((player_image.width*press_index, player_image.height*3, player_image.width, player_image.height)) elif press_key[K_DOWN]: player_image.rect_obj.move_ip(0, 5) press_index = fn_update_run_image(press_index) player_image.fn_set_area((player_image.width*press_index, 0, player_image.width, player_image.height)) else: pass for event in pygame.event.get(): if event.type == QUIT: pygame.quit() sys.exit() elif event.type == MOUSEMOTION: x, y = event.pos player_image.fn_set_Rect((x, y, x+player_image.width, y+player_image.height)) pygame.display.update() # 画面更新 pygame.time.wait(30) # 更新待ち時間 screen.fill((0, 20, 0, 0)) screen.blit(back_image.image_obj, back_image.rect_obj) # 背景画像描画 screen.blit(player_image.image_obj, player_image.rect_obj, area=player_image.fn_get_area()) # player画像描画 if __name__ == '__main__': fn_game_main() |
実装したゲームの動作は、以下のようになります。
このように、pythonでゲームを作成することは割と可能なのではないでしょうか。
是非試してみてください。