C 自制拼图游戏.docx

上传人:b****6 文档编号:5764497 上传时间:2023-01-01 格式:DOCX 页数:30 大小:23.23KB
下载 相关 举报
C 自制拼图游戏.docx_第1页
第1页 / 共30页
C 自制拼图游戏.docx_第2页
第2页 / 共30页
C 自制拼图游戏.docx_第3页
第3页 / 共30页
C 自制拼图游戏.docx_第4页
第4页 / 共30页
C 自制拼图游戏.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

C 自制拼图游戏.docx

《C 自制拼图游戏.docx》由会员分享,可在线阅读,更多相关《C 自制拼图游戏.docx(30页珍藏版)》请在冰豆网上搜索。

C 自制拼图游戏.docx

C自制拼图游戏

//编译环境VC++6.0.程序和资源一共15M.

//需要的留个EMAIL....  能上传到这里供大家下载吗?

  谁知道告诉我

//自制-拼图游戏   作者:

高坤  转载请标明出处  谢谢

//代码笨拙  高手勿笑   欢迎批评指正

#include

#include

#include

#include

#include"resource.h"

HINSTANCEhInst;

HBITMAPpic,empty,compare_pic,pict[8],compare_pict[8],other;   //所有图的变量名

HDChdc,mdc;                                                   //DC名

intmouse_x,mouse_y,n=0,line=3,high3=100,high4=200,high5=300;   //鼠标XY移动步数难度记录

charstr[10]="";                                               //字符串,显示步数和记录时用

boolfin=false,new3=true,new4=false,new5=false;                 //完成难度三四五的重绘

structPoint

{

    intx;

    inty;

    intnum;

}point[26];                                                     //块

ATOMMyRegisterClass(HINSTANCEhInstance);

BOOLInitInstance(HINSTANCE,int);

LRESULTCALLBACK    WndProc(HWND,UINT,WPARAM,LPARAM);

voidMyPaint();                                                  //显示

voidChange_Block(intblock1,intblock2);                        //交换两块的属性

voidSave();                                                     //保存记录

voidGetPos();                                                   //为重绘做的随机排列

intAPIENTRYWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,LPSTRlpCmdLine,intnCmdShow)

{

    MSGmsg;

    MyRegisterClass(hInstance);

    if(!

InitInstance(hInstance,nCmdShow))   //如果实例化失败,退出

    {

        returnFALSE;

    }

    while(GetMessage(&msg,NULL,0,0))        //消息循环,一直获取消息,直到消息返回值为假

    {

        TranslateMessage(&msg);                 //翻译消息

        DispatchMessage(&msg);                  //将消息发到适当的对象上

    }

    returnmsg.wParam;

}

ATOMMyRegisterClass(HINSTANCEhInstance)   //注册窗口类,通知你要建的窗口是什么样的.可以有多个,用类名来区分

{

    WNDCLASSEXwcex;                                      //类名

    wcex.cbSize=sizeof(WNDCLASSEX);                     //类的长度      cb...表示存储空间

    wcex.style            =CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS;        //窗口风格  水平horizontal.垂直vertical.重画redraw

    wcex.lpfnWndProc    =(WNDPROC)WndProc;               //指向函数的一个指针指向WndProc

                                                //LRESULTCALLBACKWndProc(HWNDhWnd,UINTmessage,WPARAMwParam,LPARAMlParam)

    wcex.cbClsExtra        =0;                              //类变量占用的存储(cb表示存储空间的前缀)

    wcex.cbWndExtra        =0;                              //实例变量占用的存储

    wcex.hInstance        =hInstance;                     //定义该类的应用程序实例的句柄

    wcex.hIcon            =LoadIcon(hInstance,MAKEINTRESOURCE(IDI_ICON1));                     //图标对象的句柄

    wcex.hCursor        =LoadCursor(NULL,IDC_ARROW);   //光标图像的句柄

    wcex.hbrBackground    =(HBRUSH)(COLOR_WINDOW+1);      //用于擦掉用户区的刷子的句柄

    wcex.lpszMenuName    =(LPCSTR)IDR_MENU1;                           //标识选单对象的字符串

    wcex.lpszClassName    ="CAN";                          //该类名字的字符串  lpsz长指针,以\0结束

    wcex.hIconSm        =NULL;                           //

    returnRegisterClassEx(&wcex);                        //定义完类的各个对象后注册

}

