日向俊二

著

■サンプルファイルのダウンロードについて
本書掲載のサンプルファイルは、一部を除いてインターネット上のダウンロードサービスからダウンロードすることができます。詳しい手順については、本書の巻末にある袋とじの内容をご覧ください。
なお、ダウンロードサービスのご利用にはユーザー登録と袋とじ内に記されている番号が必要です。そのため、本書を中古書店から購入されたり、他者から貸与、譲渡された場合にはサービスをご利用いただけないことがあります。あらかじめご承知おきください。

・本書の内容についてのご意見、ご質問は、お名前、ご連絡先を明記のうえ、小社出版部宛文書（郵送または E-mail）でお送りください。
・電話によるお問い合わせはお受けできません。
・本書の解説範囲を越える内容のご質問や、本書の内容と無関係なご質問にはお答えできません。
・匿名のフリーメールアドレスからのお問い合わせには返信しかねます。
本書で取り上げられているシステム名／製品名は、一般に開発各社の登録商標／商品名です。本書では、™ および ® マークは明記していません。本書に掲載されている団体／商品に対して、その商標権を侵害する意図は一切ありません。本書で紹介している URL や各サイトの内容は変更される場合があります。

はじめに
本書はゲームを作りながら楽しく Python をマスターすることを目的とした本です。

Python は、わかりやすく習得の容易なプログラミング言語です。Python はインタープリタで動作できるので、プログラムコードを実行した結果をすぐに見ることができます。また、Windows、Linux、iOS、macOS などさまざまな環境でほとんど同じように実行することができます。そのため、これからプログラミング（プログラム作成）を学ぼうという初心者にはうってつけの学習環境といえます。
一方で、Python そのものは、オブジェクト指向プログラミングという高度な概念が取り入れられた言語です。そのため、高度なプログラムを開発することも可能です。しかし、Python を使ってプログラムを作り始めるために難しい概念の高度な理解は必要なく、ただ単に「もの」（オブジェクト）を操作したり利用するという簡単なとらえ方で済みます。このことを利用して、グラフィックスを活用した見栄えの良いゲームも容易に作ることができます。
本書は、プログラミングを行ったことがない読者でも、Python のプログラミングに馴染み、Python で自分でプログラムを作成できるようになるように配慮してあります。具体的には、PC の基本的な操作方法、ワープロや表計算ソフトのような一般的なアプリの操作方法、ファイル名やフォルダ（ディレクトリ）の扱い方などについて知っていれば、本書でゲームプログラミングを学び始めることができます。また、本書ではゲームを作りながらプログラミングの大切な要素を学んでいくことができるので、プログラミングの基礎や重要な概念を自然に身につけることができ、それらを応用してより高度なプログラムを作ることができるようになり.
ます。
本書でプログラミングの楽しさを実感してください。

iii

本書の表記. abc . 斜体で表記された文字は、そこに具体的な文字や数値が入ることを表します。たとえば「Python.3.X 」は、X に数値が入り、「Python.3.6」や「Python.3.7」となることを表します。

. [...].

書式の説明において [ と ] で囲んだものは省略可能であることを示します。

. >.

OS のコマンドプロンプトを表します。Linux など UNIX 系 OS の場合は一般的にはOS のプロンプトは $ ですが、本書では > は OS のコマンドプロンプトを表しますので > を $ に置き換えてください。

本文を補足するような説明や、知っておくとよい話題です

特に重要なことです。

特定の項目についてのある程度まとまった補足説明です。

注意事項. ●. 本書の内容は本書執筆時の状態で記述しています。執筆時の Python の最新のバージョン
は 3.7 です。将来、Python のバージョンが変わるなど、何らかの理由で記述と実際とが異なる結果となる可能性があります。

. ●. 本書は Python のすべてのことについて完全に解説するものではありません。必要に応じて Python のドキュメントなどを参照してください。

. ●. 本書のサンプルは、プログラミングを理解するために掲載するものです。実用的なアプリとして提供するものではありませんので、ユーザーのエラーへの対処やその他の面で省略してあるところがあります。

. ●. ビープ音やサウンドの鳴るプログラムを実行する前に、必ずシステムの再生音量を小さく設定してください。

