パンダの休日

雑多な書き残し

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
「オブジェクト指向の言語であるPythonではクラスが使えます。
クラスとは変数や関数をひとまとめにした型のことです。
早速クラスを定義してみましょう。まずは・・・」
クラスが何かを調べようとするとよく上記のような書き出しの記事をみつけます。(この記事もそうなりますが)
しかしPythonを触り初めて間もない自分には何のことか分からず、というか何が嬉しいのか分からず、一通り調べたものの放置してました。
今ではやっとクラスの意味と有り難みがわかってきたので「分からなかった記憶」の新しいうちに昔の自分用の記事を書きます。

クラスとはポケットモンスターでいうところのポケモン。
ポケモンというのは総称であり種族の名前で、個体はそれぞれ個別の名前や能力があります。
それぞれポケモンに対して、能力や状態、戦わせる、アイテムをポケモンに使う、などの選択肢を作るのがクラスです。
分かりやすい変数名を付けたリストか辞書に変数・関数をまとめても同じようなことですが関数の定義がバラつくのは気持ち悪い上に何番目の要素が何か覚えていないといけません。
これをスッキリとまとめられるのがクラスです。

クラスは以下の用に作ります。
まず、例えばトンボ = ポケモンと宣言するときに名前を貰うようにします。
トンボ = ポケモン("トンボ")
このように宣言するとカッコ内が__init__関数に(__init__がある時は)渡されます。
initはイニシャルでしょう。多分。
で、__init__内で貰った名前を個体の自分の名前に設定します。
その他、宣言時に渡された情報を元に自分の能力値などを設定します。
後はそれに対して使える関数などを作ります。
トンボ.たたかう、トンボ.にげる、などです。
自分で作った関数のカッコ内1個めの引数は"じぶん"(普通はself)にしておきます。
下の方で作ったクラスを使っています。

あの頃の自分ならこのくらい書けば分かってくれるでしょう。(疲れました)

#-------------------------------------------------------------------------------
from random import randint as ランダム
from random import seed as ランダム初期化
表示 = print
#-------------------------------------------------------------------------------
#---------------------ここからクラスの定義--------------------------------------
class ポケモン:
def __init__(じぶん, 貰った名前): #普通は第一引数をselfとする
じぶん.なまえ = 貰った名前
ランダム初期化(sum([ord(x) for x in じぶん.なまえ])) #名前を元にランダムを初期化
じぶん.たいりょく = ランダム(40, 100)*100
じぶん.ぼうぎょ = ランダム(30, 80)*10
じぶん.こうげき = ランダム(50, 150)*10
表示("なまえ :{}".format(じぶん.なまえ))
表示("たいりょく :{}".format(じぶん.たいりょく))
表示("ぼうぎょ :{}".format(じぶん.ぼうぎょ))
表示("こうげき :{}".format(じぶん.こうげき))
表示()

def こうげきする(じぶん,あいて):
ランダム初期化() #括弧内が空の場合は現在時刻を元にランダムを初期化
if じぶん.たいりょく <= 0:
表示("{}はすでにひんしだ".format(じぶん.なまえ))
return(0)
if あいて.たいりょく <= 0:
表示("あいてはすでにひんしだ")
return(0)
if ランダム(0,5): #急所判定
こうか = ランダム(7,13)*じぶん.こうげき*(1100-あいて.ぼうぎょ)//10000
表示("{} のこうげき".format(じぶん.なまえ))
あいて.ダメージ(こうか)
表示("{}に{} ポイントのダメージ".format(あいて.なまえ, こうか))
表示("{}のたいりょくはのこり {}\n".format(あいて.なまえ, あいて.たいりょく))
if あいて.たいりょく == 0:
表示("{}はたおれた\n".format(あいて.なまえ))
else:
こうか = ランダム(15,20)*じぶん.こうげき//10
表示("{} のこうげき".format(じぶん.なまえ))
表示(" きゅうしょにあたった!")
あいて.ダメージ(こうか)
表示("{}に{} ポイントのダメージ".format(あいて.なまえ, こうか))
表示("{}のたいりょくはのこり {}\n".format(あいて.なまえ, あいて.たいりょく))
if あいて.たいりょく == 0:
表示("{}はたおれた\n".format(あいて.なまえ))

def ダメージ(じぶん, ダメージの大きさ): #ダメージを与えられたとき
じぶん.たいりょく -= ダメージの大きさ
if じぶん.たいりょく <= 0:
じぶん.たいりょく = 0
#------------------------クラスの定義ここまで-----------------------------------


キリン = ポケモン("キリン") #キリンは"キリン"という名前のポケモンであるという宣言
シマウマ = ポケモン("シマウマ") #同じく

while キリン.たいりょく * シマウマ.たいりょく: #どちらかがたおれるまで交互にこうげき
キリン.こうげきする(シマウマ)
シマウマ.こうげきする(キリン)


Python3なら日本語で変数名使えそうだと思ってやったら出来ました。
上のコードはちゃんと動きます。
攻撃と防御の関係を保つためにパラメータ調整したので妙な数字が入ってます。
文字列のformatなどもstrクラスを継承して再定義すれば日本語化できるのですが不細工なのでやめました。
スポンサーサイト

shader

Author:shader
多趣味飽き性に振り回されて色々やってます。

直接連絡したい方は御気軽にメールしてください。 3日以内には返信させて頂きます。

名前:
メール:
件名:
本文:

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。