失礼します。わからない事があるので質問させていただきます。
以前にも同じような内容で投稿したのですが、あれから色々といじったので
新スレで投稿する事にしました。すいません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
ルーレットについて
Re:ルーレットについて
とりあえず、環境が分からないので、私のところの環境で動く簡単な物を作ってみました。ビットマップ表示はできていませんので、DrawRoulette関数の中身を書き換えてみて下さい。
参考になればよいのですが…(^_^;)
ちなみに開発環境はBCCです。
参考になればよいのですが…(^_^;)
ちなみに開発環境はBCCです。
#include <stdio.h> #include <time.h> #include <conio.h> #include <windows.h> void DrawRoulette( int ); int StopRoulette( int ); int main() { // 前準備 srand( ( unsigned )time( NULL ) ); // 変数準備 int i , nCount , nKey , nRnd; nCount = rand() % 9; while( 1 ) { while( !kbhit() ) { nCount = ( nCount + 1 ) % 9; DrawRoulette( nCount ); Sleep( 50 ); } nKey = getch(); if( nKey == 'd' || nKey == 'D' ) { nCount = StopRoulette( nCount ); break; } } printf( "\nルーレットの数値は%dです\n" , nCount ); return( 0 ); } // ルーレットの数字を表示 void DrawRoulette( int nCount ) { switch( nCount ) { case 0: printf( "0\r" ); break; case 1: printf( "1\r" ); break; case 2: printf( "2\r" ); break; case 3: printf( "3\r" ); break; case 4: printf( "4\r" ); break; case 5: printf( "5\r" ); break; case 6: printf( "6\r" ); break; case 7: printf( "7\r" ); break; case 8: printf( "8\r" ); break; default: break; } } /* ルーレットを止める処理 */ int StopRoulette( int nCount ) { int i , nOffset; /* ボタンを押した後のルーレットが動く回数を決める。5~ 25回 */ nOffset = rand() % 21 + 5; for( i = 0 ; i < nOffset ; i++ ) { /* Waitを段々と大きくしていって、ルーレットの動きを徐々にゆっくりにする */ Sleep( 50 + i * 50 ); nCount = ( nCount + 1 ) % 9; DrawRoulette( nCount ); } /* 最終的なルーレットの数値を返す */ return( nCount ); }
Re:ルーレットについて
>バグさん
解答ありがとうございます。
プログラムをよく読むと、main関数内のiとnRndは
使用されていませんね。実際必要ないようですが・・
こちら側で参考にして、色々といじってみようと思います。
まだわからない事があるかもしれませんが、
その時はまたよろしくお願いしますm(__)m
解答ありがとうございます。
プログラムをよく読むと、main関数内のiとnRndは
使用されていませんね。実際必要ないようですが・・
こちら側で参考にして、色々といじってみようと思います。
まだわからない事があるかもしれませんが、
その時はまたよろしくお願いしますm(__)m
Re:ルーレットについて
>>プログラムをよく読むと、main関数内のiとnRndは使用されていませんね。
うわ、本当ですね(;^_^A
消し忘れみたいです。消しておいてください。失礼しましたm(__)m
うわ、本当ですね(;^_^A
消し忘れみたいです。消しておいてください。失礼しましたm(__)m
Re:ルーレットについて
>バグさん
いえいえ。気にしないでください(^^)
おかげでルーレットも完成させることができました。
わかりやすいプログラム&助言ありがとうございましたm(__)m
いえいえ。気にしないでください(^^)
おかげでルーレットも完成させることができました。
わかりやすいプログラム&助言ありがとうございましたm(__)m