弹球游戏

本人刚学c语言没多久,利用一点闲暇时间编了一个挺有意思的小程序,

使用了easyx图形库,可以通过按键控制球的重力方向。

有一些bug与不足之处,还望大家指点。

#include <graphics.h>
#include <time.h>
#include <conio.h>
#include <stdio.h>
#include <windows.h>

int initball();
int process();
int move(int g);
int drawball();
int delball();
int point(int g);
int up();
int left();
int down();
int right();

struct ball
{
	int x;
	int y;
	int speedx = 0;
	int speedy = 0;
}; 
ball b[20];

int g=0;
int i=0;
int count = 0;
int n = 0;
MOUSEMSG m;

int main()
{
	initgraph(800, 800);
	setbkcolor(WHITE);
	cleardevice();
	settextstyle(30, 0, L"微软雅黑");
	settextcolor(RED);
	outtextxy(0, 0, L"鼠标点击产生小球(不超过20个),空格开始");
	outtextxy(0, 31, L"wasd控制重力方向");
	outtextxy(0, 62, L"空格使小球不受重力");
	setlinecolor(BLACK);
	up();
	down();
	left();
	right();
	rectangle(98, 98, 702, 702);
	initball();
	while (1)
	{
		process();
		for (i = 0; i < n; i++)
		{
			move(process());
		}
		point(process());
		rectangle(98, 98, 702, 702);
		Sleep(20);
	}
	return 0;
}

int initball()
{
	setlinecolor(GREEN);
	while (1)
	{
		m = GetMouseMsg();
		switch (m.uMsg)
		{
		case WM_LBUTTONDOWN:
			b[i].x = m.x;
			b[i].y = m.y;
			circle(b[i].x, b[i].y, 20);
			i++;
			n++;
			break;
		}
		if (_kbhit())
		{
			if (_getch() == ' ')
			{
				return 0;
			}
		}
		if (n > 19)
		{
			return 0;
		}
	}
	 return 0;
}

int process()
{
	char i;
	if (_kbhit())
	{
		i = _getch();
		switch (i)
		{
		case('w') :
			g = 2;
			break;
		case('a') :
			g = 3;
			break;
		case('s') :
		    g = 1;
			break;
		case('d') :
			g = 4;
			break;
		case(' ') :
			g = 0;
			break;
		}
	}
	return g;
}

