「人工知能といえばPython(パイソン)」
「シンプルなコードといえばPython(パイソン)」
「ストⅡといえば、バイソン」
「韓国代表といえば、パク・チソン」
大喜利もどきが綺麗に決まったところで、今回は
今アツいプログラミング言語、Python(ぱいそん)をご紹介。
PythonのTkinterを利用してゲームを作成してみました。
2Dの簡単な迷路をゴールに向かって進むゲームです。
もしランダムに移動する敵と接触した場合は戦闘となります。
ゲームライブラリ等は利用せずプログラムの基本構文を
盛り込んだ作りとなっています。
Pythonのゲーム作り。変数の使い方
変数はUSBメモリSDカードのようなデータを保存する機能です。
ゲーム中ではプレイヤーや敵の縦と横の位置を保存しています。
1 2 |
player_x = 1 #プレイヤーを左から1番目にする player_y = 1 #プレイヤーを上から1番目にする |
これで左上にプレイヤーが表示されます
パイソンのゲーム作り。配列(リスト)の作成
配列は仕切りのついた1つの箱にデータ並べて入れたものです。
ゲーム中では配列に設定された数字に従ってマップの画像を表示して
キャラクタや敵、マップを表しています。
0の部分 | 空 |
1の部分 | 木 |
3の部分 | 家 |
5の部分 | プレイヤー |
9の部分 | 敵 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
map_data = [ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,] , [1, 5, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1,] , [1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1,] , [1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1,] , [1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1,] , [1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1,] , [1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1,] , [1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 9, 1,] , [1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1,] , [1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1,] , [1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1,] , [1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1,] , [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 1,] , [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,] ] |
結果は次のようになります。
パイソンのゲーム作り。条件分岐
ある条件によって処理を変えたい場合に利用します。
ゲーム中ではプレイヤーの移動先によって処理を変更しています。
1 2 3 4 5 6 7 8 |
#移動先が1(木)の場合は移動させない if mapBlock == 1: return False #移動先が3(家)の場合はエンディングの処理をする if mapBlock == 3: ending() return False |
Pythonのゲーム作り。関数とは
関数は複雑な処理をまとめて簡単に利用できるようにしたものです。
ゲーム中ではキャラクターの動きを関数にしていて、キーボードを押すたびに
関数を実行して動作させています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#キーボードの上矢印が押された場合に呼び出す関数 def up(event): global player_y global player_x #上に移動できない場合関数を終了 if not canMove(player_x, player_y-1, playerImageIndex): return #上に移動できる場合現在位置を空(0)にする map_data[player_y][player_x] = 0 player_y -= 1 #移動先にキャラクタのイメージを上むきで表示する map_data[player_y][player_x] = playerImageIndex |
パイソンのゲーム作り。繰り返し処理
同じ処理を繰り返し実行したい場合に利用します。
ゲーム中では敵をランダムに移動させる処理は共通なので
繰り返し処理で敵を動かしています。
1 2 3 4 |
#敵の数分処理を繰り返す for enemy in enemy_list: #敵をランダムに動かす関数を呼び出す enemyIndex = enemy.randEnemy(player_x, player_y) |
Pythonのクラスとは。
クラスとは、設計図のようなものです。
今回のゲームでは敵を複数体出現させていますが、1対1対それぞれに処理を書いていくのは
大変なので、「敵はランダムに動いて、体力と攻撃力を持つ」という設計図を作ります。
この設計図をクラスと呼び、コピーして敵を作成していきます。
なお、コピーされ、実際に作成された敵をオブジェクトと呼びます。
Pythonを使う利点
pythonはプログラミング初心者におすすめの言語です。
その理由はインデント(字下げ)が必須という点です。
例えばjavascriptで条件分岐を書く場合次のように書きます
1 2 3 4 5 |
if(条件){ 条件に一致した場合にする処理 }else{ 条件に一致しない場合にする処理 } |
プログラム学習初めのころは複雑な処理をあまり書かないため、
下のようにインデントを意識せずに続けて書いてしまう方が多々見受けられます
1 |
if(条件){条件に一致した場合にする処理}else{条件に一致しない場合にする処理} |
この書き方でももちろん動作はするのですが後々複雑なプログラムを書いていく際に
if分の処理範囲を判別しづらくなってしまうのです。
pythonの場合は下記のように必ずインデントをしなければなりません。
インデント幅で処理の範囲を指定します。
そのため、括弧は不要となり見やすいプログラムとなります。
1 2 3 4 |
if 条件: 条件に一致した場合にする処理 else: 条件に一致しない場合にする処理 |
自然に綺麗なプログラムがかけるのは大きなメリットですね!
また、今回はゲームを作成しましたが、pythonはAIやデータ分析の部分でも広く利用されており、
学習しがいのある言語なので興味がある方は触ってみてください!
今回、久しぶりにバイソンを見て、15年ぶりに格闘ゲームがやりたくなってきました(笑)
今の(ストⅤ)バイソンってこんな感じなんですね~。
ちょ~カッコイイじゃないっすか。
それでは、また。
今回のプログラムを作成するにあたり参考にした書籍
12歳からはじめる ゼロからの Pythonゲームプログラミング教室
ゲームに使用した素材
ぴぽや様
http://pipoya.net/