スロットマシーン 作成

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ゆうtyt

スロットマシーン 作成

#1

投稿記事 by ゆうtyt » 1年前

スロットの作成について、100個の配列のなかに0〜9の数字が順番に格納され、ランダムに1つ出力し、3つ連続した数字を結果として出力し、それを、3つのリールとして出力したいんですが、やり方がよくわかりません。

結果としては
[1][9][8]
[2][1][9]
[3][2][1]

1がそろいました。

みたいにしたいです。

ゆうtyt

Re: スロットマシーン 作成

#2

投稿記事 by ゆうtyt » 1年前

自分で作ってみましたが、これだとスロットではないといわれました。

コード: 全て選択

#include <stdio.h>
#include <stdlib.h>
#include<time.h>

int main(void)
{
	srand(time(NULL));
	int a,b,c,d,e,f,g,h,i;
	int coin =10;

	a=rand()%9+1;
	b=rand()%9+1;
	c=rand()%9+1;

	d=rand()%9+1;
	e=rand()%9+1;
	f=rand()%9+1;

	g=rand()%9+1;
	h=rand()%9+1;
    i=rand()%9+1;

	printf("slot start\n");

	if(a==b&&b==c&&d==e&&e==f&&g==h&&h==i&&a==e&&e==i&&c==e&&e==g){
		coin=coin+10;
		printf("[%d][%d][%d]\n[%d][%d][%d]\n[%d][%d][%d]\n",a,b,c,d,e,f,g,h,i);
		printf("BINGO!!\n10枚追加されました。\n現在%d枚です。",coin);
	}else if(a==b||b==c||d==e||e==f||g==h||h==i||a==e||e==i||c==e||e==g){
		coin=coin+3;
		printf("[%d][%d][%d]\n[%d][%d][%d]\n[%d][%d][%d]\n",a,b,c,d,e,f,g,h,i);
		printf("リーチ\n3枚追加されました。現在%d枚です。\n",coin);
	}else{
		coin=coin-3;
		printf("[%d][%d][%d]\n[%d][%d][%d]\n[%d][%d][%d]\n",a,b,c,d,e,f,g,h,i);
				printf("NO BINGO\n3枚減りました。現在%d枚です。",coin);




	}

	return 0;

}

あんどーなつ
記事: 171
登録日時: 1年前
連絡を取る:

Re: スロットマシーン 作成

#3

投稿記事 by あんどーなつ » 1年前

ゆうtyt さんが書きました:自分で作ってみましたが、これだとスロットではないといわれました。
最初「スロットでない」の意味が分からなかったのですが、縦に同じ数字があるからだと思います。

コード: 全て選択

$ slot start
[7][7][6]
[3][9][5]
[9][8][5]
リーチ
3枚追加されました。現在13枚です。

$ ./a.exe
slot start
[9][3][8]
[1][6][2]
[3][6][7]
NO BINGO
3枚減りました。現在7枚です。
少し直しました。ビンゴの条件も書き直しました。

コード: 全て選択

#include <stdio.h>
#include <stdlib.h>
#include<time.h>
 
int bingo(int a, int b, int c) {
	return (b == a && c == a) ? 1 : 0;
}

int main(void)
{
    srand(time(NULL));
    int a,b,c,d,e,f,g,h,i;
    int coin =10;
 
    a=rand()%9+1;
	b=rand()%9+1;
    c=rand()%9+1;
 
    do d=rand()%9+1; while (d == a);
    do e=rand()%9+1; while (e == b);
    do f=rand()%9+1; while (f == c);
 
    do g=rand()%9+1; while (g == a || g == d);
    do h=rand()%9+1; while (h == b || h == e);
    do i=rand()%9+1; while (i == c || i == f);
 
    printf("slot start\n");
 
    if(bingo(a,b,c)||bingo(d,e,f)||bingo(g,h,i)
       || bingo(a,e,i)||bingo(c,e,g)) {
        coin=coin+10;
        printf("[%d][%d][%d]\n[%d][%d][%d]\n[%d][%d][%d]\n",a,b,c,d,e,f,g,h,i);
        printf("BINGO!!\n10枚追加されました。\n現在%d枚です。",coin);
    }else if(a==b||b==c||d==e||e==f||g==h||h==i||a==e||e==i||c==e||e==g){
        coin=coin+3;
        printf("[%d][%d][%d]\n[%d][%d][%d]\n[%d][%d][%d]\n",a,b,c,d,e,f,g,h,i);
        printf("リーチ\n3枚追加されました。現在%d枚です。\n",coin);
    }else{
        coin=coin-3;
        printf("[%d][%d][%d]\n[%d][%d][%d]\n[%d][%d][%d]\n",a,b,c,d,e,f,g,h,i);
                printf("NO BINGO\n3枚減りました。現在%d枚です。",coin);
 
 
 
 
    }
 
    return 0;
 
}

