作成手順として背景の表示、移動、加速、減速、ジャンプ、とやってきたのですが、マリオみたく長くボタンを押すと大きくジャンプするみたいなことができません。
色々なサイトのコードを参考にさせてもらっていて頑張ってみたのですが、そのジャンプの処理は実装することができませんでした。
C言語は少し前から授業で触った程度です。Dxライブラリも同時期に使い始めました。
どのようにしたら私が望んでいるようにできるのか教えていただけると助かります。
- コード[C++]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157#include "DxLib.h"
int count=0;
char Key[256];
void wait_fanc();
void fps();
void GetKeyInput(int *KeyBuf);
struct Chara {
double x;
double y;
int g;
double spdX;
double spdY;
};
struct Chara mario;
int WINAPI WinMain(HINSTANCE hI, HINSTANCE hP, LPSTR lpC, int nC)
{
ChangeWindowMode(TRUE);
if(DxLib_Init() == -1) return(-1);
SetDrawScreen(DX_SCREEN_BACK);
mario.x = (double)0;
mario.y = (double)32;//480 - 32 * 2;
mario.g = LoadGraph("media\\test001.png");
mario.spdX = (double)0;
mario.spdY = (double)0;
while(ProcessMessage() == 0&& CheckHitKey(KEY_INPUT_ESCAPE) == 0) {
ClsDrawScreen();
int Bg_flag = 0;
int count_flag = 0;
int grav = 10;
int Buf[256];
GetKeyInput(Buf);
if(Bg_flag == 0){
DrawBox(0,0,640,480,GetColor(105,122,243),TRUE); //背景を水色に1 - 1
Bg_flag = 1;
}
fps();
count++;
//-------------------------------------------------------------------------
if(CheckHitKey(KEY_INPUT_LEFT) == 1){
if(CheckHitKey(KEY_INPUT_Z) == TRUE) {
mario.spdX -= 1.0;
}else {
mario.spdX -= 0.3;
}
mario.x += mario.spdX;
}
if(((CheckHitKey(KEY_INPUT_RIGHT)) == false) &&(CheckHitKey(KEY_INPUT_LEFT) == false) && (mario.spdX > 0)){
mario.spdX -= 0.3;
mario.x += mario.spdX;
count_flag += 1;
}
if(CheckHitKey(KEY_INPUT_RIGHT) == 1){
if(CheckHitKey(KEY_INPUT_Z) == TRUE) {
mario.spdX += 1.0;
}else {
mario.spdX += 0.3;
}
mario.x += mario.spdX;
}
if((CheckHitKey(KEY_INPUT_LEFT) == false) && ((CheckHitKey(KEY_INPUT_RIGHT)) == false) && (mario.spdX < 0)){
mario.spdX += 0.3;
mario.x += mario.spdX;
count_flag += 1;
}
mario.y -= mario.spdY;
mario.spdY -= 1;
if(mario.x < 0) mario.x = 0;
//if(mario.x > 640 - 32) mario.x = 640 - 32;
if((CheckHitKey(KEY_INPUT_Z))) {
if(mario.spdX > 8.0) mario.spdX = 8.0;
if(mario.spdX < -8.0) mario.spdX = -8.0;
}else {
if(mario.spdX > 5.0) mario.spdX = 5.0;
if(mario.spdX < -5.0) mario.spdX = -5.0;
}
if(count_flag > 1) {count_flag = 0; mario.spdX = 0;}
if(mario.y > 480 - 32) {mario.y = 480 - 32; mario.spdY = 0;}
if(mario.spdY > 30.0) mario.spdY = 30.0;
if(((CheckHitKey(KEY_INPUT_C)) == TRUE && mario.y == 480 -32) && (Buf[KEY_INPUT_C] > 0 && Buf[KEY_INPUT_C] < 10)) {
mario.spdY = 15;
}else if((CheckHitKey(KEY_INPUT_C)) == TRUE && mario.y == 480 -32 && (Buf[KEY_INPUT_C] >= 10)) {
mario.spdY = 20;
}
DrawGraph((int)mario.x, (int)mario.y, mario.g, TRUE);
//-------------------------------------------------------------------------
ScreenFlip();
wait_fanc();
}
DxLib_End();
return(0);
}
void wait_fanc(){
int term;
static int t=0;
term = GetNowCount()-t;
if(16-term>0)
Sleep(16-term);
t=GetNowCount();
return;
}
void fps(){
int i;
static int t=0,ave=0,f[60];
f[count%60]=GetNowCount()-t;
t=GetNowCount();
if(count%60==59){
ave=0;
for(i=0;i<60;i++)
ave+=f[i];
ave/=60;
}
if(ave!=0){
DrawFormatString(0, 0,GetColor(0,0,0),"%.1fFPS",1000.0/(double)ave);
DrawFormatString(0,20,GetColor(0,0,0),"%dms" ,ave);
}
return;
}
void GetKeyInput( int *KeyBuf ){
char damy[256];
GetHitKeyStateAll( damy ) ;
for( int i=0 ; i<256 ; i++ ){
if( damy[i] == 1 )
KeyBuf[i]++;
else
KeyBuf[i] = 0;
}
}
コード汚くて本当にすみません。