#include <graphics.h>
#include <time.h>
#include <conio.h>
#include<math.h>
#include<cstdio>
#include <cstring>
#include <cstdlib>
//初始背景
IMAGE bk;
//主菜单构建函数声明
void MainMenu();
int main()
{
char l,L;
ExMessage m; // 定义消息变量
// 设置随机种子
srand((unsigned)time(NULL));
while (1)
{
MainMenu(); // 显示主菜单
l = getchar();
if (l == 'q')
{
system("cls");
break;
}
}
// 初始化图形模式
initgraph(1280, 960);
loadimage(&bk, _T("靶场.png"));
putimage(0, 0, &bk); // 显示背景
setbkcolor(WHITE);
int x, y,score=0,HP=5,flag=0,Flag=1;
while (Flag)
{
// 设置文字说明
settextcolor(BLACK);
settextstyle(30, 0, "宋体");
outtextxy(0, 0, "目标值:10");
outtextxy(300, 0, "HP:");
// 设置HP框
setfillcolor(RED);
solidrectangle( 400 ,0,( 400+50* HP ),30);
// 设置颜色
int c = rand() % 2;
if (c == 0)
{
setfillcolor(RED);
setlinecolor(RED);
}
else if (c == 1)
{
setfillcolor(GREEN);
setlinecolor(GREEN);
}
flag = 0;
do{
x = (rand() % 80) * 8;
y = (rand() % 20) * 24;
} while ((x < 30 || x > 610) || (y < 50 || y > 450));//保障圆完全生成在屏幕里
fillcircle(x, y, 30);
Sleep(100);
while (flag == 0) {
// 获取一条鼠标或按键消息
m = getmessage();
switch (m.message)
{
case WM_LBUTTONDOWN://左键按下
if ((pow((m.x - x), 2) + pow((m.y - y), 2)) <= 900)//计算是否点到圆
{
if (c == 1)
{
HP--; flag = 1; break;
}
flag = 1; score++;
}
else
{
HP--; flag = 1;
}
break;
case WM_RBUTTONDOWN://右键按下
if ((pow((m.x - x), 2) + pow((m.y - y), 2)) <= 900)//计算是否点到圆
{
if (c == 0)
{
HP--; flag = 1; break;
}
flag = 1; score++;
}
else
{
HP--; flag = 1;
}
break;
}
}
clearcircle(x,y,31); //清除圆
clearrectangle(350, 0,550, 20); //更新HP值
putimage(0, 0, &bk); //刷新背景
if (score == 10) // 成功后判断
{
system("cls");
closegraph();
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("恭喜你通过了游戏! 输入 t 可结束游戏,或者输入q再玩一次。\n");
L = getchar();
if (L == 't')
{
Flag = 0;
}
else if (L == 'q')
{
initgraph(1280, 960);
loadimage(&bk, _T("靶场.png"));
putimage(0, 0, &bk); // 显示背景
setbkcolor(WHITE);
score = 0, HP = 5, flag = 0, Flag = 1;
}
}
else if (HP == 0) //失败后判断
{
system("cls");
closegraph();
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("很可惜你失败了qwq ,输入可结束游戏,或者输入q再挑战一次!\n");
L = getchar();
if (L == 't')
{
Flag = 0;
}
else if (L == 'q')
{
initgraph(1280, 960);
loadimage(&bk, _T("靶场.png"));
putimage(0, 0, &bk); // 显示背景
setbkcolor(WHITE);
score = 0, HP = 5, flag = 0, Flag = 1;
}
}
}
}
void MainMenu() {
printf(
"\t ******射击小球游戏欢迎您******\n"
"\t * 射击小球游戏介绍如下 *\n"
"\t * 左键消灭红球 *\n"
"\t * 右键消灭绿球 *\n"
"\t * 游戏规则: *\n"
"\t * 利用鼠标射击所有小球 *\n"
"\t * 在HP扣完前 *\n"
"\t * 成功完成目标值 *\n"
"\t * 即可获胜 *\n"
"\t * 输入字母q开始游戏 *\n"
"\t * *\n"
"\t * *\n"
"\t ******射击小球游戏欢迎您******\n"
);
}
//优化:1. 打击特效
// 2.结尾打出所花时间(下面加一行鼓励的话),和最好成绩。
// 3.游戏开始界面可选择结束,结束时可选择结束或再来一次