複数の画像処理
Posted: 2011年1月16日(日) 04:21
すみません。
またお邪魔します。
画像を一つのライン上に流すことはできました。
次に↑を複数のライン上に流そうとして自己流(一部)にプログラムを組んでみました
すると画像は流れたのですが
途中で画像が消えてしまったり
テキストファイルから読み込んでいない部分が
流れ、どんどんスピードが落ちてしまいます
友達とも考え手直しをしたのですがうまくいきません・・・
何が原因なのかまったくわからない状態になってしまいました
もしかするとプログラムの組み方が悪いのかも知れないのですが
アドバイスを頂けませんでしょうか?
どうかよろしくお願いします
またお邪魔します。
画像を一つのライン上に流すことはできました。
次に↑を複数のライン上に流そうとして自己流(一部)にプログラムを組んでみました
すると画像は流れたのですが
途中で画像が消えてしまったり
テキストファイルから読み込んでいない部分が
流れ、どんどんスピードが落ちてしまいます
友達とも考え手直しをしたのですがうまくいきません・・・
何が原因なのかまったくわからない状態になってしまいました
もしかするとプログラムの組み方が悪いのかも知れないのですが
アドバイスを頂けませんでしょうか?
どうかよろしくお願いします
#include "DxLib.h"
int Key[256];
int GetHitKeyStateAll_2(int GetHitKeyStateAll_InputKey[256]){
char GetHitKeyStateAll_Key[256];
GetHitKeyStateAll( GetHitKeyStateAll_Key );
for(int i=0;i<256;i++){
if(GetHitKeyStateAll_Key[i]==1) GetHitKeyStateAll_InputKey[i]++;
else GetHitKeyStateAll_InputKey[i]=0;
}
return 0;
}
int CheckStateKey(unsigned char Handle){
return Key[Handle];
}
//----------------------------------------------------
int haikei[10];//色のハンドル------------------------------------------------
void gazou1(){//これは背景画像ーーーーーーーーーーーーーーーーーーーーーーーー
haikei[0]=LoadGraph("kop3.png");
haikei[1]=LoadGraph("ue1.png");
haikei[2]=LoadGraph("migi1.png");
haikei[3]=LoadGraph("hidari1.png");
haikei[4]=LoadGraph("sita1.png");
}
int tama[10];//たまの画像----------------------------------------------------
void gazou2(){
tama[0]=LoadGraph("dan.png");
}
//--------------------------------------------------------------
int color[10];//これは色の設定-----------------------------------------------
void load(){
color[0] = GetColor(255,255,255);//白
color[1] = GetColor( 0, 0, 0);//黒
color[2] = GetColor(255, 0, 0);//赤
color[3] = GetColor( 0,255, 0);//緑
color[4] = GetColor( 0, 0,255);//青
color[5] = GetColor(255,255, 0);//黄色
color[6] = GetColor( 0,255,255);//青緑
color[7] = GetColor(255, 0,255);//紫
}//------------------------------------
//--------------------------------------------------------------
//ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
#define HIT_UX 90;
#define HIT_UY 73;
#define HIT_MX 240;
#define HIT_MY 73;
#define HIT_HX 395;
#define HIT_HY 73;
#define HIT_SX 550;
#define HIT_SY 73;
//ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー//辺り判定
typedef struct{
int flag;
int knd;
}humen_t;//譜面の構造体
#define HUMEN_MAX 1000
humen_t humen[HUMEN_MAX];
void load_humen(){
int i=0,cnt=0;
int c;
FILE *fp;
fp=fopen("ue.txt","r");
if(fp==NULL)
return;
while((c=fgetc(fp))!=EOF){
if(c==' '||c=='\n')continue;
if(c!='0'){
humen[i].flag=1;
humen[i].knd=c-'0';
}
i++;
if(i>=HUMEN_MAX)break;//オーバーフロー防止
}
fclose(fp);
}
//テキストから譜面(0,1,2,3,4)を読み込む
typedef struct{
int flag1;
int flag2;
int flag3;
int flag4;
int x,y;
}bullet_t;//たまの構造体
#define BULLET_MAX 1000
bullet_t bullet[BULLET_MAX];
int flame;
void huru_bullet(){
int i,j;
//for(i=0;i<30;i++){
i=flame++;
if(i>=HUMEN_MAX)return;
if(humen[i].flag==1){
if(humen[i].knd==1){ //もしhumenのkndが1に等しい時↓
for(j=0;j<BULLET_MAX;j++) {
if(bullet[j].flag1==0) {
bullet[j].flag1=1;
bullet[j].x=HIT_UX;
bullet[j].y=480;
break;}}}
if(humen[i].knd==2){
for(j=0;j<BULLET_MAX;j++){
if(bullet[j].flag2==0){
bullet[j].flag2=1;
bullet[j].x=HIT_MX;
bullet[j].y=480;
break;}}}
if(humen[i].knd==3){
for(j=0;j<BULLET_MAX;j++){
if(bullet[j].flag3==0){
bullet[j].flag3=1;
bullet[j].x=HIT_HX;
bullet[j].y=480;
break;}}}
if(humen[i].knd==4){
for(j=0;j<BULLET_MAX;j++){
if(bullet[j].flag4==0){
bullet[j].flag4=1;
bullet[j].x=HIT_SX;
bullet[j].y=480;
break;}}} }
}
//譜面のフラグとkndが1の時・・・
int tama1_bullet(){
int i;
for(i=0;i<BULLET_MAX;i++){
if(bullet[i].flag1==1){
bullet[i].y-=1; //座標を8減らす
DrawGraph( bullet[i].x , bullet[i].y , tama[0] ,TRUE);
if(bullet[i].y < -32){ //もし画面外まで来たら
bullet[i].y=480; //初期値に戻し、
bullet[i].flag1=0; //発射フラグを戻す
}
}
}
return 0;}
int tama2_bullet(){
int i;
for(i=0;i<BULLET_MAX;i++){
if(bullet[i].flag2==1){
bullet[i].y-=1; //座標を8減らす
DrawGraph( bullet[i].x , bullet[i].y , tama[0] ,TRUE);
if(bullet[i].y < -32){ //もし画面外まで来たら
bullet[i].y=480; //初期値に戻し、
bullet[i].flag2=0; //発射フラグを戻す
}
}
}
return 0;}
int tama3_bullet(){
int i;
for(i=0;i<BULLET_MAX;i++){
if(bullet[i].flag3==1){
bullet[i].y-=1; //座標を8減らす
DrawGraph( bullet[i].x , bullet[i].y , tama[0] ,TRUE);
if(bullet[i].y < -32){ //もし画面外まで来たら
bullet[i].y=480; //初期値に戻し、
bullet[i].flag3=0; //発射フラグを戻す
}
}
}
return 0;}
int tama4_bullet(){
int i;
for(i=0;i<BULLET_MAX;i++){
if(bullet[i].flag4==1){
bullet[i].y-=1; //座標を8減らす
DrawGraph( bullet[i].x , bullet[i].y , tama[0] ,TRUE);
if(bullet[i].y < -32){ //もし画面外まで来たら
bullet[i].y=480; //初期値に戻し、
bullet[i].flag4=0; //発射フラグを戻す
}
}
}
return 0;}
void bullet_main(){
huru_bullet();
tama1_bullet();
tama2_bullet();
tama3_bullet();
tama4_bullet();
}
void ini(){
memset(bullet,0,sizeof(bullet_t)*BULLET_MAX);//弾情報初期化
memset(humen,0,sizeof(humen_t)*HUMEN_MAX);//結果表示情報初期化
}
void matome(){
gazou1();
gazou2();
DrawGraph(0,0,haikei[0],TRUE);
load();
load_humen();
flame=0;
DrawBox( 0, 70 , 645 , 75 , color[0] ,TRUE);
DrawBox( 85 , 0 , 95 , 480 , color[2],TRUE );
DrawBox( 235 , 0 , 245 , 480 , color[3],TRUE );
DrawBox( 390 , 0 , 400 , 480 , color[4],TRUE );
DrawBox( 545 , 0 , 555 , 480 , color[5],TRUE );
}
void graph(){
DrawGraph(0,0,haikei[0],TRUE);
DrawGraph(90,0,haikei[1],TRUE);
DrawGraph(240,0,haikei[2],TRUE);
DrawGraph(395,0,haikei[3],TRUE);
DrawGraph(550,0,haikei[4],TRUE);
DrawBox( 0, 70 , 645 , 75 , color[0] ,TRUE);
DrawBox( 85 , 0 , 95 , 480 , color[2],TRUE );
DrawBox( 235 , 0 , 245 , 480 , color[3],TRUE );
DrawBox( 390 , 0 , 400 , 480 , color[4],TRUE );
DrawBox( 545 , 0 , 555 , 480 , color[5],TRUE );
}
//ループで必ず行う3大処理
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode(TRUE);//ウィンドウモード
if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化
ini();
matome();
while(ProcessMessage()==0){
//↑メッセージ処理 ↑画面をクリア ↑入力状態を保存 ↑ESCが押されていない
graph();
bullet_main();
ScreenFlip();
}
DxLib_End();
return 0;
}