改変前のソース
#include "DxLib.h"
#include <math.h>
#define g 9.8067//定e数?:重d力I加A速Ê度x
#define e 0.85//反?発-係W数?
#define y_max 2.000//定e数?
#define max_x 640//玉EのI移U動R範I囲I:F右E端[
#define min_x 0//玉EのI移U動R範I囲I:F左÷端[
#define max_y 480//玉EのI移U動R範I囲I:F床‹(iた?だ?しƒÊ計v算Z途r中?でAはI天V井a)j
#define min_y 0//玉EのI移U動R範I囲I:F天V井a(iた?だ?しƒÊ計v算Z途r中?でAはI床‹)j
//#define maxy 400.000//玉EのI軌O道1のI最A高?点_
typedef struct{
int x,y,image;
double xsp,at,maxy;//x方u向uのIスXピsー[ドh,当?た?りe判â定eのI半?径a,現â在YのI軌O道1のI最A高?点_
}TamaPara_t;
TamaPara_t TP;
int i;//forル?ー[プv用p変I数?
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode( TRUE ) ; // ウEイCン?ドhウEモ?ー[ドhにE変I更X
if( DxLib_Init() == -1 ) return -1; //DXラ?イCブuラ?リ?初?期u化â エLラ~ー‹がa起Nきáた?らc終I了1
int x=640,y=0,time1,time2,flag=0,q=0;
double t, v0, sy, ssy, zmaxy, m=1.000;//経o過s時?間O, 初?速Ê度x, 発-射E地n点_のIy座A標W, 床‹をd跳ƒÊねEた?時?のI発-射E地n点_のIy座A標W, 玉EのI飛oびN上aがaるe高?さ3, 玉EのI向uきá上a下o判â定e
char Key[256];
SetDrawScreen( DX_SCREEN_BACK ) ;//描`画a先aをd裏?画a面EにE設Y定e
TP.image=LoadGraph("img/tama.png");
TP.at=5;//玉EのI当?た?りe判â定eのI設Y定e
TP.xsp=-4.000;//x方u向uのIスXピsー[ドh
TP.maxy=600.00;//現â在YのI軌O道1のI最A高?点_のI初?期u化â
while(1){
ClearDrawScreen();//裏?画a面EのIデfー[タ^をd全SてA削i除?
GetHitKeyStateAll( Key ) ; // すEべ~てAのIキLー[のI状o態Oをd得?るe
if( ProcessMessage() == -1 ) break ; //異U常iがaおNきáた?らc終I了1
if( flag==0 || flag==2 ){ //床‹のI当?た?りe判â定e1
time1 = GetNowCount(); //time1にEエGン?タ^ー[がa押?さ3れeた?時?のI時?間Oをd格i納[
sy=y;
if(flag==0){
ssy=y;
}
zmaxy=TP.maxy-ssy;
flag=1; //飛oびN上aがaりeフtラ?グOをd立˜てAるe。B
}
else if(flag==1){
time2 = GetNowCount() ; // 現â在Y経o過s時?間Oをd得?るe
t = (double)(time2 - time1) / 1000.000; // ミ~リ?秒bをd秒bにE変I換EしƒÊてA、AエGン?タ^ー[がa押?さ3れeてAかcらcのI経o過s時?間Oをd計v算Z
/*if(m==1.000){*/
v0 = sqrt ( 2.000 * g * y_max);
/*}
else*/ if(m==-1.000){
v0 = v0-g*t;
}
for(i=0;i<q;i++){
v0 *=e;
}
y = sy+(m*v0 * t - 0.500 * g * t * t ) * zmaxy / y_max;//yのI計v算Z
x=(x+TP.xsp);//xのI計v算Z
if(y<(min_y+TP.at)){//床‹のI当?た?りe判â定e2
y=min_y+TP.at;
m=1.000;
q+=1;
flag=0;// 画a面E外OにE来?るeとA、A飛oびN上aがaりeフtラ?グOをd戻sすE
}
else if(y>(max_y-TP.at)){//天V井aのI当?た?りe判â定e
y=max_y-TP.at;
m=-1.000;
flag=2;
}
if(x<(min_x+TP.at)){//左÷端[のI当?た?りe判â定e&処?理?
x=min_x+TP.at+1;
TP.xsp*=(-1);
}
else if(x>(max_x-TP.at)){//右E端[のI当?た?りe判â定e&処?理?
x=max_x-1-TP.at;
TP.xsp*=(-1);
}
TP.y=(int)(480-y);//玉EのIy座A標WのI更X新V
TP.x=(int)(x);//玉EのIx座A標WのI更X新V
}
DrawRotaGraph( TP.x , TP.y ,1.0,0.0, TP.image , TRUE );//画a像?をd描`画a
DrawFormatString( 0, 0, GetColor(255,255,255), "%d",TP.y); // x,0 のI位E置uにE白?でA ?! をd描`画a
DrawFormatString( 0, 20, GetColor(255,255,255), "%d",y); // x,0 のI位E置uにE白?でA ?! をd描`画a
DrawFormatString( 0, 40, GetColor(255,255,255), "%d",flag); // x,0 のI位E置uにE白?でA ?! をd描`画a
DrawFormatString( 0, 60, GetColor(255,255,255), "%d",q); // x,0 のI位E置uにE白?でA ?! をd描`画a
if( Key[ KEY_INPUT_ESCAPE ] == 1 ) break; //Escボタ^ン?がa押?さ3れeた?らcブuレ?イCクN
ScreenFlip() ; //裏?画a面Eデfー[タ^をd表\uinput2画a面EへO反?映f
}
DxLib_End() ; // DcXwラ?イCブuラ?リ?使g用pのI終I了1処?理?
return 0 ; // ソ\uinput2フtトgのI終I了1
}
_
#include "DxLib.h"
#include <math.h>
#define g 9.8067//定e数?:重d力I加A速Ê度x
#define e 0.85//反?発-係W数?
#define y_max 2.000//定e数?
#define max_x 640//玉EのI移U動R範I囲I:F右E端[
#define min_x 0//玉EのI移U動R範I囲I:F左÷端[
#define max_y 480//玉EのI移U動R範I囲I:F床‹(iた?だ?しƒÊ計v算Z途r中?でAはI天V井a)j
#define min_y 0//玉EのI移U動R範I囲I:F天V井a(iた?だ?しƒÊ計v算Z途r中?でAはI床‹)j
//#define maxy 400.000//玉EのI軌O道1のI最A高?点_
int i;//forル?ー[プv用p変I数?(使g用p関O数?:F全SてA)
int x=640,y=0,flag=0,q=0;//(使g用p関O数?:FTamaRifAndMove())
double m=1.000;//玉EのI向uきá上a下o判â定e(使g用p関O数?:FTamaRifAndMove())
typedef struct{
int x,y,image;
double xsp,at,maxy;//x方u向uのIスXピsー[ドh,当?た?りe判â定eのI半?径a,現â在YのI軌O道1のI最A高?点_
}TamaPara_t;
TamaPara_t TP;
void TamaRifAndMove(){
int time1,time2;
double t, v0, sy, ssy, zmaxy;//経o過s時?間O, 初?速Ê度x, 発-射E地n点_のIy座A標W, 床‹をd跳ƒÊねEた?時?のI発-射E地n点_のIy座A標W, 玉EのI飛oびN上aがaるe高?さ3
if( flag==0 || flag==2 ){ //床‹のI当?た?りe判â定e1
time1 = GetNowCount(); //time1にEエGン?タ^ー[がa押?さ3れeた?時?のI時?間Oをd格i納[
sy=y;
if(flag==0){
ssy=y;
}
zmaxy=TP.maxy-ssy;
flag=1; //飛oびN上aがaりeフtラ?グOをd立˜てAるe。B
}
else if(flag==1){
time2 = GetNowCount() ; // 現â在Y経o過s時?間Oをd得?るe
t = (double)(time2 - time1) / 1000.000; // ミ~リ?秒bをd秒bにE変I換EしƒÊてA、AエGン?タ^ー[がa押?さ3れeてAかcらcのI経o過s時?間Oをd計v算Z
v0 = sqrt ( 2.000 * g * y_max);
if(m==-1.000){
v0 = v0-g*t;
}
for(i=0;i<q;i++){
v0 *=e;
}
y = sy+(m*v0 * t - 0.500 * g * t * t ) * zmaxy / y_max;//yのI計v算Z
x=(x+TP.xsp);//xのI計v算Z
if(y<(min_y+TP.at)){//床‹のI当?た?りe判â定e2
y=min_y+TP.at;
m=1.000;
q+=1;
flag=0;// 画a面E外OにE来?るeとA、A飛oびN上aがaりeフtラ?グOをd戻sすE
}
else if(y>(max_y-TP.at)){//天V井aのI当?た?りe判â定e
y=max_y-TP.at;
m=-1.000;
flag=2;
}
if(x<(min_x+TP.at)){//左÷端[のI当?た?りe判â定e&処?理?
x=min_x+TP.at+1;
TP.xsp*=(-1);
}
else if(x>(max_x-TP.at)){//右E端[のI当?た?りe判â定e&処?理?
x=max_x-1-TP.at;
TP.xsp*=(-1);
}
TP.y=(int)(480-y);//玉EのIy座A標WのI更X新V
TP.x=(int)(x);//玉EのIx座A標WのI更X新V
}
}
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode( TRUE ) ; // ウEイCン?ドhウEモ?ー[ドhにE変I更X
if( DxLib_Init() == -1 ) return -1; //DXラ?イCブuラ?リ?初?期u化â エLラ~ー‹がa起Nきáた?らc終I了1
char Key[256];
SetDrawScreen( DX_SCREEN_BACK ) ;//描`画a先aをd裏?画a面EにE設Y定e
TP.image=LoadGraph("img/tama.png");
TP.at=5;//玉EのI当?た?りe判â定eのI設Y定e
TP.xsp=-4.000;//x方u向uのIスXピsー[ドh
TP.maxy=600.00;//現â在YのI軌O道1のI最A高?点_のI初?期u化â
while(1){
ClearDrawScreen();//裏?画a面EのIデfー[タ^をd全SてA削i除?
GetHitKeyStateAll( Key ) ; // すEべ~てAのIキLー[のI状o態Oをd得?るe
if( ProcessMessage() == -1 ) break ; //異U常iがaおNきáた?らc終I了1
//こ