ルーレット
Posted: 2007年1月21日(日) 02:13
こんにちは。
わからないことがあるので、質問させていただきます。
今、授業の自主制作でルーレットを作っています。
イメージとしては人生ゲーム等のボードゲームにあるようなもので、
キーを押すとkazu1.bmp~kazu8.bmpまでの画(それぞれに一つずつルーレット+数を描いている)
が順に表示され、kazu8.bmpまで表示されたらまたkazu1に戻り、
キーを押すと乱数で求めた数字の分ルーレットが進み、そこで画が止まる・・というものです。
#include<stdio.h>
#include<conio.h>
#include<time.h>
#include"dglib2.h"
#include<stdlib.h>
char far *gvram=(char far *)0xA0000000;
char far *bb;
char far *pbmp[13];
int endflg=0;
void init(void);
void en(void);
void end(void);
main(){
long wc;
init();
do{
en();
dg_flip(gvram,bb);
for(wc=0;wc<3000000;wc++){}
}while(endflg==0);
end();
}
void init(void){
srand(time(0));
dg_setvideomode(0x13);
pbmp[0]=dg_loadbmp("kazu1.bmp");
pbmp[1]=dg_loadbmp("kazu2.bmp");
pbmp[2]=dg_loadbmp("kazu3.bmp");
pbmp[3]=dg_loadbmp("kazu4.bmp");
pbmp[4]=dg_loadbmp("kazu5.bmp");
pbmp[5]=dg_loadbmp("kazu6.bmp");
pbmp[6]=dg_loadbmp("kazu7.bmp");
pbmp[7]=dg_loadbmp("kazu8.bmp");
pbmp[8]=dg_loadbmp("kazu1.bmp");
pbmp[9]=dg_loadbmp("kazu2.bmp");
pbmp[10]=dg_loadbmp("kazu3.bmp");
pbmp[11]=dg_loadbmp("kazu4.bmp");
pbmp[12]=dg_loadbmp("kazu5.bmp");
bb=dg_createBB();
return;
}
void en(void){
int key,i=0,r,k,wflg=0;
if(kbhit()!=0){
key=getch();
if(key==0){key=getch();}
do{
dg_drawbmp2(bb,0,0,100,100,pbmp,0,0);
if(key=='d'){
wflg=1;
r=rand()%5;
k=r+i;
}
i++;
if(i<8){i=0;}
}while(wflg==0);
if(key=='e'){
endflg=1;
}
}
dg_drawbmp2(bb,0,0,100,100,pbmp[k],0,0);
return;
}
void end(void){
getch();
dg_deletebmp(*pbmp);
dg_setvideomode(0x3);
dg_deleteBB(bb);
}
現状ここまでやってみたのですが、
これだと数字が回るどころか、表示すらされずに処理が止まらなくなってしまいます(^^;)
どうすればいいのか、これ以上の処理がどうしても思いつかなくて・・・
どなたかよろしくお願いしますm(_ _)m
わからないことがあるので、質問させていただきます。
今、授業の自主制作でルーレットを作っています。
イメージとしては人生ゲーム等のボードゲームにあるようなもので、
キーを押すとkazu1.bmp~kazu8.bmpまでの画(それぞれに一つずつルーレット+数を描いている)
が順に表示され、kazu8.bmpまで表示されたらまたkazu1に戻り、
キーを押すと乱数で求めた数字の分ルーレットが進み、そこで画が止まる・・というものです。
#include<stdio.h>
#include<conio.h>
#include<time.h>
#include"dglib2.h"
#include<stdlib.h>
char far *gvram=(char far *)0xA0000000;
char far *bb;
char far *pbmp[13];
int endflg=0;
void init(void);
void en(void);
void end(void);
main(){
long wc;
init();
do{
en();
dg_flip(gvram,bb);
for(wc=0;wc<3000000;wc++){}
}while(endflg==0);
end();
}
void init(void){
srand(time(0));
dg_setvideomode(0x13);
pbmp[0]=dg_loadbmp("kazu1.bmp");
pbmp[1]=dg_loadbmp("kazu2.bmp");
pbmp[2]=dg_loadbmp("kazu3.bmp");
pbmp[3]=dg_loadbmp("kazu4.bmp");
pbmp[4]=dg_loadbmp("kazu5.bmp");
pbmp[5]=dg_loadbmp("kazu6.bmp");
pbmp[6]=dg_loadbmp("kazu7.bmp");
pbmp[7]=dg_loadbmp("kazu8.bmp");
pbmp[8]=dg_loadbmp("kazu1.bmp");
pbmp[9]=dg_loadbmp("kazu2.bmp");
pbmp[10]=dg_loadbmp("kazu3.bmp");
pbmp[11]=dg_loadbmp("kazu4.bmp");
pbmp[12]=dg_loadbmp("kazu5.bmp");
bb=dg_createBB();
return;
}
void en(void){
int key,i=0,r,k,wflg=0;
if(kbhit()!=0){
key=getch();
if(key==0){key=getch();}
do{
dg_drawbmp2(bb,0,0,100,100,pbmp,0,0);
if(key=='d'){
wflg=1;
r=rand()%5;
k=r+i;
}
i++;
if(i<8){i=0;}
}while(wflg==0);
if(key=='e'){
endflg=1;
}
}
dg_drawbmp2(bb,0,0,100,100,pbmp[k],0,0);
return;
}
void end(void){
getch();
dg_deletebmp(*pbmp);
dg_setvideomode(0x3);
dg_deleteBB(bb);
}
現状ここまでやってみたのですが、
これだと数字が回るどころか、表示すらされずに処理が止まらなくなってしまいます(^^;)
どうすればいいのか、これ以上の処理がどうしても思いつかなくて・・・
どなたかよろしくお願いしますm(_ _)m