スロットマシーン 作成

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

スロットマシーン 作成

#1

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

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

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

1がそろいました。

みたいにしたいです。

ゆうtyt

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

#2

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

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

コード:

#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
登録日時: 7年前
連絡を取る:

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

#3

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

ゆう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
登録日時: 7年前
連絡を取る:

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

#4

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

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

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

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

#5

投稿記事 by amehirune » 7年前

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

コード:

    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
登録日時: 10年前
住所: どっか
連絡を取る:

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

#6

投稿記事 by amehirune » 7年前

コード:

#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
記事: 2650
登録日時: 13年前
連絡を取る:

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

#7

投稿記事 by ISLe » 7年前

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

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

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

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

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

ISLe
記事: 2650
登録日時: 13年前
連絡を取る:

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

#8

投稿記事 by ISLe » 7年前

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

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

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

#9

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

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

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

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

#10

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

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

hide

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

#11

投稿記事 by hide » 7年前

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

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

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

#12

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

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

ゆうtyt

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

#13

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

返事遅くなりました。

コード:

#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
登録日時: 10年前
住所: どっか
連絡を取る:

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

#14

投稿記事 by amehirune » 7年前

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

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

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

#15

投稿記事 by amehirune » 7年前

ゆう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 » 7年前

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

ISLe
記事: 2650
登録日時: 13年前
連絡を取る:

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

#17

投稿記事 by ISLe » 7年前

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

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

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

ISLe
記事: 2650
登録日時: 13年前
連絡を取る:

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

#18

投稿記事 by ISLe » 7年前

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

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

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

#19

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

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

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

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

#20

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

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

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

ゆうtyt

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

#21

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

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

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

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

#22

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

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

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

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

#23

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

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

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

ゆうtyt

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

#24

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

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

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

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

#25

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

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

コード:

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

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

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

#26

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

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

ゆうtyt

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

#27

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

コード:

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
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

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

#28

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

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

ゆうtyt

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

#29

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

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

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

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

#30

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

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

コード:

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

ゆうtyt

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

#31

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

すいません。
リール(乱数)に余計な結果を加えずに判定結果を表示する
余計な結果とはどういうことですか?

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

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

#32

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

ゆうtyt さんが書きました:すいません。
リール(乱数)に余計な結果を加えずに判定結果を表示する
余計な結果とはどういうことですか?
すいません、typoです。
正しくは「余計な変化」です。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

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

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

#33

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

みけCAT さんが書きました:
あんどーなつ さんが書きました:[-,_,^,/,\]の5つの組み合わせについて(何々&&何々&&何々)を5つ作って
3個の数字が同じかを判定するので、それぞれの組み合わせについて&&でつなぐ条件式は2個(a==b && b==c的な感じ)でいいと思います。
みけCAT さん、ご指摘ありがとうございます。

ISLe
記事: 2650
登録日時: 13年前
連絡を取る:

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

#34

投稿記事 by ISLe » 7年前

オフトピック
あんどーなつ さんが書きました:
ISLe さんが書きました:
ゆうtyt さんが書きました:コードはこれでいいと言われました。
リールを表現する配列に関してはこうしろ、って言われただけなんじゃなかろうか。
コードがだめだったら、コードがだめって言いますよね。
それとも完成しているかどうかは察しろっていうタイプの先輩ですか?
質問者さんの書いている文章は、質問者さんのフィルターを通して書かれた文章なのだから、フィルターを通す前の内容を想像してみました。
質問者さんの立場になって考えた結果です。
あんどーなつ さんが書きました:そもそも質問自体雑ですよね。
初心者は質問するなと言ってる?

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

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

#35

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

ISLe さんが書きました:
あんどーなつ さんが書きました:そもそも質問自体雑ですよね。
初心者は質問するなと言ってる?[/offtopic]
オフトピック
言っていないです。
質問者の人が自分で思いついた質問ではなくて、他の人が出した課題だと思ったので、その人の問題の出し方が雑だという意味です。

ISLe
記事: 2650
登録日時: 13年前
連絡を取る:

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

#36

投稿記事 by ISLe » 7年前

オフトピック
あんどーなつ さんが書きました:言っていないです。
質問者の人が自分で思いついた質問ではなくて、他の人が出した課題だと思ったので、その人の問題の出し方が雑だという意味です。
質問者さんが書いた文章から、どうやったら、出題者が出した問題の『完全な』内容が分かるのでしょうか。
質問者さんのフィルターを通した結果なのだから、質問者さんに雑だと文句を言っているに等しい、ということが理解できませんか。

