1. ソルラジ 〜ゲーム開発の挫折共有ラジオ〜
  2. #game13 ソルラジ RPGでほと..
2024-02-28 43:56

#game13 ソルラジ RPGでほとんどプログラミングが理解できる説 〜ドラクエ・ポケモンのバトルを構造的に理解するとプログラムがわかる!?〜

<内容>

-急にカフェで連絡先を渡された話

-RPGバトルゲームでプログラミングがわかる

-キャラクターのステータスは変数で理解できる

-武闘家の素早さは条件分岐が学べる

-関数は複数の機能を一つにまとめたもの

-オートバトルは繰り返し文

-配列は似たようなものを複数作る敵のコピー

-勇者の持っている薬草は構造体

-プログラミングの独学は自信が持てない

-繰り返しと条件分岐がプログラムの基本

-作りたいものを先に描いてプログラミング言語を選ぶ

-サウンドノベルはプログラミングそのもの

-RPG(ポケモン・ファイナルファンタジー、ドラクエ)はシンプルな構造


SOLVENTERとは?

「世の中のつまらないことを無くし、好きな事で生きる世界を作る」を理念として立ち上がったゲーム開発チームです!

現在は、プログラミング学習の挫折率を下げたい!

という想いで

プログラミングが楽しく学べる

「EXEACT(エグゼアクト)」を開発しています!


SOLVENTER RADIO(ソルラジ)とは?

ゲーム開発の日々の挫折をRADIOで発信していきます。

開発の苦悩を面白おかしく共有していきます!


X/Twitter(フォローよろしくお願いします!)

⁠▼https://twitter.com/Solventer_jp⁠


<ブラウザで遊べます!開発中のゲームはこちら>

プログラミングが学べる3Dブラウザゲーム

⁠▼https://unityroom.com/games/exe_act_stage01⁠

⁠▼https://unityroom.com/games/exe_act_stage02⁠

⁠▼https://unityroom.com/games/exe_act_stage05⁠


プログラミングが学べる2Dブラウザゲーム

⁠▼https://unityroom.com/games/test0000test

