【pygame】ウインドウを開く処理
Pythonにはpygameと言うライブラリがあります。名前通りゲームを作るためにあります。
バトルフィールド2はpygameが使われてます。
始めるのはとても簡単です。
コマンドプロンプトに
pip install pygame
とコマンドを入れてインストールし
python -m pygame.examples.aliens
このコマンド入れてシューティングゲームが開始されればインストール完了してます。
では、ゲーム作りの基本となるウインドウを出してみましょう。
【コード】
import pygame
screen = pygame.display.set_mode*1
#ウインドウ表示
running = True
while running:
for event in pygame.event.get():
#getでイベント取得
if event.type == pygame.QUIT:
#イベントが閉じるボタンならwhile文終了
running = False
【解説】
import pygame
これでpygameをインポートします。
pygame.init()
pygame.init()でpygameを初期化します。
必ず必要な処理なので忘れないようにしましょう。
screen = pygame.display.set_mode*2
screen = pygame.displayによりゲームスクリーンを表示します。
set_mode*3により縦、横サイズを指定します。
running = True
while running:
この処理はrunning = TrueでTrueだからアニメーションが動作してwhile文により無限に動きます。
event.get():はイベントを取得します。
if event.type == pygame.QUIT:はウインドウで閉じるボタンが押されたらイベント終了します。
running = False
閉じるボタンが押される事で処理がFalseとなりウインドウの処理は終わります。
【結論】
running = True
while running:
イベントを始めて
for event in pygame.event.get():
イベント取得
running = False
イベント終了
この流れを掴んでpygameの動作の基礎を確実に身につけましょう。
取材やお仕事紹介などはこちらからお気軽にご連絡下さい。
ysa7825@gmail.com
【Ruby】数値オブジェクトと文字列オブジェクト
Rubyには数値オブジェクトと文字列オブジェクトがあり数値を計算したり、文字の情報を取得したりができます。
【結論】
数値オブジェクトはdivで割り算などで計算したり、文字列オブジェクトはindexやlength必要な文字を取り出します。
【理由】
オブジェクトというのはデータを扱う設計図のようなものでその設計図に数値や文字を入れて処理をします。変数やメソッドをまとめたものです。
数値オブジェクトというのは数値を扱い整数=integerオブジェクト 少数=flootオブジェクトがあります。
数字を入れて処理を書くだけで計算してくれます。
それに対して文字列オブジェクトはダブルクォテーションで囲うと定義できます。
処理により文字列に様々な動きを持たせられます。
【具体例】
実際にやってみましょう。
#数値オブジェクト 整数=integerオブジェクト 少数=flootオブジェクト
p 10
>10
数値を取得します。
p 10.div(5)
#割り算
p 10 をdivに5を入れる事により
割った数を出します。
p 10.remainder(3)
#割り算余り
remainderは割った数に余りを出すメソッドです。
p 10.class
> integer
p 10.0.class
> floot
classは数値が整数か少数かを判別します。
#文字列オブジェクト
puts "Good morning".index("d")
#文字列を探す
>d
indexでdを指定した事によりGood morningの
dを出します。
puts "Good morning".length
#文字列の長さ
lengthでGood morningの長さを出力します。
puts "Good morning".class
#文字列かを判別
classでGood morningが文字列かを判別します。
【結論】
数値オブジェクトは数値に式を入れずに計算ができ、文字列オブジェクトは文字列を取り出したりします。
とても大事な基礎なので確実にマスターしましょう。
取材やお仕事紹介などはこちらからお気軽にご連絡下さい。
ysa7825@gmail.com
【Ruby】putsメソッドを使って出力しよう
Rubyで文字列や数値を表示したい。
そんな時にはputsメソッドを使いましょう。
【結論】
putsメソッドでputs "文字列"
puts 数値で数値を出力します。
【理由】
putsメソッドは文字列や数値を表示させます。
文字列には"ダブルクオーテーションを入れて、数値には何も入れずに書きます。
さらにpurintやpもあります。
【具体例】
puts "orange"
> orange
文字列として出力されます。
puts 1
>1
数値として出力されます。
ちなみに
puts "1"
>1
見た目は数値だがダブルクオーテーションを入れると文字列扱いになります。
printは基本的にはputsと同じだが改行されません。
pも動きはputsと同じだがデバッグ用で
puts "orange"
> "orange"
ダブルクオーテーション付きで出力されます。
【結論】
putsは改行され、purintは改行されず、pはデバッグ用に使用されます。
取材やお仕事紹介などはこちらからお気軽にご連絡下さい。
ysa7825@gmail.com
Pythonのクラスで個々の成績の平均データを扱う
Pythonのクラスはオブジェクトにより個々のインスタンスを扱う事ができます。
成績表を個々ののデータを扱ってみましょう。
【コード】
class SchoolReport : #インスタンス変数
def __init__(self,student_name,
math_score, jp_score,en_score,):
#インスタンス化で呼び出される
#selfはオブジェクト自身
self.student_name = student_name
self.math_score = math_score
self.jp_score = jp_score
self.en_score = en_score
def calc_avg_score(self): #インスタンス自身のスコアの平均点を出す
sum_score = (self.math_score
+ self.jp_score
+ self.en_score)
avg_score = sum_score / 3
return avg_score
sr_a = SchoolReport('田中A',100,50,50) #渡したい値
avg_a = sr_a.calc_avg_score()
print(f'Aサンの平均点: {avg_a}') #student nameにアクセス
sr_b = SchoolReport('鈴木B',100,80,50) #渡したい値
avg_b = sr_b.calc_avg_score()
print(f'Bサンの平均点: {avg_b}') #student nameにアクセス
sr_c = SchoolReport('中村C',100,100,50) #渡したい値
avg_c = sr_c.calc_avg_score()
print(f'Cサンの平均点: {avg_c}') #student nameにアクセス
【解説】
田中さんの平均点を出したい場合はsr_a = SchoolReport('田中A',100,50,50)でこの田中のSchoolReportがdef calc_avg_score(self): のselfに代入されます。
そして、平均点の計算で100はself.math_score、50はself.jp_score、50はself.en_scoreとなり合計を3で割り算して結果をreturn avg_scoreで戻り値として出します。
print(f'Aサンの平均点: {avg_a}')でAの平均が結果として出ます。
他のも個々に出ます。
【結論】
クラスはいくつデータがあろうともインスタンス変数に値を指定すればそれをオブジェクトに入れて処理するだけですから人ごとに違ったデータを扱う時に便利です。
取材やお仕事紹介などはこちらからお気軽にご連絡下さい。
ysa7825@gmail.com
Pythonのクラスを学校の成績表に表した。
Pythonのクラスってなかなか理解するのが苦労する部分です。
それを単純にするために学校の成績表にしてみました。
【コード】
class SchoolReport : #インスタンス変数
def __init__(self,student_name):
#インスタンス化で呼び出される
#selfはオブジェクト自身
self.student_name = student_name
sr_a = SchoolReport('田中A') #渡したい値
sr_b = SchoolReport('鈴木B')
sr_c = SchoolReport('斎藤C')
print(sr_a.student_name) #student nameにアクセス
print(sr_b.student_name)
print(sr_c.student_name)
> 田中A 鈴木B 斎藤C
【解説】
SchoolReportはインスタンス変数を定義したものでその中にあるのはオブジェクトといい設計図に当たるものです。
selfはオブジェクト自身で何故入れるかと言うとなかなか難しいがとりあえず入れるのが決まりと覚えれば良いです。
__init__というのは初期化してインスタンス化。
つまり、処理したい値を実行させます。
sr_a = SchoolReport('田中A') はsr_a という変数の中のSchoolReportにある田中Aを渡します。
そして、print(sr_a.student_name)で変数sr_a のstudent_nameに入った田中Aを出力します。
鈴木B 斎藤Cも同様です。
【結論】
Pythonのクラスは値を実体化させる事で一つのオブジェクト。つまり、型があればいくつものデータをひとまとめにできます。
取材やお仕事紹介などはこちらからお気軽にご連絡下さい。
ysa7825@gmail.com
Pythonのkivyで単純なウインドウアプリを作る
Pythonのkivyを使い簡単なウインドウアプリを
作成しました。
kivyの基礎を学習するためにやってみましょう。
【コード】
import kivy #Kivyを呼ぶ
from kivy.app import App #アプリケーションを作成するモジュールインポート
from kivy.uix.button import Label #uix レイアウトやモジュール
class sample(App): #基本クラス
def build(self): #ウイジェットを作成
return Label(text = "Heloo") #テキストを表示
if __name__ == "__main__":
sample().run() #sampleメソッドを初期化してアプリ実行
【解説】
import kivy をするとkivyを起動します。
kivy.appはアプリケーション作成に必要な部品を使えるようにしてくれます。
kivy.uixで必要な部品をな取り出します。
buttonと書いてるのでウインドウにボタンが機能に付きます。
return Labelでsample(App) の代入されたselfを戻り値として(text = "Heloo")を取り込みます。
if __name__ == "__main__":はモジュールとして利用されてるスクリプトに使います。
sampleの処理が実行された時に初期化して実行をします。
実行すると真ん中にHelooがありボタン押すと閉じたり、画面サイズを変えてもHelooが真ん中にあります。
【結論】
めちゃくちゃ単純に解説しました。
私自身kivyはやり立てでまだ完璧でない部分もあります。
kivyは基本クラスがありそこからヴィジェットを動かし、初期化して起動って流れは抑えておきましょう。
取材やお仕事紹介などはこちらからお気軽にご連絡下さい。
ysa7825@gmail.com
ドラクエの職業でPythonのクラスの継承を解説!
Pythonのクラスの継承って何かよく分からない?一体どんなものか?
普通に説明してもなかなかイメージしにくいと思いますのでこれをドラクエの職業で説明します。
【結論】
クラスの継承は指定した既存のクラスから追加や変更を定義し新しいクラスを作ります。
【理由】
ドラクエにはまず何も職業についてない
人間があります。
その人間にはHP、MP、攻撃、防御などがあります。
それが転職で戦士になったとしましょう。
戦士になってもHP、MP、攻撃、防御は受け継がれます。
これがクラスの継承です。人間が親クラスで戦士が子クラスです。
さらに人間がMPが50だとして転職で魔法使いになったからMPを100にする。
こうすると子クラスのMP100が親クラスに上書きされます。
MP100となります。
【具体例】
実際にコードで見ていきましょう。
・1
class HumanClass: #基底クラス
def defend(self):
print('防御しました')
class WizardClass(HumanClass):
pass
wizard = WizardClass()
wizard.defend()
> 防御しました
HumanClassが基底クラスでありそれをselfにHumanClassをインスタンス変数として、wizardをWizardClass()に代入してHumanClassの防御しましたをwizardに継承したので防御しましたと表示されます。
・2
class HumanClass: #基底クラス
def __init__ (self):
print('HumanClassのinit')
self.hp = 100
class WizardClass(HumanClass):
pass
wizard = WizardClass()
print(wizard.hp)
>100
"__init__"はインスタンス変数を実体化をさせます。実体化させた100をhpに入れてprint(wizard.hp)に継承して100と表示されます。
・3
class HumanClass: #基底クラス
def __init__ (self):
print('HumanClassのinit')
self.hp = 100
class WizardClass(HumanClass):
def __init__ (self):
super().__init__()
self.mp = 50
wizard = WizardClass()
print(wizard.mp)
> HumanClassのinit
50
def __init__ (self):はHumanClassをインスタンス化してhp = 100となりそれをWizardClassが継承します。
それをsuper().__init__()の処理で値を上書き
これにより100が50になります。
・4
wizard = WizardClass()
print(wizard.mp)
class HumanClass: #基底クラス
def __init__ (self):
print('HumanClassのinit')
self.hp = 100
class WizardClass(HumanClass):
def __init__ (self):
super().__init__()
self.mp = 50
def output_info (self):
print(f'現在のhpは{self.hp}で'
f'mpは{self.mp}です')
wizard = WizardClass()
wizard.output_info()
HumanClassのhp100を継承しさらにWizardClassのmp50をsuper()で上書きします。
info()はデータを得ることができる処理です。
そのデータをprint(f'現在のhpは{self.hp}で'
f'mpは{self.mp}です')に入れて
現在のhpは100でmpは50ですと出ます。
【結論】
クラスの継承はなかなか感覚掴むのは大変ですからドラクエの職業のデータでイメージすると分かりやすいです。
特にsuper().__init__()の上書きやinfoのデータ取得は良く使うので身につけておきましょう。
取材やお仕事紹介などはこちらからお気軽にご連絡下さい。
ysa7825@gmail.com