BOOLInitInstance(HINSTANCEhInstance,intnCmdShow)

{

    HWNDhWnd;

    hInst=hInstance;

    charfilename[30]="";

    hWnd=CreateWindow("CAN","游戏窗口",WS_OVERLAPPEDWINDOW&~WS_MAXIMIZEBOX&~WS_THICKFRAME,CW_USEDEFAULT,0,CW_USEDEFAULT,0,NULL,NULL,hInstance,NULL);

    if(!

hWnd)         //类名,用于标识创建的窗口属于哪个类.

    {

        returnFALSE;

    }

    MoveWindow(hWnd,80,100,1087,526,true);

    ShowWindow(hWnd,nCmdShow);

    UpdateWindow(hWnd);

    hdc=GetDC(hWnd);

    mdc=CreateCompatibleDC(hdc);                          //创建缓存

    empty=(HBITMAP)LoadImage(hInstance,"Source\\pic\\empty.bmp",IMAGE_BITMAP,687,526,LR_LOADFROMFILE);

   

   for(intm=0;m<=7;m++)

    {

        sprintf(filename,"Source\\pic\\pic%d.bmp",m);      //读图,没什么好说的

        pict[m]=(HBITMAP)LoadImage(hInstance,filename,IMAGE_BITMAP,600,480,LR_LOADFROMFILE);

        compare_pict[m]=(HBITMAP)LoadImage(hInstance,filename,IMAGE_BITMAP,450,360,LR_LOADFROMFILE);

    }

    pic=pict[0];

    compare_pic=compare_pict[0];

    FILE*fp;                                       //读入record文件中的记录

    if((fp=fopen("Source\\record","ab+"))==NULL)

    {

        MessageBox(NULL,"不能打开record文件,可能被删除,请在Source中重新建立.","",NULL);

        returnfalse;

    }

    else

    {

        fread(&high3,sizeof(high3),1,fp);

        fread(&high4,sizeof(high4),1,fp);

        fread(&high5,sizeof(high5),1,fp);

        fclose(fp);

    }

   MyPaint();

   returnTRUE;

}

LRESULTCALLBACKWndProc(HWNDhWnd,UINTmessage,WPARAMwParam,LPARAMlParam)

