補足:後判定繰返し文
・繰返し内容を1度行ってから繰返すかどうか判断する場合に用いる繰返し構文
・書式: do { 繰返し内容 } while(継続条件);
・例:do { 100円で遊ぶ } while(まだ金がある);
・主に、入力や受信などで得たものをチェックし、正しいものが得られるまで先に進まない場合に用いることが多い
・例:do { 画面などからyかnを入力 } while(yでもnでもない?);
・例:do { データを受信 } while(正しくない?);
ミニ演習 mini103b
・chap3_2_1を後判定繰返しにしてみよう ①パブリック変数でint zandaka = 30000 を受け取る ②5080円払う ③残高を表示する ④残高がある間、②③を繰り返す ※ 最初の残高が5080円未満でも(赤字になっても)払うことになる
作成例
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class mini103b : MonoBehaviour {
public int zandaka = 30000;
void Start() {
do {
zandaka -= 5080; //5080円払う(たとえ赤字でも!)
Debug.Log(zandaka);
} while (zandaka > 0); //残高がある間繰返す
}
void Update() {
}
}
補足:2重繰返し
・p.099の図の通り「繰返しの中で繰返し」を行うことが可能
・この場合、繰返しに関わる変数やカウンタの変数の変化に注意
例:2×3回繰り返す場合①
int a = 2;
while (a > 0) {
a -= 1;
int b = 3;
while (b > 0)
b -= 1;
ここに処理を書くと2×3回繰返される
}
}
例:2×3回繰り返す場合②
int a = 1;
while (a <= 2) {
int b = 1;
while (b <= 3)
ここに処理を書くと2×3回繰返される
b += 1;
}
a += 1;
}
ミニ演習 平面ダンジョンへのモンスターの配置作り mini099
・縦3×横2の6部屋のダンジョンがある ・乱数を用いて、1部屋に0~9匹のモンスターを配置したい 下記のように表示しよう 1階1号室は9匹 1階2号室は2匹 2階1号室は9匹 2階2号室は3匹 3階1号室は0匹 3階2号室は1匹
作成例
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class mini099 : MonoBehaviour {
void Start() {
System.Random r = new System.Random(); //乱数クラスのオブジェクトを生成
int a = 1; //1階から
while (a <= 3) { //3階まで繰返す
int b = 1; //1号室から
while (b <= 2) { //2号室まで繰返す
int n = r.Next(10); //0~9の乱数を得る
Debug.Log(a + "階" + b + "号室は" + n + "匹");
b = b + 1; //次の部屋へ
}
a = a + 1; //次の階へ
}
}
void Update() {
}
}
ミニ演習 直列ダンジョンへのモンスターの配置作り mini099b
・6部屋のダンジョンがある ・乱数を用いて、1部屋に0~9匹のモンスターを配置したい ・モンスターの数を●の数で示そう 下記のように表示しよう 1号室:●●●●●●●●● 2号室:●● 3号室:●●● 4号室: 5号室:●●●●● 6号室:●●●● ・ヒント:内側の繰返しは"●"の連結をモンスターの数だけ行う処理になる ①a=1号室から ②a=6号室まで③から⑩を繰り返す ③文字列sを a + "号室:" にする ④モンスター数nを乱数rで決める ⑤カウンタbを0にする ⑥カウンタbがモンスター数n以下である間、⑦から⑧を繰り返す ⑦文字列sを s + "●" にする(つまり後ろに"●"を連結する) ⑧カウンタbを b + 1 にする(つまり次のモンスターへ) ⑨文字列sを表示 ⑩カウンタaを a + 1 にする(つまり次の部屋へ)
作成例
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class mini099b : MonoBehaviour {
void Start() {
System.Random r = new System.Random(); //乱数クラスのオブジェクトを生成
int a = 1; //1号室から
while (a <= 6) { //6号室まで繰返す
string s = a + "号室:"; //「■号室:」を用意
int n = r.Next(10); //モンスター数を0~9にする
int b = 0; //カウンタを0にする
while (b < n) { //カウンタがモンスター数未満の間
s += "●"; //文字列に"●"を連結
b = b + 1; //次のモンスターへ
}
Debug.Log(s); //できた文字列を表示
a = a + 1; //次の部屋へ
}
}
void Update() {
}
}
提出:アレンジ演習:直列ダンジョンへのモンスターの配置作り mini099b
・9匹満室の部屋には「満室」と表示しよう 例: 1号室:●●●●●●●●●満室 2号室:●● 3号室:●●● 4号室: 5号室:●●●●●●●●●満室 6号室:●●●● ヒント: ・Debug.Logする直前に「nが9なら、sに"満室"を連結する」処理を挿入すれば良い