こんにちは。
わからないことがあるので、質問させていただきます。
今、授業の自主制作でルーレットを作っています。
イメージとしては人生ゲーム等のボードゲームにあるようなもので、
キーを押すと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
ルーレット
解答ありがとうございます
>バグさん
あまりその辺は詳しくないので、答えにくいのですが・・
とりあえず表示はできるようです。
>GPGAさん
自分でもよくわかりませんが、学校から最初に貰ったデータなので
恐らく独自のライブラリなのでしょう。
自分はダブルバッファリングを使用する時に使っています。
それと、あれから色々試行錯誤した結果、
大分それらしいものになってきました。
というより、あと少しいじれば形になりそうな感じです。すいません(^^;)
一応載せときます。
#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 ki(void);
void end(void);
main(){
long wc;
init();
do{
ki();
dg_flip(gvram,bb);
for(wc=0;wc<8000000;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 ki(void){
int key,r,k;
static int i=0;
if(kbhit()!=0){
key=getch();
if(key==0){key=getch();}
if(key=='e'){endflg=1;}
}
if(i>7){i=0;}
dg_drawbmp2(bb,0,0,100,100,pbmp,0,0);
i++;
if(key=='d'){
r=rand()%5;
k=r+i;
dg_drawbmp2(bb,0,0,100,100,pbmp[k],0,0);
getch();
}
printf("\x1b[1;30Hi:%d",i);
return;
}
void end(void){
getch();
dg_deletebmp(pbmp[0]);
dg_setvideomode(0x3);
dg_deleteBB(bb);
}
後は自力でなんとかなりそうです。
バグさん、GPGAさん、本当にありがとうございましたm(__)m
あまりその辺は詳しくないので、答えにくいのですが・・
とりあえず表示はできるようです。
>GPGAさん
自分でもよくわかりませんが、学校から最初に貰ったデータなので
恐らく独自のライブラリなのでしょう。
自分はダブルバッファリングを使用する時に使っています。
それと、あれから色々試行錯誤した結果、
大分それらしいものになってきました。
というより、あと少しいじれば形になりそうな感じです。すいません(^^;)
一応載せときます。
#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 ki(void);
void end(void);
main(){
long wc;
init();
do{
ki();
dg_flip(gvram,bb);
for(wc=0;wc<8000000;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 ki(void){
int key,r,k;
static int i=0;
if(kbhit()!=0){
key=getch();
if(key==0){key=getch();}
if(key=='e'){endflg=1;}
}
if(i>7){i=0;}
dg_drawbmp2(bb,0,0,100,100,pbmp,0,0);
i++;
if(key=='d'){
r=rand()%5;
k=r+i;
dg_drawbmp2(bb,0,0,100,100,pbmp[k],0,0);
getch();
}
printf("\x1b[1;30Hi:%d",i);
return;
}
void end(void){
getch();
dg_deletebmp(pbmp[0]);
dg_setvideomode(0x3);
dg_deleteBB(bb);
}
後は自力でなんとかなりそうです。
バグさん、GPGAさん、本当にありがとうございましたm(__)m