iv

動作を確認した Python のバージョン
3.2.1
3.6.5
3.7.0

本書に関する問い合わせについて
本書に関する問い合わせは、下記の事項を明記のうえ、sales@cutt.co.jp にメールでご連絡ください。
なお、問い合わせ内容は本書に記述されている範囲に限らせていただきます。特定の環境や特定の目的に対する問い合わせなどには応じられません。あらかじめご了承ください。

. ●. 氏名. ●. 連絡先メールアドレス. ●. 書名. ●. 記載ページ. ●. 問い合わせ内容. ●. 実行環境v

目

目次

次

はじめに....................................................................................................iii

第1章

基本のキ …… 1
1.1

Python の使い方......................................................................... 2

1.2

計算してみよう............................................................................ 6

1.3

文字列の表示................................................................................ 81.4スクリプトファイル...................................................................101.5入力.............................................................................................14

1.6

日本語の取扱い..........................................................................17Python の起動......................................................................................... 3
Python のインタープリタ.................................................................. 5
単純な加算................................................................................................ 6やや複雑な式........................................................................................... 7Hello, Python!.......................................................................................... 8関数を使わない方法.............................................................................. 9ファイルの作成.....................................................................................10
ファイルの保存.....................................................................................11
スクリプトの実行................................................................................12

Hello, Yourname...................................................................................14
スクリプトファイル............................................................................15
数値の入力..............................................................................................16
日本語で「こんにちは」....................................................................17
エンコーディングの指定..................................................................18

練習問題 ..............................................................................................19

第2章vi

じゃんけんゲーム …… 212.1ゲームの概要..............................................................................222.2ゲームの作り方..........................................................................22じゃんけんゲーム................................................................................22入力と表示..............................................................................................22目 次乱数...........................................................................................................23比較...........................................................................................................25判定...........................................................................................................27プログラムファイル............................................................................302.3ゲームの改良..............................................................................322.4サイコロ......................................................................................39状態の表現の一貫性............................................................................32繰り返し..................................................................................................34エラー処理..............................................................................................36さいころプログラム............................................................................39数の生成..................................................................................................40練習問題 ..............................................................................................44第3章キータイプゲーム …… 453.1ゲームの概要..............................................................................463.2キーコードの生成.......................................................................463.3ゲームの改良..............................................................................50キータイプゲーム................................................................................46文字コード..............................................................................................46文字コードの生成................................................................................48レベル.......................................................................................................50かかった時間の測定............................................................................56練習問題 ..............................................................................................59第4章

音当てゲーム …… 614.1システムのサウンド...................................................................624.2音当てゲーム..............................................................................67Beep .........................................................................................................62システムのサウンド............................................................................63環境による切り替え............................................................................64音高と周波数.........................................................................................66ゲームの概要.........................................................................................67
音階の定義..............................................................................................68スリープ..................................................................................................69
出題と答え合わせ................................................................................70vii

4.3

ゲームの改良..............................................................................73
音程の英語表記.....................................................................................73

再出題.......................................................................................................75

練習問題 ..............................................................................................78

第5章

GUI プログラミング …… 795.1

GUI プログラミング..................................................................805.2

ダイアログベースのアプリ........................................................865.3

4 択クイズ..................................................................................92

GUI アプリの構造.................................................................................80
ウィンドウの作成................................................................................82

BMI アプリ.............................................................................................86
BMI アプリのコード...........................................................................87
作成するアプリ.....................................................................................92
プログラムコード................................................................................93
プログラムの改良................................................................................97

練習問題 ........................................................................................... 103

第6章

pygame …… 105
6.1

ゲームのためのモジュール..................................................... 1066.2動き回る円............................................................................... 1156.3runner .................................................................................. 121pygame.................................................................................................106
pygame のサブモジュール............................................................107
ウィンドウの作成.............................................................................108
surface の座標系...............................................................................115作成するプログラム.........................................................................116

ゲームの概要......................................................................................121線を描くプログラム.........................................................................123runner プログラム ..........................................................................127

練習問題 ........................................................................................... 130viii

目 次第7章

ゲームサウンド …… 131
7.1

pygame のサウンド.............................................................. 132

