使用easyx图形库和c语言实现简单交互式游戏——快跑,我的球

利用这个小游戏可以巩固我们前面所学习的知识,使用easyx图形库可以使我们之前的终端输出变得更加有趣,我这里安装的是easyx大暑版(即最新版),大家可以到官网上下载,小游戏源代码就分享在这里了,大家有兴趣的话可以玩玩我的小游戏

#include <graphics.h>
#include<stdio.h>
#include<conio.h>
struct Ball
{
	int x;
	int y;
	int r;
	int dx;
	int dy;
};
struct Ball ball1 = { 400,400,10,20,-15 };
struct Ball ball2 = { 300,200,20,6,-20 };
struct Ball ball3 = { 70,600,30,9,-20 };
struct Ball myball = { 800, 650, 15, 20, 20 };//初始化所用到的球体参数
void KeyDown()//实现键盘控制myball移动的函数
{
	switch (_getch())
	{
	case 'W':
	case 'w':
		myball.y -= myball.dy;
		break;
	case 'S':
	case 's':
		myball.y += myball.dy;
		break;
	case 'A':
	case 'a':
		myball.x -= myball.dx;
		break;
	case 'D':
	case 'd':
		myball.x += myball.dx;
		break;
	}
}
void drawball(struct Ball ball1)//对障碍小球的画图操作
{
	setfillcolor(WHITE);
	solidcircle(ball1.x, ball1.y, ball1.r);
}
void drawball2(struct Ball ball2)//对myball小球的画图操作
{
	setfillcolor(RED);
	solidcircle(ball2.x, ball2.y, ball2.r);
}
void moveball1()//根据障碍小球不同的运动轨迹来实现障碍小球运动的函数,这是实现小球1运动的函数
{
	if (ball1.x - ball1.r <= 0 || ball1.x + ball1.r >= 900||ball1.x>=200&&ball1.x<=300)
	{
		ball1.dx = -ball1.dx;
	}
	if (ball1.y - ball1.r <= 0 || ball1.y + ball1.r >= 700||ball1.y>=100&&ball1.y<=200)
	{
		ball1.dy = -ball1.dy;
	}
	ball1.x += ball1.dx;
	ball1.y += ball1.dy;	
}
void moveball2()//实现障碍小球2运动的函数
{
	if (ball2.x - ball2.r <= 0 || ball2.x + ball2.r >= 900 || ball2.x >= 100 && ball2.x <= 200)
	{
		ball2.dx = -ball2.dx;
	}
	if (ball2.y - ball2.r <= 0 || ball2.y + ball2.r >= 700 || ball2.y >= 600 && ball2.y <= 700)
	{
		ball2.dy = -ball2.dy;
	}
	ball2.x += ball2.dx;
	ball2.y += ball2.dy;
}
void moveball3()//实现障碍小球3运动的函数
{
	if (ball3.x - ball3.r <= 0 || ball3.x + ball3.r >= 900 || ball3.x >= 600 && ball3.x <= 800)
	{
		ball3.dx = -ball3.dx;
	}
	if (ball3.y - ball3.r <= 0 || ball3.y + ball3.r >= 700 || ball3.y >= 200 && ball3.y <= 300)
	{
		ball3.dy = -ball3.dy;
	}
	ball3.x += ball3.dx;
	ball3.y += ball3.dy;
}
int main()
{
	initgraph(1200, 700);//开启游戏起始界面的窗口
	IMAGE img1;
	ExMessage msg;
	loadimage(&img1, "./begin.jpg", 1200, 700);//使用此路径源文件要和图片在图一级目录下
	putimage(0, 0, &img1);
	while (1) {
		while (peekmessage(&msg))
		{
			if ((msg.message == WM_LBUTTONDOWN) && (msg.x <= 700 && msg.x >= 500) && (msg.y <= 700 && msg.y >= 630))//判断是否有鼠标点击开始游戏处
			{
				closegraph();
				initgraph(900, 700);//如果点击了开始游戏,那么开启游戏闯关界面
				while (1)//循环清屏和画图操作实现小球的动态移动效果
				{
					cleardevice();
					drawball(ball1);
					drawball(ball2);
					drawball(ball3);
					drawball2(myball);
					moveball1();
					moveball2();
					moveball3();
					if (_kbhit())//myball小球的控制
					{
						cleardevice();
						drawball(ball1);
						drawball(ball2);
						drawball(ball3);
						drawball2(myball);
						moveball1();
						moveball2();
						moveball3();
						KeyDown();
					}
					if ( 
						   ((myball.x - ball1.x) * (myball.x - ball1.x) + (myball.y - ball1.y) * (myball.y - ball1.y)) <= (myball.r + ball1.r) * (myball.r + ball1.r)
						|| ((myball.x - ball2.x) * (myball.x - ball2.x) + (myball.y - ball2.y) * (myball.y - ball2.y)) <= (myball.r + ball2.r) * (myball.r + ball2.r)
						|| ((myball.x - ball3.x) * (myball.x - ball3.x) + (myball.y - ball3.y) * (myball.y - ball3.y)) <= (myball.r + ball3.r) * (myball.r + ball3.r)
					    )//当myball和障碍小球发生触碰时,游戏失败
					{
						closegraph();
						initgraph(1200, 700);
						IMAGE img2;
						loadimage(&img2, "./over.jpg", 1200, 700);//使用该路径要使源文件和图片文件在同一级目录下
						putimage(0, 0, &img2);
						Sleep(5000);
						return 0;
					}
					if (myball.x < 15 && myball.y < 15)//当myball到达界面左上角时,闯关成功
					{
						closegraph();
						initgraph(1200, 700);
						IMAGE img3;
						loadimage(&img3, "./success.jpg", 1200, 700);
						putimage(0, 0, &img3);
						Sleep(5000);
						return 0;
						return 0;
					}
					Sleep(20);
				}
				closegraph();
			}
		}
	}
	return 0;
}

这里给大家演示一下游戏画面:

其中红色小球是我们可以操作移动的小球,白色即为障碍小球 

成功界面:

失败界面:

  • 18
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值