第1部でルールを学び、第2部でPythonの書き方を身につけました。第3部では、いよいよ、実際に対戦で使うプログラムを書くための、「Pythonの画面」と「対戦ルーム」の使い方を説明します。そして3章では、「こう動かしたい」というアイデアを、プログラムにする考え方を学びます。
ここからは、正式なPythonのプログラムです。 第2部で使ってきた、チュートリアルのPythonは、
walk(Up)と書くだけで動く簡易版でした(画面が変換して動かしていて、普通のPythonとしては動きません)。ここからは、対戦で実際に使う、正式なプログラムの形を学びます。命令はplayer.walk(Up)のように書き、骨組みの中にコードを書きます。チュートリアルで書いたコードは、そのままでは動かないので、書き換えが必要です。
1章 Pythonの画面の使い方
トップ画面の「Python」(「文字で書こう!」)を開くと、Pythonでプログラムを書いて、その場で動かせる画面が開きます。
この画面は、第2部0章で説明した簡易版のチュートリアルのPython画面とは別のもので、正式なPythonのプログラムを書く画面です。ここは対戦用で、命令にplayer.を付け、骨組みの中にコードを書きます。チュートリアルで書いたコードを持ってくるときは、命令の前にplayer.を付け、map_info = player.get_ready()で周辺情報を受け取る形にしてください。
画面の構成
画面は、左側のエディタと、右側の対戦画面に分かれています。
- エディタ:コードを書く場所です。上のタブで、書く対象を切り替えます。
- プレイヤー:自分のプログラムを書きます。最初は、第2部0章で説明した骨組みが書かれています。
- 対戦AI:練習相手のプログラムです。最初は、発見したものを記憶しながらアイテムを集め、隣り合った相手には
putで応戦するプログラムが入っています。書き換えたり、別のファイルに差し替えたりできます。 - マップ:練習で使うマップを、自分で作れます。
- 対戦画面:実行すると、自分(Cool)と対戦AI(Hot)の対戦の様子が、リアルタイムで表示されます。
- 出力欄:対戦画面の下にあります。
print()で出力した内容や、エラーメッセージが表示されます。画面を開いた直後は、Pythonを動かす準備に少し時間がかかります。出力欄に「読み込みが完了しました」と表示されてから、実行しましょう。
上部のボタンは、次のとおりです。
| ボタン | 働き |
|---|---|
| 実行 | プレイヤーと対戦AIのプログラムを動かして、対戦を始める |
| 停止 | 対戦を止める |
| ダウンロード | 書いたプログラムを、ファイル(.py)として保存する |
| アップロード | 保存したファイルを、エディタに読み込む |
この画面の対戦は、ブラウザの中だけで動きます。ほかの人と対戦するときの「対戦ルーム」とは別のものなので、何度でも気軽に試せます。
マップを作る
「マップ」タブでは、練習で使うマップを作れます。
- ランダムマップを生成:ランダムなマップを作ります。
- 幅・高さ・ターン数:マップの大きさと、対戦のターン数を決められます。
- ツール:床、ブロック、アイテム、プレイヤ(Cool)、対戦AI(Hot)のうち、置きたいものを選んで、マスをクリックして置きます。
- 通常・ミラー・回転対称:置いたものを、対称の位置にも同時に置く機能です。
自分の使う場面に合わせて、マップを作っておくと、ステージ8-1のような障害物のある場面や、相手が近くにいる場面を、何度でも再現できます。
ブロックから、Pythonに変換する
「プログラミング」の画面(Blocklyで組む画面)には、「Pythonで編集」というボタンがあります。ブロックで組んだプログラムをPythonのコードに変換して、この画面で続きを書けます。ブロックで骨組みを作ってから、Pythonで細かく直す、という進め方です。変換されたコードは、変数や関数の名前がローマ字になるので、読みにくいときは、名前を書き換えてください。
実行結果の見方
「実行」を押すと、対戦画面に、対戦の様子と、残りのターン数、Cool側・Hot側のポイント、残りのアイテム数が表示されます。うまく動かないときは、まず出力欄を確認します。エラーメッセージが出ていたら、そこに、どの行で、どんな種類のエラーが起きたかが書かれています。
よく見かけるエラーは、次のとおりです。
| エラーの種類 | 主な原因 |
|---|---|
SyntaxError |
:の付け忘れ、かっこの閉じ忘れなど、書き方の間違い |
IndentationError |
インデントが揃っていない |
NameError |
変数や関数の名前を間違えた(スペル、大文字・小文字)、または、まだ作っていない名前を使った |
IndexError |
リストの範囲外の番号を指定した(search_info[9]など) |
KeyError |
方向として使えない値を、walkやputに渡した(斜めの方向など) |
エラーメッセージの行番号を手がかりに、その行と、その1つ前の行を見直しましょう。
注意したいこと
- 骨組みを壊してしまう:
importの行、mainの定義、if __name__ == "__main__":以降を消すと、動かなくなります。自分で書き換えるのは、while True:の中と、自分で作る関数(def mainより上)です。 - 書いたプログラムを、ダウンロードし忘れる:ブラウザを閉じると、書いたコードは消えてしまうことがあります。区切りのよいところで、「ダウンロード」を押しましょう。対戦ルームで使うときにも、このファイルを使います。
print()を、たくさん書きすぎる:毎ターン出力すると、出力欄が読みにくくなります。確かめたいことだけを、出力しましょう。Upなどの名前を、変数名に使ってしまう:Up = 3のように、CHaserの名前を上書きすると、意図しない動きになります。
準備ができたら、次の章で、実際に対戦ルームに入る手順を確認しましょう。