7.2

サウンド付きの runner......................................................... 139

Sound.....................................................................................................132
pygame.mixer.music........................................................................135
サウンドを鳴らす場面....................................................................139
ゲーム中の BGM................................................................................140
ゲームオーバーのサウンド...........................................................141
プログラムリスト.............................................................................142

練習問題 ........................................................................................... 144

第8章図形 …… 1458.1図形の描画............................................................................... 1468.2ボールゲーム........................................................................... 154

楕円の描画 .........................................................................................146円弧の描画...........................................................................................147線の描画 ..............................................................................................148多角形の描画......................................................................................149
文字列の表示......................................................................................149
ゲームの概要......................................................................................154
変数の宣言...........................................................................................156
表示の更新...........................................................................................156
ゲームエンドのチェック...............................................................157
ボール衝突の判定.............................................................................158
キーイベントの処理.........................................................................159
プログラムコード.............................................................................160

練習問題 ........................................................................................... 163

第9章

イメージ …… 165
9.1

イメージの表示....................................................................... 166

9.2

スロットマシン....................................................................... 171

単純なイメージの表示 ..................................................................166
複数のイメージの表示....................................................................168
プログラムの概要.............................................................................171ix

データとイメージ.............................................................................173

練習問題 ........................................................................................... 179

第 10 章思考ゲーム …… 181
10.1マウス...................................................................................... 182

10.2

マルバツゲーム....................................................................... 184

マウスクリック..................................................................................182

プログラムの概要.............................................................................184
盤と○×...............................................................................................185
変数........................................................................................................186
ゲーム開始...........................................................................................187
思考コード...........................................................................................188
マウスクリック..................................................................................193

練習問題 ........................................................................................... 202

付録 …… 203
付録 A

Python の使い方................................................................... 204

付録 B

トラブルシューティング......................................................... 209

付録 C

練習問題解答例....................................................................... 215

付録 D

A.1
A.2A.3
B.1
B.2

Python のバージョン...........................................................204
インストール...........................................................................204
環境設定....................................................................................207

Python の起動.........................................................................209
Python 実行時のトラブル..................................................211

参考リソース........................................................................... 230

索  引...................................................................................................... 231x第1章
基本のキ

最初に簡単なプログラムを動かしてみて、Python のプログラムの最も基本的なことを学びます。
この章では、Python のインタープリタを使って単純な計算をしたり出力をする方法と、Python のプログラムファイル（スクリプトファイル）を実行する方法
を通して、Python の基本的な操作方法と簡単なプログラムの作り方や実行のしかたを説明します。

第 1 章 基本のキ

第1章

基本のキ

1.1 Python の使い方
最初に、Python を使い始めるために必要なことを説明します。すでに Python の基礎を習得している場合は、この章の説明内容は飛ばしてこの章の最後の練習問題に進んでもかまいません。

Python のインストールと環境設定については付録 A「Python の使い方」を参照してください。
Python はプログラミング言語です。Python というプログラミング言語で作成されたプログ
ラムは、Python という名前の Python のインタープリタが実行されている環境で実行されます。

Python という名前のプログラム自体は OS（Windows、Linux、macOS など）上で実行されています。

Python で作ったプログラム
PythonPython のインタープリタ（インタラクティブシェル）

OS（Windows、Linux、MacOS など）
コンピューター（ハードウェア）

図2.1●PythonのプログラムとPython、そしてOS

Python で作成したプログラムは、Python という名前のインタープリタを実行してそこで実行するか、インタープリタに読み込ませて実行します（1.4 節「スクリプトファイル」で説明します）。
少し混乱しそうですが、このあとの説明に従って実際にいろいろやってみるとよくわかるでしょう。

2

1.1

Python の使い方

Python の起動

1Windows の場合、アプリのリストまたはスタートメニューから、「Python.X .Y 」-「Python.

X .Y 」を選択してクリックします（X .Y は Python のバージョンを表します）。

2345
図2.2●Windows 10のスタートメニュー

6

Python のバージョンによっては、「Python.X .Y 」「- Python.(command.line)」を選択してクリックします（X .Y は Python のバージョンを表します）
。

78910

図2.3●Windowsのスタートメニュー

