最近写了一串代码,想要模拟一个重力环境,这是我写出的代码(不要在意那个“下半身”):
#include <graphics.h>
#include <windows.h>
#include <bits/stdc++.h>
#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0)
const int scrX = 640, scrY = 480;//窗口的长与宽
bool bump(const int, const int, int, int, const int, const int, int, int);
struct Player {
//上半身(head)和下半身(feet)的图片
PIMAGE head;
PIMAGE feet;
int FallSpeed;//下落速度
const short JumpSpeed = 12; //起跳速度
const short gravity = -1; //重力值
short hp = 20; //生命值,2点生命值就是一颗心
short RecoilDistance;//退返距离
//上半身(head)和下半身(feet)的坐标
int feetx, feety;
int headx, heady;
short speed = 5; //速度
void runmode() { //疾跑
if (speed == 5)
speed = 7;
else if (speed == 7)
speed = 5;
}
void gravity_simulation() { //重力模拟
heady += FallSpeed;
if (heady + 16 > scrY || heady < 0) {
if (FallSpeed < 0)
RecoilDistance = 1;
else
RecoilDistance = -1;
while (heady + 16 > scrY || heady < 0)
heady -= RecoilDistance;
FallSpeed = 0; //如果碰到了地板,停止下落
} else
FallSpeed -= gravity; //如果没有碰到地板,加速下落(重力加速度)
}
void jump_control() { //跳跃控制
if (KEY_DOWN('W')) {
heady--;
if (heady + 16 > scrY || heady < 0)
FallSpeed = JumpSpeed;
heady++;
}
}
void run_control() { //奔跑控制
if (KEY_DOWN('A')) {
headx -= speed;
}
if (KEY_DOWN('D')) {
headx += speed;
}
if (headx + 16 > scrX) //如果跑到屏幕右边去了
headx -= speed;
if (headx < 0) //如果跑到屏幕左边去了
headx += speed;
}
};
bool bump(const int x1, const int y1, int w1, int h1, const int x2, const int y2, int w2, int h2) {
//判断两个矩形是否碰撞
if (x1 < x2 + w2 && x1 + w1 > x2 && y1 < y2 + h2 && h1 + y1 > y2)
return 1;
else
return 0;
}
Player a;
int main() {
initgraph(scrX, scrY);
setbkcolor(WHITE);
setfont(10,0,"unifont");
a.headx = 320, a.heady = 240;
a.head = newimage();
getimage(a.head, "player.png");
a.FallSpeed = 0;
while (1) {
cleardevice();
putimage(a.headx, a.heady, a.head);
a.gravity_simulation();
a.jump_control();
a.run_control();
if (KEY_DOWN('Q')) {
break;
}
Sleep(24);
}
delimage(a.head);
closegraph();
exit(0);
return 0;
}
重力是可以跑到我的想要的结果的,但是这段代码运行之后按 W 根本跳不起来,是我检查了一遍代码,感觉思路没有问题,但是为啥跳不起来嘞?
在此求助各位谷民,看看我是不是出了点什么错 :(