本文实例为大家分享了C语言对对碰游戏的具体代码,供大家参考,具体内容如下
////////////////////////////////////////
//画素材的x和y都是反的,因为x表示行,但是画出来x表示列,y同
////////////////////////////////////////
#include
#include
#include
#include
#include
#include
#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 <<"图片\\" <
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;
i