C/C++简单图形库EasyX和graphics写打地鼠源码

#include<iostream>
#include <graphics.h>
#include<time.h>
#include <mmsystem.h>
using namespace std;
unsigned int SCORE=0;//分数
unsigned int TH=1;//关卡数
IMAGE beginImg;//开始界面的图片
IMAGE background;//打地鼠背景
IMAGE mouse;//第一关地鼠资源
IMAGE img[6];//6种地鼠的资源
int map[3][3]=//还没用到
{
0,0,0,
0,0,0,
0,0,0,
};//地图表示有无地鼠

int GameOver_flag();//判断游戏是否结束

void GameInit();//初始化屏幕
void Welcome();//绘制开始窗口
void EndGame();//结束游戏
void GameMain();//游戏大脑
int main()
{
	GameInit();
	Welcome();
	return 0;
}
void GameInit()
{
	initgraph(480, 320); 
	loadimage(&beginImg, "begin.jpg", 480 , 320); //加载背景图片
	mciSendString("1.mp3", 0, 0, 0);
	loadimage(&background,"打地鼠界面.jpg",531,340);
	loadimage(&mouse,"mouse.jpg",350/3,195/3);
	loadimage(&img[0],"01.jpg",350/3,195/3);//把文件夹的jpg图片存入数组
	loadimage(&img[1],"11.jpg",350/3,195/3);
	loadimage(&img[2],"02.jpg",350/3,195/3);
	loadimage(&img[3],"21.jpg",350/3,195/3);
	loadimage(&img[4],"03.jpg",350/3,195/3);
	loadimage(&img[5],"31.jpg",350/3,195/3);
}
void Welcome()
{
	putimage(0, 0, &beginImg);//显示开始图片
	setbkmode(TRANSPARENT);  //设置背景透明
	settextcolor(RED);//文本背景设置
	//设置字体
	settextstyle(60, 0, "华文琥珀");
	settextstyle(38, 0, "微软雅黑");
	settextcolor(RGB(39, 156, 146));
	//获取鼠标消息用于开始
	while(1)
	{
		//鼠标事件消息循环
		MOUSEMSG msg = { 0 };
		msg=GetMouseMsg();
		switch(msg.uMsg)
		{
			//左单击事件描述
		case WM_LBUTTONDOWN:
			//313*231 190*178
			if(msg.x>190&&msg.x<313&&msg.y<231&&msg.y>178)
			{
				
				//开始游戏
				outtextxy(190,250,"游戏加载中...");
				//加载程序设定时间
				Sleep(2000);
				//游戏主要部分开始
				GameMain();
			}
		}
	}		
}
void GameMain()//主函数  游戏大脑
{
	bool One();//第一关
	bool Two();//第二关
	bool Three();//第三关
	bool Four();//第四关
	closegraph();//关闭画布
	initgraph(531, 340); //建立画布
	setbkmode(TRANSPARENT);  //设置背景透明
	settextcolor(RED);//设置字体背景色
	//设置字体属性
	settextstyle(60, 0, "华文琥珀");
	settextstyle(38, 0, "微软雅黑");
	settextcolor(RGB(39, 156, 146));
	
	//游戏逻辑
	if(One())
		if(Two())
			if(Three())
				EndGame();

	
}
//第一关只会出现一种动物,点到就加分,没有掉分环节;
bool One()
{
	while(1)//循环事件体
	{
		cleardevice();//清空画布
		putimage(0,0,&background);//贴背景图
		setfillcolor(RGB(255, 150, 10));//设置计分框的颜色
		fillrectangle(10, 10, 250, 50);//设置计分框的形状大小
		setfillcolor(BLACK);//设置填充的颜色
		char ch[50];
		sprintf(ch,"第%d关 得分: %d",TH,SCORE);//在计分框中用sprintf写入关卡数和得分
		outtextxy(10,10,ch);//坐标10,10处输出文字ch	
		//随机生成地鼠
		srand((unsigned int) time(0));//随机函数
		int Number=rand()%9;//得到0-8的值
		int x=Number%3;//得到一个x值
		int y=Number/3;//得到一个y值,此处的得到变量用于map【x】【y】中显示地鼠
		map[x][y]=1;
		int mousex=70+x*370/3;//得到具体坐标的像素位置
		int mousey=90+y*195/3;//得到具体坐标的像素位置
		putimage(mousex,mousey,&mouse);//贴出一个地鼠	
		bool flag=false;
		while(1)
		{
			//鼠标消息循环
			MOUSEMSG msg1 = { 0 };
			msg1=GetMouseMsg();
			
			switch(msg1.uMsg)
			{
				//左击事件
			case WM_LBUTTONDOWN:
				//通过鼠标点击的区域判断打没打到
				if(msg1.x>mousex&&msg1.x<mousex+370/3&&msg1.y<mousey+195/3&&msg1.y>mousey)
				{	
					flag=true;//打到了这里写true就可以退出此次循环进行下一次循环
					SCORE=SCORE+1;//分数加一
					break;		
				}
			}
			if(flag==true)//判断是否能退出循环
			{
				break;
			}
		}
		//第一关满分后到第二关
		if(SCORE==10)
		{
			SCORE=0;//分数刷新
			TH=TH+1;//关卡数加一
			return true;
		}
	}
	return false;
}

