敵キャラの表示2
Posted: 2007年7月19日(木) 01:14
すみません。ソースを表示するのがうまくいきませんでした。
#include "DxLib.h"
#include <math.h>
#define PI 3.141593
struct data{
double x;
double y;
double size;
int flag;
int counter;
int hp;
int pattern;
};
struct data enemy[100];
void EnemyCalcDisp();
void EnemyPattern1(int i);
void EnemyPattern2(int i);
void EnemyPattern3(int i);
void EnemyPattern4(int i);
void EnemyControl();
/* グローバル宣言 */
int counter=0;
char Key[256];
int img_enemy1[5];
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
int RefreshTime=0;
// ウインドウモードに変更
ChangeWindowMode( TRUE ) ;
if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}
SetDrawScreen( DX_SCREEN_BACK ) ;
// BMP画像のメモリへの読みこみ
img_enemy1[0] = LoadGraph("Sh/img/mons/mons1_0.png");
img_enemy1[1] = LoadGraph("Sh/img/mons/mons1_1.png");
img_enemy1[2] = LoadGraph("Sh/img/mons/mons1_2.png");
img_enemy1[3] = LoadGraph("Sh/img/mons/mons1_3.png");
img_enemy1[4] = LoadGraph("Sh/img/mons/mons1_4.png");
for(int i=0;i<100;i++)
enemy.flag=0;
while(ProcessMessage() == 0 && GetHitKeyStateAll(Key) == 0)
{
RefreshTime = GetNowCount();
ClearDrawScreen(); //裏画面のデータを全て削除
EnemyControl();
EnemyCalcDisp();
ScreenFlip();
counter++;
if(Key[KEY_INPUT_ESCAPE]==1) break; //Escapeが押されたら終了
while(GetNowCount() - RefreshTime < 17);//1周の処理が17ミリ秒になるまで待つ
}
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
void EnemyCalcDisp(){
int i;
for(i=0;i<100;i++)
if(enemy.flag==0)
break;
switch(counter){
case 50:
enemy.pattern=1; //どういう軌道を描くか
enemy.flag=1; //出現フラグを立てる
enemy.counter=0;//出現して何カウント目か測るカウンター初期化
enemy.size=0.5f;//敵の大きさ
enemy.x=100.0; //xの初期座標
enemy.y=-10.0; //yの初期座標
break;
case 200:
enemy.pattern=2;
enemy.flag=1;
enemy[i].counter=0;
enemy[i].size=0.5f;
enemy[i].x=100.0;
enemy[i].y=-10.0;
break;
case 350:
enemy[i].pattern=3;
enemy[i].flag=1;
enemy[i].counter=0;
enemy[i].size=0.5f;
enemy[i].x=100.0;
enemy[i].y=-10.0;
break;
case 500:
enemy[i].pattern=4;
enemy[i].flag=1;
enemy[i].counter=0;
enemy[i].size=0.5f;
enemy[i].x=100.0;
enemy[i].y=-10.0;
break;
default:
break;
}
int enemy_img[8]={0,1,2,3,4,3,2,1};
for(i=0;i<100;i++)
if(enemy[i].flag==1)
DrawRotaGraph( (int)enemy[i].x , (int)enemy[i].y , enemy[i].size , 0.0f , img_enemy1[0] , TRUE ) ;
if(enemy[i].x<0.0-140/2.0*enemy[i].size || enemy[i].x>420.0+140/2.0*enemy[i].size ||
enemy[i].y<0.0-128/2.0*enemy[i].size || enemy[i].y<0.0-128/2.0*enemy[i].size)
enemy[i].flag=0;
}
void EnemyPattern1(int i){
enemy[i].y+=1.5;
}
void EnemyPattern2(int i){
if(enemy[i].counter<50)
enemy[i].y+=4.0f;
if(enemy[i].counter>50 && enemy[i].counter<100)
enemy[i].y+=0;
if(enemy[i].counter>100)
enemy[i].y-=4.0f;
}
void EnemyPattern3(int i){
enemy[i].x+=sin(PI*enemy[i].counter/40.0f)*5.0f;
enemy[i].y+=1.5f;
}
void EnemyPattern4(int i){
if(enemy[i].counter<100)
enemy[i].y+=2.5f;
if(enemy[i].counter>=100){
enemy[i].x+=sin(PI*(enemy[i].counter-100.0f)/160.0f)*2.5f;
enemy[i].y+=sin(PI*(enemy[i].counter-20.0f )/160.0f)*2.5f;
}
}
void EnemyControl(){
for(int i=0;i<100;i++)
if(enemy[i].flag==1)
if(enemy[i].pattern==1)
EnemyPattern1(i);
if(enemy[i].pattern==2)
EnemyPattern2(i);
if(enemy[i].pattern==3)
EnemyPattern3(i);
if(enemy[i].pattern==4)
EnemyPattern4(i);
}
パタパタと一人降りてきて、二人目は画面上部でちょっとだけ見えています。
#include "DxLib.h"
#include <math.h>
#define PI 3.141593
struct data{
double x;
double y;
double size;
int flag;
int counter;
int hp;
int pattern;
};
struct data enemy[100];
void EnemyCalcDisp();
void EnemyPattern1(int i);
void EnemyPattern2(int i);
void EnemyPattern3(int i);
void EnemyPattern4(int i);
void EnemyControl();
/* グローバル宣言 */
int counter=0;
char Key[256];
int img_enemy1[5];
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
int RefreshTime=0;
// ウインドウモードに変更
ChangeWindowMode( TRUE ) ;
if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}
SetDrawScreen( DX_SCREEN_BACK ) ;
// BMP画像のメモリへの読みこみ
img_enemy1[0] = LoadGraph("Sh/img/mons/mons1_0.png");
img_enemy1[1] = LoadGraph("Sh/img/mons/mons1_1.png");
img_enemy1[2] = LoadGraph("Sh/img/mons/mons1_2.png");
img_enemy1[3] = LoadGraph("Sh/img/mons/mons1_3.png");
img_enemy1[4] = LoadGraph("Sh/img/mons/mons1_4.png");
for(int i=0;i<100;i++)
enemy.flag=0;
while(ProcessMessage() == 0 && GetHitKeyStateAll(Key) == 0)
{
RefreshTime = GetNowCount();
ClearDrawScreen(); //裏画面のデータを全て削除
EnemyControl();
EnemyCalcDisp();
ScreenFlip();
counter++;
if(Key[KEY_INPUT_ESCAPE]==1) break; //Escapeが押されたら終了
while(GetNowCount() - RefreshTime < 17);//1周の処理が17ミリ秒になるまで待つ
}
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
void EnemyCalcDisp(){
int i;
for(i=0;i<100;i++)
if(enemy.flag==0)
break;
switch(counter){
case 50:
enemy.pattern=1; //どういう軌道を描くか
enemy.flag=1; //出現フラグを立てる
enemy.counter=0;//出現して何カウント目か測るカウンター初期化
enemy.size=0.5f;//敵の大きさ
enemy.x=100.0; //xの初期座標
enemy.y=-10.0; //yの初期座標
break;
case 200:
enemy.pattern=2;
enemy.flag=1;
enemy[i].counter=0;
enemy[i].size=0.5f;
enemy[i].x=100.0;
enemy[i].y=-10.0;
break;
case 350:
enemy[i].pattern=3;
enemy[i].flag=1;
enemy[i].counter=0;
enemy[i].size=0.5f;
enemy[i].x=100.0;
enemy[i].y=-10.0;
break;
case 500:
enemy[i].pattern=4;
enemy[i].flag=1;
enemy[i].counter=0;
enemy[i].size=0.5f;
enemy[i].x=100.0;
enemy[i].y=-10.0;
break;
default:
break;
}
int enemy_img[8]={0,1,2,3,4,3,2,1};
for(i=0;i<100;i++)
if(enemy[i].flag==1)
DrawRotaGraph( (int)enemy[i].x , (int)enemy[i].y , enemy[i].size , 0.0f , img_enemy1[0] , TRUE ) ;
if(enemy[i].x<0.0-140/2.0*enemy[i].size || enemy[i].x>420.0+140/2.0*enemy[i].size ||
enemy[i].y<0.0-128/2.0*enemy[i].size || enemy[i].y<0.0-128/2.0*enemy[i].size)
enemy[i].flag=0;
}
void EnemyPattern1(int i){
enemy[i].y+=1.5;
}
void EnemyPattern2(int i){
if(enemy[i].counter<50)
enemy[i].y+=4.0f;
if(enemy[i].counter>50 && enemy[i].counter<100)
enemy[i].y+=0;
if(enemy[i].counter>100)
enemy[i].y-=4.0f;
}
void EnemyPattern3(int i){
enemy[i].x+=sin(PI*enemy[i].counter/40.0f)*5.0f;
enemy[i].y+=1.5f;
}
void EnemyPattern4(int i){
if(enemy[i].counter<100)
enemy[i].y+=2.5f;
if(enemy[i].counter>=100){
enemy[i].x+=sin(PI*(enemy[i].counter-100.0f)/160.0f)*2.5f;
enemy[i].y+=sin(PI*(enemy[i].counter-20.0f )/160.0f)*2.5f;
}
}
void EnemyControl(){
for(int i=0;i<100;i++)
if(enemy[i].flag==1)
if(enemy[i].pattern==1)
EnemyPattern1(i);
if(enemy[i].pattern==2)
EnemyPattern2(i);
if(enemy[i].pattern==3)
EnemyPattern3(i);
if(enemy[i].pattern==4)
EnemyPattern4(i);
}
パタパタと一人降りてきて、二人目は画面上部でちょっとだけ見えています。