{

    PAINTSTRUCTps;

    intblock_num=0;                        //用于鼠标所指的块的编号,非NUM号要区分

    switch(message)

    {

    caseWM_PAINT:

                          //显示

        hdc=BeginPaint(hWnd,&ps);

        hdc=GetDC(hWnd);

        MyPaint();

        EndPaint(hWnd,&ps);

        break;

    caseWM_COMMAND:

                                      //菜单命令        

        switch(LOWORD(wParam))

        {

        caseID_NEWGAME:

            fin=0;n=0;

            switch(line)

            {

            case3:

new3=true;break;           //读图后要重排图

            case4:

new4=true;break;

            case5:

new5=true;break;

            default:

;

            }

            MyPaint();

            break;

        caseID_PIC0:

            pic=pict[0];                       //读入大图

            compare_pic=compare_pict[0];      //读入参照图

            fin=0;n=0;

            switch(line)

            {

            case3:

new3=true;break;           //读图后要重排图

            case4:

new4=true;break;

            case5:

new5=true;break;

            default:

;

            }

            MyPaint();

            break;

        caseID_PIC1:

                pic=pict[1];

                compare_pic=compare_pict[1];

                fin=0;n=0;

                switch(line)

                {

                case3:

new3=true;break;

                case4:

new4=true;break;

                case5:

new5=true;break;

                default:

;

                }

                MyPaint();

                break;

        caseID_PIC2:

            pic=pict[2];

            compare_pic=compare_pict[2];

            fin=0;n=0;

            switch(line)

            {

            case3:

new3=true;break;

            case4:

new4=true;break;

            case5:

new5=true;break;

            default:

;

            }

            MyPaint();

            break;        

        caseID_PIC3:

            pic=pict[3];

            compare_pic=compare_pict[3];

            fin=0;n=0;

            switch(line)

            {

            case3:

new3=true;break;

            case4:

new4=true;break;

            case5:

new5=true;break;

            default:

;

            }

            MyPaint();

            break;

        caseID_PIC4:

            pic=pict[4];

            compare_pic=compare_pict[4];

            fin=0;n=0;

            switch(line)

            {

            case3:

new3=true;break;

            case4:

new4=true;break;

            case5:

new5=true;break;

            default:

;

            }

            MyPaint();

            break;

        caseID_PIC5:

            pic=pict[5];

            compare_pic=compare_pict[5];

            fin=0;n=0;

            switch(line)

            {

            case3:

new3=true;break;

            case4:

new4=true;break;

            case5:

new5=true;break;

            default:

;

            }

            MyPaint();

            break;

        caseID_PIC6:

            pic=pict[6];

            compare_pic=compare_pict[6];

            fin=0;n=0;

            switch(line)

            {

            case3:

new3=true;break;

            case4:

new4=true;break;

            case5:

new5=true;break;

            default:

;

            }

            MyPaint();

            break;

        caseID_PIC7:

            pic=pict[7];

            compare_pic=compare_pict[7];

            fin=0;n=0;

            switch(line)

            {

            case3:

new3=true;break;

            case4:

new4=true;break;

            case5:

new5=true;break;

            default:

;

            }

            MyPaint();

            break;

        caseID_PIC8:

            if(LoadImage(NULL,"Source\\pic\\other.bmp",IMAGE_BITMAP,600,480,LR_LOADFROMFILE))   //成功载入other.bmp

            {

                pic=(HBITMAP)LoadImage(NULL,"Source\\pic\\other.bmp",IMAGE_BITMAP,600,480,LR_LOADFROMFILE);   

                compare_pic=(HBITMAP)LoadImage(NULL,"Source\\pic\\other.bmp",IMAGE_BITMAP,450,360,LR_LOADFROMFILE);

                fin=0;n=0;

                switch(line)

                {

                case3:

new3=true;break;     

                case4:

new4=true;break;

                case5:

new5=true;break;

                default:

;

                }

                MyPaint();

            }

            elseMessageBox(hWnd,"pic文件夹中无other.bmp文件.","说明",NULL);   //未成功载入other.bmp

            break;

       caseID_THREE:

           new3=true;new4=false;new5=false;line=3;fin=0;n=0;  //如果选难度三,则要重排图,不许四,五重排.难度设为三,标记未完成,n从0记数.

           MyPaint();

           break;

        caseID_FOUR:

            new3=false;new4=true;new5=false;line=4;fin=0;n=0;

            MyPaint();

            break;

        caseID_FIVE:

            new3=false;new4=false;new5=true;line=5;fin=0;n=0;

            MyPaint();

            break;

        caseID_INTRODUCE:

            MessageBox(hWnd,"鼠标点击移动,拼完整即胜利!

\n\n如果想自添加图需要用BMP格式,文件名为other.bmp。

并放入pic文件夹中.","说明",NULL);

            break;

        caseID_ABOUT:

            MessageBox(hWnd,"如发现BUG或有好的建议。

请致信EMAIL:

29648634@。

谢谢!

\n\n\t   SpecialThank老婆--悦对我的大力支持!

\n\n\t\t\t\t\t作者:

高坤","说明",NULL);

            break;

        caseID_EXIT:

            

                DestroyWindow(hWnd);

            

            break;

        default:

     

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 工学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1