あるいは、もしかして、あんどーなつさんは本物のエスパーですか?
出題者が出した問題の『完全な』内容が分かってておっしゃっているのだとしたら申し訳ないです。ごめんなさい。

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

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

#37

投稿記事 by amehirune » 7年前

ゆうtyt さんが書きました:動作はしました。
コードはこれでいいと言われました。
うっそぉ。私の目がおかしくなったんですかね…?

まず、int a,b,cの3つの変数を宣言しています。この時点で初期化はされていません。
for文でループ開始です。i=0となります。この時点でa,b,cはまだ初期化されていません。
if文で条件分岐です。if(reel[a]== …おや?

因みにコピペして実行してみましたが(環境:VC++2008EE)、
コンパイルは通ってもwarningがでるし実行してもエラーが発生するし、お話になりません。


本当にこれでいいと言われたんですね?

オフトピック
おっかしいなぁ…私、何か見落としてるところありますかね…
うっかりがあるかもしれませんので、私が間違ってたらすぐにご指摘ください。
ほら、来いよ!! 誤字や矛盾を指摘したい奴から、前に出てこいよぉおおおおおおおッ!!!
※都合により、不定期でしか現れません。即返などはできませんのでご了承ください※

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

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

#38

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

amehirune さんが書きました:
ゆうtyt さんが書きました:動作はしました。
コードはこれでいいと言われました。
うっそぉ。私の目がおかしくなったんですかね…?
おかしいのはジャッジの目かもしれないですよ。
あるいは、もしかしたら問題がおかしいことを認めて、もうこの問題はここまででいい(別の問題をやれ)という意味かもしれないですし。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

ゆうtyt

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

#39

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

コード:

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




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

srand(100);



for (i=0; i<=100; i++){
        a=rand()%9;
		b=rand()%9;
		c=rand()%9;

	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])||
	   (reel3[c]==reel2[b+1]&& reel2[b+1]==reel3[a+2]))	

   {


	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");
	count++;
}else{

			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");

	}
}
printf("そろったのは%d回です。\n",count);

return 0;
}
こんな感じになりました。
そろったらちゃんと「そろった」と出力されましたが、
余計な結果というのはよくわかりませんでした。

box
記事: 2002
登録日時: 13年前

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

#40

投稿記事 by box » 7年前

ゆうtyt さんが書きました:

コード:

		a=rand()%9;
		b=rand()%9;
		c=rand()%9;
a, b, cには0~8の数値が入るので、
ゆうtyt さんが書きました:

コード:

[4][1][2]
[5][9][3]
[6][8][4][/quote]

こんな結果(1が出たり9が出たりする)になることは絶対にありません。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

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

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

#41

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

box さんが書きました:
ゆうtyt さんが書きました:

コード:

		a=rand()%9;
		b=rand()%9;
		c=rand()%9;
a, b, cには0~8の数値が入るので、
ゆうtyt さんが書きました:

コード:

[4][1][2]
[5][9][3]
[6][8][4][/quote]

こんな結果(1が出たり9が出たりする)になることは絶対にありません。[/quote]
「4,5,6」はreel1の3番目から、
「1,9,8」はreel2の8番目から、
「2,3,4」はreel3の1番目から、
それぞれ「リール」の8番目までから始まる位置に含まれており、出る可能性は普通にあると思います。
(すべて0-origin)
どうして「こんな結果になることは絶対にありません」と主張するのですか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

ゆうtyt

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

#42

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

rand()%9は0~8の値がでるんですよね?
reel1[rand()%9]にしているので、reel1[0]〜[8]が出力されると思ったのですが、違うのですか?
reel1[0]には”1”が入っているので”1”が出力されるってことではないのですか?

ISLe
記事: 2650
登録日時: 13年前
連絡を取る:

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

#43

投稿記事 by ISLe » 7年前

オフトピック
No.13のコードは、No.7で書いたリールの末尾と先頭をまたがる対策が、スマートに解決できるコードになってた。
このコードがすんなり出てくることに、スロットを作ることに対して手慣れていると感じた。

そこが出題者の指示であろうことは間違いないと思った。

