/*
** $Id: bomb.c,v 1.19 2006/04/011 zhangxin $
**
** bomb.c: The MineSweeper game.
**
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <unistd.h>
#include <pwd.h>
#include <minigui/common.h> //包含了MiNiGUI常用的宏以及数据类型的定义
#include <minigui/minigui.h> //包含了全局的和通用的接口函数以及某些杂项函数的定义
#include <minigui/gdi.h> //包含了MiNiGUI绘图函数的接口定义
#include <minigui/window.h> //包含了窗口有关的宏,数据类型,数据结构定义以及函数接口的声明.
#include <minigui/control.h> /*包含了libminigui中所由内建控件的接口定义.
*使用预定义控件的MiNiGUI程序需要包含此头文件*/
/*定义方格结构体*/
typedef struct
{
int flag; //被认为是地雷的标时
int value; //方格内的值
BOOL test; //文本内容是否显示
BOOL hit; //是否被点击
BOOL bombout; //是否是地雷
BOOL error; //是否错误
}BOM;
/*定义数字方格*/
typedef struct
{
int x; //方格左上角横坐标值
int y; //方格左上角纵坐标值
BOOL NY; //是不是数字方格
}NO;
//*计分结构体*/
typedef struct
{
int highscore; //分数
char name[20]; //姓名
}SCORE;
static BOM bom[30][16]; //最大30*16格
static NO NoAdr[540];
static SCORE score[3]; //大,中,小三个模式最高分
static int itime, leftbombnum; //itime已打开方格数,leftbombnum剩余地雷数
static int bombnum = 99; //初始化的地雷数是99
void SearchGround(HWND hWnd,int x,int y);
int Open(HWND hWnd,int x,int y);
int TestMyWinProc(HWND hWnd,int message,WPARAM wParam,LPARAM lParam);
void InitMyWinCreateInfo(PMAINWINCREATE pCreateInfo);
void InitAbHostedCreateInfo(HWND hHosting, PMAINWINCREATE pCreateInfo);
void InitHighScoreCreateInfo (HWND hHosting, PMAINWINCREATE pCreateInfo);
void InitCongratulationCreateInfo (HWND hHosting, PMAINWINCREATE pCreateInfo);
void* TestMyWindow(void* data);
void BombGame(HWND hWnd, int x, int y);
void Finished(HWND hWnd);
void Cancel3DFrame(HDC hdc, int l,int t,int r,int b);
void TextValue(HDC hdc, int x,int y,int value);
void BombOut(HWND hWnd);
void BothButtonDownProc(HWND hWnd, int x, int y);
void DrawDigit(HDC hdc, char* buffer, int CLOCK);
/*定义下拉菜单乡ID值,ID值大于100,且不能重复*/
#define ID_ABOUT 300
#define ID_NEW 301
#define ID_LARGE 302
#define ID_MIDDLE 303
#define ID_SMALL 304
#define ID_CLOSE 305
#define ID_HIGHSCORE 306
/*定义定时器*/
#define ID_CLOCK 400
/*定义三个模式的大小*/
#define WIDTH_LARGEWIN 544
#define HEIGHT_LARGEWIN 470
#define WIDTH_MIDDLEWIN 292
#define HEIGHT_MIDDLEWIN 430
#define WIDTH_SMALLWIN 178
#define HEIGHT_SMALLWIN 270
/*定义笑脸的大小*/
#define WIDTH_FACE 30
#define HEIGHT_FACE 30
/*定义地雷数控件大小*/
#define WIDTH_DIGIT 14 //一个数字的宽是14
#define WIDTH_BOMNUM (2*WIDTH_DIGIT) //地雷数是两个数字宽
#define HEIGHT_BOMNUM 30 //一个地雷数高30
/*定义时钟数控件大小*/
#define WIDTH_CLOCK (3*WIDTH_DIGIT) //时钟数是三个数字宽
#define HEIGHT_CLOCK 30 //一个时钟数高30
#define FREQ_CLOCK 10 //时钟间隔
/*定义方格大小*/
#define WIDTH_BOX 18
#define HEIGHT_BOX 18
static int sg_boxnumx = 30; //方格横坐标数30
static int sg_boxnumy = 16; //方格纵坐标数16
static BITMAP sg_bmpDigit[10]; //存0-9的位图的位图数组指针
static int oldx, oldy, adrx, adry;
static int flag_bombout, flag_finished, flag_size = 2; //标识地雷,标识完成,标识模式大小
static int second = 0; //记录完成任务时间(秒)
static BITMAP bitmap1, bmpflag; //定义笑脸位图,标识位图
static BOOL fValid1 = FALSE; //笑脸位图显示
static BOOL fValidflag = FALSE; //判断标识是否显示
static BOOL bTimer; //判断时间是否开始
static HWND hHighscore,hCongratuate; //定义两个窗口句柄(记录高分时用)
static int winwidth = WIDTH_LARGEWIN; //游戏整体大小.初始值为大模式
static int offsetx; //整体方格边框的最左上角x坐标
static int x_face, x_bomnum, x_clock; //定义三个控件:笑脸,地雷数,时间
/***************************************************
*名 称:DrawMyBitmap()
*功 能:进行位图输出
*入口参数: hdc 窗口设置上下文句柄
* bmp 位数据结构指针
* x 图片位置x坐标值
* y 图片位置y坐标值
* w 图片宽
* h 图片高
*出口参数:无
****************************************************/
void DrawMyBitmap(HDC hdc, PBITMAP bmp, int x, int y, int w, int h)
{
/*FillBoxWithBitmap:位块填充函数(BOOL型,用设备相关位图对象填充矩形框)
* (x,y位图所在矩形的左上角坐标值;w,h矩形的宽高;bmp位图对象指针)*/
/*TextOut:文本输出函数(宏函数),返回输出字符串的长度*/
if (bmp)
FillBoxWithBitmap(hdc, x, y, w, h, bmp);
else
TextOut (hdc, x, y, "a");
}
/***************************************************
*名 称:Cancel3DFrame()
*功 能: 绘制方格
*入口参数: hdc 窗口设置上下文句柄
* l 左上角横坐标值
* t 左上角纵坐标值
* w 横坐标偏移值
* h 纵坐标偏移值
*出口参数:无
****************************************************/
void Cancel3DFrame(HDC hdc, int l, int t, int w, int h)
{
/*SetPenColor:设置画笔颜色(宏函数),返回旧的画笔颜色*/
/*Rectangle:画矩形函数,(l,t矩形左上角坐标值;l+w,t+h矩形右上角坐标值)*/
/*SetBrushColor:设置画刷颜色(宏函数),返回旧的画笔颜色*/
/*FillBox:位块填充函数*/
//绘制灰色框
SetPenColor (hdc,COLOR_darkgray);
Rectangle(hdc, l, t, l + w, t + h);
//刷灰
SetBrushColor(hdc,COLOR_lightgray);
FillBox(hdc, l+1, t+1, w-1, h-1);
}
/***************************************************
*名 称:TextValue()
*功 能: 显示方格
*入口参数: hdc 窗口设置上下文句柄
* x 方格左上角横坐标值
* y 方格左上角纵坐标值
* value 方格内的数字
*出口参数:无
****************************************************/
void TextValue(HDC hdc, int x, int y, int value)
{
int color = 0;
char va[20];
/*设置数字颜色*/
switch(value)
{
case 1: color=COLOR_blue; break;
case 2: color=COLOR_green; break;
case 3: color=COLOR_red; break;
case 4: color=COLOR_magenta; break;
case 5: color=COLOR_yellow; break;
case 6: color=COLOR_cyan; break;
case 7: color=COLOR_darkred; break;
case 8: color=COLOR_darkgreen; break;
}
/*SetBkColor:设置文本背景颜色(宏函数)*/
/*SetTextColor:设置文本颜色(宏函数)*/
SetBkColor(hdc,COLOR_lightgray);
SetTextColor(hdc,color);
sprintf(va,"%d",value); //将8个值存入va数组中
/*TextOut:文本输出函数(宏函数)
va:待输出的字符串(指针)*/
/*将游戏初始在屏幕中心*/
TextOut(hdc, x + ((WIDTH_BOX - GetSysCharWidth ()) >> 1),
y + ((HEIGHT_BOX - GetSysCharHeight ()) >> 1), va);
}
/**********************************************************
*名 称:SearchGround()
*功 能: 寻找无数字方格.如果是无数字方格,判断显示其8个方向的数值
*入口参数: hdc 窗口设置上下文句柄
* x 方格左上角横坐标值
* y 方格左上角纵坐标值
*出口参数:无
**********************************************************/
void SearchGround(HDC hdc,int x,int y)
{
int x1=0,y1=0;
int i=1; //判断方向的变量
/*方格的内容不是数字,只显示方格*/
bom[x][y].test=TRUE;
NoAdr[itime].x=x;
NoAdr[itime].y=y;
NoAdr[itime].NY=FALSE;
itime++;
Cancel3DFrame(hdc,x*WIDTH_BOX+offsetx, y*HEIGHT_BOX+HEIGHT_FACE,
WIDTH_BOX, HEIGHT_BOX);
/*依此判断8个方向*/
while( i <= 8 )
{
switch(i)
{
/*8个方向*/
case 1: x1=x-1; y1=y; break; //左
case 2: x1=x-1; y1=y-1; break; //左上
case 3: x1=x-1; y1=y+1; break; //左下
case 4: x1=x+1; y1=y; break; //右
case 5: x1=x+1; y1=y-1; break; //右上
case 6: x1=x+1;
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
LINUX_Bomb.rar (26个子文件)
LINUX扫雷代码
res
0.bmp 278B
3.bmp 278B
face.bmp 534B
1.bmp 278B
4.bmp 278B
8.bmp 278B
finished.bmp 534B
hitfalse.bmp 246B
Makefile.am 145B
2.bmp 278B
Makefile.in 7KB
5.bmp 278B
Thumbs.db 22KB
9.bmp 278B
flag.bmp 230B
lei.bmp 230B
7.bmp 278B
6.bmp 278B
face1.bmp 534B
bomb.c~ 59KB
bomb 39KB
bomb.c 59KB
Makefile.am 56B
Makefile~ 79B
Makefile.in 15KB
Makefile 75B
共 26 条
- 1
资源评论
alvarocfc
- 粉丝: 109
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功