あんどーなつ
記事: 171
登録日時: 1年前
連絡を取る:

Re: スロットマシーン 作成

#4

投稿記事 by あんどーなつ » 1年前

ゆうtyt さんが書きました:スロットの作成について、100個の配列のなかに0〜9の数字が順番に格納され、ランダムに1つ出力し、3つ連続した数字を結果として出力し、それを、3つのリールとして出力したい
今回は1回分だけ出力するプログラムになっていますが、実際にはGUIのプログラムを簡素化する形で出題者の人は考えているんだと思います。もし、スロットが完全なランダム列であると、数字が周期的に表れないので目押しできないです。
(出題者の人には、スロットを常識と思うなと言いたいです)

アバター
amehirune
記事: 181
登録日時: 4年前
住所: どっか
連絡を取る:

Re: スロットマシーン 作成

#5

投稿記事 by amehirune » 1年前

あんどーなつ さんが書きました:

コード: 全て選択

    do d=rand()%9+1; while (d == a);
    do e=rand()%9+1; while (e == b);
    do f=rand()%9+1; while (f == c);
 
    do g=rand()%9+1; while (g == a || g == d);
    do h=rand()%9+1; while (h == b || h == e);
    do i=rand()%9+1; while (i == c || i == f);
ゆうtyt さんが書きました:スロットの作成について、100個の配列のなかに0〜9の数字が順番に格納され、ランダムに1つ出力し、3つ連続した数字を結果として出力し、それを、3つのリールとして出力したい
Oh...

この場合、ランダムで値を決めるのは「中心の数」だけでいいと思われますが。。。
ほら、来いよ!! 誤字や矛盾を指摘したい奴から、前に出てこいよぉおおおおおおおッ!!!
※都合により、不定期でしか現れません。即返などはできませんのでご了承ください※

アバター
amehirune
記事: 181
登録日時: 4年前
住所: どっか
連絡を取る:

Re: スロットマシーン 作成

#6

投稿記事 by amehirune » 1年前

コード: 全て選択

#include<stdio.h>
#include<stdlib.h>

int main(){

	int a,b,c;
	
	a = rand()%9;
	b = rand()%9;
	c = rand()%9;

	for(int i=-1;i<2;i++){
		printf("[%d]",(a+10+i)%10);
		printf("[%d]",(b+10+i)%10);
		printf("[%d]\n",(c+10+i)%10);
	}

}
こういうことだろうと思い、即席で作ってみました。

尚、仕様通りにはしていませんので、課題としてこのまま提出しないでください。
数字を配列にしていなかったり、ビンゴ判定やらなんやらをすっ飛ばしていますので。
ほら、来いよ!! 誤字や矛盾を指摘したい奴から、前に出てこいよぉおおおおおおおッ!!!
※都合により、不定期でしか現れません。即返などはできませんのでご了承ください※

ISLe
記事: 2607
登録日時: 7年前
連絡を取る:

Re: スロットマシーン 作成

#7

投稿記事 by ISLe » 1年前

まず、スロットの仕様について考える必要があるでしょう。
スロットというのは、リールに描かれた図柄が回転し、その後、停止した図柄の配置によってビンゴを判定するものです。

