今回の機能を実装したソースはコチラ→http://webukatu.com/sample/objective_lesson01.zipこの練習でわからない所を質問する※部活外の質問はできません既に出ている同じ内容の質問やレッスン以外の質問には回答致しません。こちらから既出の質問・回答をワード検索できます。(仮入部部員は利用不可)ログインが必要ですこの練習への質問一覧ログインが必要ですLesson01「オブジェクト指向ってなに?」の内容※SEO用のため読めません今回からこの部ではPHPを使った「オブジェクト指向」について学んでいきます。オブジェクト指向というのは、javascript部の方でもちょろっとやりましたけど、プログラムという「仮想の世界」ですね。その世界で、実際プログラムを組んでいくのですけども、プログラムを組んでいく際に、現実世界、私たちの世界ですね、私たちの世界というのは「オブジェクト」という「実体」に基づいて全て構成されています。その現実世界のオブジェクトに照らし合わせてプログラムを書いていく、といった「考え方」のことを言います。その「設計手法」に基づいてプログラムを書いていくことで、保守性の高いアプリケーションを作ることが出来ます。オブジェクト指向というのはなかなか初心者の方には分かりにくいのですけれども、この部ではオブジェクト指向を一番理解しやすいように、PHPを使ってゲームを作っていきたいと思います。今回からはこのようなゲームを作っていきたいと思います。画面にモンスターが現れて、そのモンスターのHPがあります。自分のHPがあって、ゲームリスタートを押すと新しいゲームがスタートします。その履歴というのは右に表示されています。「逃げる」を押せば新しいモンスターがまた現れるような形になります。「攻撃」を押すとモンスターに攻撃することができます。反対に、モンスターからも攻撃を受けます。お互いのHPが減っていくような形です。モンスターを倒すと、どんどん新しいモンスターがやってきます。倒したモンスターの数がココに出てきます。自分のHPが0になると「またゲームスタートしますか?」という形で、この画面が現れます。最初の画面も、この画面です。いった簡単なゲームを使って、これからオブジェクト指向を理解していきたいと思います。これがですね、さっきのゲームのソースコードになります。ソースは単純で、1個の「index.php」で出来上がっています。中にログを出したいので「php.log」も書かれています。あとは「img」ですね。各モンスターの画像をimgディレクトリーの中に8体、入れてあげています。Webサービス部でもやったのと同じように、実際のソースコードを、コメントの補足欄ですね、URLを貼り付けておくので、そこからダウンロードしてきて、MAMPのhtdocsの中ですね、そこへ解凍して実際に動かせるようにしてください。今見ているアプリケーションはこちらになります。「framework_lesson01_1」というところですね。このディレクトリーの中に、index.phpとimgディレクトリーが入っています。実際にソースコードを見ていきたいと思います。上の部分、ログを出しています。お決まりのやつですね。SESSIONとかを使っているので「session_start()」をしています。500からスタートしたいので、定数として「MY_HP」を用意しています。下でモンスターを作っているんですけども、その配列として格納するための「$monsters」という配列を作ってあげています。value」の形でモンスターを実際に作っています。「name」と「hp」あとはモンスターを表示する画像のパスですね、そして攻撃力です。攻撃力はランダムでやりたいので、mt_randという関数を使って、乱数を作っています。第1引数、第2引数でそれぞれ最小と最大の値を指定します。その中で、整数として1つの値が入ってきます。小数点は入らない、ということですね。これを8体作ってあげています。createMonster()という関数を作ってあげて、さっきの$monstersですね、globalで指定して使えるようにしてあげています。この$monstersをキーを配列の形式なのでキーを指定してあげれば、それぞれのモンスターのどれかのモンスターの配列を取り出せます。mt_randを使って、0か6ですね、6じゃない、7ですね。0から7までで8個になります。その内のどれか1つのキーを取ってきて、その配列をこの$viewMonsterの中に入れている、という形です。どれか1つのこれが入る、ということですね。このcreateMonster()というのは、init()という次の「初期化用の関数」ですね。ゲームをスタートする時の関数です。その時にcreateMonster()を呼んでいるんですけれど、それまでに今まで使ったSESSIONの中にnameとかhpとか入っているので、それらを全部unsetで削除してあげます。新しくSESSIONの中に1個選んだモンスターの名前、hp、imgですね、そして攻撃力、で、historyという形で、historyはここ(ゲーム画面右側)に表示する文字です。そこの中に、「モンスターが現れた!」という履歴を出してあげます。これがcreateMonster()という関数ですね。init()という関数です。これは初期化用の関数になります。historyの中に「初期化します!」というものを入れてあげます。knockDownCountですね、これ0を設定します。これは「倒したモンスターの数」ですね。myhpとして自分のhpを最初500のもの(定数:MY_HP)を入れてあげます。createMonste()を呼んであげます。することで、モンスターが1個、SESSIONの中に入ります。この時、gameOver()関数というものがあります。これは自分のhpが0になった時に呼ぶものです。ゲームオーバーになったらこれを呼んであげて、SESSIONを全てarray()という形で初期化し空にしてあげます。画面に表示するhtmlの方をちょっと見ていきましょう。htmlは一般的な感じです。styleの方はこの中(headタグ内)に書いちゃっています。styleの説明は省いちゃっています。htmlの実際のPHPの部分なのですけれども、SESSIONがあるか無いかを、まず判定しています。session_start()をすれば、SESSIONの中になにかしら入ってきます。入っていなければ、一番最初に初期画面を表示してあげます。START?)というものですね。formタグを入れてあげて、(method属性を)postしてあげます。input(のtype属性は)submitで、nameをstartというものにして、「ゲームスタート」というボタンを(value属性で)作ってあげています。これを押すと、postという中で、startというキーを使って、valueを取り出すことが出来ます。SESSIONの中になにかしら入っていれば、ゲームがスタートしているということなので、こっちを実際に表示してあげます。これはモンスターの名前を表示するところですね。モンスターの画像を表示するところです。それぞれSESSIONの中に入っているので、それをキーを指定して表示してあげます。あとはモンスターのHP、倒したモンスターの数、勇者の残りのHPですね。それぞれformタグでボタンを作ってあげます。攻撃するボタンですね、nameをattackにしてあげます。逃げるボタンはescape、ゲームリスタートはstartにしてあげます。それぞれこのキーでvalueが送信されるような形ですね。サイドバー、右側ですね。こっちの方にはSESSION[‘history’]の中身を表示させます。postされた時の処理はこちらですね。ここからhtmlの上のところまでです。なにをやっているのかというと、postされた場合、それぞれですね、POSTのattackなのかstartなのか、これを取り出しています。中に値があればtrueを入れてあげて、無ければfalseを入れてあげます。$attackFlg、$startFlgというものをそれぞれ用意してあげて、それをfalseで中に入れてあげるという形ですね。error_logを書いてあげています。startボタンを押した場合にはPOSTにstartというものが入っているはずです。右側startの方ですね。その中にvalueが入っているはずなので、trueになっているはずです。histroyとして「ゲームスタート」というものを中に入れてあげます。init()関数を呼んであげます。init()というのは初期化用の関数といった意味合いで名前を付けてあげています。これは「習わし」ですね。init()関数の中では「初期化します」というものと、「倒したモンスターの数」を初期化してあげて、自分のHP(MY_HP)を500にしてあげて、モンスターをSESSIONの中に入れてあげるという形ですね。なくてですね、$attackFlgがtrueの場合、攻撃するボタンを押した場合ですね、その場合には「攻撃した」というものを出してあげて、まず、ランダムでモンスターに攻撃を与えます。mt_randで勇者の攻撃力を50から100の間で入れてあげます。それをSESSIONの中に入っているモンスターのhpをここから引いてあげます。ここ間違っていますね。(100行目:mt_rand(50,100)ではなく)$attackPointを引いてあげるという形です。しないと、それぞれで乱数を作ってしまうので、与えるポイントと表示するポイントが違ってきちゃいますね。書かないで、省略的な書き方として(デクリメント:-=を使用し)、こういう書き方もできます。与えたポイントを表示してあげて、今度はモンスターから攻撃を受けます。モンスターの攻撃力はSESSIONの中に入っているので、自分のHPをその分引いてあげます。これも省略的な書き方ですね。何ポイントのダメージを受けたのか、というのをhistoryの中に入れてあげて表示してあげます。自分のHPが0以下になった場合ですね、gameOver()の関数を呼んであげます。gameOver()関数の中ではSESSIONをクリア(=array())してあげます。START?」という画面の方を出せるような形になります。MY_HPがまだ残っている場合には、今度はモンスターのhpですね、判定します。モンスターのhpが0以下の場合に、新しいモンスターを出現させてあげます。historyの中に、倒したモンスターの名前を入れてあげます。createMonster()を呼んであげることで、SESSIONに新しくモンスターが入ってきます。knockDownCountですね。いう「+1」をしてあげます。反対に「逃げる」ボタンを押した場合ですね、その場合にはhistoryの中に「逃げた!」と入れてあげて、また新しくモンスターを作ってあげるというような形です。最後はPOSTされていたものを、きちんと(array=();とし)空にしてあげます。このような仕組みでですね、このゲームというのは出来上がっています。実際のゲームというのも、こんな感じで動いているんですね。あとはjavaScriptで動きなんかを付けてあげれば、実際のゲームっぽくなってきます。モンスターをちょっと飛び出してあげたりとか、切られた時は切られたアニメーションを付けてあげるとかですね。あとは効果音なんかを入れることもできます。※こちらのフォームで送信された内容はユーザーの特定、ご返信ができません。返信希望の場合は、サイト一番下にある「お問合せ」からご連絡ください。alert('学習時間の更新に失敗しました。再度やり直してください。alert('学習時間の更新に失敗しました。再度やり直してください。alert('操作に失敗しました。画面を再読み込みの上やり直してください。p').text('送信しました。ご意見頂きありがとうございます。p').text('送信出来ませんでした。p').text('送信出来ませんでした。