Willさん、ありがとうございます。
DrawTurnGraphを使わなくても変化はありませんでしたが、
フルスクリーンなら改善されました。
一応ソース載せておきます。あれからもいろいろ実装してしまい、かなりわかりにくくなってます。できる限り注釈つけましたが。スペックは上のほうに書いてあります。画像のサイズは74×66。開発環境Borland C++ 5.5.1です。
#include "DxLib.h"
#define g 9.8
//画像読み込みの関数
int yuk[2];
//変数宣言
int ichix,ichiy; int muki=0; int joutai; double y,v0,vy;
int btbf=0;/*zボタンが押したままかの判定*/
int jren=0;/*ボタンを押したままジャンプが連続にならないように*/
int idofl[4]={0};/*フラグが1の時移動できない。0:上1:右2:下3:左*/
int map[8][10]={
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,1},
{0,0,0,0,0,0,0,0,0,1},
{1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1},
{0,0,0,0,0,0,0,0,0,0}};
void picload(void){//画像読み込み
yuk[0]=LoadGraph("chara\\gazou.bmp");//左向き
}
void picdraw(void){//画面描写
int x,y;
ClsDrawScreen();
for(x=0;x<10;x++)
for(y=0;y<8;y++)
if(map[y][x]==1) DrawBox(x*64,y*64-32,x*64+63,y*64+31,GetColor(255,255,255),TRUE);
if(muki==0) DrawGraph(ichix-37,ichiy-33-32,yuk[0],TRUE);
else DrawTurnGraph(ichix-37,ichiy-33-32,yuk[0],TRUE);
ScreenFlip();
}
void modef(int mode){//モードで初期化
switch(mode){
case 1:ichix=320; ichiy=0; y=(double)ichiy; break;
}
}
int keydousa(char key[],int mode){//ボタンによる影響
switch(mode){
case 1:
if(key[KEY_INPUT_RIGHT]==1){
if(idofl[1]==0) ichix+=2;
muki=1;
}
if(key[KEY_INPUT_LEFT]==1){
if(idofl[3]==0) ichix-=2;
muki=0;
}
if(key[KEY_INPUT_Z]==1){
btbf=1;
if(joutai==0 && jren==0){
joutai=2; jren=1; v0=g*3; vy=-v0;
}
}
else{
if(joutai==0) jren=0;
if(joutai==2 && btbf==1){
vy=0; v0=0; joutai=1;
} btbf=0;
}
break;
}
if(key[KEY_INPUT_ESCAPE]==1) return 1;
return 0;
}
void jump(int t1,int t2){//空中にいる間の処理
switch(joutai){
case 1: case 2:
if(vy<90) vy+=g*(t1-t2)/100;
else vy=90;
y+=(vy-v0/2)*(t1-t2)/100;
ichiy=(int)y;
if(vy>=0) joutai=1; break;
default: break;
}
}
void kabehan(void){//壁の判定
if(map[(int)((ichiy-30)/64)][(int)(ichix/64)]==1 ||
map[(int)((ichiy-30)/64)][(int)((ichix-30)/64)]==1 ||
map[(int)((ichiy-30)/64)][(int)((ichix+31)/64)]==1){
ichiy=(int)((ichiy-30)/64+1)*64+32;
vy=0; v0=0;
}
if(map[(int)(ichiy/64)][(int)((ichix+32)/64)]==1 ||
map[(int)((ichiy-31)/64)][(int)((ichix+32)/64)]==1 ||
map[(int)((ichiy+31)/64)][(int)((ichix+32)/64)]==1)
idofl[1]=1;
else idofl[1]=0;
if(map[(int)((ichiy+32)/64)][(int)(ichix/64)]==1 ||
map[(int)((ichiy+32)/64)][(int)((ichix-30)/64)]==1 ||
map[(int)((ichiy+32)/64)][(int)((ichix+31)/64)]==1){
ichiy=(int)((ichiy+32)/64)*64-32;
joutai=0; vy=0; v0=0;
}
else if(joutai !=2) joutai=1;
if(map[(int)(ichiy/64)][(int)((ichix-32)/64)]==1 ||
map[(int)((ichiy-31)/64)][(int)((ichix-32)/64)]==1 ||
map[(int)((ichiy+31)/64)][(int)((ichix-32)/64)]==1)
idofl[3]=1;
else idofl[3]=0;
}
void mein(void){//メインループ
int mode=1; int end=0; int t1,t2;
char key[256];
modef(mode);
while(1){
GetHitKeyStateAll(key);
if(ProcessMessage()==-1) break;
t1=GetNowCount();
end=keydousa(key,mode);
if(mode==1){
jump(t1,t2);
kabehan();
t2=GetNowCount();
}
picdraw();
if(end==1) break;
}
}
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode( TRUE ) ; // ウインドウモードに変更
if( DxLib_Init() == -1 ) return -1; // DXライブラリ初期化処理 エラーが起きたら終了
SetDrawScreen(DX_SCREEN_BACK);
SetTransColor(0,255,0);
picload();
mein();
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}