⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mine.c

📁 一个嵌入式操作系统(microwindows)的源代码
💻 C
📖 第 1 页 / 共 3 页
字号:
#include <stdio.h>#include <stdlib.h>#include <time.h>#include <string.h>/* * Minesweeper for Microwindows, adapted from MiniGUI */extern int mwCurrentButtons;	/* FIXME */#ifdef __rtems__#define  srandom  srand#define  random   rand#endif#define MWINCLUDECOLORS#include "windows.h"#include "wintools.h"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;typedef struct {	DWORD	dwStyle;	LPSTR	spCaption;	HMENU	hMenu;	HCURSOR	hCursor;	HICON	hIcon;	WNDPROC	MainWindowProc;	int	lx, ty, rx, by;	COLORREF iBkColor;	DWORD	dwAddData;	HWND	hHosting;} MAINWINCREATE, *PMAINWINCREATE;#define IDOK	0#define GetCharWidth()		11#define GetCharHeight()		13extern MWIMAGEHDR image_mineflag;extern MWIMAGEHDR image_mineface;extern MWIMAGEHDR image_minefacelost;extern MWIMAGEHDR image_minebomb;extern MWIMAGEHDR image_minedone;extern MWIMAGEHDR image_minehitfalse;HWND CreateMainWindow(PMAINWINCREATE pCreateInfo);BOOL PtInRect2(const RECT *lprc, int x, int y);void Draw3DUpFrame(HDC hDC, int l, int t, int r, int b, int fillc);void SearchGround(HDC hdc,int x,int y);int Open(HWND hWnd,int x,int y);LRESULT TestMyWinProc(HWND hWnd,UINT 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);#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  371#define  WIDTH_MIDDLEWIN  287#define  HEIGHT_MIDDLEWIN 332#define  WIDTH_SMALLWIN   178#define  HEIGHT_SMALLWIN  206#define  WIDTH_FACE      30#define  HEIGHT_FACE     30#define  WIDTH_DIGIT     11#define  WIDTH_BOMNUM    (2*WIDTH_DIGIT)#define  HEIGHT_BOMNUM   30#define  WIDTH_CLOCK     (3*WIDTH_DIGIT)#define  HEIGHT_CLOCK    30#define  FREQ_CLOCK      1000#define  WIDTH_BOX       18#define  HEIGHT_BOX      18#if 0static int winwidth = WIDTH_LARGEWIN;	/* change this for startup mine size */static int winheight = HEIGHT_LARGEWIN;static int sg_boxnumx = 30;static int sg_boxnumy = 18;static int bombnum = 99;#endif#if 1static int winwidth = WIDTH_MIDDLEWIN;	/* change this for startup mine size */static int winheight = HEIGHT_MIDDLEWIN;static int sg_boxnumx = 16;static int sg_boxnumy = 16;static int bombnum = 40;#endif#if 0static int winwidth = WIDTH_SMALLWIN;	/* change this for startup mine size */static int winheight = HEIGHT_SMALLWIN;static int sg_boxnumx = 8;static int sg_boxnumy = 8;static int bombnum = 10;#endifstatic BOM bom[30][18];static NO NoAdr[540];static SCORE score[3];static int itime, leftbombnum;static int oldx, oldy, adrx, adry;static int flag_bombout, flag_finished, flag_size = 2;static int second = 0 ;static BOOL bTimer;static HWND hHighscore,hCongratulate; static int offsetx;static int x_face, x_bomnum, x_clock;void Cancel3DFrame(HDC hdc, int  l, int  t, int w, int h){    HBRUSH hbr;    RECT rc;    SetTextColor (hdc,GRAY);    Rectangle(hdc, l, t, l + w, t + h);    hbr = CreateSolidBrush(LTGRAY);    SetRect(&rc, l+1, t+1, l+w, t+h);    FillRect(hdc, &rc, hbr);    DeleteObject(hbr);} void TextValue(HDC hdc, int x, int y, int value) {    int color = 0;    char   va[20];     switch(value)    {       case 1:  color=BLUE;       break;       case 2:  color=GREEN;      break;          case 3:  color=RED;        break;       case 4:  color=MAGENTA;    break;       case 5:  color=YELLOW;     break;       case 6:  color=CYAN;       break;       case 7:  color=RED;    break;       case 8:  color=GREEN;  break;     }    SetBkColor(hdc,LTGRAY);    SetTextColor(hdc,color);    sprintf(va,"%d",value);        TextOut(hdc, x + ((WIDTH_BOX - GetCharWidth ()) >> 1),         y + ((HEIGHT_BOX - GetCharHeight ()) >> 1), va, -1);}  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);     while( i <= 8 )     {         switch(i)          {             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;  y1=y+1;  break;             case  7:  y1=y-1;  x1=x;    break;             case  8:  y1=y+1;  x1=x;    break;            }         if( x1>=0 && y1>=0 && x1<sg_boxnumx && y1<sg_boxnumy                 &&!bom[x1][y1].hit&& !bom[x1][y1].test && !bom[x1][y1].value )               SearchGround(hdc,x1,y1);                              if( x1>=0 && y1>=0 && x1<sg_boxnumx && y1<sg_boxnumy                            &&!bom[x1][y1].hit                            &&!bom[x1][y1].test && bom[x1][y1].value!=0 )         {             bom[x1][y1].test=TRUE;             NoAdr[itime].x=x1;             NoAdr[itime].y=y1;             NoAdr[itime].NY=TRUE;             itime++;             Cancel3DFrame(hdc, x1*WIDTH_BOX+offsetx, y1*HEIGHT_BOX+HEIGHT_FACE,                                 WIDTH_BOX, HEIGHT_BOX);             TextValue(hdc, x1*WIDTH_BOX+offsetx, y1*HEIGHT_BOX+HEIGHT_FACE,                                  bom[x1][y1].value);         }          i++;     } } BOOL Open(HWND hWnd,int x,int y){     int x1=0,y1=0;    int i=1;    HDC hdc;    hdc = GetDC(hWnd);    while( i <= 8 )    {        switch( i ) {            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;  y1=y+1;  break;            case  7:  y1=y-1;  x1=x;    break;            case  8:  y1=y+1;  x1=x;    break;           }        if( x1>=0 && y1>=0 && x1<sg_boxnumx && y1<sg_boxnumy            && !bom[x1][y1].hit && bom[x1][y1].flag) {                ReleaseDC(hWnd, hdc);            return FALSE;        }                              if( x1>=0 && y1>=0 && x1<sg_boxnumx && y1<sg_boxnumy                && !bom[x1][y1].test && !bom[x1][y1].value                && !bom[x1][y1].flag ){            SearchGround(hdc,x1,y1);        }                                if( x1>=0 && y1>=0 && x1<sg_boxnumx && y1<sg_boxnumy                  && !bom[x1][y1].test && bom[x1][y1].value!=0 )        {            bom[x1][y1].test=TRUE;            NoAdr[itime].x=x1;            NoAdr[itime].y=y1;            NoAdr[itime].NY=TRUE;            itime++;             Cancel3DFrame(hdc, x1*WIDTH_BOX+offsetx, y1*HEIGHT_BOX+HEIGHT_FACE,                                 WIDTH_BOX, HEIGHT_BOX);             TextValue(hdc, x1*WIDTH_BOX+offsetx, y1*HEIGHT_BOX+HEIGHT_FACE,                                  bom[x1][y1].value);        }        i++;     }        ReleaseDC(hWnd, hdc);    return  TRUE; }void BombOut(HWND hWnd){   int i,j;  HDC hdc;    hdc=GetDC(hWnd);    for (i = 0; i < sg_boxnumx; i++) {      for (j = 0; j < sg_boxnumy; j++) {         if (bom[i][j].flag && !bom[i][j].hit) {            Cancel3DFrame(hdc,i*WIDTH_BOX+offsetx,j*HEIGHT_BOX+HEIGHT_FACE,                    WIDTH_BOX,HEIGHT_BOX);                    	    DrawDIB(hdc, i*WIDTH_BOX+offsetx+1, j*HEIGHT_BOX+1+HEIGHT_FACE,			&image_minebomb);            bom[i][j].bombout = TRUE;                      }         if (!bom[i][j].flag && bom[i][j].hit){            Cancel3DFrame(hdc,i*WIDTH_BOX+offsetx,j*HEIGHT_BOX+HEIGHT_FACE,                    WIDTH_BOX,HEIGHT_BOX);                    	    DrawDIB(hdc, i*WIDTH_BOX+offsetx+1, j*HEIGHT_BOX+1+HEIGHT_FACE,			&image_minehitfalse);            bom[i][j].error = TRUE;                                              }          }   }   DrawDIB(hdc, x_face, 0, &image_minefacelost);   flag_bombout = 1;   bTimer = FALSE;   ReleaseDC(hWnd, hdc);}void Finished(HWND hWnd){     int i,j;    HDC hdc;    RECT bombnumber;    MAINWINCREATE CreateInfo;      hdc = GetDC(hWnd);      for (i = 0; i < sg_boxnumx; i++) {        for (j = 0; j < sg_boxnumy; j++) {            if (bom[i][j].flag && !bom[i][j].hit) {                    		DrawDIB(hdc, i*WIDTH_BOX+offsetx+3, j*HEIGHT_BOX+3+HEIGHT_FACE,				 &image_mineflag);                bom[i][j].hit = TRUE;                                 }        }    }    DrawDIB(hdc, x_face+1, 1, &image_minedone);    flag_finished = 1;    bTimer = FALSE;    ReleaseDC(hWnd, hdc);       leftbombnum = 0;                         SetRect (&bombnumber, x_bomnum, 0,                         x_bomnum + WIDTH_BOMNUM, HEIGHT_BOMNUM);    InvalidateRect (hWnd, &bombnumber, FALSE);       if (second < score[flag_size].highscore){        InitCongratulationCreateInfo(hWnd, &CreateInfo);        hCongratulate = CreateMainWindow (&CreateInfo);    }    }    #if 0HMENU createpmenuabout(){    HMENU hmnu;    MENUITEMINFO mii;    memset (&mii, 0, sizeof(MENUITEMINFO));    mii.type        = MFT_STRING;    mii.id          = 0;    mii.typedata    = (DWORD)"About";    hmnu = CreatePopupMenu (&mii);        memset (&mii, 0, sizeof(MENUITEMINFO));    mii.type        = MFT_STRING ;    mii.state       = 0;    mii.id          = ID_ABOUT;    mii.typedata    = (DWORD)"About Bomb Game";    InsertMenuItem(hmnu, 3, TRUE, &mii);    return hmnu;}HMENU createpmenustart(){    HMENU hmnu;    MENUITEMINFO mii;    memset (&mii, 0, sizeof(MENUITEMINFO));    mii.type        = MFT_STRING;    mii.id          = 0;    mii.typedata    = (DWORD)"Start";    hmnu = CreatePopupMenu (&mii);        memset (&mii, 0, sizeof(MENUITEMINFO));    mii.type        = MFT_STRING ;    mii.state       = 0;    mii.id          = ID_NEW;    mii.typedata    = (DWORD)"New Game";    InsertMenuItem(hmnu, 0, TRUE, &mii);        mii.type        = MFT_STRING ;    mii.state       = 0;    mii.id          = ID_HIGHSCORE;    mii.typedata    = (DWORD)"High Score";    InsertMenuItem(hmnu, 1, TRUE, &mii);        mii.type        = MFT_STRING ;    mii.state       = 0;    mii.id          = ID_CLOSE;    mii.typedata    = (DWORD)"Quit Game";    InsertMenuItem(hmnu, 2, TRUE, &mii);        return hmnu;}HMENU createpmenulevel(){    HMENU hmnu;    MENUITEMINFO mii;    memset (&mii, 0, sizeof(MENUITEMINFO));    mii.type        = MFT_STRING;    mii.id          = 0;    mii.typedata    = (DWORD)"Level";    hmnu = CreatePopupMenu (&mii);        mii.type        = MFT_STRING ;    mii.state       = 0;    mii.id          = ID_LARGE;    mii.typedata    = (DWORD)"Large";    InsertMenuItem(hmnu, 0, TRUE, &mii);         mii.type        = MFT_STRING ;    mii.state       = 0;    mii.id          = ID_MIDDLE;    mii.typedata    = (DWORD)"Middle";    InsertMenuItem(hmnu, 1, TRUE, &mii);          mii.type        = MFT_STRING ;    mii.state       = 0;    mii.id          = ID_SMALL;    mii.typedata    = (DWORD)"Small";    InsertMenuItem(hmnu, 2, TRUE, &mii);      return hmnu;}HMENU createmenu1(){    HMENU hmnu;    MENUITEMINFO mii;    hmnu = CreateMenu();    memset (&mii, 0, sizeof(MENUITEMINFO));    mii.type        = MFT_STRING;    mii.id          = 100;    mii.typedata    = (DWORD)"Start";

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -