Python3 を子供に教えるためにオセロを作ってみた（１）

# Python3 お勉強のためにオセロゲームを作ろう
　自粛生活が長引いているので、何もしないで鬱々とした日を送るのも勿体ないということで、Python3 の勉強を始めました。python は言語ですが、その言語の応用先としては、スタンドアロンスクリプトから、クラウドサービス、ゲーム、[科学技術計算](http://www.turbare.net/transl/scipy-lecture-notes/intro/index.html)まで実に幅広くあります。取りあえず、プログラムの基礎から振り返りながら、python を学んでいければと考えています。

###はじめに
　息子に教えるために書いた記事なのですが、思ったよりも Qiita で反応が良いみたいなので、きっとお子さんにプログラムを教えたいと思ってらっしゃる方や、もっと簡単にプログラムを勉強したいと思ってる人が多いんだと感じました。この記事を書いてから、息子は日常生活をプログラム的に表現するようになってくれました。下に書いているように、プログラムの基礎は「行動、条件、繰り返し」だけなのです。なので、ママに怒られることも、お小遣いをねだることもプログラム的に表現して笑いを誘ったりしています。一方、息子の野望は大きくて**「Fortnite みたいなゲームが作りたい！」**と言います。それはもちろん良いのですが、目標をいきなり大きく持つと挫折します。これはいわば、「最初に英語を勉強しておかないと、英語の法律用語辞典は理解できない」というのと同じだと説明しています。「Python という言語とプログラムの性質さえ理解できれば、Unity のような3Dモデリングを使ったプログラミングにだっていけるようになりますが、いきなり Unity から入るのは難し過ぎるでしょう」
　ここで書いたプログラムは「行動、条件、繰り返し」からなるべく逸脱しないように、この基礎に忠実に作りました。なので冗長と感じるコードがあってもご容赦ください。
　ここで記載しているソースコードはお好きなだけ改変なり何なりしていただいて使っていただいて結構です。それでは始めて行きましょう。

## 簡単なプログラム
　プログラミングを学ぶ時に言語を学ぶのか、ライブラリを学ぶのか悩むことが多くあります。現在の高度なプログラミングを可能とする開発環境の多くは、言語そのもよりもライブラリやクラスを理解することが重要になってきています。言語という側面で見ると、c や c++ 、java や php を理解できる人なら python は比較的スンナリ入り込める言語では無いかと思えます。

　ところで、プログラム言語の勉強において、最も退屈で最も役に立たないサンプルプログラムは Hello World と呼ばれるプログラムだと思っています。プログラムの勉強で、これほど学び手のやる気を削ぐサンプルプログラムはありません。

　ですから、このコンテンツでは Hello World は使いません。その代わりにオセロゲームを作ってみたいと思います。

## プログラムの基礎はたったの3つ！？
　どんな言語を使ったとしても、プログラムを作る時に必要な基礎は3つしかありません。

|  基礎                |説明　　　　　　　　　　　　　　　  　      |
|:--------------------|:-------------------------------------|
| 行動（制御文）          |一歩前に進む　      |
| 判定（条件文）          | 壁にぶつかる？　|
| 繰り返し（ループ）      | 一定回数繰り返す、永遠に繰り返す　|

プログラムっぽく書くとこんな感じです。このプログラムは壁にぶつかったら右に回転して、それまでは進み続けます。永遠に繰り返すので一生歩き続けるプログラムになります。はい、これでプログラムの基礎のお勉強はおしまいですｗ

```
永遠に繰り返す｛
　壁にぶつかる？
　　はい：体を右に回転する
　　いいえ：一歩前に進む
｝
```

## Python の基礎中の基礎はインデント
　Python を学ぶならここだけは事前に説明しておく必要があります。

　Python では、インデントと呼ばれる言語の構造化が強制されています。そのせいで、読みやすく作り手としても冗長にならないプログラムを作ることができるようになっています。Python の場合は、条件がマッチしたプログラムのブロックであることを示すには、インデント下げをします。以下のプログラムは「年が2020年で12月31日」という条件の場合、「年末なので翌日は2021年1月1日」というメッセージを表示して、年を＋1して、月日を1にリセットするプログラムです。

```python
if year == 2020 and month == 12 and day == 31:
    print("年末なので翌日は2021年1月1日")
    year += 1
    month = 1
    day = 1
```
もしも、下のように書いてしまったら条件にマッチした場合には、「年末なので翌日は2021年1月1日」というメッセージが表示され、マッチしてもしなくても年は＋1され、月と日が1にリセットされてしまうプログラムになってしまうというわけです。

```python
if year == 2020 and month == 12 and day == 31:
    print("年末なので翌日は2021年1月1日")
year += 1
month = 1
day = 1
```
## 実際にオセロゲームを作ってみましょう！！
　さて、では早速オセロゲームを作っていきたいと思うのですが、え？いきなり？ Python のお勉強はなし？と思うかもしれませんが、ここでの勉強の仕方は作ったものをベースに学ぶことから始めます。オセロゲームを作りながら、Python マスターを目指しましょう！！

　オセロゲームは皆さんご存じの通り、8×8のマス目の中を白と黒のコマを使って多くの陣地を取った方が勝者となるボードゲームです。

　オセロゲームのロジックを作ってしまえば、そのプログラムは通信対戦ゲームにも、グラフィックバリバリの見栄えの良いゲームにも作り替えることができますので、ここではCUIベースのシンプルなオセロゲームをまずは作っていくことにしましょう。

　今回プログラミングに使うツールですが、PyCharm という開発ツールを使います。お持ちで無い方は以下のサイトから PyCharm をダウンロード＆インストールしてください。

ここから PyCharm をダウンロードしてください＞＞[Python IDE - PyCharm](https://www.jetbrains.com/ja-jp/pycharm/)

　出来上がりのオセロゲームは、こんな感じのテキストベースのオセロゲームになりますよ。シンプルですが、ちゃんと2人で対戦もできるオセロゲームになりますので一緒に作っていきましょう！
![スクリーンショット 2020-05-23 22.19.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/265655/92cc1f84-5265-2295-c3b0-2ef1badb7e62.png)

[Python3 を子供に教えるためにオセロを作ってみた（2）>>](https://qiita.com/tsFox/items/51f405e6cb0955b5a613)