c言語を利用して簡単なスロットマシーンを作成しようとしています。
今、自分はスロットで 人の名前 乱数(数字)1、乱数(数字)2、乱数(数字)3でスロットを回転させることまではできました。しかし、スロットの結果に応じてプログラムの処理を行おうとするところで自分の思い通りのプログラムの処理が出来ません。原因が分からないので教えていただきたいです。
##現状のコード
include <signal.h>
include <stdio.h>
include <stdlib.h>
include <time.h>
include <unistd.h>
int x[4];
long gold;
char *name[2] = {"木村","田中"};
char **nam;
int main(int argc, char *argv[])
{
void cls();
void mvcur(int,int);
void stop();
void msgout();
nam = name;
srand(getpid()); //乱数生成の準備
signal(SIGTSTP,stop); //SIGTSTPシグナルハンドラの登録
signal(SIGALRM,msgout); //ALARMシグナルハンドラの登録
srand(time(NULL));
alarm(60); //アラームクロックを設定
gold = atoi(argv[1]); //掛金の設定
cls(); //コンソールクリア
mvcur(10,10); //10行10列にカーソルを移動
printf("Ctrl-Z でスロット停止\n");
while(1){
x[0] = rand()%10; //1桁の乱数を得る
x[1] = rand()%10; //1桁の乱数を得る
x[2] = rand()%10; //1桁の乱数を得る
mvcur(12,10); //12行10列にカーソルを移動
printf("%s %d %d %d",nam[rand() % 2],x[0],x[1],x[2]);
fflush(stdout);
usleep(100000);
}
return 0;
}
//SIGTSTPシグナルハンドラ
void stop()
{
void mvcur(int,int);
void cls();
mvcur(12,10); //12行10列にカーソルを移動
printf("%s %d %d %d",nam[rand() % 2],x[0],x[1],x[2]);
fflush(stdout);
if(x[0] == x[1] && x[1] == x[2] && nam[rand() % 2] == "木村"){
mvcur(14,10);
printf("当たり!木村は賞金 $%ld 獲得!\n",gold*100);
}
else if(x[0] == x[1] && x[1] == x[2] && nam[rand() % 2] == "田中"){
mvcur(14,10);
printf("当たり!田中は賞金 $%ld 獲得!\n",gold*100);
}
else if(nam[rand() % 2] == "木村"){
mvcur(14,10); //12行10列にカーソルを移動
printf("残念!木村は掛金を $%ld 失った!\n",gold);
}
else if(nam[rand() % 2] == "鈴木"){
mvcur(14,10); //12行10列にカーソルを移動
printf("残念!鈴木は掛金を $%ld 失った!\n",gold);
}
else(nam[rand() % 2] == "田中"){
mvcur(14,10); //12行10列にカーソルを移動
printf("残念!田中は掛金を $%ld 失った!\n",gold);
}
mvcur(15,10); //12行10列にカーソルを移動
printf("Enterキーを押すと継続します。\n");
getchar(); //キーが押されるまで待つ;
cls(); //コンソールクリア
mvcur(10,10); //10行10列にカーソルを移動
printf("Ctrl-Z でスロット停止\n");
return;
}
//ALARMシグナルハンドラ
void msgout()
{
printf("\n");
printf("タイムアウトしました!\n");
exit(0);
}
//コンソールをクリア
//(VT100エスケープシーケンスコード)
void cls(void)
{
static char esc=033;
fprintf(stdout,"%c[2J",esc);
fflush(stdout);
return;
}
//指定した座標(行、列)にカーソル移動
//(VT100エスケープシーケンスコード)
void mvcur(int lin, int col)
{
static char esc=033;
fprintf(stdout,"%c[%d;%dH",esc,lin,col);
fflush(stdout);
return;
}
##実行結果の例
Ctrl-Z でスロット停止
木村 8 1 0^Z 残念!田中は掛金を $1000 失った! Enterキーを押すと継続します。
このようにスロットで名前(木村)が当たったのに、掛け金を失った人の名前は木村ではなく田中になってしまうときがあります。おそらく乱数をうまく扱えていないのだと思いますが。本来はこのスロット結果の場合
######残念!木村は掛金を $1000 失った!
となるようにしたいです。思い通りにならない原因を教えていただきたいです。