|
对对碰是一款经典的消除类游戏,玩家只要通过点击砖块来使砖块之间互相还位,连成3个以上的砖块来消除得分。
支持四种道具。
背景音乐和图片可以自定义,但是注意不要改名。图片都是.jpg格式,背景音乐是.mp3格式。
音乐:天空之城。
——作者:自然向日葵
源程序:
- ////////////////////////////////////////////////////////////
- //画素材的x和y都是反的,因为x表示行,但是画出来x表示列,y同
- ////////////////////////////////////////////////////////////
- /* 【自学去】网站收集 http://www.zixue7.com */
- #include <graphics.h>
- #include <fstream>
- #include <strstream>
- #include <iomanip>
- #include <cstdlib>
- #include <ctime>
- #pragma comment(lib, "Winmm.lib")
- using namespace std;
- /*******************************定义枚举类型*****************************/
- enum color{blank, red, yellow, blue, green, white, orange, purple, shizijia, zhadan, qicai, alarm};
- /*******************************定义全局变量*****************************/
- const int MaxT = 12; // 时间上限
- const int T = 10 * MaxT;// 时间速度
- const int V = 300; // 停留时间
- clock_t start, now; // 控制时间
- color gem[9][8]; // 地图
- // IMAGE对象
- IMAGE img[12], music_img[2], exit_img, jindutiao;
- int Score, Time; // 成绩 时间
- bool Flag, Music = true;// 是否加载 音乐
- /**********************************函数声明*****************************/
- void load(void); // 加载IMAGE对象
- void Blank(void); // 清空
- bool soso(void); // 搜索空格
- bool baidu(void); // 搜索解法
- void New(void); // 更新
- void print(void); // 输出
- bool judge(void); // 判断是否可以消除
- void fall(void); // 下落
- void draw(void); // 消除
- bool quit(void); // 是否重新开始
- void play(void); // 游戏过程
- /**********************************定义函数*****************************/
- void load(void)
- {
- char c[20];
- int i;
- // 加载IMAGE对象
- for (i = 0; i < 12; i++)
- {
- ostrstream strout(c, 50);
- strout <<"图片\\" <<i <<".jpg" <<ends;
- loadimage(&img[i], c);
- }
- loadimage(&music_img[0], "图片\\音乐关.jpg");
- loadimage(&music_img[1], "图片\\音乐开.jpg");
- loadimage(&exit_img, "图片\\退出.jpg");
- loadimage(&jindutiao, "图片\\进度条.jpg");
- // 加载音乐
- mciSendString("open 背景音乐.mp3 alias mymusic", NULL, 0, NULL);
- // 随机种子
- srand(unsigned(time(NULL)));
- // 打开文件
- ifstream fin("存档.dat");
- if (!fin)
- throw -1; // 如果打开失败则抛出异常
- // 读存档
- fin >>Flag >>Music;
- if (Flag)
- {
- HWND wnd = GetHWnd();
- SetWindowText(wnd, "对对碰");
- if (MessageBox(wnd, "是否继续上次游戏?", "游戏开始", MB_YESNO | MB_ICONQUESTION) == IDYES)
- {
- fin >>Score >>Time;
- for (i = 0; i < 9; i++)
- for (int j = 0; j < 8; j++)
- {
- int t;
- fin >>t;
- gem[i][j] = color(t);
- }
- }
- else
- Flag = false;
- }
- fin.close();
- }
- void Blank(void)
- {
- for (int i = 1; i < 9; i++)
- for (int j = 0; j < 8; j++)
- gem[i][j] = blank;
- print();
- fall();
- }
- bool soso(void)
- {
- for (int i = 1; i < 9; i++)
- for (int j = 0; j < 8; j++)
- if (gem[i][j] == blank)
- return true;
- return false;
- }
- bool baidu(void)
- {
- int i, j;
- color t;
- bool flag = false;
- // 如果有一个道具则返回真
- for (i = 1; i < 9; i++)
- for (j = 0; j < 8; j++)
- if (gem[i][j] >= shizijia)
- return true;
- // 搜索解法
- for (i = 1; i < 9; i++)
- for (j = 0; j < 7; j++)
- {
- t = gem[i][j];
- gem[i][j] = gem[i][j + 1];
- gem[i][j + 1] = t;
- if (judge())
- flag = true;
- t = gem[i][j];
- gem[i][j] = gem[i][j + 1];
- gem[i][j + 1] = t;
- if (flag)
- return true;
- }
- for (i = 1; i < 7; i++)
- for (j = 0; j < 8; j++)
- {
- t = gem[i][j];
- gem[i][j] = gem[i + 1][j];
- gem[i + 1][j] = t;
- if (judge())
- flag = true;
- t = gem[i][j];
- gem[i][j] = gem[i + 1][j];
- gem[i + 1][j] = t;
- if (flag)
- return true;
- }
- return false;
- }
- void New(void)
- {
- static int old_score = -1, old_time = T;
- bool flag = false;
- if (Score != old_score) // 更新分数
- {
- if (Score > 999999999)
- {
- if (MessageBox(GetHWnd(), "恭喜你达到了最高分!\n是否重新开始?", "游戏结束", MB_YESNO | MB_ICONQUESTION) == IDYES)
- Score = 0;
- else
- exit(0);
- }
- char s[15];
- ostrstream strout(s, 15);
- strout <<'
- 下载:
-
c语言对对碰游戏源码.zip
(4.13 MB, 下载次数: 14)
下载:
|
评分
-
查看全部评分
|