講義メモ

・p.104「for文」から

提出フォロー:アレンジ演習:直列ダンジョンへのモンスターの配置作り ini099b

・9匹満室の部屋には「満室」と表示しよう
例:
 1号室:●●●●●●●●●満室
 2号室:●●
 3号室:●●●
 4号室:
 5号室:●●●●●●●●●満室
 6号室:●●●●
ヒント:
・Debug.Logする直前に「nが9なら、sに"満室"を連結する」処理を挿入すれば良い

作成例

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; //次のモンスターへ
            }
            if (n == 9) { //【以下追加】9匹いるなら
                s += "満室"; //文字列の後ろに連結
            }
            Debug.Log(s); //できた文字列を表示
            a = a + 1; //次の部屋へ
        }
    }
    void Update() {

    }
}

p.104 for文

・繰返し構文の一つでwhile文の回数指定特化バージョン。
・whileとおなじ前判定繰返しで、for文で書けるものはすべてwhileでも書ける
・回数指定の繰返しをwhile文で行うと、下記のパターン例になる
 ① カウンタ←0
 ② while(カウンタ < 回数) {
    繰返し内容
    ③ カウンタに1加算
   }
・上記の①②③を1文にするのがfor文
・書式: for(①; ②; ③ { 繰返し内容 }
・パターン例: for (カウンタ←0; カウンタ < 回数; カウンタに1加算) {繰返し内容}
・①では通常、for文の中でしか用いないカウンタ用の変数を用いるので、ここで初期化することが多く、
 主に「int i = 0;」とする。
・②ではこのカウンタ用の変数iを用いて「i < 回数」とすることが多い
・③でもこのカウンタ用の変数iを用いて「i = i + 1」とする代わりにインクリメント演算子を用いて
 「i++」とすることが多い
・よって、for文の基本的な形式は「for(int i = 0; i < 回数; i++)」となることが多い。
・ただし、①②③はどれも省略可能であり、上記とは異なる使い方も可能
・whileとおなじ前判定繰返しなので、②が最初から    Falseだと繰返し内容は一度も
 実行されない

p.105 chap3_3_1

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class chap3_3_1 : MonoBehaviour {
    void Start() {
        for (int cnt = 0; cnt < 5; cnt++) { //5回繰り返す
            Debug.Log("ハロー");
        } //forブロック(繰返し内容)の終わり
    }
    void Update() {

    }
}

p.105 インクリメント演算子

・複合代入演算子(+=,-=,など)と同様に、省略構文として「● = ● + 1」を「●++」と表記できる
・なお、インクリメント演算子には「●++」と「++●」があり、後置、前置と呼ぶ
・単独で用いる場合、後置、前置は同じ意味だが、式の中などに置くと意味が変わるので注意
・前置「++●」:前もって1加算し、その結果が評価になる。
 例: a = 1; Debug.Log(++a); //2と表示し、aの値は2
・前置「●++」:●の値を評価として、その後で1加算。
 例: a = 1; Debug.Log(a++); //1と表示し、aの値は2

ミニ演習:mini105

・chap3_3_1をwhile文にしよう

作成例

using UnityEngine;
public class mini105 : MonoBehaviour {
    void Start() {
        int cnt = 0; //forの①
        while(cnt < 5) { //forの②
            Debug.Log("ハロー"); //forの繰返し内容
            cnt++; //forの③
        }
    }
    void Update() {
    }
}

p.106 繰返し内容においてカウンタの変数を利用する

・for文においてカウンタの変数を初期化した場合、繰返し内容においてカウンタの変数を利用することができる
・これを用いることで「●をカウントアップしながら繰返す」ような処理が簡潔に表せる
・ただし、for文においてカウンタの変数を初期化した場合、その有効範囲はforの中だけなので、
 繰返しが終わってからカウンタの値を使いたい場合は工夫が必要

p.106 chap3_3_2

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class chap3_3_2 : MonoBehaviour {
    void Start() {
        for (int cnt = 0; cnt < 5; cnt++) { //5回繰り返す
            Debug.Log(cnt + "回目のハロー");  //カウンタの値に連結して表示
        } //forブロック(繰返し内容)の終わり
    }
    void Update() {

    }
}

アレンジ演習:chap3_3_2 ①

・「Debug.Log(cnt + "回目のハロー");」を改良して「0回目」ではなく「1回目」からにしよう

作成例

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class chap3_3_2 : MonoBehaviour {
    void Start() {
        for (int cnt = 0; cnt < 5; cnt++) { //5回繰り返す
            Debug.Log(cnt + 1 + "回目のハロー");  //カウンタの値に加算後連結して表示
        } //forブロック(繰返し内容)の終わり
    }
    void Update() {

    }
}

アレンジ演習:chap3_3_2 ②

・「for (int cnt = 0; cnt < 5; cnt++)」を改良して「0回目」ではなく「1回目」からにしよう

作成例

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class chap3_3_2 : MonoBehaviour {
    void Start() {
        for (int cnt = 1; cnt <= 5; cnt++) { //1から5までの5回繰り返す
            Debug.Log(cnt + "回目のハロー");  //カウンタの値に加算後連結して表示
        } //forブロック(繰返し内容)の終わり
    }
    void Update() {

    }
}

【補足】インクリメント演算子の演習

・式の中にインクリメント演算子を置いた場合、前置と後置の違いに加えて、途中で変数の値が変わることに注意
・例: int a = 1, b = a++, c = ++a;

ミニ演習:mini107a

・上記の例「int a = 1, b = a++, c = ++a;」実行後のa、b、cの値を想定してから表示しよう

作成例

using UnityEngine;
public class mini107a : MonoBehaviour {
    void Start() {
        int a = 1, b = a++, c = ++a;
        Debug.Log("a = " + a + " b = " + b + " c = " + c); //a=3 b=1 c=3となる
    }
    void Update() {
    }
}

解説

① a = 1 により、aは1、bは未定、cは未定
② b = a++ により、bがaの1で1、その後aは2になる、cは未定
③ c = ++a により、aは3になる、cがaの3で3に、bは変わらず1

ミニ演習:mini107b

・例「int a = 2, b = (a++) * (a++), c = (++a) * (++a);」実行後のa、b、cの値を想定してから表示しよう

作成例

using UnityEngine;
public class mini107a : MonoBehaviour {
    void Start() {
        int a = 2, b = (a++) * (a++), c = (++a) * (++a);
        Debug.Log("a = " + a + " b = " + b + " c = " + c); //a=6 b=6 c=30となる
    }
    void Update() {
    }
}

解説

① a = 2 により、aは2、bは未定、cは未定
② b = (a++) * (a++)は、まず、aの値が式に使われるので、式は2 * (a++)になり、aが3になる。
 それから、aの値が式に使われるので、式は2 * 3になり、aが4になる。
 式は2 * 3なので、bは6になる
③ c = (++a) * (++a)は、aが5になり、式は5 * (++a)になる。
 それから、aが6になり、式は5 * 6になる
 式は5 * 6なので、cは30になる

【補足】forのカウンタ用変数の再利用

・通常、forのカウンタ用変数はforの中でのみ有効とすることが望ましいことが多いが、
 例外的にforの外側でも用いる場合がある
・この場合は、forの前でカウンタ変数を宣言しておき、forの①で初期値を代入すると良い

アレンジ演習:chap3_3_2 ③

・forの繰返しが終わった後の変数cntの値を表示しよう

作成例

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class chap3_3_2 : MonoBehaviour {
    void Start() {
        int cnt; //【追加】forの外側でも有効になるように事前に宣言しておく
        for (cnt = 1; cnt <= 5; cnt++) { //【変更】1から5までの5回繰り返す
            Debug.Log(cnt + "回目のハロー");  //カウンタの値に加算後連結して表示
        } //forブロック(繰返し内容)の終わり
        Debug.Log("終了後のカウンタは" + cnt); //【追加】forの外側でも有効(6になる)
    }
    void Update() {

    }
}

今週の話題

販売本数ランキング 今回トップも「スーパーマリオブラザーズ ワンダー(Switch)」GO!
にじさんじライバーの要望に応える徹底的なこだわり―エンジニアとデザイナーが語るANYCOLORの強み【alive 2023】GO!
固定費削減で黒字転換したマイネット―ファンタジースポーツへの固執は吉と出るか【ゲーム企業の決算を読む】GO!
ユーザー制作マップの“ゴーストタウン化”防ぐ―GameWith、『フォートナイト』内でのクリエイティブマップ制作・プロモーションを支援 GO!
アカツキ、ソニーグループ/コーエーテクモホールディングスとの資本業務提携および第三者割当による自己株式処分実施を決議 GO!

過去に『GTA6』の映像を流出させた青年ハッカーに「無期限入院」命令が下る―高い技能や「サイバー犯罪に復帰しようとする意思」から判断 GO!
ブロックチェーンは「実際の通貨を使用したギャンブル」?北米レーティングESRBにてNFT対応ゲームが「成人指定」対象に―Epic Games storeはポリシー変更で対象タイトル販売を継続 GO!
「にじさんじ」ANYCOLOR、“配信荒らし”との間で示談成立…無関係のコメントを執拗に連続投稿 GO!
インディーゲームで契約トラブルを避けるための3つのポイントをPLAYISMが解説【IDC2023】 GO!
【参考】unity.com/ja/the-heretic GO!

前回のコメント

・自由度などが上がってきて、難しいながらもより楽しくなってきました
・前回作ったゲームより実際に使いそうなプログラムが書けて成長している実感が感じられました。

 何よりです。

・ペースも丁度良かったです。

 了解です。リアクション感謝します。

・次回もよろしくお願いします。
・次回もよろしくお願いします

 こちらこそ、よろしくお願いいたします。

講義メモ 後半

補足:後判定繰返し文

・繰返し内容を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に"満室"を連結する」処理を挿入すれば良い

講義メモ

・「ジャンケン」その3の補足をしてから、p.098「繰り返し文」に進みます

提出:追加演習「ジャンケン」その3 janken3

・判定を表示しよう
・例「あなたの勝ち」「わたしの勝ち」「あいこ」
・ヒント:先に「あいこ」を判断すると楽。判定はORで連結した条件ですると良い
 ※ 計算式で判定することもできる:(3 + hand - cpuh) % 3 == 2 ならばhandの勝ち

作成例1

using UnityEngine;
public class janken3 : MonoBehaviour {
    [Header("手をどうぞ(0=グー,1=チョキ,2=パー)")]
    public int hand;
    void Start() {
        System.Random r = new System.Random(); //乱数クラスのオブジェクトを生成
        string s = "あなたの手=";
        Debug.Log(s + ((hand == 0) ? "グー" : (hand == 1) ? "チョキ" : "パー"));
        string c = "わたしの手=";
        int cpuh = r.Next(3); //乱数で0,1,2を得る
        Debug.Log(c + ((cpuh == 0) ? "グー" : (cpuh == 1) ? "チョキ" : "パー"));
        if(hand == cpuh) {
            Debug.Log("あいこ");
        } else if (hand == 0 && cpuh == 1 || 
                   hand == 1 && cpuh == 2 ||
                   hand == 2 && cpuh == 0) { //条件で判定
            Debug.Log("あなたの勝ち");
        } else {
            Debug.Log("わたしの勝ち");
        }
    }
    void Update() { }
}

作成例2

using UnityEngine;
public class janken3 : MonoBehaviour {
    [Header("手をどうぞ(0=グー,1=チョキ,2=パー)")]
    public int hand;
    void Start() {
        System.Random r = new System.Random(); //乱数クラスのオブジェクトを生成
        string s = "あなたの手=";
        Debug.Log(s + ((hand == 0) ? "グー" : (hand == 1) ? "チョキ" : "パー"));
        string c = "わたしの手=";
        int cpuh = r.Next(3); //乱数で0,1,2を得る
        Debug.Log(c + ((cpuh == 0) ? "グー" : (cpuh == 1) ? "チョキ" : "パー"));
        if(hand == cpuh) {
            Debug.Log("あいこ");
        } else if ((3 + hand - cpuh) % 3 == 2) { //式で判定
            Debug.Log("あなたの勝ち");
        } else {
            Debug.Log("わたしの勝ち");
        }
    }
    void Update() { }
}

Chapter 3 繰返し文
p.100 while文

・前判定の単純な繰返しに向く構文
・前判定:繰返しの1回目の前に条件をチェックすること。1度も繰り返さないことがある場合に便利
・書式: while(継続条件) { 繰返し内容;… }
・継続条件はbool型(p.56)の値または式で、主に、比較演算子の式を用いる
・例: while(a < 3) { a = a + 1; } //aが0だったら3回繰り返す
・この例のように式がtrueである間=条件式が成立する間だけ繰返すというパターンが多い
・例: while(a > 0) { a = a - 1; } //aが3だったら3回繰り返す

p.101 chap3_2_1

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class chap3_2_1 : MonoBehaviour {
    void Start() {
        int shikin = 30000;
        while(shikin >= 0) { //shikinが0以上であれば繰返す
            Debug.Log(shikin);
            shikin = shikin - 5080; //shikinから5080を差し引く
        } //whileブロック(繰返し内容)の終わり
    }
    void Update() {

    }
}

p.103 計算もできる代入演算子

・正式には複合代入演算子といい、左辺の変数を用いた式を代入の右辺に書く場合に、誤読しやすいことから、
 誤読を防ぎ、かつ、冗長さを省く仕掛け
・+=演算子: 〇 = 〇 + ◆ を 〇 += ◆ と書ける。意味は「足し込む」
 例: a = a + 5; ⇒ a += 5;
・-=演算子: 〇 = 〇 - ◆ を 〇 -= ◆ と書ける。意味は「差し引く」
 例: a = a - 5; ⇒ a -= 5;
・他に「*=(N倍する、掛けた積にする)」「/=(割った商にする)」「%=(割った余りにする)」などがある

アレンジ演習:p.101 chap3_2_1①

・-=演算子で書き直そう

作成例

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class chap3_2_1 : MonoBehaviour {
    void Start() {
        int shikin = 30000;
        while(shikin >= 0) { //shikinが0以上であれば繰返す
            Debug.Log(shikin);
            shikin -= 5080; //【変更】shikinから5080を差し引く
        } //whileブロック(繰返し内容)の終わり
    }
    void Update() {

    }
}

アレンジ演習:p.101 chap3_2_1②

・資金をパブリック変数で与えるようにしよう
・そして、資金が負の数の時には何も表示されないことも確認しよう

作成例

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class chap3_2_1 : MonoBehaviour {
    public int shikin = 30000; //【移動】
    void Start() {
        while(shikin >= 0) { //shikinが0以上であれば繰返す
            Debug.Log(shikin);
            shikin -= 5080; //shikinから5080を差し引く
        } //whileブロック(繰返し内容)の終わり
    }
    void Update() {

    }
}

アレンジ演習:p.101 chap3_2_1③

・whileブロックを抜けた後で、資金の額はどうなっているか確認しよう

作成例

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class chap3_2_1 : MonoBehaviour {
    public int shikin = 30000;
    void Start() {
        while(shikin >= 0) { //shikinが0以上であれば繰返す
            Debug.Log(shikin);
            shikin -= 5080; //shikinから5080を差し引く
        } //whileブロック(繰返し内容)の終わり
        Debug.Log("繰返し後の資金 = " + shikin); //【追加】
    }
    void Update() {

    }
}

アレンジ演習:p.101 chap3_2_1④

・if文を加えて、資金が赤字(負の数)にならないようにしよう
・ヒント: 資金が5080以上あれば差し引くようにすれば良い
・しかし、こうすると、繰返しが終わらなくなるので、繰返し条件を「資金 > 0」に変更しよう
・そして、資金が5080未満であれば資金を0にすれば良い(あるだけ払うイメージ)

作成例

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class chap3_2_1 : MonoBehaviour {
    public int shikin = 30000;
    void Start() {
        while(shikin > 0) { //【変更】shikinがある間繰返す
            Debug.Log(shikin);
            if (shikin >= 5080) { //【追加】shikinが5080以上ある?
                shikin -= 5080; //shikinから5080を差し引く
            } else { //【追加】shikinが5080未満?
                shikin = 0; //【追加】shikinを使い尽くす
            }
        } //whileブロック(繰返し内容)の終わり
        Debug.Log("繰返し後の資金 = " + shikin);
    }
    void Update() {

    }
}

ミニ演習 mini103

・3から0までカウントダウンし、続けて3までカウントアップしよう
・whileを続けて2回行えば良い

作成例

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class mini103 : MonoBehaviour {
    void Start() {
        int i = 3;
        while (i > 0) { //0超である間繰返す=0になるまで
            Debug.Log(i);
            i = i - 1; //1を差し引く
        } //この繰返しを抜けた時点ではiは0になっている
        while (i <= 3) { //3以下ある間繰返す=4になるまで
            Debug.Log(i);
            i = i + 1; //1を足し込む
        }
    }
    void Update() {

    }
}

今週の話題

販売本数ランキング 今回トップは「スーパーマリオブラザーズ ワンダー(Switch)」GO!
インディーゲーム展示会“東京ゲームダンジョン4”の入場チケットが販売開始。出展する250団体の出展リストを公開 GO!
『スクフェス2』がまさかの大失速―ブシロードはゲーム事業の苦境が鮮明に【ゲーム企業の決算を読む】 GO!
テーマは「脱出」―Unreal Engine使用映像制作コンテスト「UE5ぷちコン 映像編5th」エントリー受付開始 GO!
AI活用でプレイヤーサポート強化を支援―PTW、ゲームパブリッシャー向けソリューション「REACT」を発表 GO!
個性を引き出すモデリングから内製バーチャル広報による社内活性化まで―『このファン』サムザップがLive2D活用事例を紹介【alive 2023】 GO!

『Marvel’s Spider-Man』等開発のInsomniac Gamesにサイバー攻撃―開発中新作の情報流出も? GO!
開発スタジオ閉鎖の『The Day Before』販売も即座に中止…わずか4日間しか買えなかったゲームに、ユーザーからの「売り逃げ」の声も GO!
GooglePlayストア「独占的な力あり」とEpic対Googleの米裁判で陪審判決!具体的な措置命令は1月第2週の公聴会以降に持ち越し GO!

前回のコメント

・簡単なゲームですが初めて一から自分の手でゲームを作れたのがとても楽しかったです。

 何よりです。

・こんがらがった部分があったので見直しておきます

 是非。

・ペースもちょうどよかったです

 了解です。リアクション感謝します。

・次回もよろしくお願いします

 こちらこそよろしくお願いします。

講義メモ 続き

テキスト正誤 p.095の枠内のプログラム

【誤】if("") {
【正】if(string型の変数 != "")

ミニ演習 mini095

・p.095の枠内のプログラムには誤りがありエラーになる
・これを修正して、string型のパブリック変数sが空かどうかを判断するプログラムにしよう

作成例

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class mini095 : MonoBehaviour {
    public string s; //パブリック変数
    void Start() {
        if (s != "") {
            Debug.Log("空ではない");
        } else {
            Debug.Log("空です");
        }
    }
    void Update() {

    }
}

ミニ演習 mini095a

・p.091 Chap2_7_3を条件演算子で書き直そう
・「9」をint型のパブリック変数にする
・2のべき乗である場合は「2のべき乗である」と表示しよう
・ただし、プログラム中で「2のべき乗で」は1回のみ用いること

作成例

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class mini095a : MonoBehaviour {
    public int n; // パブリック変数
    void Start() {
        string s = "2のべき乗で"; //連結用の前半文字列
        Debug.Log(!Mathf.IsPowerOfTwo(n) ? s + "はない" : s + "ある");
    }
    void Update() {

    }
}

追加演習「ジャンケン」その1 janken1

・int型のパブリック変数handを定義する
・インスペクタに説明「手をどうぞ(0=グー,1=チョキ,2=パー)」をHeader機能で表示する
・handの値に応じて「あなたの手=」に続けて「グー」または「チョキ」または「パー」を表示

作成例

using UnityEngine;
public class janken1 : MonoBehaviour {
    [Header("手をどうぞ(0=グー,1=チョキ,2=パー)")]
    public int hand;
    void Start() {
        string s = "あなたの手=";
        Debug.Log(s + ((hand == 0) ? "グー" : (hand == 1) ? "チョキ" : "パー"));
    }
    void Update() {}
}

追加演習「ジャンケン」その2 janken2

・CPU側を作ろう。毎回異なる手を出して欲しいので乱数を使おう
・C#では、System.RandomクラスのインスタンスメソッドNextを呼ぶと乱数が提供される
・このとき、Next(種類数)を指定することで、0から種類数-1までの、どれかの値を返してくれる
・利用例:
  System.Random r = new System.Random(); //乱数クラスのオブジェクトを生成(後述)
  Debug.Log(r.Next(10)); //0から9までのどれかが表示される
・この機能を用いて、0から2までの乱数を得て、対応する手を表示するようにしよう
・乱数の値に応じて「わたしの手=」に続けて「グー」または「チョキ」または「パー」を表示

作成例

using UnityEngine;
public class janken2 : MonoBehaviour {
    [Header("手をどうぞ(0=グー,1=チョキ,2=パー)")]
    public int hand;
    void Start() {
        System.Random r = new System.Random(); //乱数クラスのオブジェクトを生成
        string s = "あなたの手=";
        Debug.Log(s + ((hand == 0) ? "グー" : (hand == 1) ? "チョキ" : "パー"));
        string c = "わたしの手=";
        int cpuh = r.Next(3); //乱数で0,1,2を得る
        Debug.Log(c + ((cpuh == 0) ? "グー" : (cpuh == 1) ? "チョキ" : "パー"));
    }
    void Update() { }
}

提出:追加演習「ジャンケン」その3 janken3

・判定を表示しよう
・例「あなたの勝ち」「わたしの勝ち」「あいこ」
・ヒント:先に「あいこ」を判断すると楽。判定はORで連結した条件ですると良い
 ※ 計算式で判定することもできる:(3 + hand - cpuh) % 3 == 2 ならばhandの勝ち