LoginSignup
7
10

More than 3 years have passed since last update.

[Python]pipからゲームをインストールして遊んでみた

Last updated at Posted at 2020-01-05

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

パックマンが遊べます。

pacman
(Free Python Games - Main pageより)

よく見かける -m のオプションですがモジュール内の main() の中を実行するみたいです。

もし使い方がわからない時は、、、

Free Python GamesのMain pageGithubのコードから推測します。ノーヒントだと取説がないので初見で操作するのが難しいゲームがいくつか存在します。

例としてpong (Atariが発売した卓球ゲーム。家庭用テレビゲームでは世界初。)ですが、

pong.py
#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のコードにあるコメントには練習問題が書かれています。

python
"""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

単純に敵キャラの色を赤から緑に変えてみると下記の通りとなります。

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')

output.gif

Future

pythonで動かすDemoゲームを紹介しました。
上記で紹介したPongのようなふたりで遊ぶゲームも簡易的に作られているのでCPUがないため、ひとりで遊びたい場合は自作でCPUを作るしかなさそうです。
てか、昔のファミコンですが敵キャラの動きとかどうやって実装していたのでしょうか:sweat_smile:

Reference

7
10
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
7
10