Python 8-2

こんにちは!

最近の雨は質がおかしい。

迷路のデータを定義する

今回は迷路の作成です。

list0804_1.py
Image from Gyazo

Image from Gyazo

二重ループのforで座標ごとに床と壁を分けていきます。
canvasのcreate_rectangleメソッドを用いて灰色の図形を描画しています。

二次元画面のゲーム開発の基礎

次に、キャラクターをマス上で動かしていきます。

list0805_1.py
Image from Gyazo
Image from Gyazo

Image from Gyazo

11,12行目に宣言した変数mx,myでキャラクターの位置を管理しています。
13~23行目でキー入力ごとの動きを設定しています。
48行目でmx*80+40などとしているのは、キャラクターの画像を中心に表示するためです。

ゲームとして完成させる

最後に、色を塗っていくゲームとして完成させていきます。

list0806_1.py
Image from Gyazo

Image from Gyazo

23~27行目に追加を行っています。
main_proc()関数にキャラクターの移動した場所を塗り替える作業を追加しています。

list0806_2.py
Image from Gyazo
Image from Gyazo

Image from Gyazo

変数yukaを追加して、合計数で全てを塗ることができたかを判定しています。
canvas.update()はキャンバス上の表示を更新するために必要です。

list0806_3.py
Image from Gyazo

Image from Gyazo

救済措置を追加しました。
17~25行目で左のシフトキーを押した際の処理を追記しています。

これで基本的な迷路ゲームの作成が完了しました。

ではでは。

Ruby 6-3-2

こんにちは!

残留争い、真っただ中。

ハッシュ

ハッシュの続きです。

hash_delete.rb
Image from Gyazo

Image from Gyazo

指定のキーを削除するdeleteメソッドです。
返り値は削除された要素です。

hash_delete_if.rb
Image from Gyazo

Image from Gyazo

条件によって要素を削除するdelete_ifメソッドです。

hash_clear.rb
Image from Gyazo

Image from Gyazo

すべての要素を破棄するclearメソッドです。

hash_each.rb
Image from Gyazo

Image from Gyazo

各種のeachメソッドです。

hash_all.rb
Image from Gyazo

Image from Gyazo

ブロックに渡すパラメーターはキーと値の2種が必要です。

hash_merge.rb
Image from Gyazo

Image from Gyazo

ハッシュを結合するmergeメソッドです。
キーが重複した場合は上書きを行うため、ブロックを使った工夫が可能です。

hash_transform.rb
Image from Gyazo

Image from Gyazo

キーや値を加工するtransform_keysメソッド、transform_valuesメソッドです。

hash_invert.rb
Image from Gyazo

Image from Gyazo

キーと値を反転させるinvertメソッドです。
重複した場合、後者の値が優先されます。

hash_identity.rb
Image from Gyazo

Image from Gyazo

最後にcompare_by_identityメソッドで同一性を確認しました。

ハッシュの基本はここまでです。

ではでは。

Ruby 6-3

こんにちは!

台風後の方が雨が強い

ハッシュ

今回はキーと値で管理するハッシュです。

hash_array.rb
Image from Gyazo

Image from Gyazo

まずは配列をハッシュに変換しています。

hash_def.rb
Image from Gyazo

Image from Gyazo

存在しないキーにアクセスした場合はnilが返されますが、Hash::newメソッドで規定値の設定が可能です。

hash_def_bad.rb
Image from Gyazo

Image from Gyazo

concatメソッドは破壊的メソッドのため、規定値が変更されている例です。

hash_def_block.rb
Image from Gyazo

Image from Gyazo

ブロック構文での規定値は都度作成されるため、規定値の変更を防いでいます。

hash_bad.rb
Image from Gyazo

Image from Gyazo

キーの中身を書き換えると、ハッシュの中身を取得できなくなるため注意が必要です。
rehashメソッドで再計算はできますが、現実的ではありません。

hash_fetch.rb
Image from Gyazo

Image from Gyazo

キーの規定値を指定するfetchメソッドです。

hash_fetch_values.rb
Image from Gyazo

Image from Gyazo

複数の値をまとめて取得するfetch_valuesメソッドです。

hash_dig.rb
Image from Gyazo

Image from Gyazo

入れ子のハッシュを取得するdigメソッドです。

hash_slice.rb
Image from Gyazo

Image from Gyazo

sliceメソッドは合致するキーを切り出します。
前述のfetch_valuesメソッドの戻り値は対応する値の配列でしたが、sliceメソッドの戻り値は部分ハッシュです。

hash_select.rb
Image from Gyazo

Image from Gyazo

指定の条件でキーや値を判定するselectメソッドです。

hash_key.rb
Image from Gyazo

Image from Gyazo

キーや値が存在するかを確認するkey?メソッドとvalue?メソッドです。

一旦ここまでです。

ではでは。

Python 8-1

こんにちは!

台風が来ています。。。

リアルタイム処理を実現する

まずはリアルタイム処理に関してです。

list0801_1.py
Image from Gyazo

Image from Gyazo

after()命令でリアルタイム処理を行うことができます。
引数には「何ミリ秒後」に「どの関数を実行するか」を渡しています。