そこから、質問者さんのフィルターを通す前の指示の内容は
「配列の部分はもう『これでいい』からあとの部分を考えろ」
というものであろうと想像した(No.18)。

質問者の立場に立つ、あるいは寄り添うというのは、鵜呑みにすることとは違うと考える。


「実行しようとしたらわけのわからないエラーが出て実行できません」
という質問に
わけのわからんエラーを出すとはとんでもない処理系だな
という回答をするのと同じことがいまこのトピックで行われている、気がする。

質問者さんのフィルターの精度が低いことは、ここまでのやり取りで(というか最初から)明らか。
片道だけでこの状況なのだから、本当にそう言われたんですか?と聞いて、返ってくるものが原形を留めないであろうことは容易に想像できる、気がする。
本当はこう言われたんじゃないですか?であれば一往復減らせるのに、なぜだかそういう流れにならない。

質問者さんは悪くない。
質問掲示板にこういう質問が投稿されるのは想定内。

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

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

#44

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

オフトピック
人間の考えている事なんて分からないことだらけだと思いますが、事の顛末とこの掲示板にいつからいたのかということから考えて、ISLeさんのほうが正しそうだとは思います(逆に言うとNo.7->No.13->No.18とかのことはいまださっぱりわからないし、わかるときが来ないと分からないと思ってます)。

それよりも私が不可解だと思っていたのは、私のつぶやきのような発言にISLeさんが食って掛かったかのように私の方で感じたことです。おそらく私の方で社会一般の人たちがスロットに関して感じている思い入れを私の方で理解できていなかった、だからスロットを軽蔑するような発言をした、だから今回はISLeさんが怒った、という風に認識しています。

私が至らないところ、というよりも無駄に年食ってて変な経験を積んでいるから融通聞かなくなっているところもあって、変なところで目を付けられているのだなと少しは感じています。

もう少し周りに気を配って発言や書き込みをするようにいたします。

ゆうtyt

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

#45

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

私に配慮がなかったのは申し訳ないと思います。
回答してくれた方々ありがとうございました。
最後に
ゆうtyt さんが書きました:rand()%9は0~8の値がでるんですよね?
reel1[rand()%9]にしているので、reel1[0]〜[8]が出力されると思ったのですが、違うのですか?
reel1[0]には”1”が入っているので”1”が出力されるってことではないのですか?
この質問だけ回答お願いします。

metaphor

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

#46

投稿記事 by metaphor » 7年前

ゲーム’iro-ne"にしてみました。(色音)。0.5FPSです(まだ正確にできてません)。一応動くのでわかるはずです。

コード:

#include <stdio.h>
#include <stdlib.h>
//---iro-ne>
#include <windows.h>
void draw(int,int,int,char*);
HANDLE Stdout;int color=14;int tamaX[16],tamaY[16];int ind=0;//<

char reel1[11]={'1','2','3','4','5','6','7','8','9','1','2'};
char reel2[11]={'9','8','7','6','5','4','3','2','1','9','8'};
char reel3[11]={'1','2','3','4','5','6','7','8','9','1','2'};
int main()
{
int a,b,c;
int i;
int count=0;
 
srand(100);
 
//---iro-ne>
Stdout=GetStdHandle(STD_OUTPUT_HANDLE);for(;;){system("cls");
for(ind=0;ind<16;ind++){color=(rand()%10)+2;tamaX[ind]=rand()%64;
 tamaY[ind]=rand() %20;draw(tamaX[ind],tamaY[ind],color,"@");}draw(0,5,color,">");//< */
//for (i=0; i<=100; i++){
        a=rand()%9;
        b=rand()%9;
        c=rand()%9;
 
    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])||
       (reel3[c]==reel2[b+1]&& reel2[b+1]==reel3[a+2])) 
 
    {
 
 
    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");
    count++;
}else{
 
            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");
 
    } Sleep(2000);Beep(440,200);Beep(494,200);Beep(554,200);//---iro-ne
}
printf("そろったのは%d回です。\n",count);
 
return 0;
}
//---iro-ne
void draw(int x, int y, int col,char* c) {//座標x,yに文字列を出力
  COORD coord;coord.X=x;coord.Y=y;SetConsoleTextAttribute(Stdout,col | 8);
  SetConsoleCursorPosition(Stdout, coord);printf(c);
}//< 

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

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

#47

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

