自己做的一个c++小游戏 但运行一直显示编译错误,求大佬找错
  • 板块灌水区
  • 楼主bei_awa
  • 当前回复34
  • 已保存回复34
  • 发布时间2023/7/25 10:24
  • 上次更新2023/11/3 07:47:20
查看原帖
自己做的一个c++小游戏 但运行一直显示编译错误,求大佬找错
664284
bei_awa楼主2023/7/25 10:24

代码

#include <iostream>
#include <cmath>
#include <GL/glut.h>

#define PI 3.14159265358979323846

// 窗口大小
int windowWidth = 800;
int windowHeight = 600;

// 玩家位置和角度
float playerX = 0.0f;
float playerY = 0.0f;
float playerAngle = 0.0f;

// 玩家移动速度和旋转速度
float playerMoveSpeed = 0.05f;
float playerRotateSpeed = 0.05f;

// 函数声明
void display();
void reshape(int width, int height);
void keyboard(unsigned char key, int x, int y);
void update();
void drawPlayer();
void drawBullet(float x, float y, float angle);
void drawEnemy(float x, float y);

int main(int argc, char** argv) {
	// 初始化GLUT和窗口
	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);
	glutInitWindowSize(windowWidth, windowHeight);
	glutCreateWindow("3D射击游戏");

	// 设置回调函数
	glutDisplayFunc(display);
	glutReshapeFunc(reshape);
	glutKeyboardFunc(keyboard);
	glutIdleFunc(update);

	// 进入GLUT循环
	glutMainLoop();

	return 0;
}

void display() {
	// 清空颜色缓存
	glClear(GL_COLOR_BUFFER_BIT);

	// 绘制玩家
	drawPlayer();

	// 绘制敌人
	drawEnemy(2.0f, 2.0f);

	// 交换前后缓冲区
	glutSwapBuffers();
}

void reshape(int width, int height) {
	// 设置视口大小和投影矩阵
	glViewport(0, 0, width, height);
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	gluPerspective(45.0, (float)width / (float)height, 0.1, 100.0);
	glMatrixMode(GL_MODELVIEW);
}

void keyboard(unsigned char key, int x, int y) {
	// 根据按键更新玩家位置和角度
	switch (key) {
	case 'w':
		playerX += cos(playerAngle) * playerMoveSpeed;
		playerY += sin(playerAngle) * playerMoveSpeed;
		break;
	case 's':
		playerX -= cos(playerAngle) * playerMoveSpeed;
		playerY -= sin(playerAngle) * playerMoveSpeed;
		break;
	case 'a':
		playerAngle += playerRotateSpeed;
		break;
	case 'd':
		playerAngle -= playerRotateSpeed;
		break;
	case 32: // 空格键发射子弹
		drawBullet(playerX, playerY, playerAngle);
		break;
	}

	glutPostRedisplay();
}

void update() {
	// 游戏逻辑更新(例如敌人的移动、碰撞检测等)

	glutPostRedisplay();
}

void drawPlayer() {
	// 绘制玩家模型

	glLoadIdentity();
	glTranslatef(playerX, playerY, -5.0f);
	glRotatef(playerAngle * 180.0f / PI, 0.0f, 0.0f, 1.0f);

	glColor3f(1.0f, 1.0f, 1.0f);
	glBegin(GL_TRIANGLES);
	glVertex3f(0.0f, 0.1f, 0.0f);
	glVertex3f(-0.1f, -0.1f, 0.0f);
	glVertex3f(0.1f, -0.1f, 0.0f);
	glEnd();
}

void drawBullet(float x, float y, float angle) {
	// 绘制子弹

	glLoadIdentity();
	glTranslatef(x, y, -5.0f);
	glRotatef(angle * 180.0f / PI, 0.0f, 0.0f, 1.0f);

	glColor3f(1.0f, 0.0f, 0.0f);
	glBegin(GL_TRIANGLES);
	glVertex3f(0.0f, 0.05f, 0.0f);
	glVertex3f(-0.025f, -0.05f, 0.0f);
	glVertex3f(0.025f, -0.05f, 0.0f);
	glEnd();
}

void drawEnemy(float x, float y) {
	// 绘制敌人

	glLoadIdentity();
	glTranslatef(x, y, -5.0f);

	glColor3f(0.0f, 1.0f, 0.0f);
	glBegin(GL_TRIANGLES);
	glVertex3f(0.0f, 0.1f, 0.0f);
	glVertex3f(-0.1f, -0.1f, 0.0f);
	glVertex3f(0.1f, -0.1f, 0.0f);
	glEnd();
}

void update() {
	// 游戏逻辑更新(例如敌人的移动、碰撞检测等)

	// 敌人移动示例,每次更新坐标
	static float enemyX = 2.0f;
	static float enemyY = 2.0f;
	enemyX += 0.01f;
	enemyY += 0.01f;

	glutPostRedisplay();
}

void drawPlayer() {
	// 绘制玩家模型

	glLoadIdentity();
	glTranslatef(playerX, playerY, -5.0f);
	glRotatef(playerAngle * 180.0f / PI, 0.0f, 0.0f, 1.0f);

	glColor3f(1.0f, 1.0f, 1.0f);
	glBegin(GL_TRIANGLES);
	glVertex3f(0.0f, 0.1f, 0.0f);
	glVertex3f(-0.1f, -0.1f, 0.0f);
	glVertex3f(0.1f, -0.1f, 0.0f);
	glEnd();
}

void drawBullet(float x, float y, float angle) {
	// 绘制子弹

	glLoadIdentity();
	glTranslatef(x, y, -5.0f);
	glRotatef(angle * 180.0f / PI, 0.0f, 0.0f, 1.0f);

	glColor3f(1.0f, 0.0f, 0.0f);
	glBegin(GL_TRIANGLES);
	glVertex3f(0.0f, 0.05f, 0.0f);
	glVertex3f(-0.025f, -0.05f, 0.0f);
	glVertex3f(0.025f, -0.05f, 0.0f);
	glEnd();
}

int main(int argc, char** argv) {
	// 初始化GLUT和窗口
	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);
	glutInitWindowSize(windowWidth, windowHeight);
	glutCreateWindow("3D射击游戏");

	// 设置回调函数
	glutDisplayFunc(display);
	glutReshapeFunc(reshape);
	glutKeyboardFunc(keyboard);
	glutIdleFunc(update);

	// 进入GLUT循环
	glutMainLoop();

	return 0;
}
2023/7/25 10:24
加载中...