ルーレット

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
kazu

ルーレット

#1

投稿記事 by kazu » 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

kazu

Re:ルーレット

#2

投稿記事 by kazu » 13年前

すいません。上げさせていただきますm(__)m

どうすればいいかわかる方、もしいたらよろしくお願いしますm(__)m

バグ

Re:ルーレット

#3

投稿記事 by バグ » 13年前

ビットマップを表示するのはコンソールアプリでは無理なのではないですか?
kbhitなんかはコンソール専用の関数だったと思います。

GPGA

Re:ルーレット

#4

投稿記事 by GPGA » 13年前

たしか、専用のライブラリを使用すれば
DOS上でBMP表示も可能だったと思いますけど
そのライブラリについて詳しくないので
回答できません。

「dglib2.h」で検索しても、目ぼしい検索結果がが見当たらなかったので
たぶん、独自のライブラリを使用していると思うのですが
kazuさんはどのようなライブラリを使用しているのですか?

kazu

解答ありがとうございます

#5

投稿記事 by kazu » 13年前

>バグさん
あまりその辺は詳しくないので、答えにくいのですが・・
とりあえず表示はできるようです。

>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

閉鎖

“C言語何でも質問掲示板” へ戻る