int move(int g)
{
	delball();
	if (g == 0)
	{
		if (b[i].y < 679 && b[i].y>121)
		{
			b[i].x += b[i].speedx;
			b[i].y += b[i].speedy;
		}
		if (b[i].y >= 679)
		{
			b[i].y = 679;
			b[i].speedy = -b[i].speedy;
			b[i].x += b[i].speedx;
			b[i].y += b[i].speedy;
		}
		if (b[i].y <= 121)
		{
			b[i].y = 121;
			b[i].speedy = -b[i].speedy;
			b[i].x += b[i].speedx;
			b[i].y += b[i].speedy;
		}
		if (b[i].x >= 679)
		{
			b[i].x = 679;
			b[i].speedx = -b[i].speedx;
			b[i].x += b[i].speedx;
			b[i].y += b[i].speedy;
		}
		if (b[i].x <= 121)
		{
			b[i].x = 121;
			b[i].speedx = -b[i].speedx;
			b[i].x += b[i].speedx;
			b[i].y += b[i].speedy;
		}
		drawball();
	}
	if (g == 1)
	{
		if (b[i].y < 679 && b[i].y>121)
		{
			b[i].speedy++;
			b[i].x += b[i].speedx;
			b[i].y += b[i].speedy;
		}
		if (b[i].y>=679)
		{
			b[i].y = 679;
			b[i].speedy = -b[i].speedy;
			b[i].speedy++;
			b[i].x += b[i].speedx;
			b[i].y += b[i].speedy;
		}
		if (b[i].y<=121)
		{
			b[i].y = 121;
			b[i].speedy = -b[i].speedy;
			b[i].speedy++;
			b[i].x += b[i].speedx;
			b[i].y += b[i].speedy;
		}
		if (b[i].x>=679)
		{
			b[i].x = 679;
			b[i].speedx = -b[i].speedx;
			b[i].speedy++;
			b[i].x += b[i].speedx;
			b[i].y += b[i].speedy;
		}
		if (b[i].x<=121)
		{
			b[i].x = 121;
			b[i].speedx = -b[i].speedx;
			b[i].speedy++;
			b[i].x += b[i].speedx;
			b[i].y += b[i].speedy;
		}
		drawball();
	}
	if (g == 2)
	{
		if (b[i].y < 679 && b[i].y>121)
		{
			b[i].speedy++;
			b[i].x += b[i].speedx;
			b[i].y -= b[i].speedy;
		}
		if (b[i].y >= 679)
		{
			b[i].y = 679;
			b[i].speedy = -b[i].speedy;
			b[i].speedy++;
			b[i].x += b[i].speedx;
			b[i].y -= b[i].speedy;
		}
		if (b[i].y <= 121)
		{
			b[i].y = 121;
			b[i].speedy = -b[i].speedy;
			b[i].speedy++;
			b[i].x += b[i].speedx;
			b[i].y -= b[i].speedy;
		}
		if (b[i].x >= 679)
		{
			b[i].x = 679;
			b[i].speedx = -b[i].speedx;
			b[i].speedy++;
			b[i].x += b[i].speedx;
			b[i].y -= b[i].speedy;
		}
		if (b[i].x <= 121)
		{
			b[i].x = 121;
			b[i].speedx = -b[i].speedx;
			b[i].speedy++;
			b[i].x += b[i].speedx;
			b[i].y -= b[i].speedy;
		}
		drawball();
	}
	if (g == 4)
	{
		if (b[i].x < 679 && b[i].x>121)
		{
			b[i].speedx++;
			b[i].x += b[i].speedx;
			b[i].y += b[i].speedy;
		}
		if (b[i].x >= 679)
		{
			b[i].x = 679;
			b[i].speedx = -b[i].speedx;
			b[i].speedx++;
			b[i].x += b[i].speedx;
			b[i].y += b[i].speedy;
		}
		if (b[i].x <= 121)
		{
			b[i].x = 121;
			b[i].speedx = -b[i].speedx;
			b[i].speedx++;
			b[i].x += b[i].speedx;
			b[i].y += b[i].speedy;
		}
		if (b[i].y >= 679)
		{
			b[i].y = 679;
			b[i].speedy = -b[i].speedy;
			b[i].speedx++;
			b[i].x += b[i].speedx;
			b[i].y += b[i].speedy;
		}
		if (b[i].y <= 121)
		{
			b[i].y = 121;
			b[i].speedy = -b[i].speedy;
			b[i].speedx++;
			b[i].x += b[i].speedx;
			b[i].y += b[i].speedy;
		}
		drawball();
	}
	if (g == 3)
	{
		if (b[i].x < 679 && b[i].x>121)
		{
			b[i].speedx++;
			b[i].x -= b[i].speedx;
			b[i].y += b[i].speedy;
		}
		if (b[i].x >= 679)
		{
			b[i].x = 679;
			b[i].speedx = -b[i].speedx;
			b[i].speedx++;
			b[i].x -= b[i].speedx;
			b[i].y += b[i].speedy;
		}
		if (b[i].x <= 121)
		{
			b[i].x = 121;
			b[i].speedx = -b[i].speedx;
			b[i].speedx++;
			b[i].x -= b[i].speedx;
			b[i].y += b[i].speedy;
		}
		if (b[i].y >= 679)
		{
			b[i].y = 679;
			b[i].speedy = -b[i].speedy;
			b[i].speedx++;
			b[i].x -= b[i].speedx;
			b[i].y += b[i].speedy;
		}
		if (b[i].y <= 121)
		{
			b[i].y = 121;
			b[i].speedy = -b[i].speedy;
			b[i].speedx++;
			b[i].x -= b[i].speedx;
			b[i].y += b[i].speedy;
		}
		drawball();
	}
	return 0;
}

int drawball()
{
	setlinecolor(GREEN);
	circle(b[i].x, b[i].y, 20);
	return 0;
}

int delball()
{
	setlinecolor(WHITE);
	circle(b[i].x, b[i].y, 20);
	return 0;
}

int point(int g)
{
	switch (g)
	{
	case(0) :
		setlinecolor(BLACK);
		up();
		down();
		left();
		right();
		break;
	case(1):
		setlinecolor(BLACK);
		up();
		setlinecolor(GREEN);
		down();
		setlinecolor(BLACK);
		left();
		right();
		break;
	case(2):
		setlinecolor(GREEN);
		up();
		setlinecolor(BLACK);
		down();
		left();
		right();
		break;
	case(3):
		setlinecolor(BLACK);
		up();
		setlinecolor(GREEN);
		left();
		setlinecolor(BLACK);
		down();
		right();
		break;
	case(4):
		setlinecolor(BLACK);
		up();
		setlinecolor(GREEN);
		right();
		setlinecolor(BLACK);
		left();
		down();
		break;
	}
	return 0;
}

int up()
{
	line(400, 80, 400, 20);
	line(400, 20, 350, 50);
	line(400, 20, 450, 50);//上键
	return 0;
}

int down()
{
	line(400, 720, 400, 780);
	line(400, 780, 350, 750);
	line(400, 780, 450, 750);//下键
	return 0;
}

int left()
{
	line(20, 400, 80, 400);
	line(20, 400, 50, 350);
	line(20, 400, 50, 450);//左键
	return 0;
}

int right()
{
	line(780, 400, 720, 400);
	line(780, 400, 750, 350);
	line(780, 400, 750, 450);//右键
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_42705770/article/details/81165375