C++ ege 求助
  • 板块灌水区
  • 楼主__YLX
  • 当前回复13
  • 已保存回复13
  • 发布时间2023/6/22 21:46
  • 上次更新2023/11/3 13:19:30
查看原帖
C++ ege 求助
664760
__YLX楼主2023/6/22 21:46

最近写了一串代码,想要模拟一个重力环境,这是我写出的代码(不要在意那个“下半身”):

#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;
}

重力是可以跑到我的想要的结果的,但是这段代码运行之后按 WW 根本跳不起来,是我检查了一遍代码,感觉思路没有问题,但是为啥跳不起来嘞?

在此求助各位谷民,看看我是不是出了点什么错 :(

2023/6/22 21:46
加载中...