ページ 1 / 1
スロットマシーン 作成
Posted: 2016年12月13日(火) 22:35
by ゆうtyt
スロットの作成について、100個の配列のなかに0〜9の数字が順番に格納され、ランダムに1つ出力し、3つ連続した数字を結果として出力し、それを、3つのリールとして出力したいんですが、やり方がよくわかりません。
結果としては
[1][9][8]
[2][1][9]
[3][2][1]
1がそろいました。
みたいにしたいです。
Re: スロットマシーン 作成
Posted: 2016年12月13日(火) 22:43
by ゆうtyt
自分で作ってみましたが、これだとスロットではないといわれました。
コード:
#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;
}
Re: スロットマシーン 作成
Posted: 2016年12月14日(水) 14:30
by あんどーなつ
ゆう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;
}
Re: スロットマシーン 作成
Posted: 2016年12月14日(水) 14:48
by あんどーなつ
ゆうtyt さんが書きました:スロットの作成について、100個の配列のなかに0〜9の数字が順番に格納され、ランダムに1つ出力し、3つ連続した数字を結果として出力し、それを、3つのリールとして出力したい
今回は1回分だけ出力するプログラムになっていますが、実際にはGUIのプログラムを簡素化する形で出題者の人は考えているんだと思います。もし、スロットが完全なランダム列であると、数字が周期的に表れないので目押しできないです。
(出題者の人には、スロットを常識と思うなと言いたいです)
Re: スロットマシーン 作成
Posted: 2016年12月14日(水) 17:43
by amehirune
あんどーなつ さんが書きました:
コード:
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...
この場合、ランダムで値を決めるのは「中心の数」だけでいいと思われますが。。。
Re: スロットマシーン 作成
Posted: 2016年12月14日(水) 17:50
by amehirune
コード:
#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);
}
}
こういうことだろうと思い、即席で作ってみました。
尚、
仕様通りにはしていませんので、課題としてこのまま提出しないでください。
数字を配列にしていなかったり、ビンゴ判定やらなんやらをすっ飛ばしていますので。
Re: スロットマシーン 作成
Posted: 2016年12月14日(水) 17:51
by ISLe
まず、スロットの仕様について考える必要があるでしょう。
スロットというのは、リールに描かれた図柄が回転し、その後、停止した図柄の配置によってビンゴを判定するものです。
提示された条件から、要素数100個の配列というのが1つのリールということになるでしょう。
ビンゴ判定は、リールの位置で決まるので、100個の要素のうちどれが先頭となるかをランダムに選択し停止位置としましょう。
それをリール3本分繰り返しましょう。
停止位置の先頭から、3つの要素を比較してビンゴの判定をしましょう。
3つの要素が最後尾と先頭にまたがる可能性がありますので、対策を考えてください。
オフトピック
要素数100個の配列に0~9を順番に格納するという条件だと、配列要らないじゃないか、とも思ったりする。
オフトピック
あんどーなつ さんが書きました:(出題者の人には、スロットを常識と思うなと言いたいです)
スロットを作れというお題なのに?
Re: スロットマシーン 作成
Posted: 2016年12月14日(水) 17:55
by ISLe
おっと、コーディングする上で必要なことはamehiruneさんが示してくれましたね。
Re: スロットマシーン 作成
Posted: 2016年12月14日(水) 19:25
by みけCAT
オフトピック
どうしてみんな、「0~9の数字」という条件なのに乱数が9通りしか出ないプログラムの仕様をそのままにしているんだろう?
Re: スロットマシーン 作成
Posted: 2016年12月14日(水) 20:39
by あんどーなつ
ISLe さんが書きました:
オフトピック
あんどーなつ さんが書きました:(出題者の人には、スロットを常識と思うなと言いたいです)
スロットを作れというお題なのに?
オフトピック
... 現に問題文を読んでも質問者さんはその意図が理解できなかったので配列を実装しなかったじゃないですか。
パチスロ雑誌やインターネットにはパチスロの図柄パターンが載っていますけど、そういうことが頭に入っていない人が問題文を読んでも理解できないじゃないかと言いたかったわけです。
Re: スロットマシーン 作成
Posted: 2016年12月14日(水) 22:15
by hide
オフトピック
コードから推測したことを決めつけるのはどうかと
Re: スロットマシーン 作成
Posted: 2016年12月14日(水) 22:21
by あんどーなつ
Re: スロットマシーン 作成
Posted: 2016年12月14日(水) 22:43
by ゆう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;
}
コードはこんな感じにしました。
あたりの回数とはずれの回数を出力したいんですがどうやるのでしょうか?
Re: スロットマシーン 作成
Posted: 2016年12月14日(水) 23:08
by amehirune
みけCAT さんが書きました:オフトピック
どうしてみんな、「0~9の数字」という条件なのに乱数が9通りしか出ないプログラムの仕様をそのままにしているんだろう?
オフトピック
ああああああしまった、正しくは「a=rand()%10;」でしたね…w
Re: スロットマシーン 作成
Posted: 2016年12月14日(水) 23:15
by amehirune
ゆう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この配列~」定義を思いっきりぶっ壊してしまっているような気がするのですが大丈夫でしょうか
Re: スロットマシーン 作成
Posted: 2016年12月14日(水) 23:18
by ゆうtyt
動作はしました。
コードはこれでいいと言われました。
Re: スロットマシーン 作成
Posted: 2016年12月15日(木) 17:48
by ISLe
オフトピック
あんどーなつ さんが書きました:... 現に問題文を読んでも質問者さんはその意図が理解できなかったので配列を実装しなかったじゃないですか。
パチスロ雑誌やインターネットにはパチスロの図柄パターンが載っていますけど、そういうことが頭に入っていない人が問題文を読んでも理解できないじゃないかと言いたかったわけです。
もしもこれが、パチスロ製造会社の新人研修で出されたお題だったとしても、ですか?
想像をぶつけても意味ないですが、はっきりしているのは「スロットを作る」ことが求められているということ。
だったら、質問者にも回答者にも「スロットとは何か」を理解する・理解していることが求められるのではないでしょうかね。
スロットと関係なければ・関係あるかどうか分からなければ、お題を無視していいし、いいかげんな回答をしてもいい、なんてことになったら、質問に対して回答するという形式そのものの否定ですよね。
質問の中に矛盾があるとか、こうしたほうがもっといいとか、指摘するのとは次元が違う。
Re: スロットマシーン 作成
Posted: 2016年12月15日(木) 17:56
by ISLe
ゆうtyt さんが書きました:コードはこれでいいと言われました。
リールを表現する配列に関してはこうしろ、って言われただけなんじゃなかろうか。
Re: スロットマシーン 作成
Posted: 2016年12月15日(木) 20:27
by あんどーなつ
オフトピック
今更自分の過ちを弁解するわけじゃありませんが、これが大学の講義の課題で、この設問だったら、私の場合教授に「不健全だ」と食って掛かって留年していたかもしれませんね。
Re: スロットマシーン 作成
Posted: 2016年12月15日(木) 20:55
by あんどーなつ
ISLe さんが書きました:ゆうtyt さんが書きました:コードはこれでいいと言われました。
リールを表現する配列に関してはこうしろ、って言われただけなんじゃなかろうか。
コードがだめだったら、コードがだめって言いますよね。
それとも完成しているかどうかは察しろっていうタイプの先輩ですか?
そもそも質問自体雑ですよね。
ゆうtyt さんが書きました:スロットの作成について、100個の配列のなかに0〜9の数字が順番に格納され、ランダムに1つ出力し、3つ連続した数字を結果として出力し、それを、3つのリールとして出力したいんですが、やり方がよくわかりません。
単に何かさせたかっただけじゃないですかね?教わっている人よりも教えている人のほうが忙しいというのはどこでもありそうな話ですし。
Re: スロットマシーン 作成
Posted: 2016年12月15日(木) 21:10
by ゆうtyt
リールに関してはこれでいいと言われました。
しかし、もう一度確認したところif文が正しくないようで、数字がそろっても「そろいました」と出力されません。どこがまちがってるのかおしえてください。
Re: スロットマシーン 作成
Posted: 2016年12月15日(木) 21:20
by あんどーなつ
最初のif文で&&が9個並んでいますが、[-,_,^,/,\]の5つの組み合わせについて(何々&&何々&&何々)を5つ作ってそれぞれを||でつながないといけなかったと思います。
Re: スロットマシーン 作成
Posted: 2016年12月15日(木) 21:25
by あんどーなつ
ゆうtyt さんが書きました:リールに関してはこれでいいと言われました。
しかし、もう一度確認したところif文が正しくないようで、数字がそろっても「そろいました」と出力されません。どこがまちがってるのかおしえてください。
ISLe さん
すみませんでした。目視かテストでプログラムが動作しないことを確認されていたのですね。
Re: スロットマシーン 作成
Posted: 2016年12月15日(木) 22:54
by ゆうtyt
あんどーなつ さんが書きました:最初のif文で&&が9個並んでいますが、[-,_,^,/,\]の5つの組み合わせについて(何々&&何々&&何々)を5つ作ってそれぞれを||でつながないといけなかったと思います。
[-,_,^,/,\]の5つの組み合わせについての部分が理解できないのですがどういう意味ですか?
Re: スロットマシーン 作成
Posted: 2016年12月15日(木) 23:05
by あんどーなつ
[-,_,^,/,\]は、
コード:
[*][*][*] [ ][ ][ ] [ ][ ][ ] [*][ ][ ] [ ][ ][*]
[ ][ ][ ] [*][*][*] [ ][ ][ ] [ ][*][ ] [ ][*][ ]
[ ][ ][ ] [ ][ ][ ] [*][*][*] [ ][ ][*] [*][ ][ ]
の5つです。
Re: スロットマシーン 作成
Posted: 2016年12月15日(木) 23:07
by みけCAT
あんどーなつ さんが書きました:[-,_,^,/,\]の5つの組み合わせについて(何々&&何々&&何々)を5つ作って
3個の数字が同じかを判定するので、それぞれの組み合わせについて&&でつなぐ条件式は2個(a==b && b==c的な感じ)でいいと思います。
オフトピック
判定する場所の情報を配列に入れておいてループで判定する、などのもう少しいい方法がある気がしますが、仕様を満たせばとりあえずはいいでしょう。
Re: スロットマシーン 作成
Posted: 2016年12月15日(木) 23:36
by ゆうtyt
コード:
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でそろっていないのになのになぜこのように表示されたのですか?
Re: スロットマシーン 作成
Posted: 2016年12月15日(木) 23:40
by みけCAT
ゆうtyt さんが書きました:4,1,2でそろっていないのになのになぜこのように表示されたのですか?
せっかく揃っても、また乱数を使ってバラバラにしてしまうからでしょう。
Re: スロットマシーン 作成
Posted: 2016年12月15日(木) 23:47
by ゆうtyt
みけCAT さんが書きました:ゆうtyt さんが書きました:4,1,2でそろっていないのになのになぜこのように表示されたのですか?
せっかく揃っても、また乱数を使ってバラバラにしてしまうからでしょう。
a,b,cの乱数をifとforの間にいれればいいということであってますか?
Re: スロットマシーン 作成
Posted: 2016年12月15日(木) 23:52
by みけCAT
ゆうtyt さんが書きました:a,b,cの乱数をifとforの間にいれればいいということであってますか?
コード:
for(繰り返す)
リールを回す(乱数)
揃ったか判定する(if)
リール(乱数)に余計な結果を加えずに判定結果を表示する
というようにすればいいでしょう。
乱数をifとforの間にいれるだけでなく、判定後に判定に使ったデータを破壊する処理を消さなければなりません。
Re: スロットマシーン 作成
Posted: 2016年12月16日(金) 00:20
by ゆうtyt
すいません。
リール(乱数)に余計な結果を加えずに判定結果を表示する
余計な結果とはどういうことですか?
Re: スロットマシーン 作成
Posted: 2016年12月16日(金) 01:24
by みけCAT
ゆうtyt さんが書きました:すいません。
リール(乱数)に余計な結果を加えずに判定結果を表示する
余計な結果とはどういうことですか?
すいません、typoです。
正しくは「余計な変化」です。
Re: スロットマシーン 作成
Posted: 2016年12月16日(金) 15:55
by あんどーなつ
みけCAT さんが書きました:あんどーなつ さんが書きました:[-,_,^,/,\]の5つの組み合わせについて(何々&&何々&&何々)を5つ作って
3個の数字が同じかを判定するので、それぞれの組み合わせについて&&でつなぐ条件式は2個(a==b && b==c的な感じ)でいいと思います。
みけCAT さん、ご指摘ありがとうございます。
Re: スロットマシーン 作成
Posted: 2016年12月16日(金) 18:04
by ISLe
オフトピック
あんどーなつ さんが書きました:ISLe さんが書きました:ゆうtyt さんが書きました:コードはこれでいいと言われました。
リールを表現する配列に関してはこうしろ、って言われただけなんじゃなかろうか。
コードがだめだったら、コードがだめって言いますよね。
それとも完成しているかどうかは察しろっていうタイプの先輩ですか?
質問者さんの書いている文章は、質問者さんのフィルターを通して書かれた文章なのだから、フィルターを通す前の内容を想像してみました。
質問者さんの立場になって考えた結果です。
あんどーなつ さんが書きました:そもそも質問自体雑ですよね。
初心者は質問するなと言ってる?
Re: スロットマシーン 作成
Posted: 2016年12月16日(金) 18:23
by あんどーなつ
ISLe さんが書きました:あんどーなつ さんが書きました:そもそも質問自体雑ですよね。
初心者は質問するなと言ってる?[/offtopic]
オフトピック
言っていないです。
質問者の人が自分で思いついた質問ではなくて、他の人が出した課題だと思ったので、その人の問題の出し方が雑だという意味です。
Re: スロットマシーン 作成
Posted: 2016年12月16日(金) 18:30
by ISLe
オフトピック
あんどーなつ さんが書きました:言っていないです。
質問者の人が自分で思いついた質問ではなくて、他の人が出した課題だと思ったので、その人の問題の出し方が雑だという意味です。
質問者さんが書いた文章から、どうやったら、出題者が出した問題の『完全な』内容が分かるのでしょうか。
質問者さんのフィルターを通した結果なのだから、質問者さんに雑だと文句を言っているに等しい、ということが理解できませんか。
あるいは、もしかして、あんどーなつさんは本物のエスパーですか?
出題者が出した問題の『完全な』内容が分かってておっしゃっているのだとしたら申し訳ないです。ごめんなさい。
Re: スロットマシーン 作成
Posted: 2016年12月16日(金) 21:09
by amehirune
ゆうtyt さんが書きました:動作はしました。
コードはこれでいいと言われました。
うっそぉ。私の目がおかしくなったんですかね…?
まず、int a,b,cの3つの変数を宣言しています。この時点で初期化はされていません。
for文でループ開始です。i=0となります。この時点でa,b,cはまだ初期化されていません。
if文で条件分岐です。if(reel[a]== …おや?
因みにコピペして実行してみましたが(環境:VC++2008EE)、
コンパイルは通ってもwarningがでるし実行してもエラーが発生するし、お話になりません。
本当にこれでいいと言われたんですね?
オフトピック
おっかしいなぁ…私、何か見落としてるところありますかね…
うっかりがあるかもしれませんので、私が間違ってたらすぐにご指摘ください。
Re: スロットマシーン 作成
Posted: 2016年12月16日(金) 21:52
by みけCAT
amehirune さんが書きました:ゆうtyt さんが書きました:動作はしました。
コードはこれでいいと言われました。
うっそぉ。私の目がおかしくなったんですかね…?
おかしいのはジャッジの目かもしれないですよ。
あるいは、もしかしたら問題がおかしいことを認めて、もうこの問題はここまででいい(別の問題をやれ)という意味かもしれないですし。
Re: スロットマシーン 作成
Posted: 2016年12月16日(金) 22:27
by ゆうtyt
コード:
#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;
}
こんな感じになりました。
そろったらちゃんと「そろった」と出力されましたが、
余計な結果というのはよくわかりませんでした。
Re: スロットマシーン 作成
Posted: 2016年12月17日(土) 02:43
by 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が出たりする)になることは絶対にありません。
Re: スロットマシーン 作成
Posted: 2016年12月17日(土) 06:54
by みけCAT
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)
どうして「こんな結果になることは絶対にありません」と主張するのですか?
Re: スロットマシーン 作成
Posted: 2016年12月17日(土) 22:22
by ゆうtyt
rand()%9は0~8の値がでるんですよね?
reel1[rand()%9]にしているので、reel1[0]〜[8]が出力されると思ったのですが、違うのですか?
reel1[0]には”1”が入っているので”1”が出力されるってことではないのですか?
Re: スロットマシーン 作成
Posted: 2016年12月18日(日) 17:54
by ISLe
オフトピック
No.13のコードは、No.7で書いたリールの末尾と先頭をまたがる対策が、スマートに解決できるコードになってた。
このコードがすんなり出てくることに、スロットを作ることに対して手慣れていると感じた。
そこが出題者の指示であろうことは間違いないと思った。
そこから、質問者さんのフィルターを通す前の指示の内容は
「配列の部分はもう『これでいい』からあとの部分を考えろ」
というものであろうと想像した(No.18)。
質問者の立場に立つ、あるいは寄り添うというのは、鵜呑みにすることとは違うと考える。
「実行しようとしたらわけのわからないエラーが出て実行できません」
という質問に
わけのわからんエラーを出すとはとんでもない処理系だな
という回答をするのと同じことがいまこのトピックで行われている、気がする。
質問者さんのフィルターの精度が低いことは、ここまでのやり取りで(というか最初から)明らか。
片道だけでこの状況なのだから、本当にそう言われたんですか?と聞いて、返ってくるものが原形を留めないであろうことは容易に想像できる、気がする。
本当はこう言われたんじゃないですか?であれば一往復減らせるのに、なぜだかそういう流れにならない。
質問者さんは悪くない。
質問掲示板にこういう質問が投稿されるのは想定内。
Re: スロットマシーン 作成
Posted: 2016年12月18日(日) 19:21
by あんどーなつ
オフトピック
人間の考えている事なんて分からないことだらけだと思いますが、事の顛末とこの掲示板にいつからいたのかということから考えて、ISLeさんのほうが正しそうだとは思います(逆に言うとNo.7->No.13->No.18とかのことはいまださっぱりわからないし、わかるときが来ないと分からないと思ってます)。
それよりも私が不可解だと思っていたのは、私のつぶやきのような発言にISLeさんが食って掛かったかのように私の方で感じたことです。おそらく私の方で社会一般の人たちがスロットに関して感じている思い入れを私の方で理解できていなかった、だからスロットを軽蔑するような発言をした、だから今回はISLeさんが怒った、という風に認識しています。
私が至らないところ、というよりも無駄に年食ってて変な経験を積んでいるから融通聞かなくなっているところもあって、変なところで目を付けられているのだなと少しは感じています。
もう少し周りに気を配って発言や書き込みをするようにいたします。
Re: スロットマシーン 作成
Posted: 2016年12月18日(日) 23:25
by ゆうtyt
私に配慮がなかったのは申し訳ないと思います。
回答してくれた方々ありがとうございました。
最後に
ゆうtyt さんが書きました:rand()%9は0~8の値がでるんですよね?
reel1[rand()%9]にしているので、reel1[0]〜[8]が出力されると思ったのですが、違うのですか?
reel1[0]には”1”が入っているので”1”が出力されるってことではないのですか?
この質問だけ回答お願いします。
Re: スロットマシーン 作成
Posted: 2016年12月18日(日) 23:43
by metaphor
ゲーム’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);
}//<
Re: スロットマシーン 作成
Posted: 2016年12月19日(月) 08:25
by あんどーなつ
ゆう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”が出力されるってことではないのですか?
はい。
Re: スロットマシーン 作成
Posted: 2016年12月19日(月) 10:46
by metaphor
訂正(Sleep(2000)はSleep(1400)の間違いです)
Re: スロットマシーン 作成
Posted: 2016年12月19日(月) 18:50
by ISLe
オフトピック
あんどーなつ さんが書きました:人間の考えている事なんて分からないことだらけだと思いますが、事の顛末とこの掲示板にいつからいたのかということから考えて、ISLeさんのほうが正しそうだとは思います(逆に言うとNo.7->No.13->No.18とかのことはいまださっぱりわからないし、わかるときが来ないと分からないと思ってます)。
わたしは正しいか正しくないかという話はしてません。
根拠を求めているだけです。
だから、わたしはわたしの根拠を説明しました。
あんどーなつ さんが書きました:それよりも私が不可解だと思っていたのは、私のつぶやきのような発言にISLeさんが食って掛かったかのように私の方で感じたことです。おそらく私の方で社会一般の人たちがスロットに関して感じている思い入れを私の方で理解できていなかった、だからスロットを軽蔑するような発言をした、だから今回はISLeさんが怒った、という風に認識しています。
スロット云々はまったく関係ありません。
わたしが気になるのは、自分勝手な解釈で回答しているかのようである、という一点だけです。
別のトピックですが、あんどーなつさんは、あんどーなつさんがGPL/LGPLに関わりたくないという個人的な理由だけで、公式で質問しろと門前払いしていますよね。
GPL/LGPLが掲示板で質問することに何の影響があるか、知らずに、調べもせずに。
立派な根拠があってわたしが気付いていないだけなのだとしたら申し訳ないですが、こじれる前に、どうして説明してくれないのですか。
かりに、もし、根拠もなくそんなことをしているのだとしたら、回答しない、という選択をしてほしいと思うのですが。
あんどーなつ さんが書きました:私が至らないところ、というよりも無駄に年食ってて変な経験を積んでいるから融通聞かなくなっているところもあって、変なところで目を付けられているのだなと少しは感じています。
根拠のない投稿をした者が必ず吐き捨てるセリフですね。
過去ログにはあんどーなつさんと同じ行動をした方の記録がたくさんありますよ。
あんどーなつ さんが書きました:もう少し周りに気を配って発言や書き込みをするようにいたします。
少なくともわたしはそんなこと求めていません。
オフトピック
わたしから以外にも指摘はあるのに、わたしを孤立させて悪者に仕立て上げるのがうまい。
というか、わたし以外に指摘されたことは既に忘れてしまっているのでしょう。
本気で忘れているから、そこに書いてあることだけを見ると妙に説得力があったりする。
周りに気を配ることができるのなら、忘れたりしないでしょうに。
過去に同じ行動をした方たちもそうでした。
そしてここの管理人さんはそういう方たちの味方なんですよね。
Re: スロットマシーン 作成
Posted: 2016年12月19日(月) 19:05
by ISLe
オフトピック
あんどーなつ さんが書きました:主語がないので回答できません。文脈から判断すればいいのでしょうが、あえてしないです。
それをして間違えるともっとあほくさくなるからです。
質問者の人に言うのも筋違いですが、勢いで読み間違えて回答することもありうるので、
その時は許してあげてください。
この回答が既にあほくさいと思いますけどね。
どうしてNo.40に対する質問だというのが分からないんですかね。
どうしてあんどーなつさんが「回答できません」って言い切ってしまうんですかね。
「回答できません」って言い切られてしまったあとに、他の回答者がどんな顔して回答したらいいんですかね。
Re: スロットマシーン 作成
Posted: 2016年12月19日(月) 21:44
by あんどーなつ
オフトピック
ISLe さん
私がこの掲示板の何人かから警告を受けていたのは認めます。
自分の発言がいささか強引・言い過ぎているのも認めます。
だからこの掲示板に二度と来ません。約束します。
しかし、あなたのやり方もいささか強引です。
管理人や私以外の人間の非難まで始めているじゃないですか。正直怖いですよ。
今回の件に関しては単に仕事でなく道楽だからというのと、私が新参者だから退くだけです。
Re: スロットマシーン 作成
Posted: 2016年12月19日(月) 22:28
by Dixq (管理人)
トピックの雲行きが怪しくなってきたので出現しました。
みんな仲良く気持ちよく掲示板を利用しましょう(^o^)b
Re: スロットマシーン 作成
Posted: 2016年12月20日(火) 09:28
by usao
>rand()%9は0~8の値がでるんですよね?
>reel1[rand()%9]にしているので、reel1[0]〜[8]が出力されると思ったのですが、違うのですか?
>reel1[0]には”1”が入っているので”1”が出力されるってことではないのですか?
合っていると思います.
自信が無い場合には そこの部分だけしかない小さいテストプログラム みたいなのを別途作って確かめてみる等するとよいですよ.
Re: スロットマシーン 作成
Posted: 2016年12月20日(火) 09:56
by みけCAT
オフトピック
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]
Re: スロットマシーン 作成
Posted: 2016年12月20日(火) 22:50
by ゆうtyt
質問の回答ありがとうございます。
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
Re: スロットマシーン 作成
Posted: 2016年12月20日(火) 23:17
by みけCAT
数学は難しそうなので、とりあえずプログラムで計算するといいでしょう。
各リールの位置は独立に一様分布で決まるとすると、以下のようになるでしょう。
コード:
#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;
}
出力
Re: スロットマシーン 作成
Posted: 2016年12月20日(火) 23:18
by みけCAT
ゆうtyt さんが書きました:プログラムを実行したら、100回中5回数字が揃ったので確率は5%とわかるのですが
本当に100回中ですか?
101回中ではないですか?
Re: スロットマシーン 作成
Posted: 2016年12月21日(水) 00:22
by ゆうtyt
すいません
for文の
i<0;i<=100;i++
のところは、
i<1;i<=100;i++
に修正してから実行しました。
Re: スロットマシーン 作成
Posted: 2016年12月21日(水) 00:23
by ゆうtyt
すいません
for文の
i=0;i<=100;i++
のところは、
i=1;i<=100;i++
に修正してから実行しました。
Re: スロットマシーン 作成
Posted: 2016年12月21日(水) 00:24
by みけCAT
ゆう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++のことですか?
Re: スロットマシーン 作成
Posted: 2016年12月21日(水) 01:00
by ゆうtyt
[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回実行してしまうので、そこを指摘してくれたと解釈しました。
Re: スロットマシーン 作成
Posted: 2016年12月21日(水) 09:15
by usao
>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% くらい?
Re: スロットマシーン 作成
Posted: 2016年12月22日(木) 22:45
by ゆうtyt
3つのリールのうち1つは降順にしているので横の並びは3パターンで計算しました
回答ありがとうございます
Re: スロットマシーン 作成
Posted: 2016年12月23日(金) 01:54
by ゆうtyt
結果から考察をするんですが、理論上、揃う確率は約6%なんですが、乱数だと、100回中4回、6回、9回など、揃う回数に誤差があるのですか?
Re: スロットマシーン 作成
Posted: 2016年12月23日(金) 07:05
by みけCAT
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;
}
出力
ゆうtyt さんが書きました:結果から考察をするんですが、理論上、揃う確率は約6%なんですが、乱数だと、100回中4回、6回、9回など、揃う回数に誤差があるのですか?
はい。
1/6の確率で1が出るサイコロを6回振っても1がちょうど1回出るとは限らないのと似ていますね。
Re: スロットマシーン 作成
Posted: 2016年12月23日(金) 09:02
by usao
>3つのリールのうち1つは降順にしているので
この点,見誤りました.失礼しました.
Re: スロットマシーン 作成
Posted: 2016年12月23日(金) 11:23
by ゆうtyt
どのような理由で誤差が生じるのかおしえていただけませんか?
Re: スロットマシーン 作成
Posted: 2017年1月11日(水) 21:30
by ゆうtyt
数字に重みを知けたいんですが、例えば1が揃ったらコインが1枚追加され、2と3は2枚、7は10枚にするにはどうしたらよいですか?
switch を使って考えようとしましたが、
switch () の()になんて書けばいいのかわかりません。