関数の外部で宣言した変数をグローバル変数、関数の内部で宣言した変数をローカル変数といいます。
関数内でグローバル変数を変更するために、4行目でglobal宣言を行っています。

キー入力を受け付ける

次にキー入力です。
ちなみに、ユーザーがソフトウェアに対してキーやマウスを操作することをイベントといいます。

list0802_1.py
Image from Gyazo

Image from Gyazo

イベントを受け取るためにbind()命令が必要です。
KeyPressイベントはキーを押した際に発生します。

キー入力で画像を動かす

リアルタイム処理とキーイベントの取得を同時に行い画像を動かしていきます。

list0803_1.py
Image from Gyazo

Image from Gyazo

ウィンドウ上でキーコードを取得しています。

list0803_2.py
Image from Gyazo

Image from Gyazo

keycodeの代わりにkeysymで値を取得しています。

list0803_3.py
Image from Gyazo

Image from Gyazo

coords()命令は表示中の画像を新しい位置に移動する命令です。
Photoimage()命令内にtagを指定することで、キャンバス内で画像などを動かしたりできます。

はい、キャラクターを動かすことに成功しました。

ではでは。

Ruby 6-2

こんにちは!

お盆もコツコツと。

セット(集合)

今回はセットの話です。
セットは配列と違い順番がなく、重複した値も無視します。

set_basic.rb
Image from Gyazo

Image from Gyazo

まずは基本的なセットの作成です。

set_add.rb
Image from Gyazo

Image from Gyazo

addメソッドで要素の追加、deleteメソッドで削除、clearメソッドですべての要素の破棄を行っています。

set_add2.rb
Image from Gyazo

Image from Gyazo

要素が追加されたかどうかを確認するadd?メソッドです。

set_delete.rb
Image from Gyazo

Image from Gyazo

delete_ifメソッドで指定の条件に合致した要素を削除できます。

set_subset.rb
Image from Gyazo

Image from Gyazo

数学の集合のようなメソッドです。
セットが特定のセットに含まれているかを調べるsubset?メソッド、
特定のセットに含まれるが等しくはないproper_subset?メソッド、
特定のセットを含むか判定するsuperset?メソッド、
特定のセットを含むが等しくはないproper_superset?メソッド、
共通する要素が存在するか判定するintersect?メソッド、
共通する要素が存在しないことを判定するdisjoint?メソッド、などがあります。

set_union.rb
Image from Gyazo

Image from Gyazo

+や|の和集合、-の差集合、&の積集合、などがあります。

set_divide.rb
Image from Gyazo

Image from Gyazo

任意の条件でdivideメソッドです。

セットの基本的な内容の確認でした。

ではでは。

Python 7-2

こんにちは!

涼しくなったら部屋の掃除をしたい。

診断ゲームを作る

サンプルに従って「ネコ度診断アプリ」を作成します。

list0705_1.py
Image from Gyazo

Image from Gyazo

画像の貼り付け、ボタンとテキストボックスの配置を行いました。
今回はスムーズに画像を参照することができました。

list0705_2.py
Image from Gyazo

Image from Gyazo

for文を用いて複数のチェックボックスを配置しています。
15,16行目で空の箱を用意し、27,29行目で箱の中身を決定しています。

list0705_3.py
Image from Gyazo
Image from Gyazo

Image from Gyazo

チェックされている項目の数を数える処理を追加しました。
最後に診断結果を出せるようにします。

list0705_4.py
Image from Gyazo
Image from Gyazo

Image from Gyazo

チェックした数に応じてコメントの出力を行いました。

内容を変えることで色々なものに使えそうなゲームでした。
基本的なGUIだけでも応用力が高いですね。

ではでは。

Python 7-1

こんにちは!

甲子園は近畿と四国を応援してしまう。

テキスト入力欄を配置する

まずは1行のテキスト入力です。

list0701_1.py
Image from Gyazo

Image from Gyazo

1行のテキスト入力欄はEntry()命令で作成します。

list0701_2.py
Image from Gyazo

Image from Gyazo

Entry内の文字列はget()命令で取得できます。
テキスト入力欄の文字が、ボタンを押すことでボタンに反映されています。

複数行のテキスト入力欄を配置する

次は複数行です。

list0702_1.py
Image from Gyazo

Image from Gyazo

複数行のテキスト入力欄はText()命令で作成します。
insert()命令は指定の位置に文字列を追加します。

チェックボタンを配置する

次はチェックボタン、チェックボックスの説明です。

list0703_1.py
Image from Gyazo

Image from Gyazo

チェックボタンはCheckbutton()命令で作成します。

list0703_2.py
Image from Gyazo

Image from Gyazo

チェックボタンの有無を調べるためにはBooleanVar()命令を用います。
まずはTrueを渡すことでチェックされた状態であることを確認しています。

list0703_3.py
Image from Gyazo

Image from Gyazo

チェックの状態を確認することができました。

メッセージボックスを表示する

次はメッセージボックスです。

list0704_1.py
Image from Gyazo

Image from Gyazo

メッセージボックスを使うためにはtkinter.messageboxモジュールが必要です。
今回はshowinfo()命令を使用しましたが、showwarning()命令などで警告を表示することも可能です。

次回は診断ゲームの作成です。

ではでは。