提示された条件から、要素数100個の配列というのが1つのリールということになるでしょう。

ビンゴ判定は、リールの位置で決まるので、100個の要素のうちどれが先頭となるかをランダムに選択し停止位置としましょう。
それをリール3本分繰り返しましょう。

停止位置の先頭から、3つの要素を比較してビンゴの判定をしましょう。

3つの要素が最後尾と先頭にまたがる可能性がありますので、対策を考えてください。
オフトピック
要素数100個の配列に0~9を順番に格納するという条件だと、配列要らないじゃないか、とも思ったりする。
オフトピック
あんどーなつ さんが書きました:(出題者の人には、スロットを常識と思うなと言いたいです)
スロットを作れというお題なのに?

ISLe
記事: 2607
登録日時: 7年前
連絡を取る:

Re: スロットマシーン 作成

#8

投稿記事 by ISLe » 1年前

おっと、コーディングする上で必要なことはamehiruneさんが示してくれましたね。

アバター
みけCAT
記事: 6003
登録日時: 7年前
住所: 千葉県
連絡を取る:

Re: スロットマシーン 作成

#9

投稿記事 by みけCAT » 1年前

オフトピック
どうしてみんな、「0~9の数字」という条件なのに乱数が9通りしか出ないプログラムの仕様をそのままにしているんだろう?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

あんどーなつ
記事: 171
登録日時: 1年前
連絡を取る:

Re: スロットマシーン 作成

#10

投稿記事 by あんどーなつ » 1年前

ISLe さんが書きました:
オフトピック
あんどーなつ さんが書きました:(出題者の人には、スロットを常識と思うなと言いたいです)
スロットを作れというお題なのに?
オフトピック
... 現に問題文を読んでも質問者さんはその意図が理解できなかったので配列を実装しなかったじゃないですか。
パチスロ雑誌やインターネットにはパチスロの図柄パターンが載っていますけど、そういうことが頭に入っていない人が問題文を読んでも理解できないじゃないかと言いたかったわけです。

hide

Re: スロットマシーン 作成

#11

投稿記事 by hide » 1年前

オフトピック
コードから推測したことを決めつけるのはどうかと

あんどーなつ
記事: 171
登録日時: 1年前
連絡を取る:

Re: スロットマシーン 作成

#12

投稿記事 by あんどーなつ » 1年前

オフトピック
すみません、気を付けます。

ゆうtyt

Re: スロットマシーン 作成

#13

投稿記事 by ゆうtyt » 1年前

返事遅くなりました。

コード: 全て選択

#include <stdio.h>
#include <stdlib.h>
#include<time.h>



int reel1[11]={1,2,3,4,5,6,7,8,9,1,2};
int reel2[11]={9,8,7,6,5,4,3,2,1,9,8};
int reel3[11]={1,2,3,4,5,6,7,8,9,1,2};
int main()
{
int a,b,c;
int i;

srand(time(NULL));




for (i=0; i<=100; i++){

	if(reel1[a]==reel2[b]&&reel2[b]==reel3[c]&&
			reel1[a+1]==reel2[b+1]&&reel2[b+1]==reel3[c+1]&&
			reel1[a+2]==reel2[b+2]&&reel2[b+2]==reel3[c+2]&&
			reel1[a]==reel2[b+1]&&reel2[b+1]==reel3[c+2]&&
		    reel1[c]==reel2[b+1]&&reel2[b+1]==reel3[a+2]){
		a=rand()%9;
		b=rand()%9;
		c=rand()%9;

	printf("slot start");
	printf("[%d][%d][%d]\n",reel1[a],reel2[b],reel3[c]);
	printf("[%d][%d][%d]\n",reel1[a+1],reel2[b+1],reel3[c+1]);
	printf("[%d][%d][%d]\n",reel1[a+2],reel2[b+2],reel3[c+2]);
	printf("そろいました。");
}else{
		    a=rand()%9;
			b=rand()%9;
			c=rand()%9;
			printf("slot start\n");
		printf("[%d][%d][%d]\n",reel1[a],reel2[b],reel3[c]);
		printf("[%d][%d][%d]\n",reel1[a+1],reel2[b+1],reel3[c+1]);
		printf("[%d][%d][%d]\n",reel1[a+2],reel2[b+2],reel3[c+2]);
		printf("はずれ\n");

	}
}

return 0;
}
コードはこんな感じにしました。
あたりの回数とはずれの回数を出力したいんですがどうやるのでしょうか?

