質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

1回答

3730閲覧

Unityで後出しジャンケンを作っています。

ryotaro

総合スコア12

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2018/11/13 08:23

前提・実現したいこと

Unityで後出しジャンケンのゲームを作っています。
構造としては、相手の手(グー、チョキ、パーのいずれか)をランダムに表示して、その表示された相手ののに勝つように3つボタン(グー、チョキ、パー)の中から1つ押して合っていれば「正解」間違えていれば「不正解」を表示します。正解数のカウンター?を用意し正解するとカウンターが1増え制限時間内に10回正解すればクリアというのを考えています。
ですが、相手の手(グー、チョキ、パーのいずれか)をランダムに表示して、その表示された相手ののに勝つように3つボタン(グー、チョキ、パー)の中から1つ押して合っていれば「正解」間違えていれば「不正解」を表示する部分を制限時間内に成功数が10に達するまで繰り返したいのですがどのようにすればよいのか分からず作業が止まっています。制限時間のプログラムは作成しましたが、成功数を表示するカウンター?はまだ作れていません。

メインのプログラム
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;

public class GameManager : MonoBehaviour {
public GameObject[] janken;
int number;

public GameObject buttonGoo; public GameObject buttonChoki; public GameObject buttonPa; public GameObject textOk; public GameObject textNo; public GameObject ImageGoo; public GameObject ImageChoki; public GameObject ImagePa; public bool doesHyojiGoo; public bool doesHyojiChoki; public bool doesHyojiPa; void randomimg(){ number = Random.Range (0, janken.Length); } // Use this for initialization void Start () { doesHyojiGoo = false; doesHyojiChoki = false; doesHyojiPa = false; randomimg (); if (number == 0) { ImageGoo.SetActive (true); doesHyojiGoo = true; } else if (number == 1) { ImageChoki.SetActive (true); doesHyojiChoki = true; } else if (number == 2) { ImagePa.SetActive (true); doesHyojiPa = true; } } // Update is called once per frame void Update () { } public void PushButtonGoo (){ if (doesHyojiChoki==true) { textOk.SetActive (true); } else if (doesHyojiGoo==true) { textNo.SetActive (true); } else if (doesHyojiPa==true) { textNo.SetActive (true); } } public void PushButtonChoki(){ if (doesHyojiPa==true) { textOk.SetActive (true); } else if (doesHyojiChoki==true) { textNo.SetActive (true); } else if (doesHyojiGoo==true) { textNo.SetActive (true); } } public void PushButtonPa(){ if (doesHyojiGoo == true) { textOk.SetActive (true); } else if (doesHyojiPa==true) { textNo.SetActive (true); } else if (doesHyojiChoki==true) { textNo.SetActive (true); }

}
}

制限時間のプログラム
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;

public class TimerController : MonoBehaviour {

public Text timerText; public float totalTime; int seconds; // Use this for initialization void Start () { } // Update is called once per frame void Update () { totalTime -= Time.deltaTime; seconds = (int)totalTime; timerText.text = seconds.ToString (); if (totalTime<=0f) { SceneManager.LoadScene ("GameOverScene"); } }

}
相手の手の表示からカウンターを1増加までを1つの流れとしてこれを繰り返すのか、制限時間とカウンターはそのままで「相手の手」「正解」「不正解」のテキストをもと(最初)の状態に戻す方がよいのかも分かりません。
説明が長くなってしまい申し訳ありません。
どうかお力添えの程よろしくお願いします。

ここに質問の内容を詳しく書いてください。
(例)PHP(CakePHP)で●●なシステムを作っています。
■■な機能を実装中に以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

ソースコード

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

seastar3

2018/11/13 13:39

markdown表記法のルールに従うと見やすくなります。ソースコードは``` C#のコード ```と囲むとインデントも効き見やすくなります。質問のテンプレートは削除した方がすっきりします。
guest

回答1

0

ベストアンサー

私がやるならこんな感じ、という例を挙げます。
ソースはざっくりした流れのみ記載します。

全体のゲーム進行を管理するプログラム

C#

1public class GameManager : MonoBehaviour { 2 private float maxTime = 60.0f; //制限時間(単位:秒) 3 private float timer; //制限時間カウント用タイマー 4 5 private int endNumber = 10; //何回勝ったら終了か 6 private int nowNumber; //今何回勝っているか 7 8 private bool isNowGame; //現在ゲーム中か 9 10 //他、適宜UIを用意 11 12 void GameStart () { 13 //ゲーム開始処理を入れる(適当な方法で呼び出す) 14 nowNumber = 0; 15 isNowGame = true; 16 } 17 18 void Update () { 19 //タイマー機能を入れる 20 //isNowGame==trueならタイマー進行。そうでないなら何もしない 21 //制限時間を超えたらisNowGame=falseにしてGameEnd()を呼ぶ 22 } 23 24 void GameEnd () { 25 //ゲーム終了処理を入れる 26 } 27 28 public void ScoreUp () { 29 //ジャンケン勝利時に呼ばれる 30 nowNumber++; 31 //nowNumber==endNumberならisNowGame=falseにしてGameEnd()を呼ぶ 32 } 33}

ジャンケンを管理するプログラム

C#

1public class JankenManager : MonoBehaviour { 2 public GameManager gameManager; //インスペクターでセットしておく 3 4 public GameObject[] enemyObjs; //相手の手のオブジェクト 5 private int enemyHand; //選ばれた相手の手:0=グー、1=チョキ、2=パー 6 7 public Text winloseText; //勝敗表示テキスト 8 //とりあえずテキスト内容を変えるスタイルにしましたが、個別にGameObjectを持って切り替える形式でもOKです 9 10 void PlayStart () { 11 //ゲーム開始処理を入れる(初回は適当な方法で呼び出す):2戦目以降はボタン入力後に呼ばれる 12 enemyHand = Random.Range (0, enemyObjs.Length); 13 14 //敵の手:一度全部を非表示にしてから選んだ手を表示する 15 foreach (GameObject obj in enemyObjs) { 16 obj.SetActive (false); 17 } 18 enemyObjs[enemyHand].SetActive(true); 19 } 20 21 //ボタンが押された時に呼ぶ 22 //グーのボタンでは0、チョキのボタンでは1、パーのボタンでは2を引数として渡す 23 //なお、以下だとボタンを押した直後に次の勝負へ行く(テキスト表示は維持)なので希望する形に適宜変更してください 24 public void PushButton (int playerHand) { 25 if (playerHand == enemyHand) { 26 winloseText.text = "あいこ"; 27 //他、あいこの時の演出 28 } else ((playerHand == 2 && enemyHand == 0) || playerHand < enemyHand) { 29 winloseText.text = "勝利"; 30 //他、勝利時の演出 31 gameManager.ScoreUp(); //ポイント上昇 32 } else { 33 winloseText.text = "敗北"; 34 //他、敗北の時の演出 35 } 36 PlayStart(); //次の勝負へ 37 } 38}

投稿2018/11/14 02:21

sakura_hana

総合スコア11427

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ryotaro

2018/11/16 09:53

解答本当にありがとうございます。 自分の思い描いていたものに大きく近づきました。 また分からないことがありましたらよろしくお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問