LoginSignup
10
13

More than 3 years have passed since last update.

【初心者向け】Pythonでゲームを作ろう

Posted at

1.はじめに

「プログラミングはとっつきにくい」そんな初学者の方向けに
「ゲームを作りながらプログラミングが学ぼう」をテーマに書いていきます。

*筆者がmacユーザーの為、macbookでのプログラミングを想定しています。windows版なども希望があればやっていきたいと思います!

今回は3×4将棋を作ります。
34将棋の画面.png
図1:完成図3×4将棋

2.準備をしよう

今回は*Pythonのライブラリである*Pygameを活用します。

注1)Pythonとは、プログラミング言語の1つで、割となんでもできる。
注2)Pygameとは、Pythonで2Dゲームを制作する際の最も有名なゲームライブラリです。将棋以外にもブロック崩しやテトリスが作れます。

ということでPythonとPygameをお使いのPCに取り込む必要があります。

Pythonはmacbookには入っているので今回はPygameの取り込み方を説明します。(3ステップで出来ます)

Step1:まずターミナルを開く

①画面右上の虫眼鏡マークをクリックして②terminalと検索してください。

ターミナルと検索.png

Step2:ターミナルにpython -m pip install pygameと打ち込む

ターミナルの$の横に-m pip install pygameと打ち込みます。

pygameのインストール.png
図2:pygameのインストール

Step3:import pygameと打ち込んで確認する。

$マークの横にpythonと打ち込み、その後>>>マークの横にimport pygameと打ち込みます。(これでエラーがでなければ取り込み完了!)

pygameの確認.png
図3:pygameがインポート出来たかの確認

3.スクリーンを表示しよう

pythonとpygameのインポートが済んだところで、いよいよプログラミングを始めていきます!

Atomという*エディタを使います。下のリンクからatomをダウンロードしてください。
*エディタとはプログラミングを書き込むソフトのことです。
https://atom.io/

screen.py
# -*- coding:utf-8 -*-
import pygame
from pygame.locals import*
import sys

def main():
    pygame.init() #初期化
    screen = pygame.display.set_mode((300,400)) # 400*400の画面
    #screen = pygame.display.set_mode((400,400),FULLSCREEN) #フルスクリーン (解除時は大きさ400*300の画面)
    pygame.display.set_caption("Screen") #タイトルバーに表示する名前

    while(1):
        screen.fill((0,0,0)) #画面を黒色(#000000)に塗る
        pygame.display.update() #画面を更新

        #イベント処理
        for event in pygame.event.get():
            if event.type == QUIT: #閉じるボタンが押されたら終了
                pygame.quit() #Pygameの終了(画面閉じられる)
                sys.exit()

if __name__ =="__main__":
    main()

Atomに書いたファイルの開き方は下の動画をご覧ください!
https://youtu.be/jQm-aMsN3-w

4.盤と駒を表示しよう

次に将棋盤と駒を表示します。
board.png
図3:将棋盤の素材(ダウンロードして使ってください)

king.png
図4:王将の素材(ダウンロードして使ってください)

gold.png
図5:金将の素材(ダウンロードして使ってください)

silver.png
図6:銀将の素材(ダウンロードして使ってください)

pawn.png
図7:歩兵の素材(ダウンロードして使ってください)

background.py
# -*- coding: utf-8 -*-
import pygame
from pygame.locals import *
import sys

def main():
    (w,h) = (300, 400) #画面サイズ
    (x,y) = (150, 200) #プレイヤー画像の初期配置(画面中央)
    pygame.init() #pygameの初期化
    pygame.display.set_mode((w,h), 0,32) #画面設定
    screen = pygame.display.get_surface()

    #背景画像 (bg.jpg)の取得
    bg = pygame.image.load("board.png").convert_alpha()
    rect_bg = bg.get_rect()

    while(1):
        pygame.display.update() #画面更新
        pygame.time.wait(100) #更新画面間隔
        screen.fill((0, 0, 0, 0)) #画面の背景色
        screen.blit(bg, rect_bg) #背景画像の描画

        #終了用イベント処理
        for event in pygame.event.get():
            #閉じるボタンが押されたとき
            if event.type == QUIT:
                pygame.quit()
                sys.exit()

if __name__ =="__main__":
        main() 

image.png
図8:背景が設定できました

次に駒を配置してきます。

piece.py
# -*- coding: utf-8 -*-
import pygame
from pygame.locals import *
import sys

