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

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

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

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

659閲覧

スロットマシーン作成中にわからなくなった

ruke30522

総合スコア0

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2021/12/06 05:26

編集2021/12/07 04:46

前提・実現したいこと

フラグが立ったら、スロットのところの数字をそろわせたい

ここで乱数によるフラグ管理

C++

#pragma once #include<iostream> #include<set> #include<random> #include"Checkbet.h" void count(int hantei) { std::set<unsigned int> s; std::random_device rnd; bool flag = false; for (int i = 0; i < 10; i++) { unsigned int r = rnd() % 250 + 1;//rを乱数とします if (!s.insert(r).second)flag = true; } if (flag) { printf("当たったよ\n", hantei); } else { printf("当たってないよ\n", hantei); } return; }
#pragma once #include <stdio.h> bool endCheck() { //入力用変数 int input = 0; //終了確認用変数(trueでゲーム終了、falseでゲームを続ける) bool end = false; //画面に表示する内容 printf("\n"); printf("スロットを続けますか?\n"); printf("1. 続ける 2.やめる\n"); //入力の受けつけ scanf_s("%d", &input); //数字に応じて条件を切りかえる if (input == 1) { end = false; } else if (input == 2) { end = true; } else { printf("選択肢以外の数字が入力されたのでゲームを終了します\n"); end = true; } //変数endの内容をメインに返す return end; }
#pragma once #include <stdio.h> void printOwnMoney(int money) { //画面のUI printf("\n"); printf("スロットゲーム\n"); printf("===================\n"); printf("|所持金 : %dコイン\n", money); return; }
#pragma once #include<iostream> #include<set> #include<random> #include"Checkbet.h" void count(int hantei) { std::set<unsigned int> s; std::random_device rnd; bool flag = false; for (int i = 0; i < 10; i++) { unsigned int r = rnd() % 250 + 1;//rを乱数とします if (!s.insert(r).second)flag = true; } if (flag) { printf("当たったよ\n", hantei); } else { printf("当たってないよ\n", hantei); } return; }
#pragma once #include <stdio.h> #include"Randcount.h" int kaiten = -1; int checkBet() { int bet; //回転数加算 kaiten++; printf("現在の回転数は:%d\n", kaiten); //掛け金のUI printf("\n"); printf("掛け金を入力してください(数字)\n"); //掛け金の入力 scanf_s("%d", &bet); printf("\n"); printf("掛け金 :%d\n", bet); return bet; }
#pragma once #include <stdio.h> #include <stdlib.h> void showSlotUI(int bet, int slotNum[3]) { system("cls"); printf("\n"); printf("・掛け金:%dコイン\n", bet); printf("■===■===■===■\n"); printf("■ %d ■ %d ■ %d ■\n", slotNum[0] + 1, slotNum[1] + 1, slotNum[2] + 1); return; }
#pragma once #include <stdio.h> #include <stdlib.h> #include "Showslot.h" #include "Checkslot.h" int stopSlotAndGetMoney(int bet) { int const slotNum = 3; int maxNumber = 8; int slotContent[slotNum]; for (int i = 0; i < slotNum; i++) { slotContent[i] = -1; } int input = 0; for (int i = 0; i < slotNum; i++) { showSlotUI(bet, slotContent); printf("数字を入力してストップ\n"); scanf_s("%d", &input); slotContent[i] = rand() % maxNumber; } showSlotUI(bet, slotContent); bet = checkSlotAndCalcMoney(bet, slotContent); return bet; }

C++