Windows では、コマンドプロンプトウィンドウや Windows PowerShell のプロンプトから「python」と入力して Python のインタープリタを起動することもできます。

Linux や macOS などの場合、端末（コンソール、ターミナルともいう）から「python」と入力します。

3第1章

基本のキ

システムによっては、「python」の代わりに「python3」や「python3.7」などバージョンを含めた名前を入力します。また、「bpython」、「bpython3」などで Pythonを起動できる場合もあります。さらに、スタートメニューから「IDLE (Python xx)」を選択して Python を使うことやコンソールから idle と入力して Python を使うことができる場合もあります（インストールする環境と Python のバージョンによって異なります）。

Python が起動すると、Python のメッセージと一次プロンプトと呼ばれる「>>>」が表示されます。これが Python のインタープリタのプロンプトです。
Python 3.7.0 (v3.7.0:eb96c37699, May(AMD64)] on win32

2 2018, 19:02:22) [MSC v.1913 64 bit

Type "help", "copyright", "credits" or "license" for more information.
>>>

こ れ は Windows で Python.3.7.0 の 場 合 の 例 で す。 バ ー ジ ョ ン 番 号 や そ の あ と の 情 報（Python をコンパイルしたコンパイラやプラットフォームの名前など）は、この例と違っていてもかまいません。
たとえば、Linux なら、次のように表示されることがあります。
[saltydog@localhost ~]$ python3.6

Python 3.6.5 (default, Apr 10 2018, 17:08:37)[GCC 4.8.5 20150623 (Red Hat 4.8.5-16)] on linux

Type "help", "copyright", "credits" or "license" for more information.
>>>

いずれにしても、「Type."help",."copyright",."credits".or."license".for.more.information.」を含む Python のメッセージと Python のインタープリタのプロンプト「>>>」が表示されれば、Python のインタープリタが起動したことがわかります。

4

1.1

Python の使い方

1
何かうまくいかない場合は、付録 A「Python の使い方」や付録 B「トラブルシューティング」を参照してください。なお、本書では Python 3.0 以降のバージョンを使2うことを前提としています。

3

Python のインタープリタ

4

プロンプト「>>>」が表示されている環境を、Python のインタープリタ、またはインタラ

5

クティブシェルといいます。インタープリタは「解釈して実行するもの」という意味、インタラクティブシェルは「対話型でユーザーからの操作を受け付けて結果や情報を表示するもの」6という意味があります。

Python のインタープリタは、Python の命令や式などを読み込んで、その結果を必要に応じ7て出力します。

8

Python のインタープリタのプロンプト「>>>」は、ユーザー（Python のユーザーはプログラムを実行する人）からの命令や計算式の入力を受け付けることを表していま9す。このプロンプトに対して命令や計算式などを入力することで、あとで説明するようなさまざまなことを行うことができます。

10

Python を使っているときには、OS（コマンドウィンドウ、ターミナルウィンドウなど）のプロンプトである「>」や「#」、「$」などと、Python のインタープリタを起動すると表示されるインタープリタのプロンプト「>>>」を使います。この 2 種類のプロンプトは役割が異なるので区別してください。

5

第1章

基本のキ

1.2 計算してみよう
最初に Python で計算をしてみましょう。

単純な加算
Python のプロンプトに対して「2+3」と入力（最後に Enter キーを押す）してみます。
>>> 2+35>>>

上に示したように、2.+.3 の結果である 5 が表示されたあとで、新しいプロンプトが表示されるはずです。
引き算や掛け算、割り算を行うこともできます。引き算の記号は「-」（マイナス）ですが、掛け算の記号は数学と違って「*」（アスタリスク）、割り算の記号は「/」（スラッシュ）です。
たとえば、12.­.5 を実行すると次のようになります。
>>> 12-57

また、たとえば、6 × 7 を実行すると次のようになります。
>>> 6*742

さらに、たとえば、8 を 2 で割ると次のようになります。
>>> 8/24.0

61.2

計算してみよう

13.0 より前のバージョンの Python では、8/2 の結果は小数点の付かない 4 になります。3.0 より前のバージョンの Python では、整数だけの割り算では、結果の小数点2以下は切り捨てられて整数になります。たとえば、3/2 の結果は 1 になります。本書
は 3.0 以降の Python を使う前提で説明しています。

34

やや複雑な式5

もっと複雑な式も、もちろん計算できます。次の例は、123.45. ×.(2.+.7.5). ­.12.5. ÷.3 の計算例です。

6>>> 123.45*(2+7.5)-12.5/31168.6083333333333

7

Python を終了するときには、プロンプトに対して quit() を入力します。

8>>> quit()

910quit() を入力しても終了できないときには、Windows では Ctrl キーを押しながら Zキーを押してみてください。Linux では Ctrl キーを押しながら D キーを押してみてください。

電卓のように計算をするだけでは面白くありませんね。実際には、計算式も「式文」という種類の立派なプログラムコード（文）なのですが、計算だけではなく、次に、もう少しプログラムらしいことをやってみましょう。

7

第1章

基本のキ

1.3 文字列の表示
C 言語の最初の解説書である「プログラミング言語 C」以来、プログラミングの最初のステップは伝統的に「Hello.world!」と表示するコードを示すことになっています。ここではPython で文字列を表示する方法を説明します。

Hello, Python!
ここで「Hello,.Python!」と出力する次のようなプログラムを実行してみましょう。プログ
ラムの意味はあとで考えることにします。
>>> print ('Hello, Python!')Hello, Python!
>>>

入力したプログラムコードは「print ('Hello, Python!')」です。次の行の「Hello,.

Python!」は、プログラムコードを実行した結果です。

古いバージョンの Python では、「print 'Hello, Python!'」としないとエラーになることがあります。その場合は、3.0 以降の新しいバージョンの Python をインストールすると良いでしょう。

「print ('Hello, Python!')」の「print」は、そのあとの丸括弧の中の内容を出力する命令です。

「print()」のような何らかの結果をもたらす命令を関数といいます。関数については第 4 章で説明します。

8

1.3

文字列の表示

出力する内容は「Hello,.Python!」なのですが、これを文字列であると Python のインター

1

プリタに知らせるために、「'」（シングルクオーテーション）で囲みます。
「'」の代わりに文字列を「"」（ダブルクオーテーション）で囲ってもかまいません。

2>>> print ("Hello, Python!")Hello, Python!

3>>>

4

同じようにして、計算式を出力することもできます。

5>>> print (2*3+4*5)
26>>>

6

今度は文字列ではなく式を計算した結果である数値を出力したので、丸括弧の中身を「'」7や「"」で囲っていないことに注意してください。
8
文字列は「'」や「"」で囲み、数式や数値そのものは囲わないという点に注意しましょう。

910

関数を使わない方法
print() を使わないで、単に文字列や式を入力しても、入力した文字列や式の結果の値が出力されます。

>>> 'Hello, Python!''Hello, Python!'>>> "Hello, Python!"'Hello, Python!'>>> 2*3+4*5
26>>>

これは、print() を省略した 1 つの命令と考えることもできますが、Python では入力され9

第1章

基本のキた値（文字列も 1 つの値です）がそのまま出力されると考えることもできます。

print() を 使 う 場 合 と 使 わ な い 場 合 で ま っ た く 同 じ で あ る わ け で は あ り ま せ ん。
「print("Hello, Python!")」を実行すると「Hello, Python!」とクオーテーションで囲まれずに文字列だけが出力されますが、プロンプトに対して「'Hello, Python!'」と入力する（最後に Enter キーを押す）と、「'Hello, Python!'」のようにクオーテーションで囲まれた文字列が出力されます。このクオーテーションは、値が文字列であることを表しています。

1.4 スクリプトファイル
プログラムをファイルに保存することもできます。

ファイルの作成「print ("Hello, Python!")」という 1 行だけのプログラムのファイル（スクリプトファイル）を作成して保存してみましょう。

スクリプトファイルを準備するために、Python インタープリタをいったん終了してOS のコマンドプロンプトに戻ります。Python インタープリタをいったん終了するには、「quit()」を入力します。

テキストエディタ（Windows のメモ帳や Linux の gedit など、好きなエディタ）で、「print("Hello, Python!")」と 1 行入力します。

10