ルーレットについて
Posted: 2007年1月27日(土) 05:00
失礼します。わからない事があるので質問させていただきます。
以前にも同じような内容で投稿したのですが、あれから色々といじったので
新スレで投稿する事にしました。すいませんm(__)m
ルーレットの処理についてです。
#include <stdio.h>
#include <time.h>
#include <conio.h>
#include <stdlib.h>
#include "dossys.h"
char_far gvram; /*画面*/
char_far r_pbmp; /*ルーレットビットマップ*/
char_far bb; /*バックバッファ*/
char_far kazubmp; /*スコアビットマップ*/
int endflg=0;
/*スコア表示関数*/
void draw_number(int x,int y,int kazu)
{
int s,i=100,cnt=0;
for(cnt=0;cnt<3;cnt++){
s=kazu/i;
dg_box(bb,x+29*cnt,y,29,21,1,RGB(0,0,0));
dg_drawbmp3(bb,x+29*cnt,y,29,21,kazubmp,s*29,0,RGB(224,224,128));
kazu=kazu%i;
i/=10;
}
return;
}
/*前準備*/
void init(void)
{
srand(time(0));
kazubmp=dg_loadbmp("数.bmp"); /*スコアビットマップロード*/
r_pbmp=dg_loadbmp("rulet.bmp"); /*ルーレットビットマップロード*/
bb=dg_createBB();
return;
}
/*キー処理&ルーレット回る関数*/
int ki(void)
{
int key,k,r,j;
static int i=0; /*一度だけiを0に*/
if(kbhit()){
key=getch();
if(key==0){key=getch();}
if(key=='e'){endflg=1;}
}
r=rand()%7; /*0~6の乱数を求めてrに格納*/
if(i>=8){i=0;} /*iが8以上で0に戻す*/
dg_drawbmp3(bb,0,100,100,100,r_pbmp,i*100,0,RGB(224,0,128));/*i番目の数を表示*/
if(key=='d'){
k=r+i; /*dを押した時のiの数とrの値をkに格納*/
if(k>8){
k=k%8; /*kが8以上なら0~の値に変更*/
}
if(k==0){
k=8;
}
j=i+1; /*i+1の数をjに格納*/
if(j>8){
j%=8; /*jが8以上なら0~の値に変更*/
}
do{
wait(50000000);
dg_drawbmp3(bb,0,100,100,100,r_pbmp,j*100,0,RGB(224,0,128)); /*j番目の数を表示*/
j++;
}while(j<k); /*jがkの大きさを越えるまで繰り返す*/
draw_number(0,0,k+1); /*kを表示*/
return i+1;
getch();
}
i++;
return i;
}
/*後始末*/
void end(void)
{
getch();
dg_deletebmp(r_pbmp);
dg_deletebmp(kazubmp);
dg_deleteBB(bb);
}
/*メイン関数*/
main()
{
int i,cnt=0,key,x=124,y=68;
int rnd;
srand(time(0));
init();
do{
rnd=ki();
draw_number(0,21,rnd); /*iを表示*/
dg_flip(gvram,bb);
wait(8000000);
ML();
}while(!endflg);
end();
}
少々わかりにくいかもしれませんが・・・
i番目のルーレットが順に表示され、8まで表示されたらまた1に戻り、
'd'のキーを押すとそこで一時的に処理(i)を止め、
計算で求めた数字=k番目までルーレットをゆっくり進め、
kが表示されたらそこで止まる。
・・・というプログラムにしたいのですが、
この処理では無理なようで・・・
どなたか理解できる方、アドバイスをお願いしますm(__)m
以前にも同じような内容で投稿したのですが、あれから色々といじったので
新スレで投稿する事にしました。すいませんm(__)m
ルーレットの処理についてです。
#include <stdio.h>
#include <time.h>
#include <conio.h>
#include <stdlib.h>
#include "dossys.h"
char_far gvram; /*画面*/
char_far r_pbmp; /*ルーレットビットマップ*/
char_far bb; /*バックバッファ*/
char_far kazubmp; /*スコアビットマップ*/
int endflg=0;
/*スコア表示関数*/
void draw_number(int x,int y,int kazu)
{
int s,i=100,cnt=0;
for(cnt=0;cnt<3;cnt++){
s=kazu/i;
dg_box(bb,x+29*cnt,y,29,21,1,RGB(0,0,0));
dg_drawbmp3(bb,x+29*cnt,y,29,21,kazubmp,s*29,0,RGB(224,224,128));
kazu=kazu%i;
i/=10;
}
return;
}
/*前準備*/
void init(void)
{
srand(time(0));
kazubmp=dg_loadbmp("数.bmp"); /*スコアビットマップロード*/
r_pbmp=dg_loadbmp("rulet.bmp"); /*ルーレットビットマップロード*/
bb=dg_createBB();
return;
}
/*キー処理&ルーレット回る関数*/
int ki(void)
{
int key,k,r,j;
static int i=0; /*一度だけiを0に*/
if(kbhit()){
key=getch();
if(key==0){key=getch();}
if(key=='e'){endflg=1;}
}
r=rand()%7; /*0~6の乱数を求めてrに格納*/
if(i>=8){i=0;} /*iが8以上で0に戻す*/
dg_drawbmp3(bb,0,100,100,100,r_pbmp,i*100,0,RGB(224,0,128));/*i番目の数を表示*/
if(key=='d'){
k=r+i; /*dを押した時のiの数とrの値をkに格納*/
if(k>8){
k=k%8; /*kが8以上なら0~の値に変更*/
}
if(k==0){
k=8;
}
j=i+1; /*i+1の数をjに格納*/
if(j>8){
j%=8; /*jが8以上なら0~の値に変更*/
}
do{
wait(50000000);
dg_drawbmp3(bb,0,100,100,100,r_pbmp,j*100,0,RGB(224,0,128)); /*j番目の数を表示*/
j++;
}while(j<k); /*jがkの大きさを越えるまで繰り返す*/
draw_number(0,0,k+1); /*kを表示*/
return i+1;
getch();
}
i++;
return i;
}
/*後始末*/
void end(void)
{
getch();
dg_deletebmp(r_pbmp);
dg_deletebmp(kazubmp);
dg_deleteBB(bb);
}
/*メイン関数*/
main()
{
int i,cnt=0,key,x=124,y=68;
int rnd;
srand(time(0));
init();
do{
rnd=ki();
draw_number(0,21,rnd); /*iを表示*/
dg_flip(gvram,bb);
wait(8000000);
ML();
}while(!endflg);
end();
}
少々わかりにくいかもしれませんが・・・
i番目のルーレットが順に表示され、8まで表示されたらまた1に戻り、
'd'のキーを押すとそこで一時的に処理(i)を止め、
計算で求めた数字=k番目までルーレットをゆっくり進め、
kが表示されたらそこで止まる。
・・・というプログラムにしたいのですが、
この処理では無理なようで・・・
どなたか理解できる方、アドバイスをお願いしますm(__)m