00:02
ソルラジ、この番組は素人ゲーム開発者たちがプログラミングにおける挫折をそれぞれなるままに共有していく番組です。
ゲーム開発に興味がある方や開発者の参考になることを目指した番組となっております。
それでは始めますか。
よろしくお願いします。
よろしくお願いします。
よろしくお願いします。
よろしくお願いします。
ソルベンター代表のパギジョと申します。
ソウマです。
野川です。
よろしくお願いします。
よろしくお願いします。
今回、野川さん初めてですね。
そうですね。今回初めて参加させていただくことになったんですけれども。
野川さん、最初はね、3Dのモデリング、キャラクターのモデリングをしてくださったりとか。
はい。
あと発信とかの必要な資料とかを作ってくださったりとか、発信自体も担当してもらったりとか、そういったところをやってもらってますよね。
はい。
なんか3Dモデリングからなんか参戦してくださいましたね、急にね。
そうですね。
喫茶店で野川さんを見て、隣にいて、野川さんの話してるのをチラッと聞こえて、めっちゃ素敵な方やんって思って、声かけたところから。
最初はさすがにマルチの勧誘とかかなんかかなって思いましたけれどもね。
ちょっと怖かったんですか、それ。
怖いと言いますか、今度は何が来たのかなみたいな感覚。
でもそしたらね、こうやってすごくこう、何と言いますか、真面目にというか、すごく情熱を持って行動してらっしゃるチームでして。
すごく魅力的だよなというところで、僕もぜひ一緒に参加させていただけたらという風な感じですかね。
多分怪しまれてるんだろうなって思いながら。
なんか携帯を忘れたとかで、箸置きとかナプキンとかに電話箱書いて連絡してくださいって。
そうです、そうです。
怪しすぎじゃない、ちょっと。
今回はこのタイプかみたいな。
携帯の電池がなかったんですよ、この時切れてて。
でもだからミスったもん、携帯の電池が切れてるからナプキンに書かせてください。
変で。
今時ある?ナプキンに電話番号書いて渡すって。
メールアドレスね。
メールアドレスね。
もちろん、人柄とか身につけてるものとかで、うさんくささレベルだったりとか、そういうのをちょっと判断して、
単純に危ないあれではないのかなみたいな感じで連絡させていただいたような感じなので。
一言でも返してくれたんで。
じゃあ、稲川さんからメールして。
そうです、せっかくだったら面白そうだから連絡してみようかなと思って。
一言一句間違いないように言ってやったら送れたと思って。
ありがとうございます。
よくある、送ったら速攻で詐欺に引っかかるメールアドレスのような感じじゃなかったの。
gmail.comだったような感じがしたので。
それで連絡してみたいな。
すごいね、気がついたらもうラジオ番組に出てる。
ですね。
今回よろしくお願いします。
03:00
よろしくお願いします。
今日のテーマなんですけど、RPGでプログラミングがほとんど学べる説みたいなのを
じょうさんがちょっと挙げてくれてたんですけど。
今回第13回目で、今活動の中でプログラミングの教育というか、
その勉強会というか、そういったところで皆さんに教えたりしているんですけど、
その中でも僕が結構大事にしているのは、何か作りながらプログラミングを学ぶっていうのが、
結構楽しいと思っているので、そういった会をやっていて、
その中でもRPGのバトルゲームっていうのを作るのがめちゃくちゃいいんじゃないかっていうのを思っているんですよ。
RPGのバトルのゲームって、プログラミングの参考書で学ぶ項目のほとんど全てを網羅できるっていうのを僕は思っていて、
それについての話を今回したいなと思っているんですよ。
そうなんだ。RPGとプログラミングが何か一緒なんだ。
一緒。RPGバトルゲームって、何がいいかっていうと、RPGの言葉がすぐ伝わるってところなんですよ。
皆さんも、例えばすまさんとか野川さんも、RPGバトルゲームって言ったら何をイメージします?
ドラクエ。
ポケモンですかね。簡単なところで。
両方とも、ゲームで有名なものを言ったらファイナルファンタジーとか、ポケモンとか、ドラクエとか、いろいろあると思うんだけど、
だいたい細かいところで見ると違うんだけど、ざっくりは共通しているシステムになっていて、
キャラクターで言うと味方複数人と敵が複数体いて、それぞれ単性でお互い交互に戦っていって、HPがなくなったらダウンするみたいな、そこら辺って全部共通しているじゃないですか。
それぞれの機能を、いざゲームを作るときに実装しようとしたら、実はプログラミングの教科書、参考書の全体を網羅する感じになるんですよね。
RPGゲームってキャラクターがいて、敵と味方がいて、それぞれ単性になっていて、交互に戦っていく。
で、HPがゼロになったらダウンするっていうような、この機能をRPGバトルゲームって一言で伝わるのがすごく便利、まずは。
なので、作りたいもののイメージができる状態で、プログラミングを学びながら一個一個実装していって、最終的に完成するっていうようなプログラミング学習の進め方っていうのを、僕はめちゃくちゃ推しているので、今回その話をしたいっていうことなんですよ。
学習がしやすくなるってこと?これを学べば。
めっちゃしやすい、自分にとってはね。っていうのも、今回画像を添付したいなと思ってるんですけど、よくあるプログラミングの学習する項目というか目次とかって見ると、
さらっと言うと変数だったり、プログラミングの条件分岐だったり、プログラミングの流れとか繰り返しだったり、配列とか関数とか文字列、C言語とかで言うとポインター構造体、ファイル構造だったり、あとはJavascriptとかそういったものだとオブジェクトっていうのがあったり、
06:09
C++とかCシャープとかでもそういうオブジェクト仕組みのものがあったりとか、そういったものはあるんですけど、RPGのゲームを一個作るだけでそれのほとんどを活用することになるので、実際に学びながら実装できるっていうような進め方ができると思うんですよね。
なんか今言われた言葉とRPGと全然繋がった気がしないというか。
そうよね。
なんか何が繋がってんだろうって。
もっと言うと、プログラミングちょっと学んでみようかなって思って試しに参考書を買うとするじゃないですか。で目次見るじゃないですか。で今言ったような変数とか配列とかそういうの出てきて言葉、それだけで俺嫌になると思うんだよ。
だけどそれは実はそれぞれはこのゲームで言うとこういう機能になるんだよみたいな話をちょっと今回して、その目次の抵抗感をなくしたいなっていうのがあるんですよ。一個一個説明していってもいいですか。
ぜひお願いします。
ちなみに野川さんってプログラミング勉強したことあるんですか。
もう全くわからないです。
わかんないですか。
なので本当に今話してることがおそらくやっぱり一般の方々と全く同じような認識で何もわかっていない。そんな状況ですね。
今の目次の一覧とか言ったけど全然イメージつかないよね。
そうですね。しかも数学苦手だったんで、関数とかきた時点でなんか無理そうとかやっぱ思っちゃうっていうのはやっぱありますよね。
プログラミングでも関数って出たり、関数って数学とか学ぶときに出てきたりするもんね。
X2XプラスAとか二次関数とか。
そうなんですよ。苦手でしたね。
抵抗感ありますね。
あれ超やだったあれ。
ちょっと一個ずつ簡単に話したいんだけど、RPGのバトルゲームって戦いをするんで、お互いRPGバトルゲーム作りますってなったときに、まず最初にやるのってキャラクターを用意したり、HPとかMPとかスピードとかパワーとかそういうキャラクターのステータスを用意したりするじゃないですか。
そのHPとかMPって変数なんですよ。
なるほど。
簡単に言うと。変数って言葉って、数学とかでも学ぶかもしれないですけど、変数って一言で言うと数とか数値とか値を持っている言葉のことを表してるんですよ。
例えばHPって、HPはいまいくつですかっていうと、HPはいま100です。HPはMAXです。だから体力MAXだから元気です。でもHPはいまいくつですかっていうときに0ですってなったら、HP0です。じゃあダウンしちゃったとか戦闘不能ですとか。
そういうふうにHPっていうのは値を持ってるじゃないですか。そういうものを変数って思っていただければいいんですよ。
なるほど。感覚的には、例えばそのHPがあってダメージ食らったらそれが減る。そして薬とかを使ったら戻る増える。その数字というか値の増減っていうところにその変数が使われているっていう感覚でいいんですかね。
09:11
そうですね。
ああなるほどなるほど。
そんな感じ。
わかりやすい。
あと変数定数ってあったもんね。
そうそう。定数っていうのは固定する固定された数っていうような意味なんだけど。変数って結構プログラミングを説明するときに変数とは箱です。その箱に値が入りますっていう例え方の説明が多いんですけど、個人的にそれよりも一言で言うと変数はHPですって言った方が日常生活でいっぱい使ってますよっていうことを言いたいんですよ。
例えば長さだってそう。長さも値を持ってるじゃないですか。例えば机の横幅はって言ったら何センチみたいなそういう値を持ってるし、時間だってそうじゃないですか。
確かに。
Tっていう変数によく置き換えたりとか日常生活にめちゃくちゃありふれてる。で、多分無意識にみんな使ってる言葉として。それが変数ってだけなんですよ。
確かに。
なので、それを改まってRPGバトルゲームを作りますってなったときにキャラクターのステータス作ろっか。ステータスは攻撃力とか素早さとかHPとかMPとかを入れましょう。
それはそれぞれ変数っていうのを作ってあげて定義してあげてそれをうまく使ってステータスの増減だったりHPのダメージだったり回復だったりそういったものを実装すればいいよねっていうので勝手に変数の章は勉強できたも同然なんですよ。
なるほどなるほど。
これでも勉強できた同然?
もうRPGバトルゲームを作るときにそれを学ぶことになるから。だからHPを用意してあげてそれで敵が攻撃してきたダメージを食らうからHPが下がります。
で、HPにマイナスしてHPの値を下げるともう演算っていう章の項目が終わりますよ。
簡単に言っちゃえば本当にHPのマックスだったら緑でか青がバーがあって中間ぐらいで黄色になってあのヤバくなったら赤くなるっていうそのHPのバーが攻撃や攻撃でダメージを受けて減ったりとか薬を使って回復したりするその数値の増減っていうところが変数っていうものが持つ意味合いっていうところなんですかね。
そんな感じ。
すごくわかりやすい。
今しかもめちゃくちゃいいこと言ってるのってHPが半分以下になったら黄色になってHPがマックスだったら緑とかじゃないですか。それが2個目でプログラミングの条件分岐っていうのが学べるんですよ。
なるほど。
条件分岐ってイメージするかな言葉で要はもしもこうなったらこうしますっていうような処理のことを言ってて例えばHPが少なくなったら赤色になりますとかピコンピコンって音が出ますとかそれも条件分岐使うんですよ。
とかRPGの戦闘の開始の時にどっちが先に攻撃する敵か味方かみたいな時にスピードが高い方が先制攻撃するみたいなのがよくあるじゃないですか。あれも条件分岐の処理使ってるだけなんですよ。
12:11
なるほど。
もし敵のスピードっていう変数と味方のスピードっていう変数を見比べてその値の代償を見てそれが大きい方が先に攻撃するってだけ。
そうか武闘家が素早いから一番先に攻撃するっていう条件分岐なんだね。
そうそうそう。そんな感じ。だからそれの実装をするってなったらもう条件分岐っていうところも使うことになるし。で次は三つ目で言うと関数っていうところで言うと関数って一言で言うと関数は機能として複数の処理を一つにまとめることができる便利機能みたいなイメージなんですよ。
なるほどなるほど。
例えばよく例えるのが僕は手を振るっていう関数があるとするじゃないですか。手を振るっていう関数は処理としては腕を上げるっていう部分動作と手のひらを横にひらひら動作させるっていう処理。それが複数あとは指を伸ばすとかそういう処理が複数あって最終的に手を振るっていう一つの動作できるじゃないですか。
なるほどなるほど。
それを関数でまとめるようなイメージなんですよ。関数っていうのは手を振るっていう関数。
ああそうか。手を振るの中にも指を伸ばす手をバタバタさせる腕ごと動かすみたいなこれをまとめて手を振るって言ってるもんね。
そういうこと。細かい動作を今処理っていう言い方して処理をまとめたものが一つの関数みたいなっていうそういうイメージなんですよ。
なるほどなるほど。
そういったところ。あとは関数っていうのは一個のキャラクターのイメージで言うとキャラクターのターンになったらどのコマンドを選ぶじゃないですか。
例えば戦うのか逃げるのか防御するのか魔法使うのかとかって選ぶじゃないですか。それ選んで実行させるときに関数ってすごく便利なんですよ。
なのでコマンド入力を受け付けてコマンドを選択してそれどおりキャラクターが動かすっていうことをさせるためには関数っていうのが必要でそれが実装できるということは関数学べたよねっていう話なんですよ。
なるほど関数もなんか日常で結構使ってるよね。
なるほど関数。
まとめて言うだから手を振るとかもそうだし。
そうそう動作としてはやってると思うし。
曖昧な感じでみんなが共通して持ってる認識を関数っていうものを当てはめることによってより確定的なものを浮き彫りにすると言いますか確定的なものを浮き彫りにするっていう感覚なのかなっていう。
そうですね。
なるほどなるほど。
まとめて言っちゃってるもんね確かに。連絡しといてっていう行動を一つも。
携帯などかとか。
携帯を開く文字を打つLINEを送信ボタンを押すっていうのを連絡しといてっていう。
15:00
そう一連の処理を連絡するっていう言い方をしてそれが関数名になったりするのね。
その関数ってすごいプログラミングの学習チックに言うと入力を受け付けて出力をする機能のことを言ってるんですよ。これちょっと難しいんだけど。
誰が受け付けて誰が出してるのそれ。
関数というものは関数の定義の話なんだけど入力を受け付けて出力をする機能のことを言うんですよ。
これ何かっていうと例えば関数の例としては敵にポケモンとかであるなんかひっかくっていうコマンドあったりするじゃないですか。
ひっかくっていう関数を作るときにどうするかっていうと例としては入力は攻撃力。ひっかくキャラクターの攻撃力を入力と受けます。
その入力を攻撃力に応じてかける何倍かみたいな感じのダメージが決まるわけ。
要は攻撃力高いもの高いキャラクターだったらダメージもでかくなるし攻撃力が低いキャラクターだったら低くなるしそれに応じて。
出力するのはダメージ、敵のHPみたいな感じ。
そしたらキャラクターの攻撃力を入力してそれに応じて敵にダメージを与えますよっていう出力する機能がひっかくという関数みたいな感じなんですよね。
けっこう難しいんだけど今の話は概念チックな感じでね。
そういう風に関数は自由に作れるんですよね。
複数の処理をまとめてやるってこともできるし、何か受け付けて何か出力するみたいな、そういう作り方もいろいろあったりするし、今のは一例なんで。
ただ、そうじて言えるのはコマンドとか攻撃とかそういうところに関数っていうのは便利なんで、そういうところに実装していくときのヒントになります。
次は4つ目っていうと、プログラミングの繰り返しっていう学習項目があるんですけど、これRPGゲームで言うと自分のターンが終わったら敵のターン始まるじゃないですか。
で、敵のターンが終わったら自分のターンまた始まるじゃないですか。
こうやってどっちかがHPが0になるまで勝敗が決まるまでずっと繰り返すじゃないですかゲームって。
それって繰り返し文使ってるんですよ。が便利。
イメージしてもらえると、敵のターンが始まりますっていう処理書くじゃないですか。
で、終わったら自分のターンが始まりますっていう処理書くじゃないですか。
その後また敵のターンを書くって、永遠と書くのって不可能というかめちゃくちゃ大変じゃないですか。
そうすると繰り返し文っていうものを使えば、敵のターンが終わって自分のターンが始まる。
それを繰り返してくださいっていうことを書くだけで終わるんですよ。3行ぐらいで終わるみたいなイメージ。
なるほど。ABCがあってCのところにCまで行ったらAに行きましょうっていうところを置いとくだけでそれが勝手に何回も繰り返されるような。
で、どちらかのHPが0になったら終わりですよというループを抜けるって言ったりするんだけど、その繰り返しをやめるよっていうような。
18:08
そういう感じで作れるので、繰り返し文、if文って言ったりとか、while文っていうのを使ったりするんですけど、そういったものは何かしら学べるっていうところ。
ここは分かりやすいですね、すごくね。
なるほど。ドラクエでルーラみたいな感じなのかな。ひゃーって飛んでいくみたいな、ここまでのワンセットで。
ドラクエってなんて言うんだろうね。
ドラクエってなんでしょうね。単純に相手の攻撃、こっちの攻撃みたいな感じの繰り返しってところですよね。
そう、ターンの繰り返し。
相手ターン、こっちターン。
ターンバトルみたいな感じ。
そう、終わりがない、なんなら。
追おうと押してずっと戦ってるみたいな感じ。
そんな感じかもしれないですね。繰り返すっていうのは、すごい厳密に言うと、敵と自分のターンを交互に自分が攻撃しました。
そしたら敵のターンになって敵が攻撃しました。それを一連としてずっと繰り返すじゃないですか、それを。
もしかしたら終わりがないかもしれないし、どっかで終わりが来るかもしれないけど、それを繰り返すっていうことになる。
ルーラっていうのはなんて言えばいいんだろう、ルーラはなんか飛ぶと、そこで一連が終わるイメージなのかな。
ルーラ、ポケモンで言うと穴抜けの紐ですかね。ダンジョウに入って戻りたい、それを使うとダンジョウの入り口まで戻ると。
ただ入り口まで戻ったらもうそこで終わりで、またもう一度そこの同じ繁盛に入って迷うところまで行ってまた戻るみたいな繰り返しはしないですから、
これは繰り返しには当てはまらないみたいな感じですかね、ルーラの場合は。
そうだね。ごめん、うまく説明できないから。
オートターンバトルみたいな感じ。
そんな感じ。繰り返しをするよって。他に例はないかなと思って。
相手のターンと自分のターンがどっちもHPが無限だったとしたら、延々に繰り返されるっていうふうなことですよね。
そう。ごめんねちょっと説明不足してたんだけど、例えば回数制限の繰り返しもできたりするんですよ。
そうなんだ。
5回繰り返すとかもできたりして、例えば毒状態になったら、だから5ターンは毒状態だから自分のターンになったらHPがちょっとずつ減るよみたいなシステムあったりするじゃないですか。
その時は繰り返し分とかも使えるかもしれない。
なるほどなるほど。
毒状態だからダメージを食らうっていうのを5回繰り返すみたいな。
ターン制っていうところには繰り返しっていうところの紐付けがあるよっていうところが4つ目ですね。
5つ目の話とかで言うと配列とかも学習項目とかにあったりするんですけど、
RPGのバトルって1対1の戦いもあれば複数対複数もあったりするじゃないですか。
キャラクターで言うと4人ぐらい味方がいて、敵も仕事はいたりとか、そういった時に便利なのが配列っていうのを使うことなんですよ。
キャラクターを1個作って、例えば味方のキャラクター1人作って、それをコピーして似たようなキャラクターをコピーする時に便利なのが配列っていうようなイメージなんですよね。
プレイヤー1を作れば2,3,4も配列で作れるし。
21:03
敵のキャラクターも1キャラクター作れば2,3,4の敵も作りやすいっていうような。
そういったところで配列はすごい便利になってくる。
だから同じ似たようなものを複数作る時に配列が便利だよっていうようなことです。
他の例で言うと、例えばフィールドのマス目ってあるじゃないですか。
あれ1個作れば大体配列でもう展開できるんですよ。
そういうこと?
いっぱい作れるみたいな。
配列って並列でコピーしていくイメージなんだ。
そんな感じ。
イメージ1つのフィールドのマス目を作りました。
それを配列でどんどん作っていって、それを繰り返しで作っていくみたいな感じなんだけど。
それで1つの大きなフィールドができるっていうような。
そんな感じのことがプログラミングで学べるというか、勝手にできるようになってるって感じ。
そういうイメージかな。
あとは例えば、ちょっと違うゲームにはなっちゃうんだけど、カードゲームで言うとデッキとかね。
1枚のカードを作ってあげて、それを例えばデッキで50枚ですとかだったら、
40個の配列を用意してあげれば1つのカードに対して。
そうやったらもうそれでデッキができるとか。
なるほど。
手札もそう。手札も5枚が手札ですってなったら、カード5枚の配列みたいな感じで。
結構配列ってすごいいろんなところで便利です。
なるほど。結構ゲームの根幹みたいなところがあるね、カードゲームだったら。
そうそう。
そうそう。っていうのがありますね。
次、6個目かな。
6個目とかね、ちょっとここからC言語独特の話になるんだけど、ポインタとか構造体とかってあったりするんですよ。
これ結構難易度の高いものというか挫折しやすいところの章ではあるんだけど、
構造体って便利なのはキャラクターの所持品とか、キャラクターっていった時にステータスHPMPだけじゃなくて、
装備品だったり所持アイテムとかあったりするじゃないですか。
そういったところにデータを紐付けてあげるときに構造体っていうのは便利だったりするんですよ。
データの紐付け?
そう。構造体もいろんな作り方があったりするんだけど、
例えばキャラクターの、一人勇者のキャラクターがいます。
その勇者が持っているアイテムは薬草です。
あとは装備しているものは剣です。
なった時に構造体っていうものを使ってあげると、変数って見た時に、例えば変数さっきで言うと勇者っていう変数があって、
装備品の変数とかいろいろあったりするけど、それを一括りで勇者が持ってますよっていうリンク付けをしてあげる時に構造体が便利なんですよ。
イメージで言うと薬草っていうのが例えばあるとするじゃないですか。
薬草っていうのは変数として定義してあげるけど、もっと分かりやすいのって勇者が持っている薬草って言った方が分かりやすいじゃないですか。
具体的になるじゃないですか。その時に構造体を使うんですよ。
勇者の薬草っていう変数を使えば勇者が持ってるっていう風に認識できる、
24:02
そういう言葉の定義の仕方がより具体的になるよっていうのが構造体のイメージ。
何々の何々みたいな。
そうそう。紐付けてあげる感じ、データをね。
オブジェクト思考の言語っていうのもあったりするんだけど、それもそういうイメージなんですよ。
オブジェクトっていうのはC言語ではないんだけど、例えばJavascriptとかCシャープとかだったらクラスっていうものがあったり概念があったりするんですよ。
そのクラスも人が持ってるこれみたいなイメージでデータの紐付けをしてあげることができる書き方という考え方になるんですよね。
なので構造体は所持品とかそういったところでは学べますよねっていう話です。
ポインターっていうところは正直RPGと直接的ではないんだけど、
ポインターっていうものは何かっていうとパソコンのメモリって分かりますかね。
メモリっていう記憶領域があるんですけど、メモリに直接アクセスしたりするのに便利なもので、
一方で言うと処理が早くなったりするっていう良さはあるんだけど、
僕はそれをポインターをうまくRPGバトルゲームで活用するときに使ってるのは、
コマンドで敵に全体攻撃をするときにポインターって役に立つんですよ。
全体攻撃はポイントなんだ。
ポインターを使える。
さっき関数の話したじゃないですか。
例えばひっかくというコマンドを関数に見立てて、
敵1にダメージ与えるよっていう関数の特徴としては一つの出力しかできないんですよ。
何が言いたいかというと、1個しか変えれないんですよ。
だから1個っていうと敵のHPにダメージ与えるってなったときに1人しかダメージ与えれないんですよ。
だけどポインターを使うと複数の出力ができるようになるので、
全体攻撃ができるようになるんですよ。
敵1のHP減らしたり、敵2のHPも減らしたりみたいな。
だから必殺技の搭載のときにポインターとか使えたりするんですよね。
そういったことを勉強会のプログラムの中では紐付けて学ぶ感じでやってますね。
あとは最後にセーブとロード。
そういったところはファイルの処理を扱うっていうプログラミングの学習項目でいうと、
ファイル処理っていうのがあるんですけど、
それはプログラムがあって1つの外部データ、外部ファイルですね。
セーブデータをインポートしてロードしたりとか。
そういったことをするのに役に立つというか。
そういったところが学べるっていうの。
ということで、結構長々とお話したんだけど、
全体としてRPGのバトルの中のそれぞれの機能って
プログラミングのこういった学習項目を学べるよねっていう話になります。
全部で今6つぐらいって言った?
ちょっと待って、おさらいさせて。
1個目が変数。
変数。
2個目が条件分野。
3個目が関数。
27:00
4個目が繰り返し。
5個目が配列。
6個目が構造体とかポインター。
7個目がファイルっていう話をしました。
この7つでほとんどプログラミングの概要なんだ。
C言語はゴリゴリよ。
なんならポインターとか構造体とか知らなくてもいい。
それ以外の配列とか関数とか繰り返しとか、
それでプログラミングも十分できるって自信持っていいから。
だって実際に成果物としてRPGバトルゲームできるんだから。
これが理解できてるからね。
そう。
なるほど。
っていうのがあるから、よくあるの。
多分共感する人もいるかもしれないんだけど、
プログラミング独学で学んだとしても、なかなか自信持てないと思う。
自信を持てるきっかけって結構少ないと思ってて。
実際に何か作った成果物とかがあったほうが、
実感として自信が持てるじゃないですか。
その通りですね。
これ一応知ってるっちゃ知ってる。
これも知ってる知ってる。
だけど自信あるかというとないというか、
プログラミングの自分は初級者なのか中級者なのかも、
そういった定義今あんまりないじゃないですか。
なんで、そういった自信もつけるっていうのを含めて、
作りながら学ぶっていうのが僕はお勧めしている理由なんですよね。
はいはいはい。
ってなった時に、最初プログラミング学んだことないけど、
勉強してみようかなって思ったら、
ぜひRPGのバトルゲームを作るってことを、
ちょっと検討してみてはいかがでしょうか。
なるほど。
っていう話です。
これどうやって作るんですか?
これ?
RPG、ユニティ?
ゲームを、例えばビジュアルとか含めて、
ゲームの見た目も作りたいんだったら、
ユニティとか、アンリアルエンジンとか、
そういうゲームを作るツールもいいと思うんですけど、
僕は結構どの言語でもRPGゲームの基礎は作れると思って、
テキスト型のバトルゲームみたいな感じ。
はいはいはいはい。
敵が現れた、味方も現れた、
で、HPはそれぞれこうです。
で、敵のターン始まりました。
敵の攻撃、味方のターンです、味方の攻撃みたいな、
そういう一連のゲーム終了みたいな。
何をしますか?って聞いてきたりとか、
で、入力できたりとか、
そういう一連のやつは、
どの開発環境でもできます。
うーん。
そういうテキスト型のRPGバトルゲームはね。
うんうんうんうん。
そういう例とかも、ほんとはね、見したいっちゃ見したいけどね。
あー、確かに。
でも概念が分かってたらさ、
最悪、あの、ドキュメントとかに起こしてればさ、
それもそれでさ、構造自体はなんかプログラミングだもんね。
そうそうそうそう。
それがなんかこう、パソコン上で動いてるのか、
文字として読んでも理解できるのか、つったら。
うんうんうん。
ね、一つのプログラムというか。
そういうこと。あの、プログラム処理って、
要はゲームの中身の処理の話だから、
別に見た目をそこまで気にしなくても、
全然勉強とかできるわけ。
うんうんうん。
ゲーム作りとしては。
だから、なんかかっこいい画像とか、
かっこいい音の演出とかはないけど、
テキストでRPGバトルゲーム作れたら、
もうそれはもうUnityとかでも作れるレベルだと思うから。
30:01
そういうところで一個作ってみるといいかもしれない。
そっかそっか。
処理だけやってもらうためのものであって、
その分岐とか考えたら人間だもんね。
そうそうそうそう。
そうか。だからパワポをしてこうポチッとしたら3枚目飛ぶとか、
そういうやつでも。
あ、そうそうそうそう。
立派なゲームっちゃゲームだから。
Unityの結構役割は、
いろいろそのプログラムの処理で、
なんか敵の攻撃をするとか、
そういうプログラミングをした上で、
なんか音を出したりとか、
こういう音出したいなとか、
こういうエフェクトで見せたいなとか、
こういうキャラクターの画像を出してあげたいなとか、
そういったところの見せるっていうのも含めて、
作りやすいのがUnityの特徴であって、
普通にプログラミングの環境、
開発環境で、
なんか出力画面とかで、
なんかテキストで出してあげたりすれば、
もう十分ゲームとしては作れるので、
あんまりこだわらずに、
自分の学んでみたい言語で、
学んでみたい開発環境で作れるので、
ぜひ気軽に作ってみたらいいんじゃないですかね。
何でもOKですか?
あの言語は。
言語は何でもOK。
何でもOK。
今言った話で言うと、
ポインターと構造体外は全部、
どの言語もあるから。
プログラミングって、
繰り返しとか条件分岐とかがあれば、
ほぼほぼプログラミングなんですよ。
どの言語も絶対あると。
それを活用できれば、
どの言語でも作れます。
なるほど。
それが簡単にできるツールかどうかってことですね。
そうだね。
だから、
簡単にできるかどうかっていうのもそうだし、
RPGバトルゲームを作ろうとすれば、
それで大体その言語の知識は学べるというか、
知ってるよっていう話だからね。
先にRPG作ろうと思って、
どっか言語を選んで、
作ってみるっていう順番の方が早いと。
そしたら勝手に学んでるよ多分。
もうその言語、
ほぼほぼマスターしたと思っていいよ。
なるほど。
もうどの言語でもいいやっていう感覚で、
例えば、
僕はこういうゲーム作りたいから、
こういうゲームにはこの言語かなとか、
そういう難しいことを考えずに、
ゲームを作りたい。
どの言語でもいいんだったら、
じゃあこれにしようみたいな感じで、
言語選びでそんなに
頭悩む必要ないよっていう感じですかね。
そうだね。
そうですね。
なるほど、なるほど。
っていう感じですね。
なるほど。
ゲームが作ってみたかったら、
CシャープとかCプラプラが、
Cプラが結構おすすめだったりするので、
ユニティがCシャープ、
アンリアレンジがCプラっていうような、
それぞれ対応している言語があるので、
そういったところを触り始めて、
合わせてテキストでRPGバトルも作ったり、
実際にテキストじゃない、
面白い感じのRPGゲーム作ったり、
そういったこともできるので、
そういうところのトライをしてみては、
いかがですかね。
そういったところをね、
どういうふうに作っているかとか、
どんな感じで作っているかは、
SNSとかで発信をしていけたらいいなと思っています。
いいですね。
本当に簡単に作るんだったら、
RPG作るとかそういうね、
やつとかでもありそうですよね。
33:00
ありあり、全然あり。
逆にRPG作るで、
プログラミングは学べますか。
コーディングとか、
実際にRPG作るってごめん、
俺あんまり分かってないところもあるんだけど、
プログラムを書くっていうことはあんまりしないよね。
ないない。
たぶんないよね。
であれば、そこの学びはないかもしれない。
コードを書くっていう学びはないかもしれないけど、
考え方としては学べると思う。
繰り返しの概念とか、
そういう概念を学ぶっていうのは、
すごい適してるとは思う。
なるほどなるほど。
そういう制御はできるかもね。
でも実際にどう書くかとか、
言語とかの話になってくると、
実際その言語を触りながら作るのがいいんじゃないかなって、
思ったりしてます。
っていうところです。
なるほど。
じゃあこれで一通り、
プログラミングの概要とRPGが、
理解できてるのかな。
これなんかやっぱ不安だね。
理解できてるのかできてないのかよく分かんないね。
概要を理解してもらいたいってよりかは、
RPGを学ぶ、
それぞれの機能が対応してるっていうことを伝えたいと、
いうのがまず1個であるんだけどね。
学習方法としてはこういうやり方もあるのか。
そういうこと。
学習方法の説明っていうのが一番かな。
今回話したいこととしてはね。
できるようになった人側からの、
できない人向けのアドバイスは、
とりあえずRPGさえやっとけば、
プログラミングのことが理解できるよと。
今この場の言葉の意味が分からなくても、
やっていくうちにどんくちゃで理解できるようになるよっていう、
そんな感覚ですかね。
あとは、
参考書を見たときに目次で、
こういうことを学ぶよって言われても、
これ学ぶのはいいけど、
何に役に立つのっていうのが、
全然想像できないよりも、
想像できた方が楽しくないですか。
確かにね。
RPGでいくとそういうこと。
そういうことなんですよ。
今更なんですけど、
RPG以外でも、
学びながら作ればもちろんできる。
アクションゲームでも全然学べる。
作り方次第もあるしね。
今回はその中の、
こういうことを学ぶ、
学習項目こういうのを学ぶのって、
ゲームでいうとこういうところに繋がるよっていう、
話ができてたらいいなっていう感じ。
ポインタとか、
繰り返しとか、条件とか、変数とか、
関数とか、
そういうゲームの、
こういうところの機能の搭載に使うんだな、
ぐらいの感じのイメージができれば、
今回も全然いいと思います。
言葉だけだったら全然分かんなかったけど、
そうそうそう。
なんとなくゲームの中のこういう処理って言われると分かる。
そう。
っていうような話が、
になってたかな。
なんとなくね。
なんとなくなってますね。
なんとなくなってますよ。
でもまあここからだよね。
ふわっとそういうのを理解しておいた方が、
やりやすいって話だよね。
あとは実際に実装しながら、
そのなんとなくが明確に、
分かればいいですけどね。
山本さんなんか全然、
プログラムとか分かないっていうところなんですけど、
聞いてみてどうでした?
そうですね。
でもさっき言ったRPGに当てはめて、
こういうなんと言いますかね、
36:00
聞いただけでちょっとアレルギーが出ちゃいそうな、
難しい言葉を受け入れることができるというか、
変換することができるっていうのが、
すごく分かりやすかったというか。
イメージの例としてね。
伝われば。
すごく分かりやすかったですね。
ちょっと個人的にやはり、
関数とポインターのあたりが、
ポインターのあたりは、
例えばその、
ひっかくとかの話でしたけれども、
ポケモンにはないですけども、
そこに、
相手一体をひっかいて攻撃するっていうのを、
ポインターを使うと、
スーパーひっかくみたいな感じのことにすることができて、
相手全体をひっかけるみたいな、
そういうプラスアルファにすることができるのが、
ポインターっていう感じで。
そう活用の一例として、
イメージをしてもらえればなって。
もちろんいろんな活用にも、
仕方はあるので、
今言った例以外の、
全然違う実装の仕方もできるんですよ。
ただその一つの活用の仕方として、
こういういいことがあるよっていうのを、
覚えてもらえればいいなと思ってるんですね。
でもさっきみたいに、
今みたいな例とかでもね、
ポケモンやドラクエって言ったけど、
そういうみんながある程度共通認識で持っているものを、
ある意味その教材というか、
そういった形で、
今言っていただくことで、
明確に何と言いますかね、
言葉だけじゃなくて、
イメージが浮かんでくるので、
今シークバーが減っているとか、
HPが半分で黄色とか、
っていうのがすごく、
イメージと結びついて分かりやすいという感覚でしたね。
何と言いますか。
本当です。
いろいろ説明たるところもあるかもしれないんだけど、
そういうね、
RPGだけじゃなくて、
アクションゲームではこんな感じで、
このプログラムのこの書き方を、
活用しているよっていう、
また別のゲームとか、
いろいろイメージが広がるように、
そういう説明も今後できたらいいなと。
いいね。
他のゲームだとこうみたいな。
結構聞きながら、
サウンドノベルとかも似たような感じかなと思ってた。
そうかもしれない。
選択肢次第で条件分岐したりね。
全然違う話し込んだりとかね。
ループしたりするかもしれないしね。
ノベルゲーとかまんまかもね。
そうかも。
ノベルゲームめちゃくちゃいいかもしれないね。
確かに。
なんかでもふわっとわかった。
わかったわかった。
まずはふわっとからでいいよ。
ふわっとからじゃないとね。
だいたい今のRPGやそういったのではなくても、
いろんなゲームは、
本当にこのさっき言った変数や関数や条件っていう、
材料から
全てが作られているという風な感じなんですね。
こんなイメージで。
そうか。
逆に言うとこれしかやってないんだねRPGって。
そうよそうよ。
そんなもんよ。
すごいシンプルなんだね。
なるほど。例えば家とかを見たときに、
すごくいろんなものでできているようだけれども、
できているのは正直は鉄と木とプラスチックだけでしかできてないっていう風な。
そんなイメージ。
マイクラとかは結構イメージしやすいかもしれないけど、
例えばレンガが1個あれば、
それ破裂でいろいろ組み合わせれば、
39:00
1つの家ができたりとか。
なるほど。
そう。
それを分解しているような形にはなるんだけど、
基本的なものでどんなものもだいたい作れるから。
もっと上級者になってくると、
処理時間を早めたりするために工夫した書き方したりとか、
もっと上手い使い方したりとか、
少ない行動量でたくさんのことできるとか、
そういうこともあったりするけど、
まずはそういう基本的なところから作れるものを作って、
自信持ってやるっていうのが、
それぞれこんなイメージで作れるよっていうのを実感してもらう。
それぞれこんなイメージで作れるよっていうのを実感してもらいながら、
学ぶっていうのが個人的には楽しくていいんじゃないかなって思った、
こういう紹介をしています。
なるほど。
あとすごい思ったのは、
基本的な構造、プログラミングって何っていう構造を理解してから、
作ると作り方も変わりそうだから、
配列とはこういうものみたいな概念をまず理解しておくっていうだけで、
ゲーム作りもすごくシンプルに
頭の中で組み立てて作れるようになりそう。
プログラミング学習も、
こういうコマンドを覚えるとかじゃなくて、
概念を覚えるっていうのが大事なのかなっていうのはちょっと。
そうだね。そこら辺のふわっとした理解、
結構大事だなって思ったのが、
例えば、てか以前も聞かれたんですけど、
プログラミング、とりあえず独学でちょろっとできるようになったけど、
これが仕事に活かせるかどうかとか、
必要的なレベルなのかどうかって不安な人結構いたりするんですけど、
そういった時によく話してるのは、
僕もそういった仕事をしたりはするんですけど、
例えばお客さんというかクライアントというか依頼主から、
こういうことしたいんだけど、
こういうアプリケーション作りたいんだけど、
これできるのかなとかっていうところから始まるじゃないですか、相談とか。
そういった時に、例えばやりたいこととかそういうもの、
例えばこういうRPGゲーム作りたいんだけど、みたいなこと言われたら、
イメージできるじゃないですか。
例えばそれぞれの単元で、
この機能、例えばこういう敵を用意したいとか、
こういうバトルシステムにしたいって言ったときに、
プログラムで言うと大体こういう配列とか使えば実装できるなとか、
そういうふわっとしたイメージで、
技術的に可能ですとか、できないので別の方法を探しましょうとか、
仕様変えていきましょうとか、そういう話ができるようになるじゃないですか。
だからふわっと全体理解っていうのも結構そういうところでは役に立つ。
仕事とかそういったところでは、
最初の技術的なに可能かどうかの話をするときとかに、
すごい便利だったりするんで。
なるほどね。上流の概念の話をして作っていくところですごい役立つ。
そうですね。っていうところもあるので、
イメージから入っても全然いいんじゃないですかね。
なるほどね。
むしろそこが結構重要になってきますよね。
この文字タゲ見せられても、やっぱりちょっと難しいなってイメージができないので、
ふわっとした概念的だからこそ、
他のものに置き換えて考えることができるっていうのを今思って、
さっき家って言いましたけども、
42:01
あれら変数、条件、関数とかは一個一個の材料だから、
例えば作りたいものはどの材料で作られてるかっていうことをイメージすると、
すごくわかりやすかったと言いますか。
僕の感想なんですけども、
例えば犬小屋作りたいっていう風になったら、
ガラスで作りたい、
犬小屋を鉄で作りたい、
それはできる側からしたらちょっと現実的でないよねっていう判断もできるし、
犬小屋を鉄で作りたい、
できるけどコストはなっていうのが、
さっき言ったクライアントとの話し合いって、
作りたいものと何を使ってどういう風にやるかっていう話し合いとか、
こういう風にすごくわかりやすいですね。
こういうイメージでしたね。
あとは一個、実際に何かを作ってみる。
やれば他のものを作るときはこんな感じで作れるんだろうなってイメージもできるようになるから。
具体的なところはね。
作ってみるのもそうだし、
何か作ってるのを誰か作ってるのを見るのでもいいかもしれません。
それでいくと僕らの開発とかも見てもらっても一つ面白いかもしれないですね。
そんなこんなで、
今日はRPGでプログラミングがほとんど学べる説っていうのは、
ふわっと理解した感じですかね。
ふわっと理解できましたね。
よかったです。
ふわっとでもよかったです。
ありがとうございます。
じゃあこれちょっと最後告知ですかね。
はい。
何かあります?逆に。
告知?
告知したいこと。
うーんとね、
旧TwitterXを全然サボってたからやりたい、もっと。
やりたいだった。
確かに全然更新してませんでしたね。
やりたいというか、
SNS、もうこれちょっとどっかで悩み相談させてよ。
もうSNSの発信、もともとあんまそうやってる癖なかったのもあるんだけど、
続けられてないんだよね。
挫折してる。
まさにそれ挫折してるところ。
それこそゲーミフィケーションでなんとかならないのかな。
みんなリアクションしてくれたら即時フィードバックで頑張れるかも。
そうかも。
他人任せみたいな。
43:56

コメント

スクロール