int main() { //所持金の変数 int money = 1000; //賭け金の変数 int bet = 0; int hantei = 0; //ゲームが終了するかの条件用の変数 bool isEnd = false; while (isEnd == false) { //所持金を表示 printOwnMoney(money); count(hantei); //賭け金を設定する関数 bet = checkBet(); //掛け金が所持金以内かどうかで分岐 if (bet <= money) { //スロットを開始して所持金を変動させる money += stopSlotAndGetMoney(bet); } else { printf("所持金より多い金額は賭けられません。"); } //ゲームを続けるかどうかを確認する isEnd = endCheck(); } //今は入力で止めるために使用 printf("\n"); printf("数字を入力して終了します。"); scanf_s("%d", &bet); return 0; }

スロットでの数字表示

C++

1#pragma once 2#include <stdio.h> 3#include"Checkbet.h" 4#include"Randcount.h" 5 6int checkSlotAndCalcMoney(int bet, int num[3]) 7{ 8 9 if (num[0] == num[1] && num[1] == num[2]) { 10 bet = 10 * bet * (num[0] + 1); 11 12 printf("当たり\n"); 13 printf("%dコイン増えました\n", bet); 14 kaiten = -1; 15 } 16 else { 17 printf("残念"); 18 printf("%dコイン減りました\n", bet); 19 20 bet = -bet; 21 } 22 return bet; 23}

試したこと

フラグ(ture)になったときに、スロットの数字のところで数字を揃うようにしたいです

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

ちなみに投稿主は全然C++を触ったことはなく、独学で一からサイトとうあさりながら作りました。
現在投稿しているのが、作っているスクリプトです。

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

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

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

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

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

episteme

2021/12/06 05:32

void count(int hantei) は何がしたいのか...さっぱりわからん。
int32_t

2021/12/06 05:40

count() の flag が true になったら、checkSlotAndCalcMoney()にわたす num[3] の中身をどうにかしたい、ということでしょうか? count()とcheckSlotAndCalcMoney()を呼ぶコードも開示してください。
UFOnian

2021/12/07 01:35

コードを見るに「`num`」がスロットの表示盤と思われます。 > 表示盤の実装がなくて、`flag`がtrueのときに`num`の数字が揃うような処理の書き方がわからない。 ということでしょうかね。 「hantei」の意図が不明ですが、思うに ```cpp bool flag = false; // 本当はグローバルなのか、count関数の返り値なのでは?(命名的には違いそうだが) int bet; int num[3]; void main(){ bet = 1; count(); if(flag){ /* numが[1,1,1]などおなじ値3つになる処理 */ } else { /* numが[1,2,5]など別の値3つになる処理 */ } checkSlotAndCalcMoney(bet,num); } ``` のようなコードで、コメントにした分岐の部分がわからないということか。 int32_t氏の言うように、呼び出し元と、実装のわからないところを明記しないとなんも答えられないでしょうね。
guest

回答2

0

現在のコードを尊重するなら、おそらく

  • void count(int hantei)bool count() に変更
  • count()return flag; する
  • main()int hantei;bool hantei;
  • main()count(hantei);hantei = count();
  • main()hanteistopSlotAndGetMoney() にわたす。stopSlotAndGetMoney(bet, hantei)
  • int stopSlotAndGetMoney(int bet)int stopSlotAndGetMoney(int bet, bool hantei) に変更
  • stopSlotAndGetMoney() 内で、hantei を見て slotContent の中身を操作する

こんな感じの変更で意図どおりになるかもしれません。


しかし、スロットマシーンの動作として「先に当たり外れを決めてから表示する中身を決める」というのはとても奇妙に思います。「複数のリール上のシンボルの並びは固定で、リール内でシンボルを乱数で選ぶ操作をリールの本数ぶん繰り返して、結果的にシンボルが揃ったら当たり」とするのが現実に近いのでは。まあ現実の動きの通りにしなくても結果的に当たる確率が同じなら良いので気分の問題ですけども。

投稿2021/12/07 05:05

編集2021/12/07 05:12
int32_t

総合スコア21012

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

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

ruke30522

2021/12/10 00:50

ありがとうございます。 教えてもらった通りエラーも起こさず動きはしたんですが、hanteiの中身を見て操作するとはどういったことをするのでしょうか?
int32_t

2021/12/10 00:56

hanteiがtrueならslotContent[0] slotContent[1] slotContent[2] すべてに同じ値を入れる、hanteiがfalseなら slotContent[0] slotContent[1] slotContent[2] には異なる値を入れる、でしょうか。
ruke30522

2021/12/10 01:16

#pragma once #include <stdio.h> #include <stdlib.h> #include "Showslot.h" #include "Checkslot.h" int stopSlotAndGetMoney(int bet,bool hantei) { int const slotNum = 3; int maxNumber = 8; int slotContent[slotNum]; for (int i = 0; i < slotNum; i++) { slotContent[i] = -1; } if (hantei == true) { showSlotUI(bet, slotContent); slotContent[0] = 7; slotContent[0] == slotContent[1] && slotContent[1] == slotContent[2]; } else if(hantei == false){ for (int i = 0; i < slotNum; i++) { showSlotUI(bet, slotContent); slotContent[i] = rand() % maxNumber; } } int input = 0; for (int i = 0; i < slotNum; i++) { showSlotUI(bet, slotContent); printf("数字を入力してストップ\n"); scanf_s("%d", &input); slotContent[i] = rand() % maxNumber; } showSlotUI(bet, slotContent); bet = checkSlotAndCalcMoney(bet, slotContent); return bet; } 今、このようにしてみたのですが、動作はエラーは出ず動きますですが、trueやfalseの判定のところで反応ありません。どうしたらいでしょうか。
ruke30522

2021/12/10 01:19

追記で、最初の当たったよと出るときなぜか、4が揃い二回目以降が4 すら揃はないです
int32_t

2021/12/10 02:01 編集

hanteiがtrueのときにslotContent[1]とslotContent[2]に何も代入してないですね。 hanteiからslotContentを決めるのなら、「scanf_s("%d", &input);」が入っているループはまるごと不要です。
ruke30522

2021/12/10 02:30

if (hantei == true) { showSlotUI(bet, slotContent); slotContent[0] = 7; slotContent[1] = 7; slotContent[2] = 7; } else if(hantei == false){ for (int i = 0; i < slotNum; i++) { showSlotUI(bet, slotContent); slotContent[i] = rand() % maxNumber; } } こうであってますでしょうか? あってるとしたら、当たってると表示されても盤の数字は揃わないままです。
int32_t

2021/12/10 05:23

その部分は合ってると思います。 > 当たってると表示されても盤の数字は揃わないままです。 7を代入する前に表示しているからでは?
ruke30522

2021/12/15 05:08

今の問題点は、当たったよ表示の時に盤の数字が揃わず、最初に表示されている状態から8が強制的に揃っている状態になる。 当たった時は、7じゃなくてもよくとりあえず数字を1~8の中でランダムで3つ揃わせたいです。
int32_t

2021/12/15 05:25

現在のコードが正確にわからないのでアドバイスできません。 この質問は解決済みにして、最新のコードで新しい質問を立ててはどうでしょうか。
ruke30522

2021/12/15 05:27

そうします。 すいません、ありがとうございます。
guest

0

自己解決

次に進みます。次もよろしくお願いします

投稿2021/12/15 05:28

ruke30522

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問