アバター
amehirune
記事: 181
登録日時: 4年前
住所: どっか
連絡を取る:

Re: スロットマシーン 作成

#14

投稿記事 by amehirune » 1年前

みけCAT さんが書きました:
オフトピック
どうしてみんな、「0~9の数字」という条件なのに乱数が9通りしか出ないプログラムの仕様をそのままにしているんだろう?
オフトピック
ああああああしまった、正しくは「a=rand()%10;」でしたね…w
ほら、来いよ!! 誤字や矛盾を指摘したい奴から、前に出てこいよぉおおおおおおおッ!!!
※都合により、不定期でしか現れません。即返などはできませんのでご了承ください※

アバター
amehirune
記事: 181
登録日時: 4年前
住所: どっか
連絡を取る:

Re: スロットマシーン 作成

#15

投稿記事 by amehirune » 1年前

ゆうtyt さんが書きました:返事遅くなりました。

コード: 全て選択

#include <stdio.h>
#include <stdlib.h>
#include<time.h>



int reel1[11]={1,2,3,4,5,6,7,8,9,1,2};
int reel2[11]={9,8,7,6,5,4,3,2,1,9,8};
int reel3[11]={1,2,3,4,5,6,7,8,9,1,2};
int main()
{
int a,b,c;
int i;

srand(time(NULL));




for (i=0; i<=100; i++){

	if(reel1[a]==reel2[b]&&reel2[b]==reel3[c]&&
			reel1[a+1]==reel2[b+1]&&reel2[b+1]==reel3[c+1]&&
			reel1[a+2]==reel2[b+2]&&reel2[b+2]==reel3[c+2]&&
			reel1[a]==reel2[b+1]&&reel2[b+1]==reel3[c+2]&&
		    reel1[c]==reel2[b+1]&&reel2[b+1]==reel3[a+2]){
		a=rand()%9;
		b=rand()%9;
		c=rand()%9;

	printf("slot start");
	printf("[%d][%d][%d]\n",reel1[a],reel2[b],reel3[c]);
	printf("[%d][%d][%d]\n",reel1[a+1],reel2[b+1],reel3[c+1]);
	printf("[%d][%d][%d]\n",reel1[a+2],reel2[b+2],reel3[c+2]);
	printf("そろいました。");
}else{
		    a=rand()%9;
			b=rand()%9;
			c=rand()%9;
			printf("slot start\n");
		printf("[%d][%d][%d]\n",reel1[a],reel2[b],reel3[c]);
		printf("[%d][%d][%d]\n",reel1[a+1],reel2[b+1],reel3[c+1]);
		printf("[%d][%d][%d]\n",reel1[a+2],reel2[b+2],reel3[c+2]);
		printf("はずれ\n");

	}
}

return 0;
}
コードはこんな感じにしました。
あたりの回数とはずれの回数を出力したいんですがどうやるのでしょうか?
そもそも、それ、動きました?
新機能を追加する前に、まずは現ステップをクリアしているかどうかを判断しましょう。

もしかして→未定義動作
オフトピック
あと、「100この配列~」定義を思いっきりぶっ壊してしまっているような気がするのですが大丈夫でしょうか
ほら、来いよ!! 誤字や矛盾を指摘したい奴から、前に出てこいよぉおおおおおおおッ!!!
※都合により、不定期でしか現れません。即返などはできませんのでご了承ください※

ゆうtyt

Re: スロットマシーン 作成

#16

投稿記事 by ゆうtyt » 1年前

動作はしました。
コードはこれでいいと言われました。

ISLe
記事: 2607
登録日時: 7年前
連絡を取る:

Re: スロットマシーン 作成

#17

投稿記事 by ISLe » 1年前

オフトピック
あんどーなつ さんが書きました:... 現に問題文を読んでも質問者さんはその意図が理解できなかったので配列を実装しなかったじゃないですか。
パチスロ雑誌やインターネットにはパチスロの図柄パターンが載っていますけど、そういうことが頭に入っていない人が問題文を読んでも理解できないじゃないかと言いたかったわけです。
もしもこれが、パチスロ製造会社の新人研修で出されたお題だったとしても、ですか?

想像をぶつけても意味ないですが、はっきりしているのは「スロットを作る」ことが求められているということ。
だったら、質問者にも回答者にも「スロットとは何か」を理解する・理解していることが求められるのではないでしょうかね。

スロットと関係なければ・関係あるかどうか分からなければ、お題を無視していいし、いいかげんな回答をしてもいい、なんてことになったら、質問に対して回答するという形式そのものの否定ですよね。
質問の中に矛盾があるとか、こうしたほうがもっといいとか、指摘するのとは次元が違う。

ISLe
記事: 2607
登録日時: 7年前
連絡を取る:

Re: スロットマシーン 作成

#18

投稿記事 by ISLe » 1年前

ゆうtyt さんが書きました:コードはこれでいいと言われました。
リールを表現する配列に関してはこうしろ、って言われただけなんじゃなかろうか。

あんどーなつ
記事: 171
登録日時: 1年前
連絡を取る:

Re: スロットマシーン 作成

#19

投稿記事 by あんどーなつ » 1年前

オフトピック
今更自分の過ちを弁解するわけじゃありませんが、これが大学の講義の課題で、この設問だったら、私の場合教授に「不健全だ」と食って掛かって留年していたかもしれませんね。

あんどーなつ
記事: 171
登録日時: 1年前
連絡を取る:

Re: スロットマシーン 作成

#20

投稿記事 by あんどーなつ » 1年前

ISLe さんが書きました:
ゆうtyt さんが書きました:コードはこれでいいと言われました。
リールを表現する配列に関してはこうしろ、って言われただけなんじゃなかろうか。
コードがだめだったら、コードがだめって言いますよね。
それとも完成しているかどうかは察しろっていうタイプの先輩ですか?

そもそも質問自体雑ですよね。
ゆうtyt さんが書きました:スロットの作成について、100個の配列のなかに0〜9の数字が順番に格納され、ランダムに1つ出力し、3つ連続した数字を結果として出力し、それを、3つのリールとして出力したいんですが、やり方がよくわかりません。
単に何かさせたかっただけじゃないですかね?教わっている人よりも教えている人のほうが忙しいというのはどこでもありそうな話ですし。

ゆうtyt

Re: スロットマシーン 作成

#21

投稿記事 by ゆうtyt » 1年前

リールに関してはこれでいいと言われました。
しかし、もう一度確認したところif文が正しくないようで、数字がそろっても「そろいました」と出力されません。どこがまちがってるのかおしえてください。

あんどーなつ
記事: 171
登録日時: 1年前
連絡を取る:

Re: スロットマシーン 作成

#22

投稿記事 by あんどーなつ » 1年前

最初のif文で&&が9個並んでいますが、[-,_,^,/,\]の5つの組み合わせについて(何々&&何々&&何々)を5つ作ってそれぞれを||でつながないといけなかったと思います。

あんどーなつ
記事: 171
登録日時: 1年前
連絡を取る:

Re: スロットマシーン 作成

#23

投稿記事 by あんどーなつ » 1年前

ゆうtyt さんが書きました:リールに関してはこれでいいと言われました。
しかし、もう一度確認したところif文が正しくないようで、数字がそろっても「そろいました」と出力されません。どこがまちがってるのかおしえてください。
ISLe さん

すみませんでした。目視かテストでプログラムが動作しないことを確認されていたのですね。

ゆうtyt

Re: スロットマシーン 作成

#24

投稿記事 by ゆうtyt » 1年前