ゆうtyt さんが書きました:rand()%9は0~8の値がでるんですよね?
reel1[rand()%9]にしているので、reel1[0]〜[8]が出力されると思ったのですが、違うのですか?
reel1[0]には”1”が入っているので”1”が出力されるってことではないのですか?
この質問だけ回答お願いします。[/quote]

>rand()%9は0~8の値がでるんですよね?
はい。

>reel1[rand()%9]にしているので、reel1[0]〜[8]が出力されると思ったのですが、違うのですか?
主語がないので回答できません。文脈から判断すればいいのでしょうが、あえてしないです。
それをして間違えるともっとあほくさくなるからです。
質問者の人に言うのも筋違いですが、勢いで読み間違えて回答することもありうるので、
その時は許してあげてください。

>reel1[0]には”1”が入っているので”1”が出力されるってことではないのですか?
はい。

metaphor

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

#48

投稿記事 by metaphor » 7年前

訂正(Sleep(2000)はSleep(1400)の間違いです)

ISLe
記事: 2650
登録日時: 13年前
連絡を取る:

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

#49

投稿記事 by ISLe » 7年前

オフトピック
あんどーなつ さんが書きました:人間の考えている事なんて分からないことだらけだと思いますが、事の顛末とこの掲示板にいつからいたのかということから考えて、ISLeさんのほうが正しそうだとは思います(逆に言うとNo.7->No.13->No.18とかのことはいまださっぱりわからないし、わかるときが来ないと分からないと思ってます)。
わたしは正しいか正しくないかという話はしてません。
根拠を求めているだけです。
だから、わたしはわたしの根拠を説明しました。
あんどーなつ さんが書きました:それよりも私が不可解だと思っていたのは、私のつぶやきのような発言にISLeさんが食って掛かったかのように私の方で感じたことです。おそらく私の方で社会一般の人たちがスロットに関して感じている思い入れを私の方で理解できていなかった、だからスロットを軽蔑するような発言をした、だから今回はISLeさんが怒った、という風に認識しています。
スロット云々はまったく関係ありません。
わたしが気になるのは、自分勝手な解釈で回答しているかのようである、という一点だけです。

別のトピックですが、あんどーなつさんは、あんどーなつさんがGPL/LGPLに関わりたくないという個人的な理由だけで、公式で質問しろと門前払いしていますよね。
GPL/LGPLが掲示板で質問することに何の影響があるか、知らずに、調べもせずに。

立派な根拠があってわたしが気付いていないだけなのだとしたら申し訳ないですが、こじれる前に、どうして説明してくれないのですか。

かりに、もし、根拠もなくそんなことをしているのだとしたら、回答しない、という選択をしてほしいと思うのですが。
あんどーなつ さんが書きました:私が至らないところ、というよりも無駄に年食ってて変な経験を積んでいるから融通聞かなくなっているところもあって、変なところで目を付けられているのだなと少しは感じています。
根拠のない投稿をした者が必ず吐き捨てるセリフですね。
過去ログにはあんどーなつさんと同じ行動をした方の記録がたくさんありますよ。
あんどーなつ さんが書きました:もう少し周りに気を配って発言や書き込みをするようにいたします。
少なくともわたしはそんなこと求めていません。
オフトピック
わたしから以外にも指摘はあるのに、わたしを孤立させて悪者に仕立て上げるのがうまい。
というか、わたし以外に指摘されたことは既に忘れてしまっているのでしょう。
本気で忘れているから、そこに書いてあることだけを見ると妙に説得力があったりする。
周りに気を配ることができるのなら、忘れたりしないでしょうに。
過去に同じ行動をした方たちもそうでした。
そしてここの管理人さんはそういう方たちの味方なんですよね。

ISLe
記事: 2650
登録日時: 13年前
連絡を取る:

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

#50

投稿記事 by ISLe » 7年前

オフトピック
あんどーなつ さんが書きました:主語がないので回答できません。文脈から判断すればいいのでしょうが、あえてしないです。
それをして間違えるともっとあほくさくなるからです。
質問者の人に言うのも筋違いですが、勢いで読み間違えて回答することもありうるので、
その時は許してあげてください。
この回答が既にあほくさいと思いますけどね。
どうしてNo.40に対する質問だというのが分からないんですかね。
どうしてあんどーなつさんが「回答できません」って言い切ってしまうんですかね。

