2021.03.26
BLOG
プログラミングでRPGの戦闘を盛り上げよう!
2021-10-15
このブログはロックシステムのYoutubeチャンネル「ロックシステムアカデミーCH」の文字起こしや使用したコードの解説等をしています。
是非動画本編もご覧ください!
よろしければチャンネル登録も宜しくお願い致します!
クラスと引数を使って勇者とモンスターを戦わせてみよう!
前回の動画では勇者クラスを作成してRPGの戦闘画面を再現したね!
今回の動画ではクラスと引数を使って勇者とモンスターを戦わせてみよう!
前回の応用だね!かかってこーい
今回作成するプログラムの全体図はこんな感じだね!
まずは、攻撃対象になる敵を配列を使って用意していくよ。配列はこの動画で紹介しているから復習してみてね。
string[] enemies = {"スライム", "魔王","ドラゴン"};
格差がすごいメンツだぜ、、
続いてこの配列からループで値を取り出して攻撃してみるよ。
static void Main(string[] args)
{
string[] enemies = { "スライム", "魔王", "ドラゴン" };
for (int i = 0; i < enemies.Length; i++)
{
Console.WriteLine("勇者は" + enemies[i] + "を攻撃した");
}
}
これを出力すると、勇者がそれぞれの敵に攻撃するようになるんだね
気になったんだけど、for文の条件式がいつもと少し違うね。
今回のようにstringを出力する場合、Lengthメソッドを使ってるね。
enemies 変数の中にある数、つまり今回の場合だと"スライム", "魔王", "ドラゴン"の3つを指定してあげることができるよ。
"スライム", "魔王", "ドラゴン"を取り出すまでループしてね!って意味になるんだね。
ここまでは大丈夫だね。それじゃあ、この攻撃メッセージをメソッドとして分離してみるよ。
オブジェクト指向では、それぞれの役割や特徴ごとに考えるんだったよね。
まずは"攻撃"メソッドを作るんだね。前回同様にメソッドを作成して引数を渡してあげるよ。
static void Attack(string enemies)
{
Console.WriteLine("勇者は" + enemies + "を攻撃した");
}
仕上げにさっきのConsole.WriteLine("勇者は" + enemies[i] + "を攻撃した");を消して代わりにメソッド名をここに加えて出力っと・・・
class Program
{
static void Main()
{
string[] enemies = { "スライム", "魔王", "ドラゴン" };
for (int i = 0; i < enemies.Length; i++)
{
Attack(enemies[i]);
}
}
static void Attack(string enemies)
{
Console.WriteLine("勇者は" + enemies + "を攻撃した");
}
}
同じ結果になったね!Mainメソッドで定義したenemies がAttackメソッドの引数に入って、今度はAttackメソッドでenemiesを使ってるんだね。
これが引数だったよね。 プログラミングに慣れていないと、コードが違うだけで難しく感じてしまうから数をこなして慣れていこう。 今回のようにメソッドとして分離しておけば、あとはメソッドを変更するだけで攻撃シーンを派手にできるよ。
ランダムなダメージを与えよう!
ためしにランダムな値に合わせてクリティカルヒットをさせてみようか。 これはランダム変数を生成しよう
var random = new Random();
int number = random .Next(1.10);
くじ引きアプリで使ったコードだ!1~9までの数字をランダムに表示できるんだよね。
この生成したランダムな数値をAttackメソッドで使用するよ。Attackメソッドの引数にint number を追加っと・・
なるほど!numberを引数としてAttackメソッドに渡すことでAttackメソッドの中でランダムな数字を扱えるようになったのか! 引数は2つ入れても良いんだね。
その通り!必要なものを作って渡す!この動きを覚えておこう! じゃあ、こんな感じでif分を書いていこうか。
if(number < 5)
{
Console.WriteLine( enemies + "に" + number +"のダメージを与えた");
}
else
{
Console.WriteLine("クリティカルヒット!" + enemies + "に100のダメージを与えた");
}
引数を渡してメソッドが書けたから、最後にMainのメソッドの()にも引数がいるんじゃない?
お!良い指摘だね! この部分に引数を書き忘れたり、メソッドを書き忘れるから、あくまで、メインメソッドでプログラムを実行するんだってことを忘れないようにしなくちゃいけないね。
ここに引数がないと、引数がないメソッドを呼び出してることになって期待した動きにならないことがあるもんね・・
class Program
{
static void Main()
{
string[] enemies = { "スライム", "魔王", "ドラゴン" };
var random = new Random();
for (int i = 0; i < enemies.Length; i++)
{
int number = random.Next(1, 10);
Attack(enemies[i], number);
}
}
static void Attack(string enemies, int number)
{
if (number < 5)
{
Console.WriteLine(enemies + "に" + number + "のダメージを与えた");
}
else
{
Console.WriteLine("クリティカルヒット!" + enemies + "に100のダメージを与えた");
}
}
}
じゃあ、完成したコードを何回か実行してみよう・・出力っと
お!たまに良いダメージが入ってるね!無事完成だ!
ではでは今回はここまで次は以前学習したクラスを掘り下げて、インスタンスについて学習していこう!
チャンネル登録よろしくお願いします!
ロックシステムアカデミー
大阪福島にあるプログラミングスクール「ロックシステムアカデミー」です!「プログラミング作って実践」をテーマに楽しく分かりやすいアプリ開発のレクチャー動画をアップしていきます!
チャンネル登録よろしくお願いします!
プログラミングスクール
▼「ロックシステムアカデミー」WEBサイト
https://rocksystem.co.jp/academy/
https://www.youtube.com/channel/UC6JxNQ2QTX8Dl96V2MMNP8A
株式会社ロックシステム
「ブラック企業をやっつけろ!!」を企業理念にエンジニアが働きやすい環境をつきつめる大阪のシステム開発会社。2014年会社設立以来、残業時間ほぼゼロを達成し、高い従業員還元率でエンジニアファーストな会社としてIT業界に蔓延るブラックなイメージをホワイトに変えられる起爆剤となるべく日々活動中!絶賛エンジニア募集中。