Sunwayking

导航

爱拼图(i-JIGSAW)工程测试版发布

随便练手写了个拼图游戏,大概贴一下,由于本人水平有限,代码风格难免有问题,还请各位高手海涵.

游戏的组框架已经完成,但是还有很多功能没有添加,以后慢慢来完善,窗口大部分按钮没有添加响应函数.

每一次打开游戏都会重新开始一轮挑战(挑战是随机生成的).

头文件预览:

 1:  #pragma once
 2:  
 3:  class CJigsaw;
 4:  class CJigsawBlock  //拼图块类.
 5:  {
 6:  public:
 7:      CJigsawBlock();        //无参数的构造函数.
 8:      CJigsawBlock(const CJigsawBlock& RightSide); //拷贝构造函数.
 9:      ~CJigsawBlock();    //析构函数.
10:      friend CJigsaw;  //设置本类为类CJigsawd的友元.
11:      CJigsawBlock& operator=(const CJigsawBlock& RightSide);  //重载赋值运算符
12:  protected:
13:      CImage* m_lpBlock;    //图片.
14:      CPoint* m_lpPosion;    //块位置(只用来标示在数组中的坐标).
15:      CJigsaw* m_lpParent;    //此指针用于调用CJigsaw,在本类初始化时应对此赋值.
16:      CRect* m_lpRect;    //拼图块的矩形大小,与m_Block的大小对应相等,与屏幕坐标系对应.
17:  private:
18:      BOOL MoveLeft();    //拼图块向左移动一个单位,如果无法移动则返回False.
19:      BOOL MoveRight();    //拼图块向右移动一个单位,如果无法移动则返回False.
20:      BOOL MoveUp();    //拼图块向上移动一个单位,如果无法移动则返回False.
21:      BOOL MoveDown();    //拼图块向下移动一个单位,如果无法移动则返回False.
22:  public:
23:      void Initialize(CJigsaw* lpParent,CPoint* lpPosition,CImage* lpImage,CRect* lpRect);    //传入CJigsaw指针,内部调用CJigsawBlock(),应用此函数初始化本类.
24:      BOOL MoveTheBlock();  //移动拼图块,需要调用MoveLeft,MoveRight,MoveUp,MoveDown.
25:      BOOL isBackupBlock();   //返回布尔值,如果是缺失块,则返回TRUE.
26:  };

 

 1:  #pragma once
 2:  #define DEF_PIECE 4  //默认拼图权值,用来与难度做和.
 3:  
 4:  class CJigsawBlock;
 5:  class CJigsaw //拼图类.
 6:  {
 7:  public:
 8:      CJigsaw();  //构造函数
 9:      ~CJigsaw();    //析构函数
10:  private:
11:      CJigsawBlock* m_lpBlocks;    //拼图块的1维集合(用1维标示2维).
12:      CJigsawBlock* m_lpBackupBlock;    //缺失的拼图块的备份.
13:      int m_Difficulty;   //游戏难度等级,决定了拼图块的个数(对应关系为: 若拼图块的个数位 n*n,则n=m_Difficulty+4).
14:      BOOL m_isPaused; //标志游戏是否出于暂停状态.
15:      const int m_cBlockspace; //拼图块的间距值.
16:  public:
17:      CJigsawBlock* GetBlockAt(CPoint* lpPoint);    //获取某个位置上的拼图块.
18:      CJigsawBlock* GetBlockAt(int x,int y);     //获取某个位置上的拼图块.
19:      CJigsawBlock* GetBlockAt(int n); //通过1维数组坐标获得拼图块.
20:      void IntroduceImage(LPSTR path);    //从外部导入图片,需要调用ZoomImage以及DivideImage.
21:      void IntroduceImage(CImage* lpImage);    //从外部导入图片,需要调用ZoomImage以及DivideImage.
22:      CJigsawBlock* GetBlockAtMousePos(CPoint* pos);   //获取当前鼠标处的拼图块.
23:      void StartNewGame(); //开始新游戏.
24:      void PauseGame(); //暂停或者继续游戏.
25:      void PaintClient(CPaintDC &dc);    //绘制客户区,供OnPaint函数调用.
26:      BOOL isPaused();   //获取游戏是否暂停,暂停则返回True.
27:      CJigsawBlock* GetBackupBlock();    //获得确实的拼图块备份.
28:      int GetDifficulty();    //获取难度等级.
29:      BOOL CheckWin();    //检测是否胜利.
30:  protected:
31:      void ZoomImage(CImage* lpImage);    //缩放并剪裁外部导入的图片.
32:      void DivideImage(CImage* lpImage,int nPieces);    //细分图片为若干块并导入拼图块集合.
33:      void SetDifficulty(int difficulty); //设置游戏难度等级.
34:  private:
35:      void IntroduceDefaultImage(); //导入默认的图片(程序自带).
36:  };
37:   

 

游戏界面预览:

QQ截图未命名

游戏下载:

爱拼图(i-JIGSAW)工程测试版

posted on 2009-03-28 23:30  Sunwayking  阅读(425)  评论(1编辑  收藏  举报