「回答できません」って言い切られてしまったあとに、他の回答者がどんな顔して回答したらいいんですかね。

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

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

#51

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

オフトピック
ISLe さん

私がこの掲示板の何人かから警告を受けていたのは認めます。
自分の発言がいささか強引・言い過ぎているのも認めます。
だからこの掲示板に二度と来ません。約束します。

しかし、あなたのやり方もいささか強引です。
管理人や私以外の人間の非難まで始めているじゃないですか。正直怖いですよ。
今回の件に関しては単に仕事でなく道楽だからというのと、私が新参者だから退くだけです。

アバター
Dixq (管理人)
管理人
記事: 1661
登録日時: 13年前
住所: 北海道札幌市
連絡を取る:

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

#52

投稿記事 by Dixq (管理人) » 7年前

トピックの雲行きが怪しくなってきたので出現しました。
みんな仲良く気持ちよく掲示板を利用しましょう(^o^)b

アバター
usao
記事: 1887
登録日時: 11年前

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

#53

投稿記事 by usao » 7年前

>rand()%9は0~8の値がでるんですよね?
>reel1[rand()%9]にしているので、reel1[0]〜[8]が出力されると思ったのですが、違うのですか?
>reel1[0]には”1”が入っているので”1”が出力されるってことではないのですか?

合っていると思います.

自信が無い場合には そこの部分だけしかない小さいテストプログラム みたいなのを別途作って確かめてみる等するとよいですよ.

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

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

#54

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

オフトピック
box さんが書きました:
ゆうtyt さんが書きました:

コード:

		a=rand()%9;
		b=rand()%9;
		c=rand()%9;
a, b, cには0~8の数値が入るので、
ゆうtyt さんが書きました:

コード:

[4][1][2]
[5][9][3]
[6][8][4][/quote]

こんな結果(1が出たり9が出たりする)になることは絶対にありません。[/quote]
というおかしく見える投稿を最初にしたのはboxさんなので、boxさんの反論(自説の補強)または訂正が欲しいです。[/offtopic]
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

ゆうtyt

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

#55

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

質問の回答ありがとうございます。
C言語と関係ないのですが、プログラムを実行したら、100回中5回数字が揃ったので確率は5%とわかるのですが、計算で数字が揃う確率を比較しようと思いまして。計算してみたのですが、あっているか添削してください。
1/9*1/9*1/9*5*9=45/729 でいいのですか?

仮に1をそろえるとして1/9*1/9*1/9
5パターンあるので×5
数字が1~9まであるので×9

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

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

#56

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

数学は難しそうなので、とりあえずプログラムで計算するといいでしょう。
各リールの位置は独立に一様分布で決まるとすると、以下のようになるでしょう。

コード:

#include <stdio.h>

int gcd(int a, int b)
{
	int r;
	while (b > 0){
		r = a % b;
		a = b;
		b = r;
	}
	return a;
}

char reel1[11]={'1','2','3','4','5','6','7','8','9','1','2'};
char reel2[11]={'9','8','7','6','5','4','3','2','1','9','8'};
char reel3[11]={'1','2','3','4','5','6','7','8','9','1','2'};
int main(void)
{
	int a,b,c;
	int count=0, allcount = 0, g;

	for (a=0; a<9; a++){
		for (b=0; b<9; b++){
			for (c=0; c<9; c++) {
				allcount++;
				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])||
				(reel3[c]==reel2[b+1]&& reel2[b+1]==reel3[a+2]))
				{
					count++;
				}
			}
		}
	}

	g = gcd(count, allcount);
	printf("確率は%d/%d (%d/%d)です。\n", count, allcount, count / g, allcount / g);

	return 0;
}
出力

コード:

確率は45/729 (5/81)です。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

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

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

#57

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

ゆうtyt さんが書きました:プログラムを実行したら、100回中5回数字が揃ったので確率は5%とわかるのですが
本当に100回中ですか?
101回中ではないですか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

ゆうtyt

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

#58

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

すいません
for文の
i<0;i<=100;i++
のところは、
i<1;i<=100;i++
に修正してから実行しました。

ゆうtyt

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

#59

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

すいません
for文の
i=0;i<=100;i++
のところは、
i=1;i<=100;i++
に修正してから実行しました。

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

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

#60

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

