在(640X480)的区域内设置一个九宫格,有3幅图片(以自己的3张不同照片设置),每幅相同图片各有3张。9张图片在九宫格中随机摆放。初始状态看不到哪个格子是哪幅图片,当鼠标指向某个格子并左鍵单击后,该格显示其图片,如果点击5个格子中有3幅图片相同,显示游戏胜利的界面(界面创意自行设计),否则显示游戏失败界面。
注:该程序需要用到几个mp3、jpg文件!
#include <graphics.h>
#include <conio.h>
#include <mmsystem.h>
#include <time.h>
#pragma comment(lib,"Winmm.lib")
void Output_initial_interface(); //输出初始界面
void Flicker(); //点击任意位置继续
void out_rule();
void put_image(int, int, int);
int the_x(int);
int the_y(int);
boolean game();
MOUSEMSG m; // 定义鼠标消息
IMAGE img;
int main()
{
mciSendString("open Imagine.mp3", 0, 0, 0); //打开音乐
mciSendString("play Imagine.mp3 repeat", 0, 0, 0); //播放音乐,repeat可以重复播放音乐
initgraph(1280, 720);
Output_initial_interface();//输出初始界面
if (game())
{
mciSendString("close Imagine.mp3", 0, 0, 0); //停止播放音乐
mciSendString("play victory.mp3", 0, 0, 0); //胜利音效
IMAGE image;
loadimage(&image, "victory.jpg", 1280, 720); //胜利画面
cleardevice();
putimage(0, 0, &image);
}
else
{
mciSendString("close Imagine.mp3", 0, 0, 0); //停止播放音乐
mciSendString("play defeat.mp3", 0, 0, 0); //失败音效
IMAGE image;
loadimage(&image, "defeat.jpg", 1280, 720); //失败画面
cleardevice();
putimage(0, 0, &image);
}
system("pause");
closegraph();
return 0;
}
void Output_initial_interface()
{
loadimage(&img, "初始界面.jpg", 1280, 720);
cleardevice();
putimage(0, 0, &img);
setbkmode(TRANSPARENT);
out_rule();
Flicker();
}
void Flicker()
{
settextstyle(40, 0, "楷体");
while (true)
{
int x = 0;
while (true)
{
if (x >= 255)
x = 0;
settextcolor(RGB(x - 50, x, 0));
x += 5;
outtextxy(830, 620, "点击任意位置继续...");
Sleep(0.1); //这里必须足够小,对鼠标的反应才足够灵敏
m = GetMouseMsg(); // 获取一条鼠标消息
if (m.uMsg == WM_LBUTTONDOWN) // 按鼠标左键继续
return;
}
}
}
boolean game()
{
setbkcolor(RGB(60,120,160));
cleardevice();
line(0, 240, 1280, 240);
line(0, 480, 1280, 480);
line(426, 0, 426, 720);
line(853, 0, 853, 720);
int x1 = 0, x2 = 0, x3 = 0;
int chance = 5;
while (chance)
{
m = GetMouseMsg(); // 获取一条鼠标消息
if (m.uMsg == WM_LBUTTONDOWN)
{
chance--;
int x = m.x;
int y = m.y;
int n = rand() % 100;
while (n == 0)
{
srand((unsigned int)time(NULL)); //用时间作种子
n = rand() % 100;
}
switch (n % 3)
{
case 0:
x1++;
put_image(1,x,y);
break;
case 1:
x2++;
put_image(2,x,y);
break;
case 2:
x3++;
put_image(3,x,y);
break;
}
if (x1 == 3 || x2 == 3 || x3 == 3)
{
Sleep(1000);
return true;
}
}
}
Sleep(888);
return false;
}
void out_rule()
{
settextstyle(20, 0, "楷体");
outtextxy(20, 20, "游戏规则:");
outtextxy(20, 40, "九宫格,有3幅图片每幅相同图片各有3张");
outtextxy(20, 60, "9张图片在九宫格中随机摆放");
outtextxy(20, 80, "初始状态看不到哪个格子是哪幅图片");
outtextxy(20, 100, "当鼠标指向某个格子并左鍵单击后,该格显示其图片");
outtextxy(20, 120, "如果点击5个格子中有3幅图片相同,显示游戏胜利的界面,否则显示游戏失败界面。");
}
void put_image(int n, int x, int y)
{
if (n == 1)
{
loadimage(&img, "image1.jpg", 426, 240,true);
putimage(the_x(x), the_y(y), &img);
}
else if (n == 2)
{
loadimage(&img, "image2.jpg", 426, 240,true);
putimage(the_x(x), the_y(y), &img);
}
else if (n == 3)
{
loadimage(&img, "image3.jpg", 426, 240,true);
putimage(the_x(x), the_y(y), &img);
}
}
int the_x(int x)
{
if (x <= 426)
return 0;
else if (x > 426 && x <= 853)
return 426;
else if (x > 853 && x <= 1280)
return 853;
}
int the_y(int y)
{
if (y <= 240)
return 0;
else if (y > 240 && y <= 480)
return 240;
else if (y > 480 && y <= 720)
return 480;
}
测试