#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