ゆうtyt さんが書きました:すいません
for文の
i<0;i<=100;i++
のところは、
i<1;i<=100;i++
に修正してから実行しました。
i<0;i<=100;i++などというコードはここには見当たりません。
それぞれi=0;i<=100;i++、i=1;i<=100;i++のことですか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

ゆうtyt

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

#61

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

[quote="ゆうtyt" id=3,18669,141896]

コード:

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




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

srand(100);



for (i=0; i<=100; i++){
        a=rand()%9;
		b=rand()%9;
		c=rand()%9;

	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])||
	   (reel3[c]==reel2[b+1]&& reel2[b+1]==reel3[a+2]))	

   {


	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");
	count++;
}else{

			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");

	}
}
printf("そろったのは%d回です。\n",count);

return 0;
}
20行目のことです。
これだと101回実行してしまうので、そこを指摘してくれたと解釈しました。

アバター
usao
記事: 1887
登録日時: 11年前

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

#62

投稿記事 by usao » 7年前

>1/9*1/9*1/9*5*9=45/729 でいいのですか?

うーん,どうなんでしょう.
並びのパターンとして
・斜めに揃うパターンが,2パターン(左上→右下方向 と 右上→左下方向)
・横に揃うパターンが,1パターン(現状,必ず3行同時に揃う)
で,それぞれの並びについて,数字が9パターン

なので… えっと……

( 2*(1/9)^3 + 1*(1/9)^3 )*9 = 3*(1/9)^2 = 1/27

3.7% くらい?

ゆうtyt

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

#63

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

3つのリールのうち1つは降順にしているので横の並びは3パターンで計算しました
回答ありがとうございます

ゆうtyt

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

#64

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

結果から考察をするんですが、理論上、揃う確率は約6%なんですが、乱数だと、100回中4回、6回、9回など、揃う回数に誤差があるのですか?

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

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

#65

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

usao さんが書きました:並びのパターンとして
・斜めに揃うパターンが,2パターン(左上→右下方向 と 右上→左下方向)
・横に揃うパターンが,1パターン(現状,必ず3行同時に揃う)
で,それぞれの並びについて,数字が9パターン

なので… えっと……

( 2*(1/9)^3 + 1*(1/9)^3 )*9 = 3*(1/9)^2 = 1/27

3.7% くらい?
ゆうtyt さんが書きました:3つのリールのうち1つは降順にしているので横の並びは3パターンで計算しました
なるほど、リールの向きを揃えると揃う確率が変わるのですね。

コード:

#include <stdio.h>

int gcd(int a, int b)
{
	int r;
	while (b > 0){
		r = a % b;
		a = b;
		b = r;
	}
	return a;
}

char reel1[11]={'1','2','3','4','5','6','7','8','9','1','2'};
char reel2[11]={'1','2','3','4','5','6','7','8','9','1','2'};
char reel3[11]={'1','2','3','4','5','6','7','8','9','1','2'};
int main(void)
{
	int a,b,c;
	int count=0, allcount = 0, g;

	for (a=0; a<9; a++){
		for (b=0; b<9; b++){
			for (c=0; c<9; c++) {
				allcount++;
				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])||
				(reel3[c]==reel2[b+1]&& reel2[b+1]==reel3[a+2]))
				{
					count++;
				}
			}
		}
	}

	g = gcd(count, allcount);
	printf("確率は%d/%d (%d/%d)です。\n", count, allcount, count / g, allcount / g);

	return 0;
}
出力

コード:

確率は27/729 (1/27)です。
ゆうtyt さんが書きました:結果から考察をするんですが、理論上、揃う確率は約6%なんですが、乱数だと、100回中4回、6回、9回など、揃う回数に誤差があるのですか?
はい。
1/6の確率で1が出るサイコロを6回振っても1がちょうど1回出るとは限らないのと似ていますね。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
usao
記事: 1887
登録日時: 11年前

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

#66

投稿記事 by usao » 7年前

>3つのリールのうち1つは降順にしているので

この点,見誤りました.失礼しました.

ゆうtyt

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

#67

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

どのような理由で誤差が生じるのかおしえていただけませんか?

ゆうtyt

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

#68

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

数字に重みを知けたいんですが、例えば1が揃ったらコインが1枚追加され、2と3は2枚、7は10枚にするにはどうしたらよいですか?
switch を使って考えようとしましたが、
switch () の()になんて書けばいいのかわかりません。

閉鎖

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