“既可以是好玩的游戏,又可以是炫酷的表白程序”
谁说程序员不浪漫?表白程序连连看
想学习编程加群 571545210
/*--------------------------------连连看----------------------------------------------------------------
夏七 2016 12 8
项目 连连看
版本1.0
-------------------------------------------------------------------------------------------------------*/
#include<stdio.h>
#include<graphics.h>
#include<time.h>
#include<windows.h>
#include<mmsystem.h>
#pragma comment(lib, "WINMM.LIB")
/*
思路部分
1.外部实现部分
2.内部实现
数组存放 大小为M*N 暂定8*6
赋值为随机数 保证相同的为偶数
-----外部扫描绘图
-----获取鼠标点击 两次 可选 点击变色 相同坐标图片取消
-----可选功能 联线
-----两次如果坐标不同 图像相同 那么贴另外一张图 否则取消
数组全部为空 结束游戏
*/
#define M 8
#define N 6
HWND hWnd;
void game();
void draw(int map[][N],IMAGE img[]);
void getpoint(int &i, int &j,int map[][N]);
void play(int map[][N], IMAGE img[],int win);
void love();
//-----------------------------------------------程序的入口-------------------------------------------------------------------
int main(){
//initgraph(640,480);//太大了
game();
//love();
getchar();
closegraph();
return 0;
}
void game()
{
initgraph(640,480);
hWnd = GetHWnd();//这里用于后面的messagebox
int map[M][N] = { 0 };
//随机填充
int x1, y1, x2, y2;
int win = M*N;//用来统计数组是否是满的 用来判断数组是否为空及游戏是否结束
srand((unsigned)time(NULL));
//生成随机两个坐标
while (win > 0)
{
x1 = rand() % M;
x2 = rand() % M;
y1 = rand() % N;
y2 = rand() % N;
if ((x1 != x2 || y1 != y2) && map[x1][y1] == 0 && map[x2][y2] == 0)
{
map[x2][y2] = rand() % 5 + 1;//6是图片的个数
map[x1][y1] = map[x2][y2];
win -= 2;//两个已经赋值
}
}
IMAGE img[7];
loadimage(&img[0], "0.jpg", 80, 80);
loadimage(&img[1], "1.jpg", 80, 80);
loadimage(&img[2], "2.jpg", 80, 80);
loadimage(&img[3], "3.jpg", 80, 80);
loadimage(&img[4], "4.jpg", 80, 80);
loadimage(&img[5], "5.jpg", 80, 80);
loadimage(&img[6], "背景.jpg", 640,480);
/*loadimage(&img[7], L"0.jpg", 80, 80);
loadimage(&img[8], L"0.jpg", 80, 80);
loadimage(&img[0], L"0.jpg", 80, 80);*/
//绘图函数
//获取鼠标位置
play(map,img,win);
getchar();
}
void draw(int map[][N],IMAGE img[])
{
putimage(0,0, &img[6]);
for (int i = 0; i <= M; i++)
{
for (int j = 0; j <= N; j++)
{
switch (map[i][j])
{
case 0:putimage(80 * i, 80 * j, &img[0]); break;
case 1:putimage(80 * i, 80 * j, &img[1]); break;
case 2:putimage(80 * i, 80 * j, &img[2]); break;
case 3:putimage(80 * i, 80 * j, &img[3]); break;
case 4:putimage(80 * i, 80 * j, &img[4]); break;
case 5:putimage(80 * i, 80 * j, &img[5]); break;
//case 6:putimage(80 * i, 80 * j, &img[6]); break;
//case 2:putimage(80 * i, 80 * j, &img[7]); break;
default:break;
}
}
}
}
void play(int map[][N],IMAGE img[],int win)
{
int x1, x2, y1, y2;
while (1)
{
draw(map, img);
getpoint(x1, y1,map);
getpoint(x2, y2,map);
Sleep(100);
if (x1 == x2&&y1 == y2)
{
//去掉标记
draw(map, img);
}
else if (map[x1][y1] == map[x2][y2])
{
//画线
setlinecolor(BLUE);
line(80*x1+40, 80*y1+40, 80*x2+40, 80*y1+40);
line(80*x2+40, 80*y1+40, 80*x2+40, 80*y2+40);
Sleep(100);
map[x1][y1] = 0;
map[x2][y2] = 0;
win += 2;
}
if (win == M*N)
{
//赢了
draw(map, img);
//表白部分
love();
MessageBox(hWnd, "我都是最棒的", "每一天", MB_OK);
return;
}
}
}
void getpoint(int &i, int &j,int map[][N])
{
//获取一次鼠标信息
MOUSEMSG msg;
while (1)
{
msg = GetMouseMsg();
switch (msg.uMsg)
{
case WM_LBUTTONDOWN:
//返回鼠标位置对应的坐标
i = msg.x / 80;
j = msg.y / 80;
//标记
if (map[i][j] == 0)
{
continue;
}
setlinecolor(BLUE);
rectangle(80 * i, 80 * j, 80 * i + 80, 80 * j + 80);
return;
}
}
}
//表白函数部分 单独写函数吧T^T
void love()
{
setbkmode(TRANSPARENT);
settextstyle(30,0, "黑体");
settextcolor(LIGHTMAGENTA);
//outtextxy(0, 0, L"山");
//Sleep(200);
//outtextxy(40, 0, L"有");
//Sleep(200);
//outtextxy(80, 0, L"木");
//Sleep(200);
//outtextxy(120, 0, L"兮");
//Sleep(200);
//outtextxy(160, 0, L"木");
//Sleep(200);
//outtextxy(200, 0, L"有");
//Sleep(200);
//outtextxy(240, 0, L"枝");
//Sleep(200);
//outtextxy(280, 0, L"心");
//Sleep(200);
//outtextxy(320, 0, L"悦");
//Sleep(200);
//outtextxy(360, 0, L"君");
//Sleep(200);
//outtextxy(400, 0, L"兮");
//Sleep(200);
//outtextxy(440, 0, L"君");
//Sleep(200);
//outtextxy(480, 0, L"不");
//Sleep(200);
//outtextxy(520, 0, L"知");
//Sleep(200);
//outtextxy(0, 40, L"玲珑*子骰**安红豆,入骨相思知不知");
char love[18][50] = { "见与不见","你见或不见我","我就在那里","不悲不喜","你念或者不念我","情就在那里","不来不去","你爱或者不爱我","爱就在那里","不增不减","你跟或不跟我",
"我的手就在你的手里","不舍不弃","来我怀里","或者让我住进你的心里","漠然相爱寂静欢喜" };
char lo[3] = { '\0' };
mciSendString("open love.mp3 alias MyLove", 0, 0, 0);
mciSendString("play MyLove", 0, 0, 0);
for (int i = 0; i < 18; i++){
for (int j = 0; j < 50; j = j + 2){
if (love[i][j] == '\0'){
break;
}
lo[0] = love[i][j];
lo[1] = love[i][j + 1];
lo[2] = '\0';
outtextxy(15 * j, 30 * i, lo);
Sleep(200);
}
}
mciSendString("open love.mp3 alias MyLove", 0, 0, 0);
mciSendString("play MyLove", 0, 0, 0);
}
建议加qq群 学习编程 571545210
这个是我们在群里跟着老师学的,今天分享给大家,如果大家想学习编程可以加群一起学习交流,共同进步。