Motive
RaspberryPiにデフォルトでPythonGamesとしてゲームプログラミングが内蔵されているのですが、Macでも出来ないかと思って調べてみたのがきっかけです。
RaspberryPiにあるすべてのゲームは独自で作られているためそのものは完全に取得できなさそうでしたが類似のライブラリがあったので紹介します。
それは「Free Python Games」 で、学校教育の目的で2012年に作られたライブラリです。アメリカの中学高校でふつ〜に使われているっぽいです。
Method
仮想環境構築 + 有効化
python3 -m venv venv_game
source ./venv_game/bin/activate
ゲームをインストール
pip install freegames
ゲームを一覧表示
python3 -m freegames list
ant
bagels
bounce
cannon
connect
crypto
fidget
flappy
guess
life
maze
memory
minesweeper
pacman
paint
pong
simonsays
snake
tictactoe
tiles
tron
21種類あります。
ゲームで遊んでみる
python3 -m freegames.pacman
パックマンが遊べます。
(Free Python Games - Main pageより)
よく見かける -m
のオプションですがモジュール内の main()
の中を実行するみたいです。
もし使い方がわからない時は、、、
Free Python GamesのMain pageかGithubのコードから推測します。ノーヒントだと取説がないので初見で操作するのが難しいゲームがいくつか存在します。
例としてpong
(Atariが発売した卓球ゲーム。家庭用テレビゲームでは世界初。)ですが、
#Line:86-89
onkey(lambda: move(1, 20), 'w')
onkey(lambda: move(1, -20), 's')
onkey(lambda: move(2, 20), 'i')
onkey(lambda: move(2, -20), 'k')
player1 は w
s
keyで、player2は i
k
でパドルの上下を操作することができます。
Learn
pacmanのコードにあるコメントには練習問題が書かれています。
"""Pacman, classic arcade game.
Exercises
1. Change the board. (ボードを変えてみよう)
2. Change the number of ghosts. (敵キャラの数を変えてみよう)
3. Change where pacman starts. (パックマンのスタート位置を変えてみよう)
4. Make the ghosts faster/slower. (敵キャラのスピードを変えてみよう)
5. Make the ghosts smarter. (敵キャラを賢くしてみよう)
"""
1~4まではいいとして、最後の問題は機械学習かDeepLearningを使うなどの本格的な思索が必要そうです。
コード改変して実装してみたいとき
python3 -m freegames copy pacman
python3 pacman.py
単純に敵キャラの色を赤から緑に変えてみると下記の通りとなります。
#Line:126-142
#たぶんここで敵キャラを動かしているっぽい
for point, course in ghosts:
if valid(point + course):
point.move(course)
else:
options = [
vector(5, 0),
vector(-5, 0),
vector(0, 5),
vector(0, -5),
]
plan = choice(options)
course.x = plan.x
course.y = plan.y
up()
goto(point.x + 10, point.y + 10)
dot(20, 'green') #dot(20, 'red')
Future
pythonで動かすDemoゲームを紹介しました。
上記で紹介したPong
のようなふたりで遊ぶゲームも簡易的に作られているのでCPUがないため、ひとりで遊びたい場合は自作でCPUを作るしかなさそうです。
てか、昔のファミコンですが敵キャラの動きとかどうやって実装していたのでしょうか
Reference
- Free Python Games - Main page
- Free Python Games - Github
- コマンドライン (option -m ) - Python Document
-
pygame
- 今回は使っていないです。
-
タートルグラフィックス
- Python標準のライブラリ(pip不要)。今回紹介したFree Gamesのベースライブラリ。