【Python】100 Days of code 21-30days【Udemy】

Python

Udemy講座の100 Days of codeを進めていきます。今回は21-30daysです。

100 Days of Code - The Complete Python Pro Bootcamp for 2021
Master Python by building 100 projects in 100 days. Learn to build websites, games, apps, plus scraping and data science

day21 Build the Snake Game Part2

day20に引き続きスネークゲームの作成を行っていきます。

part2では

  • food(スネークのエサ)、及びスネークとの接触を実装
  • スコアの実装
  • 画面端との接触を実装
  • 自身のbodyとの接触の実装

を行っていきます。

エサの生成はrandomを用いて、接触はTurtleにあるdistanceメソッドを使用します。これは引数に与えたものとの距離を算出してくれるメソッドです。これを用いて頭とエサの距離がエサのサイズより距離が小さくなればエサをゲットしたと判定させます。distanceメソッドを用いない場合は、頭のxの位置、yの位置がエサの(x, xの位置+幅)、(y, yの位置+高さ)内に存在するかどうかジャッジすればいけます。

さらにエサをゲットした際には、スネークが大きくなります。スネークが移動した後、尻尾の部分をスネークの最後に追加することで1マス移動しつつ、最後の尻尾がその場に残り、体が大きくなるように実装しています。

スコアボード、壁衝突時のゲームオーバーの文字はやはりメソッドがあるのでリファレンスを参照し、実装するのみです。ちなみに講義では文字色の変更をしていないですが、背景色が黒、スネークの色が白なので、スコア、ゲームオーバーの色は変更したほうがいいと思います。bodyと被ってしまうと見えなくなってしまうので。

ここで扱う技術はクラスの継承と、リストのスライスです。クラスが理解できていれば継承もそこまで難しくない技術なのでは、という感触です(クラスの理解は若干大変で自分も完ぺきではないです。)。スライスに関してはこれまで何度も使ってきたことがあったのでいまさら感はありましたが、一応復習として。

完成版です。

day22 Build Pong: The Famous Arcade Game

Pongゲームの実装を行います。

これまでのプログラムと同様、作成する際に、プログラムの機能を分割し、1つ1つ小さい問題として考えていきます(中々苦手です。)。今回のプログラムで言うと

  • 画面を作成
  • パドル作成&操作
  • 反対側のパドル作成
  • ボールと動きの作成
  • 壁とボールの衝突
  • パドルとボールの衝突
  • パドルにボールを当てられなかったとき
  • スコアの記録

day23 The Turtle Crossing Capstone Project

よくある横断ゲームです。このセクションでは難易度を自分で選ぶことができ、動画を見ながら一緒に作成(Normal)、Step1と2のみの参照(Hard)、Step1のみの参照(Expert)にわかれています。Step1は要件のみが記載されており、Step2はこれをBreak downしたもの、残りのステップは実際にコードを記載していく動画になります。自分はHardで行いました。

SnakeGameとPongで教わったことを合わせつつ実装するとうまく実装できるようになっています。流れが気持ちいいです。

day24 Files, Directories and Paths

ファイル、ディレクトリのパスに関するセクションです。データの読み書きができるようになります。これを用いてSnakeゲームのハイスコアをファイルに保存し、ゲーム再開時にハイスコアを保持した状態で再開できるように変更を加えます。

day25 Working with CSV Data and the Pandas Library

pythonでCSVデータの扱いを行います。といったらもちろんPandasですよね。自分はPandasには触れていたのでサラリと流しましたが、初めのうちは少し慣れないかもです。columnの扱いとapplyによって本当に色々なことができるのでマスターしておくべきライブラリです。

day26 List Comprehension and the NATO Alphabet

リスト内包表記についてです。

リストに要素を追加する際にはappendメソッドがあり、既存のリストに何か処理を加えるときは「新しいリストを作成、for文で既存リストから要素を取得、処理を加えて新しいリストへappend」という流れが最初に思いつきますが、リスト内包表記はこれらの作業を1linerで書くことができます。

# append
list = [something, something2, ...]
new_list = []
for elem in list:
    new_elem = elem + do_something
    new_list.append(new_elem) 

# list comprehension
list = [something, someghint2, ...]
new_list = [elem + do_something for elem in list]

4行あった部分が1行になりました。とてもスッキリするのと同時にリスト内包表記を使用したほうが処理速度が速いです。辞書型に関しても同様の記述ができます。

リスト内包表記に関してはまた別途記事を書きたいと思っております。

day27 Tkinter, *args, **kwargs and Creating GUI Programs

GUIを作成するTkinterを用いてargs、kwargsの学習を行います。

windowの表示、文字、入力欄、ボタンの使い方を学び、mile to kmをGUI上で行うプログラムを実装します。

シンプルな自作関数からargsの使用感を教えてくれるので、特に問題なく使用できます。Tkinterのようなargs,kwargsを使用している関数を使用する場合にはこれまたドキュメントを参照にすることが必須かと思います。

day28 Tkinter Dynamic Typing and the Pomodoro GUI Application

Tkinterを使用して、ポモドーロタイマーを作成します。

  • UIのセットアップ
  • タイマー
  • カウントダウン
  • タイマーリセット

これらの関数を作成し、ボタンをクリック、時間の経過でそれぞれの関数が作動するように実装していきます。

このようなアプリを作成する場合には、昨日はもちろんGUI上の見た目が大事と感じます。細かい位置の調整なんかは中々に時間がとられますので。。

day29 Building a Password Manager GUI App with Tkinter

同じくTkinterを使用してパスワードマネージャーを作成していきます。

Websiteには保存したいサイト名、Email/Usernameにはアカウント名(このメールアドレスはもちろん仮のものです)、Passwordには保存したいパスワード、Generate Passwordのボタンをクリックするとランダムなパスワードが生成され、Addをクリックでこれらの情報をtxtファイルに保存することができます。

これまで使用してきたメソッドを使用して各チャレンジに取り組んでいきます。

  • 画像の配置
  • テキスト、入力欄、ボタンの配置
  • データの保存

パスワードの生成にはday5で作成したパスワード生成を使用しています。

day30 Errors, Exceptions and JSON Data

try, except文の使い方を学んでいきます。

具体的にはday29で作成したパスワードマネージャーにSearchボタンを追加、Website欄に調べたいサイト名を入力してSearchボタンをクリックすると、登録したEmail、passwordを表示してくれます。登録されていないサイト名を入力するとエラーが出てしまうため、ここでtry、except文を使用していきます。

また保存ファイルはjson形式に変更し、ファイルの読み書きを行います。この処理方法についても簡単に学ぶことができます。

try文を学習すると間違いなく思うことは、「あれこれって、やろうと思えばifでもできるよな」だと思います。講座で受けた印象はファイル操作(open等)に関してはtryを使用し、基本的にはなるべくif文を使用する。という感じでしょうか。

この辺は詳しくないですが、しっかり押さえておきたいポイントのような気がします。

コメント

タイトルとURLをコピーしました