あんどーなつ さんが書きました:最初のif文で&&が9個並んでいますが、[-,_,^,/,\]の5つの組み合わせについて(何々&&何々&&何々)を5つ作ってそれぞれを||でつながないといけなかったと思います。
[-,_,^,/,\]の5つの組み合わせについての部分が理解できないのですがどういう意味ですか?

あんどーなつ
記事: 171
登録日時: 1年前
連絡を取る:

Re: スロットマシーン 作成

#25

投稿記事 by あんどーなつ » 1年前

[-,_,^,/,\]は、

コード: 全て選択

[*][*][*] [ ][ ][ ] [ ][ ][ ] [*][ ][ ] [ ][ ][*] 
[ ][ ][ ] [*][*][*] [ ][ ][ ] [ ][*][ ] [ ][*][ ] 
[ ][ ][ ] [ ][ ][ ] [*][*][*] [ ][ ][*] [*][ ][ ] 
の5つです。

アバター
みけCAT
記事: 6003
登録日時: 7年前
住所: 千葉県
連絡を取る:

Re: スロットマシーン 作成

#26

投稿記事 by みけCAT » 1年前

あんどーなつ さんが書きました:[-,_,^,/,\]の5つの組み合わせについて(何々&&何々&&何々)を5つ作って
3個の数字が同じかを判定するので、それぞれの組み合わせについて&&でつなぐ条件式は2個(a==b && b==c的な感じ)でいいと思います。
オフトピック
判定する場所の情報を配列に入れておいてループで判定する、などのもう少しいい方法がある気がしますが、仕様を満たせばとりあえずはいいでしょう。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

ゆうtyt

Re: スロットマシーン 作成

#27

投稿記事 by ゆうtyt » 1年前

コード: 全て選択

if(reel1[a]==reel2[b]&& reel2[b]==reel3[c])
			{
		a=rand()%9;
		b=rand()%9;
		c=rand()%9;

	printf("slot start\n");
	printf("[%c][%c][%c]\n",reel1[a],reel2[b],reel3[c]);
	printf("[%c][%c][%c]\n",reel1[a+1],reel2[b+1],reel3[c+1]);
	printf("[%c][%c][%c]\n",reel1[a+2],reel2[b+2],reel3[c+2]);
	printf("そろいました---------------。\n");
上のみ揃った場合出力されるようにして確認してみたのですが、結果は
、slot start
[4][1][2]
[5][9][3]
[6][8][4]
そろいました---------------。
になりました。
4,1,2でそろっていないのになのになぜこのように表示されたのですか?

アバター
みけCAT
記事: 6003
登録日時: 7年前
住所: 千葉県
連絡を取る:

Re: スロットマシーン 作成

#28

投稿記事 by みけCAT » 1年前

ゆうtyt さんが書きました:4,1,2でそろっていないのになのになぜこのように表示されたのですか?
せっかく揃っても、また乱数を使ってバラバラにしてしまうからでしょう。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

ゆうtyt

Re: スロットマシーン 作成

#29

投稿記事 by ゆうtyt » 1年前

みけCAT さんが書きました:
ゆうtyt さんが書きました:4,1,2でそろっていないのになのになぜこのように表示されたのですか?
せっかく揃っても、また乱数を使ってバラバラにしてしまうからでしょう。
a,b,cの乱数をifとforの間にいれればいいということであってますか?

アバター
みけCAT
記事: 6003
登録日時: 7年前
住所: 千葉県
連絡を取る:

Re: スロットマシーン 作成

#30

投稿記事 by みけCAT » 1年前

ゆうtyt さんが書きました:a,b,cの乱数をifとforの間にいれればいいということであってますか?

コード: 全て選択

for(繰り返す)
  リールを回す(乱数)
  揃ったか判定する(if)
    リール(乱数)に余計な結果を加えずに判定結果を表示する
というようにすればいいでしょう。
乱数をifとforの間にいれるだけでなく、判定後に判定に使ったデータを破壊する処理を消さなければなりません。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

閉鎖

“C言語何でも質問掲示板” へ戻る