CHaser解説(Python編)

第3部 実践

1章 Pythonの画面の使い方

第1部でルールを学び、第2部でPythonの書き方を身につけました。第3部では、いよいよ、実際に対戦で使うプログラムを書くための、「Pythonの画面」と「対戦ルーム」の使い方を説明します。そして3章では、「こう動かしたい」というアイデアを、プログラムにする考え方を学びます。

ここからは、正式なPythonのプログラムです。 第2部で使ってきた、チュートリアルのPythonは、walk(Up)と書くだけで動く簡易版でした(画面が変換して動かしていて、普通のPythonとしては動きません)。ここからは、対戦で実際に使う、正式なプログラムの形を学びます。命令はplayer.walk(Up)のように書き、骨組みの中にコードを書きます。チュートリアルで書いたコードは、そのままでは動かないので、書き換えが必要です。

1章 Pythonの画面の使い方

トップ画面の「Python」(「文字で書こう!」)を開くと、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の名前を上書きすると、意図しない動きになります。

準備ができたら、次の章で、実際に対戦ルームに入る手順を確認しましょう。

YouTubeチャンネル

U-15プロコン舞鶴のYouTubeチャンネルを開設しました。大会の情報などを発信しています。 チャンネルを見る