def main():
    (w,h) = (300, 400) #画面サイズ
    (x,y) = (150, 200) #プレイヤー画像の初期配置(画面中央)
    pygame.init() #pygameの初期化
    pygame.display.set_mode((w,h), 0,32) #画面設定
    screen = pygame.display.get_surface()

    #背景画像 (bg.jpg)の取得
    bg = pygame.image.load("board.png").convert_alpha()
    rect_bg = bg.get_rect()

    #王の画像(king.png)の取得
    king = pygame.image.load("king.png").convert_alpha()
    rect_king = king.get_rect()
    rect_king.center = (150,350) #王の初期配置

    #金の画像(gold.png)の取得
    gold = pygame.image.load("gold.png").convert_alpha()
    rect_gold = gold.get_rect()
    rect_gold.center = (50,350) #金の初期配置

    #銀の画像(silver.png)の取得
    silver = pygame.image.load("silver.png").convert_alpha()
    rect_silver = silver.get_rect()
    rect_silver.center =(250,350) #銀の初期配置

    #歩の画像(pawn.png)の取得
    pawn = pygame.image.load("pawn.png").convert_alpha()
    rect_pawn = pawn.get_rect()
    rect_pawn.center =(150,250)

    while(1):

        pygame.display.update() #画面更新
        pygame.time.wait(100) #更新画面間隔
        screen.fill((0, 0, 0, 0)) #画面の背景色
        screen.blit(bg, rect_bg) #背景画像の描画
        screen.blit(king, rect_king) #王の画像の描画
        screen.blit(gold, rect_gold) #金の画像の描画
        screen.blit(silver, rect_silver) #銀の画像の描画
        screen.blit(pawn, rect_pawn) #歩の画像の描画

        #終了用イベント処理
        for event in pygame.event.get():
            #閉じるボタンが押されたとき
            if event.type == QUIT:
                pygame.quit()
                sys.exit()

if __name__ =="__main__":
        main()

5.駒を動かそう

34shogi.py
# -*- coding: utf-8 -*-
import pygame
from pygame.locals import *
import sys

def main():
    (w,h) = (300, 400) #画面サイズ
    (x,y) = (150, 200) #プレイヤー画像の初期配置(画面中央)
    pygame.init() #pygameの初期化
    pygame.display.set_mode((w,h), 0,32) #画面設定
    screen = pygame.display.get_surface()

    #背景画像 (bg.jpg)の取得
    bg = pygame.image.load("board.png").convert_alpha()
    rect_bg = bg.get_rect()

    #王の画像(king.png)の取得
    king = pygame.image.load("king.png").convert_alpha()
    rect_king = king.get_rect()
    rect_king.center = (150,350) #王の初期配置

    #金の画像(gold.png)の取得
    gold = pygame.image.load("gold.png").convert_alpha()
    rect_gold = gold.get_rect()
    rect_gold.center = (50,350) #金の初期配置

    #銀の画像(silver.png)の取得
    silver = pygame.image.load("silver.png").convert_alpha()
    rect_silver = silver.get_rect()
    rect_silver.center =(250,350) #銀の初期配置

    #歩の画像(pawn.png)の取得
    pawn = pygame.image.load("pawn.png").convert_alpha()
    rect_pawn = pawn.get_rect()
    rect_pawn.center =(150,250)

    while(1):

        #キーイベント処理(キャラクタ画像の移動)
        pressed_key = pygame.key.get_pressed()
        #「←」キーが押されたらx座標を-5に移動
        if pressed_key[K_LEFT]:
            rect_king.move_ip(-5,0)
        #「→」キーが押されたらx座標を+5移動
        if pressed_key[K_RIGHT]:
            rect_king.move_ip(5,0)
        #「↑」キーが押されたらy座標を-5移動
        if pressed_key[K_UP]:
            rect_king.move_ip(0,-5)
        #「↓」キーが押されたらy座標を-5移動
        if pressed_key[K_DOWN]:
            rect_king.move_ip(0,5)

        pygame.display.update() #画面更新
        pygame.time.wait(100) #更新画面間隔
        screen.fill((0, 0, 0, 0)) #画面の背景色
        screen.blit(bg, rect_bg) #背景画像の描画
        screen.blit(king, rect_king) #王の画像の描画
        screen.blit(gold, rect_gold) #金の画像の描画
        screen.blit(silver, rect_silver) #銀の画像の描画
        screen.blit(pawn, rect_pawn) #歩の画像の描画

        #終了用イベント処理
        for event in pygame.event.get():
            #閉じるボタンが押されたとき
            if event.type == QUIT:
                pygame.quit()
                sys.exit()

if __name__ =="__main__":
        main()

下の動画のように動けば成功です!
https://www.youtube.com/upload

10
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
13