//第二关会出现两种动物,但是都加分;没点到会扣分,分不够会退出游戏;
bool Two()
{
	//第二关
	while(1)
	{
		cleardevice();
		putimage(0,0,&background);
		setfillcolor(RGB(255, 150, 10));
		fillrectangle(10, 10, 250, 50);
		setfillcolor(BLACK);
		char ch[50];
		sprintf(ch,"第%d关 得分: %d",TH,SCORE);
		outtextxy(10,10,ch);	
		//随机生成地鼠
		srand((unsigned int) time(0));
		int Number=rand()%9;
		int x=Number%3;
		int y=Number/3;
		map[x][y]=1;
		int mousex=70+x*370/3;
		int mousey=90+y*195/3;
		//随机出不同的图片
		int i=rand()%4;
		if(i%2==0)
		{
			putimage(mousex,mousey,&img[i]);
		}
		else{
			i=i-1;
			putimage(mousex,mousey,&img[i]);
		}
		
		bool flag=false;
		while(1)
		{
			MOUSEMSG msg1 = { 0 };
			msg1=GetMouseMsg();		
			switch(msg1.uMsg)
			{
			case WM_LBUTTONDOWN:	
				if(msg1.x>mousex&&msg1.x<mousex+370/3&&msg1.y<mousey+195/3&&msg1.y>mousey)
				{	
					putimage(mousex,mousey,&img[i+1]);
					Sleep(500);
					flag=true;
					SCORE=SCORE+2;
					break;	
				}
				else{
					SCORE=SCORE-2;
					if(SCORE==0)
					{
						EndGame();
					}
				}
			}
			if(flag==true)
			{
				break;
			}
		}
		if(SCORE==20)
		{
			SCORE=0;
			TH=TH+1;
			return true;
		}
	}
	return false;
}
//第三关在第二关基础上会出现多一种的地鼠,但是点到了也会扣分;
bool Three()
{
		
	while(1)
	{
		cleardevice();
		putimage(0,0,&background);

		setfillcolor(RGB(255, 150, 10));
		fillrectangle(10, 10, 250, 50);
		setfillcolor(BLACK);
		char ch[50];
		sprintf(ch,"第%d关 得分: %d",TH,SCORE);
		outtextxy(10,10,ch);
		
		//随机生成地鼠
		srand((unsigned int) time(0));
		int Number=rand()%9;
		int x=Number%3;
		int y=Number/3;
		map[x][y]=1;
		int mousex=70+x*370/3;
		int mousey=90+y*195/3;
		//随机出不同的图片
		int i=rand()%6;
		if(i%2==0)
		{
			putimage(mousex,mousey,&img[i]);
		}
		else{
			i=i-1;
			putimage(mousex,mousey,&img[i]);
		}
		
		bool flag=false;
		while(1)
		{
			MOUSEMSG msg1 = { 0 };
			msg1=GetMouseMsg();		
			switch(msg1.uMsg)
			{
			case WM_LBUTTONDOWN:	
				if(msg1.x>mousex&&msg1.x<mousex+370/3&&msg1.y<mousey+195/3&&msg1.y>mousey)
				{	
					if(i>3)
					{
						SCORE=SCORE-2;
					}
					else
					{
						SCORE=SCORE+2;
					}
					putimage(mousex,mousey,&img[i+1]);
					Sleep(500);
					flag=true;
					
					break;	
				}
				else{
					SCORE=SCORE-2;
					if(SCORE==0)
					{
						EndGame();
					}
				}
			}
			if(flag==true)
			{
				break;
			}
		}
		if(SCORE==20)
		{
			SCORE=0;
			TH=TH+1;
			return true;
		}
	}
	return false;	
}	
//在第三关基础上,第四关一次会出现两个动物;一个加分的一个减分的;//这里得用多线程了,while处理不了
bool Four()
{
	while(1)
	{
		cleardevice();
		putimage(0,0,&background);

		setfillcolor(RGB(255, 150, 10));
		fillrectangle(10, 10, 250, 50);
		setfillcolor(BLACK);
		char ch[50];
		sprintf(ch,"第%d关 得分: %d",TH,SCORE);
		outtextxy(10,10,ch);
		
		//随机生成地鼠
		srand((unsigned int) time(0));
		int Number=rand()%9;
		int x=Number%3;
		int y=Number/3;
		map[x][y]=1;
		int mousex1=70+x*370/3;
		int mousey1=90+y*195/3;
		//随机出不同的图片
		int i=rand()%4;
		if(i%2==0)
		{
			putimage(mousex1,mousey1,&img[i]);
		}
		else{
			i=i-1;
			putimage(mousex1,mousey1,&img[i]);
		}
		//贴减分的动物
		int mousex2=mousex1;
		int mousey2=mousex1;
		
		putimage(mousex2,mousey2,&img[4]);

		bool flag=false;
		while(1)
		{
			MOUSEMSG msg1 = { 0 };
			msg1=GetMouseMsg();		
			switch(msg1.uMsg)
			{
			case WM_LBUTTONDOWN:
				//加分情况
				if(msg1.x>mousex1&&msg1.x<mousex1+370/3&&msg1.y<mousey1+195/3&&msg1.y>mousey1)
				{	
					if(i>3)
					{
						SCORE=SCORE-2;
					}
					else
					{
						SCORE=SCORE+2;
					}
					putimage(mousex1,mousey1,&img[i+1]);
					Sleep(500);
					flag=true;	
					break;	
				}
				//减分情况
				if(msg1.x>mousex2&&msg1.x<mousex2+370/3&&msg1.y<mousey2+195/3&&msg1.y>mousey2)
				{
					putimage(mousex1,mousey1,&img[5]);
					SCORE=SCORE-2;
				}
				else{
					SCORE=SCORE-2;
					if(SCORE==0)
					{
						EndGame();
					}
				}
			}
			if(flag==true)
			{
				break;
			}

		}
		if(SCORE==20)
		{
			SCORE=0;
			TH=TH+1;
			return true;
		}
	}
	return false;		
}
void EndGame()
{
	closegraph();
	initgraph(531, 340); 
	//这个代码为了伪装成动态的效果显示”游戏结束“文本;
	
	while(1)
	{
		setbkmode(TRANSPARENT);  //设置背景透明
		settextcolor(RED);		//设置文本颜色
		outtextxy(200,150,"游戏结束");

		settextcolor(BLACK);
		outtextxy(200,150,"游戏结束");

		settextcolor(BLUE);
		outtextxy(200,150,"游戏结束");

		settextcolor(WHITE);
		outtextxy(200,150,"游戏结束");

	}
}

代码仅供看逻辑,需要加入图片资料才能运行.

代码运行的环境:vc/vs graphic.h

工程文件直接获取一步运行出结果请来:https://pan.baidu.com/s/1aFNohw3xMVbkwvQmBP1_OA

猜你喜欢

转载自blog.csdn.net/qq_36812792/article/details/85750243
今日推荐