C++做拼图游戏

C++做拼图游戏
C++做拼图游戏

一步一步做拼图游戏,C++版首先,我们就要抛弃控制台的黑洞洞的窗口了,我们必须要先创建一个Windows的窗口。创建的方法有很多,不过呢,要先确定你将要使用的编译器,VC6.0,VS2005,VS 2008,VS2010,DEV-C++,Code::Block等等,还有一个C++ Builder和其他的不太一样。我用的是VS2010 Team版,Win7系统。所以我就以VS2010为例子了。其他的也差不多。

一、创建窗口:

1.文件->新建->项目->Win32项目,写上名字,点确定。如图

2.在新窗口中点下一步,直接点完成也可以,直接点完成的就可以跳过第3步。

3.在这个窗口中要选择windows应用程序,不要选空项目,再点确定,如图:

这些完了之后,就会出现Puzzle.cpp文件,里面就是代码。解决方案管理器里会有其他的东西,如图所示:

可以看到有很多文件,双击打开后都有注释写着每个文件的用处,我们目前只用到Pu zzle.cpp,当然,如果你起的是别的名字,就和我的不同了。

现在编译,运行就可以看到一个白色的窗口,里面什么都没有。

然后,我们还要进行一点其他的修改工作:

找到下面的一段代码

Code:

1.BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)

2.{

3. HWND hWnd;

4.

5. hInst = hInstance; //

6.

7. hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW & ~WS_SIZ

EBOX & ~WS_MAXIMIZEBOX, //这里修改了,让WS_OVERLAPPEDWINDOW & ~WS_SIZEBOX & ~WS_MAX IMIZEBOX的目的是去掉最大化的按钮,同时禁止修改窗口大小

8. CW_USEDEFAULT, 0, /*CW_USEDEFAULT, 0*/800, 600, /*这里的800和600就是窗

口的大小,我采用的是800*600的,大家自己根据实际情况改*/NULL, NULL, hInstance, NULL);

9.……

10.}

二、制作一些其他需要的资源

现在有窗口了,那么,我们要有其他的资源,比如各种图片,声音,还可以有鼠标指针。

我们先制作图片就行了,声音,鼠标指针以后再说。因为图片资源是必须的,其他的是可选的。

我们需要一张背景图片。

随便找张图片,选个大小,我当然选的是800*600的。

然后打开PS去修改吧,我不教PS了,我改的结果是这样的,里面还有一些坐标要记下来的。如图:

再来一张没坐标的,可以直接下载用。不过因为CSDN的相册空间太小,所以给个地址吧,链接到百度相册,大家见谅。

https://www.360docs.net/doc/9a17543243.html,/yjn43422757/pic/item/b71b2654aeb2c412564e0084. jpg

记住,保存成BMP格式的,因为BMP的读取起来很容易,如果是JPG的,还要自己去写相应的读取函数。

转换的方法就是用画图打开图片,然后选择“文件->另存为->BMP(24位)”

然后,还要一张用来进行游戏的图,也就是要拼的图,这个更简单了,弄张400*400的就行了(因为我的游戏区大小是400*400)。

到现在为止,我们的准备工作已经完成了。下面,就是编写代码的过程了。

三、设计功能

1.定义类

CPuzzleLogic, 用来实现内部逻辑的行为

CPuzzleView, 用来实现视图显示方面的

CPuzzleMain 用来实现主程序,主要是把各部分的联系起来

如果还有其他需要的,以后再定义别的

创建类的时候可以用类向导,不过,VS2008和VS2005里没有,所以用以下方法:先把解决方案管理器调到类视图里,在项目名称上单击鼠标右键,添加,类

选“C++类”,单击“添加”,在新窗口中写上类名,单击“确定”

如上图,再重复添加其他两个类。

在CPuzzleMain类的头文件上面的#pragma once后面加上

#include "PuzzleLogic.h"

#include "PuzzleView.h"

2.给类相应的功能

先在CPuzzleMain类里添加两个成员变量,分别是其他两个类的类型,用来以后引用里面的功能。

添加方法如下图:

在类视图里右键单击类名称,添加,添加变量

选成private可以防止类外访问到它,写上变量类型和变量名称,然后可以写几句注释

以同样的方法再添加另一个变量,当然,你也可以直接在头文件里写上,效果是一样的,只是这样的做法可以自动初始化系统有的类型,否则有时候会出错。

3.添加画图功能

我们设计一个画图的函数,这样的话,以后就不必每次都去写画图函数了

添加函数的方法:在类视图里右键单击类名称,添加,添加函数,参考添加变量的图在新窗口中输入返回类型,函数名,函数的参数,以及注释等等信息。

这样的好处是点击完成的时候,系统会自动添加到头文件中声明,和.cpp文件中的定义部分。

然后写代码吧。

(1)要先在CPuzzleView里加上两个成员变量

private:

HWND m_hWnd; // 保存窗口句柄

HBITMAP m_hBmpBack;//保存背景图片

(2)把前面做好的图片复制到源代码文件夹的res文件夹里,如果没有的话,就自己新

建一个,当然你也可以写别的名字,不过要自己记住,我这里就以res为例子。

(3)添加以下几个函数

Code:

1.// 画图,hBitmap表示指向图片的指针,x,y表示位图显示的横纵坐标,nWidth,nHeight位图

的宽度和高度,srcX,srcY从位图的的哪个位置开始显示

2.void CPuzzleView::DrawPic(HBITMAP hBitmap, int x, int y, int nWidth, int nHe

ight, const int srcX=0, const int srcY=0)

3.{

4. HDC hdcMe

m;

//内存DC

5. HDC hdcScr = GetDC(m_hWnd); //获取屏幕的DC

6. hdcMem = CreateCompatibleDC(hdcScr); //创建兼容屏幕的内存DC

7. SelectObject( hdcMem, hBitmap ); //将图片绑

定内存DC上

8. BitBlt( hdcScr, x, y, nWidth, nHeight, hdcMem, srcX, srcY, SRCCOP

Y ); //将内存DC里的东西画到屏幕上

9. DeleteDC(hdcMe

m); //清除两个D C

10. DeleteDC(hdcScr);

11.}

12.

13.// 初始化图像显示的对象

14.bool CPuzzleView::InitView(HWND hWnd)

15.{

16. m_hWnd = hWnd; //将窗口句柄传进来

17. m_hBmpBack = (HBITMAP)LoadImage(NULL, _T("res\\background.bmp"), IMAG

E_BITMAP, 0, 0, LR_DEFAULTSIZE|LR_LOADFROMFILE);//读取图片文件

18.if(m_hBmpBack == NULL)

19. {

20. MessageBox(NULL, _T("读取背景文件失败"), _T("Error"), MB_OK);

21.return false;

22. }

23. DrawPic(m_hBmpBack, 0, 0, 800, 600);//画背景

24.return true;

25.}

26.

27.// 用于重绘

28.void CPuzzleView::OnPaint(void)

29.{

30. DrawPic(m_hBmpBack, 0, 0, 800, 600);//重绘背景

31.}

在CPuzzleMain类里添加函数

Code:

1.// 执行初始化工作

2.bool CPuzzleMain::InitMain(HWND hWnd)

3.{

4. m_View.InitView(hWnd);

5.return false;

6.}

7.// 用来重绘

8.void CPuzzleMain::OnPaint(void)

9.{

10. m_View.OnPaint();

11.}

12.

然后,在Puzzle.cpp中,也就是系统自动生成的文件里添加全局变量及头文件引用

#include "PuzzleMain.h"

CPuzzleMain g_PuzzleMain;//保存游戏实例

在下面的BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)函数中,return前加上游戏的初始化代码

g_PuzzleMain.InitMain(hWnd);

在消息循环的函数中,找到

Code:

1.LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPar

am)

2.{

3.…

4.case WM_PAINT:

5. hdc = BeginPaint(hWnd, &ps);

6.// TODO: 在此添加任意绘图代码...

7. g_PuzzleMain.OnPaint();//添加绘图代码

8. EndPaint(hWnd, &ps);

9.break;

10.…

11.}

好了,现在编译并运行程序,就可以显示出来背景了。

简单介绍一下,在OnPaint()里会看到HDC类型的变量,比如

HDC hMem;这是声明了一个内存DC,所谓DC,网上说的是设备描述表(Devi ce Context,DC),设备描述表(Device Context,DC)是一个信息结构体,包含物理输出设备及其驱动程序。在Windows平台下,所有的图形操作都是通过它完成。

不用管他是什么结构体,只要知道用它可以操作图形图像,想显示在显示器里就要创建一个兼容显示设备的DC,然后就可以显示了,比如

Code:

1.HDC hdcMem;

m;

//内存DC

2. HDC hdcScr = GetDC(m_hWnd); //获取屏幕的D

C

3. hdcMem = CreateCompatibleDC(hdcScr); //创建兼容屏幕的内存DC

4. SelectObject( hdcMem, hBitmap ); //将图片绑

定内存DC上

5. BitBlt( hdcScr, x, y, nWidth, nHeight, hdcMem, srcX, srcY, SRCCOP

Y ); //将内存DC里的东西画到屏幕上

这个过程是先创建内存DC,然后获取了屏幕DC,再设置内存DC兼容屏幕DC,其实就是这两个的信息是一致的了,然后把图片绑定到内存DC里,这样,内存DC 里就有了图片,但是,这时还看不到图片,我们最后用BitBlt函数把内存DC里的东西复制到屏幕DC上,这样就能显示出来,我们就看到了。如果还是不明白的话,请上网百度,Google一下,有很多解释的。

Code:

1.case WM_PAINT:

2. hdc = BeginPaint(hWnd, &ps);

3.// TODO: 在此添加任意绘图代码...

4. g_PuzzleMain.OnPaint();//添加绘图代码

5. EndPaint(hWnd, &ps);

6.break;

WM_PAINT是windows应用程序的重绘消息,当收到这个消息的时候,就意味着屏幕要发生变化了,需要重绘,一般的,当你把窗口移到屏幕外,再移回来,就要发生重绘等等,我们在这加上重绘代码,使我们的程序在移动或者被覆盖的时候还能显示回来。

虽然上面我们已经写了很多代码了,也能显示背景了,但是有时候会经常改以前的东西,甚至推翻重做。

下面是读取游戏的要拼的图片了。

首先,我们要确定逻辑保存方式,我采用的是一个一维数组表示。而且为了可以切割成任意块数,所以定义成了一个指针类型。这是在CPuzzleLogic里定义的

Code:

1.int* m_Block; //用来保存当前局面的

2. int m_BlockNum; //保存此局横向要分成多少块

因为拼图是一个正方形的,所以只用了一个表示横向的有多少块的变量

还要进行初始化,在CPuzzleLogic里添加了一个初始化函数,当然现在的函数还做不到真正初始化,只是提供了一种测试方法。

Code:

1.// BlockNum为要切割的方块数,只在横向或纵向的

2.bool CPuzzleLogic::InitLogic(int BlockNum)

3.{

4. m_BlockNum = BlockNum;

5. m_Block = new int[BlockNum*BlockNum];

6.for(int i=0; i

7. {

8.for(int j=0; j

9. {

10. int num = BlockNum - i -1;

11. m_Block[i*BlockNum+j] = num*10+j;

12. }

13. }

14.return true;

15.}

16.

而且,修改了一个初始化的函数,增加了读取其他图片的功能。不仅仅是读取背景图片了

然后就是CPuzzleView类里的内容了。改动较大。请仔细看。

下面还定义了很多必要的变量,主要是表示坐标等等。

Code:

1.// 初始化图像显示的对象

2. bool InitView(HWND hWnd, int BlockNum=3);

3.private:

4.//保存图案

5. HBITMAP m_hBmpGame;

6.//保存小图案

7. HBITMAP m_hBmpGameSmall;

8.//右上角的坐标及大小

9.static const int m_Small_x=560;

10.static const int m_Small_y=70;

11.static const int m_Small_width=200;

12.static const int m_Small_height=200;

13.//图片游戏区的大小及坐标

14.static const int m_Game_x = 70;

15.static const int m_Game_y = 100;

16.static const int m_Game_width = 400;

17.static const int m_Game_height = 400;

18. int m_FrameNum;//表示要分隔的块数(一排的)

19. int* m_Block;//表示当前状态

20. bool m_IsGameStarted;//游戏是否已经开始

21.public:

22.// 读取图像列表(就是拆开图像)

23. bool LoadBMPList(int *Block);

24.// 设置游戏是否已经开始

25.void SetGameStarted(bool bStarted);

然后初始化的函数有所改动,增加了一个参数,里面又读取了其他的几个图片。

这里面也没什么要特别说明的。

Code:

1.#define GETX(x) (x+70)

2.#define GETY(y) (y+100)

3.// 初始化图像显示的对象

4.bool CPuzzleView::InitView(HWND hWnd, int BlockNum)

5.{

6.……

7.//读取图案

8. m_hBmpGame = (HBITMAP)LoadImage(NULL, _T("res\\game.bmp"), IMAGE_BITMA

P, 0, 0, LR_DEFAULTSIZE|LR_LOADFROMFILE);

9.if(m_hBmpBack == NULL) //判断是否读取图片成功

10. {

11. MessageBox(NULL, _T("读取图案文件失败"), _T("Error"), MB_OK);

12.return false;

13. }

14. m_hBmpGameSmall = (HBITMAP)LoadImage(NULL, _T("res\\gamesmall.bmp"), I

MAGE_BITMAP, 0, 0, LR_DEFAULTSIZE|LR_LOADFROMFILE);

15.if(m_hBmpGameSmall == NULL) //判断是否读取图片成功

16. {

17. MessageBox(NULL, _T("读取小图案文件失败"), _T("Error"), MB_OK);

18.return false;

19. }

20. m_FrameNum = BlockNum;

21. m_Block = new int[m_FrameNum*m_FrameNum];//这个就是申请内存空间

22. OnPaint();

23.return true;

24.}

25.

26.下一个是以下两个函数,也没什么特别说明的。

27.

28.// 读取图像列表(就是拆开图像)

29.bool CPuzzleView::LoadBMPList(int *Block)

30.{

31. memcpy(m_Block, Block, sizeof(int)*m_FrameNum*m_FrameNum);

32.//m_Block = Block;

33.//OnPaint();

34.return true;

35.}

36.

37.

38.// 设置游戏是否已经开始

39.void CPuzzleView::SetGameStarted(bool bStarted)

40.{

41. m_IsGameStarted = bStarted;

42. OnPaint();

43.}

最关键的是重绘函数,彻底的更改了,上次的教程里只是为了显示一下背景,而现在要显示的东西多了,就不能再用原来的那个了。先看代码:

Code:

1.// 用于重绘

2.void CPuzzleView::OnPaint(void)

3.{

4. HDC hdcMe

m; //内存DC

5. HDC hdcScr = GetDC(m_hWnd); //获取屏幕的DC

6. hdcMem = CreateCompatibleDC(hdcScr); //创建兼容屏幕的内存DC

7. SelectObject(hdcMem, m_hBmpBack); //绑定背景图片到内存DC

8.//画右上角的小图像

9. HDC hdcSmallMem = CreateCompatibleDC(hdcMem);

10. SelectObject(hdcSmallMem, m_hBmpGameSmall);

11. BitBlt(hdcMem, m_Small_x, m_Small_y, m_Small_width, m_Small_height, hd

cSmallMem, 0, 0, SRCCOPY);

12. DeleteDC(hdcSmallMem);

13.//画主图像

14. HDC hdcGameMem = CreateCompatibleDC(hdcMem);

15. SelectObject(hdcGameMem, m_hBmpGame);

16.if(m_IsGameStarted==true)

17. {

18.for(int i=0; i

19. {

20.for(int j=0; j

21. {

22. int x=j*m_Game_width/m_FrameNum; //目标的X坐标

23. int y=i*m_Game_height/m_FrameNum; //目标的Y坐标

24. int width=m_Game_width/m_FrameNum; //目标的宽度

25. int height=m_Game_height/m_FrameNum; //目标的高度

26. int srcX=m_Block[j+m_FrameNum*i]%10*(m_Game_width/m_Fr

ameNum); //源位置的X坐标

27. int srcY=m_Block[j+m_FrameNum*i]/10*(m_Game_height/m_F

rameNum); //源位置的Y坐标

28. BitBlt(hdcMem, GETX(x), GETY(y), width, height, hdcGam

eMem, srcX, srcY, SRCCOPY);

29. }

30. }

31. }

32.else

33. {

34. BitBlt(hdcMem, m_Game_x, m_Game_y, m_Game_width, m_Game_height, h

dcGameMem, 0, 0, SRCCOPY);

35. }

36. DeleteDC(hdcGameMem);

37.//只有当游戏开始后才画线框

38.if(m_IsGameStarted==true)

39. {

40.//画线框

41. HBRUSH hbrNew = CreateSolidBrush(RGB(0x00, 0x00, 0x00)); //创建

一个黑色画刷,当然可以自己定义成任何颜色的

42. HBRUSH hbrOld = (HBRUSH)SelectObject(hdcMem, hbrNew);//将画刷绑定

到hdcMem内存DC中,并保存旧画刷

43.for(int i=0; i<=m_FrameNum; ++i)

44. {

45. int x=(m_Game_width/m_FrameNum)*(i)-2;//计算坐标位置

46. Rectangle(hdcMem, GETX(x), GETY(0), GETX(x+4), GETY(m_Game_

width));//画纵向的矩形框,每个宽为4像素

47. }

48.for(int i=0; i<=m_FrameNum; ++i)

49. {

50. int y=(m_Game_height/m_FrameNum)*(i)-2;

51. Rectangle(hdcMem, GETX(0), GETY(y), GETX(m_Game_height), GE

TY(y+4));//画横向的矩形框

52. }

53. SelectObject(hdcMem, hbrOld);//将旧画刷重新绑定回内存DC

54. }

55. BitBlt(hdcScr, 0, 0, 800, 600, hdcMem, 0, 0, SRCCOPY);

56. DeleteDC(hdcMe

m); //清除两个DC

57. DeleteDC(hdcScr);

58.}

函数很长,先说一下流程,这个采用的是所谓的“双缓冲”技术。先说说这个“双缓冲”技术,一般的画图的话,就是在屏幕上反复画,而系统画的时候是先清除我们的目标位置,然后再画上去,这种情况如果要画的内容很少,或者不频繁的时候,我们感觉不到什么问题,但是如果在屏幕上画很多东西,比如我们这个,要先画背景,再画右上角的图,再画中间游戏区的很多份图像,如果直接画的话,就会有很大的闪动情况,这个时候,就出现了“双缓冲”技术。

采用“双缓冲”就是先在内存中创建一块区域,使其兼容屏幕,也就是和屏幕一样的,相当于一块画布,我们所有的绘图工作都在这块画布上进行,当画好一张后,直接把整张的画布复制到屏幕上,这样,我们看到的屏幕就只进行了一次重绘工作,画了整个窗口,就不会感觉到闪动了。

大部分代码都有注释,可以看明白,

Code:

1.//画右上角的小图像

2.//先创建兼容内存DC的临时DC

3. HDC hdcSmallMem = CreateCompatibleDC(hdcMem);

4. SelectObject(hdcSmallMem, m_hBmpGameSmall);//绑定图像

5. BitBlt(hdcMem, m_Small_x, m_Small_y, m_Small_width, m_Small_height, hd

cSmallMem, 0, 0, SRCCOPY);//画到内存DC相应的位置

6. DeleteDC(hdcSmallMem);//删除临时DC

就是这样的过程。

最麻烦的就是中间游戏区部分。因为我们要把顺序打乱,所以不能直接显示出来那一整张图,要分块显示。如果分块太多,肯定影响性能,因为循环是平方级的。比如分3块就是循环9次。

来说说这个过程,首先,要在CPuzzleLogic类里对逻辑里进行初始化,然后复制给CPuzzleView类的m_Block,以下就只说CPuzzleView类了。

这个m_Block是int类型的,用十位和个位分别表示纵坐标和横坐标,比如12就是横向第3块,纵向第2块(记住,这些都是从0开始的,所以00是第一块),因此我们最多只能是9*9的分块。

然后就是根据这些数字计算在图片的坐标位置。

因为是顺序从左上角到右下角存储数字,所以根据i,j可以得到对应的在窗口上的坐标位置,根据分的块数,计算出来每块的大小。

然后循环显示出来各个小图。

再然后画上分隔的线框。

因为我们要能看出来一共有多少个框,而实际上框没有什么用,在一次游戏中是一样的,其实画线就可以了,不过为了粗细,我实际上是画的矩形。关于函数的具体用法,随便搜一下就有了,我就不解释了。

Rectangle(hdcMem, GETX(x), GETY(0), GETX(x+4), GETY(m_Game _width));//

GET(X)和GET(Y)是两个宏定义,就是加上了偏移量,这样我们就不用自己每次都去计算坐标了。

在这代码前,你会看到一个绑定画刷的语句。

Code:

1.HBRUSH hbrNew = CreateSolidBrush(RGB(0x00, 0x00, 0x00)); //创建一个黑色画

刷,当然可以自己定义成任何颜色的

2. HBRUSH hbrOld = (HBRUSH)SelectObject(hdcMem, hbrNew);//将画刷绑定

到hdcMem内存DC中,并保存旧画刷

3.……

4.SelectObject(hdcMem, hbrOld);//将旧画刷重新绑定回内存DC

我们通过CreateSolidBrush函数创建了一个画刷,画刷的作用就是在接下来的画图工作中,每次绘图的颜色,里面的参数是一个RGB颜色,想用什么颜色自己设定吧,我写的是16进制的形式,写10进制也没问题的。

创建了之后将其绑定到内存DC中,以后画图的时候就是这个颜色了,等画完图还要把原来的画刷绑定回来。这是个好习惯。

大家会发现我用到了m_IsGameStarted变量,是bool类型的,我用它来表示游戏是否已经开始。因为只有开始的时候才应该把图片打乱,还有一个在CPuzzleL ogic里的m_IsPlaying的bool类型的变量,这个是表示是否在游戏中。

呵呵,这两个变量是不一样的。第一个只表示开始,还是结束,第二个也可以表示,但是最主要的可以表示是否暂停。感觉好乱啊,我也承认。

想想我们的游戏规则,一般的就是开始的时候显示一张完整的图,那个就是我们上面代码里绘制游戏区里的else的工作,并且没有线框,所以在绘制线框前也判断了一次。开始后是打乱顺序,然后少一块,所以可以看出来,绘图工作还是有点问题的,不过,那个将是我们下一步的工作。我们也要反复修改代码,尤其是初学者,不可能一次写出完美的代码。

最后等完成的时候,我们再去做一些优化工作,比如哪些函数需要公有,哪些要改成私有的等等。

今天就先到这里吧,如果仅仅是复制代码,或者下载代码,很简单就能结束,不过,那样就达不到学习的目的了,对不?如果只想要个程序,随便去网上下个拼图,人家做的还更好看。

今天的比较长,大家耐心点,有不明白的地方,欢迎和我讨论。

今天的代码:https://www.360docs.net/doc/9a17543243.html,/source/2700843

今天,就要开始做游戏的主要部分了,如何控制游戏。

4.控制操作

我们的控制就是,先空出一个格子不显示,然后单击到这个空格子的周围的格子的图片时,就移动过去。

为此,我们要先把空格子画出来。昨天我们的图片其实还是完整显示的。要稍微修改一下我们的OnPaint函数的代码了。

先看代码。为了省地方,我就把和昨天一样的地方省略了,用省略号代替。

Code:

1.// 用于重绘

2.void CPuzzleView::OnPaint(void)

3.{

4. HDC hdcMe

m; //内存DC

5. HDC hdcScr = GetDC(m_hWnd); //获取屏幕的DC

6. hdcMem = CreateCompatibleDC(hdcScr); //创建兼容屏幕的内存DC

7.//获取窗口大小

8. RECT rect;

9. GetClientRect(m_hWnd, &rect);

10.//按窗口大小创建兼容位图

11. HBITMAP hTemp= CreateCompatibleBitmap(hdcScr, rect.right, rect.bottom);

12. SelectObject(hdcMem, hTemp); //绑定临时背景到内存DC

13.//创建一个临时背景DC

14. HDC hdcTempBK = CreateCompatibleDC(hdcMem);

15. SelectObject(hdcTempBK, m_hBmpBack);

16. BitBlt(hdcMem, 0, 0, SCRWIDTH, SCRHEIGHT, hdcTempBK, 0, 0, SRCCOPY);//

为内存DC画背景

17. DeleteDC(hdcTempBK);

18.//画右上角的小图像

19.……

20.//画主图像

21. HDC hdcGameMem = CreateCompatibleDC(hdcMem);

22. SelectObject(hdcGameMem, m_hBmpGame);

23.if(m_IsGameStarted==true)

24. {

25.for(int i=0; i

26. {

27.for(int j=0; j

28. {

29.……

30.if(m_Block[j+m_FrameNum*i] == LASTBLOCK)

31. {

32.continue;//略掉最后一块不画

33. }

34.……

35. }

36. }

37. }

38.else

39. {

40. BitBlt(hdcMem, m_Game_x, m_Game_y, m_Game_width, m_Game_height, h

dcGameMem, 0, 0, SRCCOPY);

41. }

42.……

43.}

先看这部分。

Code:

1.//获取窗口大小

2. RECT rect;

3. GetClientRect(m_hWnd, &rect);

4.//按窗口大小创建兼容位图

5. HBITMAP hTemp= CreateCompatibleBitmap(hdcScr, rect.right, rect.bottom);

6. SelectObject(hdcMem, hTemp); //绑定临时背景到内存DC

7.//创建一个临时背景DC

8. HDC hdcTempBK = CreateCompatibleDC(hdcMem);

9. SelectObject(hdcTempBK, m_hBmpBack);

10. BitBlt(hdcMem, 0, 0, SCRWIDTH, SCRHEIGHT, hdcTempBK, 0, 0, SRCCOPY);//

为内存DC画背景

按照昨天的方法,虽然正确显示,但是由于SelectObject(hdcMem, m_hBm pBack); 是绑定到内存DC中的位图,这样,当我们对内存DC进行操作时,实际上就是修改了m_hBmpBack里的内容,最后显示的就是它的,而这个变量是存储我们的背景图的,它一改,就相当于背景改变了,就会发现你想要的空格根本就出不来。

所以,我们先创建了一个兼容屏幕的位图,这个位图我们还没有填充任何东西,如果直接显示,就是黑色的。然后绑定到内存DC中,这样,我们以后更改的就是这个位图,和背景位图没关系了。

但是,我们还要显示背景位图,于是我采用了再创建一个DC,用来把背景显示出来的方法。

if(m_Block[j+m_FrameNum*i] == LASTBLOCK)

{

continue;//略掉最后一块不画

}

然后用这个来判断,是不是最后一个方格,如果是的话,就不要画图了。这样就可以空出来最后一块。

其实今天的主要任务是实现单击命令。单击之后要判断,现在只用图来判断就不太好了,所以今天的主要任务是CPuzzleLogic里的内容。今天的比较抽象,不太好理解,我尽量说得详细些。

Code:

1.// 移动当前点击的,成功移动,返回true,否则返回false

2.bool CPuzzleLogic::MoveBlock(int Pos)

3.{

4.//判断游戏是否在进行中

5.if(m_IsPlaying == false)

6. {

7.return false;

8. }

9.//如果是最后一个,则是空的,所以不能移动

10.if(m_Block[Pos]==LASTBLOCK)

11. {

基于Android 益智拼图游戏设计毕业论文

基于Android 益智拼图游戏设计毕业论文 目录 摘要........................................................... I I Abstract....................................................... I II 1 绪论. (1) 1.1 课题开发的背景 (1) 1.2 课题意义 (1) 2 Android架构与开发平台搭建 (2) 2.1 Android的系统架构 (2) 2.2 Window下Android开发环境的搭建 (4) 3 流程介绍与概要设计 (5) 3.1 游戏流程介绍 (5) 3.2 系统概要设计 (6) 3.2.1 界面布局模块 (6) 3.2.2 难度选择模块 (6) 3.2.3 图片选择模块 (7) 3.2.4 步数和时间模块 (7) 3.2.5 游戏实现模块 (7) 4 系统详细设计与实现 (8) 4.1 界面布局实现 (8) 4.1.1 选择界面布局 (8) 4.1.2 游戏界面布局 (9) 4.2 游戏功能实现 (11) 4.2.1 难度选择 (11) 4.2.2 图片选择 (12) 4.2.3 步数和时间设置 (13) 4.2.4 拼图的实现 (14)

5 系统测试 (17) 5.1 Android仿真器介绍 (17) 5.2 功能模块测试 (17) 5.3 出现的错误及解决方案 (20) 6 总结与展望 (21) 参考文献 (22) 附录 (23) 致谢 (33)

基于Android益智拼图游戏设计 摘要 随着移动设备的日益普及,使用Android技术开发手机软件受到越来越多人的青睐。在此背景下,本课题开发了一款Android平台下的手机游戏——益智拼图。 本文首先对Android的研究背景,系统架构以及开发环境进行介绍,然后就玩家对游戏的需求进行一定的分析,最后运用Android技术实现拼图游戏的开发,并合理布局游戏界面,使游戏界面更加美观和人性化,实现了游戏的基本功能,最终可以让玩家享受拼图游戏的乐趣。 关键词:Android;拼图游戏;Activity;架构

拼图游戏制作文档汇总

基于MFC的拼图游戏设计 宋富冉操梦雅 摘要:拼图游戏是一个广受欢迎的智力游戏,按人数参与个数可分为单人游戏和多人游戏,按拼图规则它可分为摆放式和挪动式两种类型。本设计是基于Visual C++ 6.0和MFC的拼图游戏设计,设计了一个操作简单的挪动式单人拼图游戏。本游戏主要包括游戏界面设计、难易度选择、游戏图片选择、游戏系统设计、判断拼图是否成功等几个模块,程序设计中应用了类、数组、鼠标响应、菜单消息响应等元素和语句。此游戏的设计主要以学习和熟悉Visual C++ 6.0和MFC软件开发为主要目的。 关键词:拼图; Visual C++ 6.0; MFC 1.任务描述 1.1 拼图简单介绍 拼图游戏是广受欢迎的一种智力游戏,它的变化多端,难度不一,让人百玩不厌。 个性化的拼图,拼凑的不仅仅是一张照片,而是一个故事,一段回忆,一段温情。每一片的单片都有属于它自己的位置,就像每段回忆都有属于它的故事,你要将它放在专属的地方。你可以把你记忆中最深刻的片段,你挚爱的照片,你最难忘的一瞬间,做成拼图,在你想起的时候一一拼起。 拼图游戏不仅能增强思维能力,提高智力,而且富含哲理,有助于加强我们的动手能力和我们的洞察能力。 1.2 基本设计要求

我们设计的拼图游戏是一个具有简单的系统界面,操作简单易行,上手快,适用于广大用户的小游戏。此游戏分散的小图片的移动规则是小图片会朝着空位置方向移动,玩家在界面上先通过鼠标点击“游戏图片选择”选择要拼的图片,然后通过鼠标左键点击要移动的小图片,小图片会自动移动到原来没有图片的位置,移动时,预备移动的图片旁边必须要有可供移动的位置,直到拼合出原来的图片,并且成功拼成图片后会出现“看来这对你来说太简单了,挑战更高难度吧!”一句话。具体设计要求如下: (1)可以打开并显示.bmp任意大小的图片; (2)游戏开始之后,可以自动随机打乱图片; (3)用户可以点击方块进行上下左右的交换,直到拼出原图片; (4)系统能够自动检测用户是否拼出原图,并提示用户拼图是否成功。 2.系统需求分析 2.1 功能需求分析 (1)用户能用鼠标控制系统界面上各个菜单选项的选择。 (2)游戏难度选择功能:用户可以通过参数设置自定义选择游戏的难度,系统开始默认的是9块,如果用户想挑战更困难的,可以在设置参数设置中进行相应的参数修改,比如4*4=16块、5*5=25块、3*4=12块等。 (3)游戏音乐播放功能:用户可以根据自己的喜好进行选择是否播放音乐,所播放的音乐也是用户根据喜好自己来选择的。 (4)游戏原图显示功能:当玩家在玩游戏过程中忘记各个小图片的整体排列位置时能够进入原图显示功能查看完整图片,参考原图进行拼图游戏,以提高游戏的趣味性。 (5)游戏判断功能:用户通过移动每一小块图片,最终拼出和导入的图片一致时,系统则会判断你拼图成功,并提示“看来这对你来说太简单了,挑战更高难度吧!”这句话。

C#面向对象课程设计--拼图游戏

《C#程序设计》课程设计 题目:拼图游戏 专业:计算机科学与技术 学号: 姓名: 指导老师: 完成日期: 2012/12/26

《C#课程设计》评分标准 题目:拼图游戏专业:计算机科学与技术学号:姓名:

目录 1 前言 (4) 2 需求分析 (4) 要求 (4) 任务 (4) 运行环境 (4) 开发工具 (4) 3 概要设计与详细设计 (5) 系统流程图 (5) 结构功能图 (5) 4 编码与实现 (6) 编码分析 (6) 具体代码实现(附源代码) (9) 5 课程设计总结 (18) 参考文献 (19)

1.前言 拼图游戏一款非常经典的小游戏,因为它比较简单有趣,无论老少都比较适合。拼图的设计对每一个C#语言设计者进行语言提高和进阶都是一个很好的锻炼机会。拼图游戏的设计比较复杂,它涉及面广、牵涉方面多,如果不好好考虑和设计,将难以成功开发出这个游戏。在这个游戏的设计中,牵涉到图形界面的显示与更新、数据的收集与更新,并且在这个游戏的开发中,还要应用类的继承机制以及一些设计模式。因此,如何设计和开发好这个拼图游戏,对于提高C#开发水平和系统的设计能力有极大的帮助。在设计开发过程中,需要处理好各个类之间的继承关系,还要处理各个类相应的封装,并且还要协调好各个模块之间的逻辑依赖关系和数据通信关系。一个3×3的魔板,有一个格子是空的,其他格子内随机放置1-8共8个编号的方块,通过单击任意一个与空格子相邻的方块可以把该方块移入空格子,不断的移动方块,直到方块按照图片的原来的顺序排好。 2 需求分析 要求 (1)用C#语言实现程序设计; (2)利用PictureBox控件来实现图片的移动 (3)超过200步提示重新来 (4)界面友好(良好的人机互交),程序要有注释。 任务 (1)制作流程图 (2)编写代码; (3)程序分析与调试。 运行环境 (1)WINDOWS2000/XP/win7系统 (2)编译环境 开发工具

Java课程设计——拼图游戏

拼图游戏 1.游戏规则介绍 (1)本游戏中有一个格子是空的,其他格子内随机放置由要拿来拼图切割成的8个小图片。在开始游戏之前,会出现一张完整的图片,点击“菜单”里面的“开始”, 进行拼图游戏,通过将空格旁边的小图片与空格交换位置(不断的移动方块), 来实线拼图,直到方块一行一行的按图片的原始样子拼好即可完成该游戏。在 移动过程中,窗口右边会显示移动的步数。 (2)游戏拼完后,会弹出一个信息框,询问是否再玩一局,点击“Yes”将再打开一个游戏开始的界面,可以继续新的一局游戏,点击“No”将结束游戏,关闭所有窗 口。 2.游戏实现的功能 (1)点击运行程序,将弹出一个窗口,显示一张完整的图片。 (2)菜单栏的菜单,会出现3个菜单项:“开始”、“重新开始”、“结束”。 点击“开始”,即开始一局游戏;“在游戏的任何时候点击”重新开始“,即结束 当前游戏,重新开始一局新的游戏;点击“退出“,立即退出游戏,关闭窗口。 (3)在游戏过程中,游戏界面右边会同步显示当前的步数。 游戏的一些界面: (1)主界面: (2)菜单项:

(3)帮助--->关于 (4)点击开始 (5)游戏过程 (6)游戏成功

(7)破纪录 3.程序实现 Pt类: (1)建立一个类Pt,public class Pt extends JFrame implements KeyListener{}。该类继承父类JFrame,实现KeyListener接口。 (2)Pt类的构造函数Pt()。定义窗口参数,添加菜单栏和多个标签;调用读文件函数read (),读取该游戏的最高记录,并将该记录输出到标签上;为各个菜单添加事件,鼠标点击“开

Flash游戏制作

Flash游戏制作 一,概述 Flash是美国著名的多媒体软件公司Macromedia开发的矢量图形编辑和交互式动画制作软件。该软件的功能十分强大,在网页设计和多媒体制作等领域得到了广泛的应用,已经成为制作网络互动游戏的标准软件。Flash从Flash 4.0到Flash Professional 8,随着Flash技术的发展,Flash的功能越来越强大,使得制作较为复杂的互动游戏成为可能。由于Flash互动游戏能够满足网络媒体的传输需要,越来越多的传统游戏开发人员转为Flash用户,广大闪客为了兴趣爱好也来制作Flash游戏娱己娱人,同时,商家把Flash互动游戏作为新产品推广和营销的重要手段。 二,Flash设计游戏的优势与弱点 优势: 1.矢量图形绘制,放大不失真 2.文件量小,适于网络传输 3.跨平台、跨设备,具有良好的富媒体客户环境 4.日益强大的ActionScript?,交互性更好 5.丰富的媒体支持功能,使产品更美观 6.流式播放,下载速度快 7.图形界面,易学易用 弱点: 1.对于复杂图形,运算速度慢 2.位图、三维图像及视频播放能力弱 3.与硬件及操作系统沟通能力差 4.开发团队合作分工不方便

三、游戏的种类 凡是玩过PC游戏或者TV游戏的朋友一定非常清楚,游戏可以分成许多不同的种类,各个种类的游戏在制作过程中所需要的技术也都截然不同,所以在一开始构思游戏的时候,决定游戏的种类是最重要的一个工作,在flash可实现的游戏范围内,基本上可以将游戏分成以下几种类型: 动作类游戏(Actions) 凡是在游戏的过程中必须依靠玩家的反应来控制游戏中角色的游戏都可以被称做“动作类游戏”。在目前的flash游戏中,这种游戏是最常见的一种,也是最受大家欢迎的一种,至于游戏的操作方法,即可以使用鼠标,也可以使用键盘。此类游戏的典型代表是“著名的动作游戏”小小作品二号一过关斩将”和”碰碰拳打”,分别如图1和图2所示: 益智类游戏(Puzzle) 此类游戏也是Flash比较擅长的游戏,相对于动作游戏的快节奏,益智类游戏的特点就是玩起来速度慢,比较幽雅,主要来培养玩家在某方面的 智力和反应能力,此类游戏的代表非常多,比如牌类游戏,拼图类游戏,棋类游戏等等,总而言之,那种玩起来主要靠玩家动脑筋的游戏都可以被称为益智类游戏。图3,图4,图5分别为牌类游戏,拼图类游戏,棋类游戏的典刑代表: 角色扮演类游戏(RPG) 所谓角色扮演类游戏就是由玩家扮演游戏中的主角,按照游戏中的剧情来进行游戏,游戏过程中会有一些解谜或者和敌人战斗的情节,这类游戏 在技术还不算难,但是因为游戏规模非常大,所以在制作上也会相当的复杂。图6为一个典型的角色扮演类游戏: 射击类游戏(Shotting) 射击类游戏在flash游戏中,占有绝对的数L优势,因为这类游戏的内部机制大家都比较了解,平时接触的也较多,所以做起来可能稍微容易点,图7为1个典型的射击类游戏: 素材的收集 图形图象的准备

java课程设计-拼图游戏代码

package love; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Random; import javax.swing.*; public class Games extends JFrame implements ActionListener { private JButton buttons[][];// 存储按键的数组 private Container container;// 一个容器 private GridLayout layout;// 布局方式为GridLayout private int count = 0, is[] = new int[8];// count的作用是计算按键移动的次数,is[]储存一个随机产生的1到8数字数组 public Games() { super("拼图游戏");// 设置标题 layout = new GridLayout(3, 3);// 3行3列 container = getContentPane();// 该容器的布局方式,及其重要,否则产生空引用异常 container.setLayout(layout);// 将该布局方式作用于容器 buttons = new JButton[3][3];// 给按键数组分配储存空间 int locate1, locate2;// locate1用来指示当前产生的元素 locate2用来指示locate1之前的元素 for (locate1 = 0; locate1 < 8; locate1++) {// 该方法作用是产生1到8这8个数,随机分配给数组,即无序排列 int g = new Random().nextInt(8) + 1;// 随机产生一个空白按键,即不显示的那个 is[locate1] = g; for (locate2 = locate1 - 1; 0 <= locate2; locate2--) { if (is[locate1] == is[locate2]) break; } if (locate2 != -1) locate1--; } int temp = 0; int r = new Random().nextInt(3);// 随机产生一个0到3的数,代表空白按键的行 int l = new Random().nextInt(3);// 随机产生一个0到3的数,代表空白按键的列 for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) {

Flash拼图游戏制作课程设计报告

目录 第1章需求分析 (1) 1.1 引言 (1) 1.2 课程设计题目 (1) 1.3 课程设计目的 (1) 1.4 程序运行环境及开发工具 (1) 1.5 课程设计任务及要求 (1) 第2章概要设计 (2) 2.1 设计原理及方法 (2) 第3章详细设计 (3) 3.1 第一步: (3) 3.2 第二步: (3) 3.3 第三步 (4) 3.4 第四步 (5) 3.5 第五步 (5) 3.6 第六步 (6) 3.7 第七步 (7) 3.8 第八步 (8) 3.9 第九步 (8) 3.10 第十步 (9) 3.11 第十一步 (9) 3.12 第十二步 (10) 3.13 第十三步 (10) 3.14 第十四步 (11) 第4章系统调试与运行结果 (13) 4.1 系统调试 (13) 4.2 运行结果 (14) 第5章总结与体会 (15) 参考文献: (15)

第1章需求分析 1.1 引言 FLASH作为一款目前最流行的网络动画制作软件,恐怕不知道的人少之又少。其实FLASH强大的功能不光能让我们轻松制作动画,我们还可以利用它完成一些意想不到的工作。比如说是拼图游戏,在这个领域应用非常广泛!而且可以制作各种丰富有趣的小游戏来,是非常的有趣的! 1.2 课程设计题目 拼图游戏设计 1.3 课程设计目的 本课程的设计的目的是通过实践使同学们经历多媒体应用系统开发的全过程和受到一次综合训练,以便能较全面地理解、掌握和综合运用所学的知识。结合具体的案例,理解并初步掌握常用多媒体软件的使用,利用多媒体计算机等设备进行音频与视频数据的获取和处理、图像处理与图像文件格式转换、超文本超媒体在交互式多媒体软件的应用;通过《多媒体课程设计》实验,使学生能够达到提高多媒体技术的实际开发应用能力,了解系统分析、系统设计、系统实施的主要环节和步骤以及软件文档的制作过程。 1.4 程序运行环境及开发工具 硬件:PC机一台 软件:Windows 7,PhotoshopCS4,Flash8 1.5 课程设计任务及要求 设计“拼图游戏”,游戏是Flash制作中很重要的一部分,主要应用的是flash内

数字拼图游戏

安徽新华学院计科软件测试方法和技术 课程设计任务书 一、设计题目:数字拼图游戏(出题人:於世芳) 说明:一个拼图游戏。 二、目的与要求 1.目的 培养学生综合利用JAVA语言进行程序设计的能力,主要是培养学生利用JAVA的标准控件进行应用程序设计的技能。 2.基本要求 ?能够实现拼图功能。 ?可以通过初始化任意次的重新游戏。 ?游戏完成后做出相应提示. 3.创新要求 在基本要求达到后,可以参考其他拼图游戏,进行创新设计,创新方向提示如下: ★将数字换成图片。 ★可以记录游戏者成绩并排行 ★增加暂停功能或窗口最小化时暂停计时。 三、设计方法和基本原理 1.问题描述 程序界面见题图。 2.问题的解决方案 ①设计程序界面 因为用的全是基本控件,界面设计没有什么难度,这里涉及到动态添加控件数组,可参见课本控件数组一节内容。 ②编写代码 代码包括事件处理过程和功能函数,还有必要的声明。变量声明部分声明本程序所需要的变量和数组。

事件处理包括下面的主要事件: Form_Load() 作一些初始化的工作。主要是设定初始等级,动态添加控件数组。 Private Static Sub cmdButton_MouseDown(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single) 游戏运行。 cmd_Click( ) 游戏初始化 其它功能的处理不再一一描述了 四、主要技术问题的描述 虽然界面操作有些复杂,但难点显然并不在于此。下面是初始化设置中的一段程序:package { import flash.display.Sprite; import flash.events.MouseEvent; import flash.events.Event; import flash.text.TextField; //import mx.controls.Alert; public class Main extends Sprite{ var arr:Array=new Array(1,2,3,4,5,6,7,8); var ditu:Array=new Array(new Array(3),new Array(3),new Array(3)); var pailie:Array=new Array(new Array(0,0),new Array(40,0),new Array(80,0), new Array(0,40),new Array(40,40),new Array(80,40), new Array(0,80),new Array(40,80),new Array(80,80));

基于LabVIEW的拼图游戏设计

摘要 关键字 目录 1、绪论 1.1 G语言与虚拟仪器的概述 1.1.1 G语言的概述 虚拟仪器编程语言LabVIEW是一种图形化的程序语言,又称为“G”语言。LabVIEW 是一个功能比较完善的软件开发环境,它是为替代常规的BASIC或C语言而设计的。作为编写应用程序的语言,除了编程方式不同之外,LabVIEW具有编程语言的所有特性。使用这种语言编程时,基本不用写代码,取而代之的是流程图。 G语言是一种适合于任何编程任务,具有扩展函数库的通用编程语言。G语言和传统高级编程语言的最大的差别在于编程方式上的不同,一般高级语言采用的方法为本编程,而G 语言采用图形化编程方式。G语言编写的程序称之为虚拟仪器VI(Virtual Instrument),因为它的界面和功能与真实仪器基本相似,在LabVIEW环境平台下开发的应用程序都会被冠以.VI的后缀,以表示虚拟仪器的含义。G语言定义了数据类型、结构类型和模块调用语法规则等编程语言的基本要素等,在功能的完整性和应用的灵活性上毫不不逊于任何高级语言,G语言同时还具有丰富的扩展函数库。这些扩展函数库主要面向数据采集、GPIB以及串行仪器控制、数据分析、数据显示与数据存储等途径。G语言还包括常用的程序调试工具,例如包括断步调试、允许设置断点、数据探针和动态显示执行程序流程等功能[1]。 1.1.2 虚拟仪器的概述 虚拟仪器(Virtual Instrument)就是在以计算机为核心的硬件平台上,根据用户对仪器的设计定义,具有虚拟面板、用软件实现虚拟控制面板设计和测试功能的一种计算机仪器系统。使用者用鼠标点击虚拟面板,就可以操作这台计算机系统硬件平台。它是将现有的计算机技术、软件设计技术和高性能模块化硬件结合在一起而建立起来的功能强大而又灵活易变的仪器。 虚拟技术、计算机技术与网络技术是信息技术最重要的组成部分,它们被称为21世纪科学技术中的三大核心技术。电子测量仪器发展至今,大体经历了模拟仪器、分立元件式仪器、数字化仪器和智能仪器。目前,微电子技术和计算机技术的飞速发展,测试技术与计算机层次的结合使得虚拟仪器应运而生。虚拟仪器的出现导致了传统仪器的结构、概念和设计观点都发生了巨大变革,使得人类的测试技术进入了一个新的发展纪元。在过去的20年中,个人电脑应用的迅速普及促进了测试测量和自动化仪器系统的革新,其中最显著的就是虚拟仪器的出现与发展。虚拟仪器为工程师和科学家们提高生产效率、测量精度以及系统性能方面做出了卓越的贡献。 虚拟仪器的概念是由美国国家仪器公司提出来的,虚拟仪器本质是虚拟现实一个方面的应用结果。也就是说虚拟仪器是一种功能意义上的仪器,它充分利用计算机系统强大的数据处理能力,在基本硬件的支持下,利用软件完成数据的采集、控制、数据分析和处理

第8单元flash制作拼图游戏

………………………………………………………………………………………………………………………………………………………… 第8单元 flash 实例制作拼图游戏 学习目标:学会对图像分割处理,简单设置动作代码 学习难点:设置动作代码 学习资源:图像若干,鼠标拖动代码 复习:自由落体与小球碰撞动画。 新课: 一、展示拼图游戏动画 教师演示拼图游戏动画的例子,分析图像块是放在右边区域,位置是随机的。图像块的拖动需要代码实现。 二、制作 将舞台设置为800*600。图像分割:选中一张自己喜欢的图像,拖到舞台上,将图层改为图块层,设置图像大小为300*300,位置x,y 都设置为0。将图像分离,增加一层(改为分割层),在其中画直线,将图像分成 9块,打开标尺,尽量分成一样的 大小。然后将所有直线复制到图块 层(粘贴到当前位置),这样图像 就被分成了9块。将图块拖到右边 空白区域,删除分割线。选中第一块图像,将其转换成影片剪辑元件, 复备区

………………………………………………………………………………………………………………………………………………………… 命名为t1。同样对其它8个图块也作这样的设置(t2-t9)。 选中此影片剪辑,在下面的属性中,在实例名称处输入t1。同样对其它8个图块也作这样的设置(t2-t9)。 选中t1影片剪辑,单击动作,将影片剪辑鼠标拖动代码复制过来。 on (press) { startDrag(this); } on (release) { stopDrag(); } 同样对其它8个图块(t2-t9)也作这样的设置。 再增加一层,改为背景,将图像拖进来,改为300*300,x,y 为0,转换成图形元件,并将alpha 设置为10%。 回到分割层,沿着图像加个四边形,去除多余的线,形成9个方格区域。选中方格将线条粗细改为3。 图块随机排放:增加一层,选中空白关键帧,单击动作,将随机排放代码复制过来。 stop(); for (i=1; i<=9; i++) { eval("t"+i)._x = random(300)+400;//随机设置图块的位置于场景一定区域内 eval("t"+i)._y = random(450)+50; } 保存测试。 三、小结

拼图游戏的制作过程

拼图游戏项目策划书 制作目的: 了解掌握authorware软件,学会制作一些简单的,有意思的作品。 制作人员:詹灵龙、王鑫、毛宗谱、王龙飞 制作班级寝室:08电科7栋351寝室 1-1 创建多媒体项目 (1)启动authorware,弹出如图1-1所示的对话框,单击“不选”按钮,新建一个空白的多媒体项目。 图1-1 (2)使用快捷键ctrl+I,在名称栏中输入“拼图游戏”字样,在“大小”下拉列表中选择“800*600”选项,调整演示窗口的大小。在“选项”区域中勾选“显示标题”,“显示菜单”和“屏幕居中”选项,其他保持默认,如图1-2所示。

图1-2 1-2删除默认菜单 (1)在设计栏中拖动一个交互图标到设计流程图中,并命名为“file”。 (2)继续在流程图窗口中的交互图标右侧添加一个群组图标。(3)在弹出的对话框中,选择“下拉菜单”选项,将该交互图标定义为“下拉菜单”,单击“确定”按钮,把交互图标命名为“覆盖file”,如图1-3所示。 图1-3 (4)在设计流程图中选择“覆盖file”交互图标,使用快捷键ctrl+I,在弹出的属性面板中单击“响应”标签,在范围选项区中勾选“永久”选项,在分支下拉列表中选择“返回”,如图1-4: 图1-4 (5)在设计图标栏中拖动一个擦除图标到流程图中,并命名为“删

除”。 (6)在流程图中双击刚刚创建的“删除”图标,在打开的演示窗口中单击菜单栏“file”菜单,定义删除的对象,如图1-5所示: 图1-5 1-3制作游戏的解释文字 (1)从设计图标栏中拖动一个显示图标到设计流程图中,并命名为“解释文字”。 (2)双击创建的显示图标,在演示窗口中使用绘图工具箱中的文字工具,如图1-6所示,在演示窗口中输入内容如下: 使用鼠标拖动9个图块,拼合成一个完整的图像 可以通过“选择”图像菜单下的“完整图像”命令预览最终图像。 、

如何使用ppt制作图片拼图游戏

如何使用ppt制作图片拼图游戏 篇一:教你如何做拼图游戏 (1)准备一张图片,长和宽是比较好的整数像素点,例如800*500等,以下面这幅图为例,将它水平分4份,垂直分4份(2)使用图片拆分器对图片进行 调整好数据,这个软件会把拆分结果,直接放到图片所在文件夹处,点下“等比拆分” (3)结果如下 (4)打开Dreamwaver,这里用的是CS5 (i)设置站点,这里的图片放在pingtu/img里面 (ii)建立网页,以pingtu.html为名 打开辅助功能 打开显示网格功能 这里介绍一下“网络设置”的两个属性,其他明显易懂 靠齐到网格:拖动或修改apdiv盒子时会发现网格有吸附功能间隔:主要控制网格的大小 绘制拼图区域,点击图中图标可快速绘制apdiv 点击之后,鼠标变成十字心,随便画一个apdiv再修改它的高和宽分别为500和800像素 为了使效果更好些,我们找了一张木板作为背景图片,最终效果如下

拆分后每个拼图单位为200*125的 再画16个200*125的apdiv将各个拼图单位插入,最终效果如下: 添加行为:所谓行为,可以看做是用户通过鼠标和网页的元素间进行的互动的方式,这里介绍其中一种。 篇二:拼图游戏制作 [教學]拼圖遊戲的製作你會了嗎? A. 在Photoshop裡先製作出拼圖的切圖動作 步驟一.選擇"切圖選取工具"後選擇"分割"選項 步驟二.自己隨意切割數量 步驟三.在檔案下選取"儲存為網頁用" 步驟四. 1.選JPEG 2.按儲存後會出現"另存最佳化檔案"的視窗 3.存檔類型:HTML和影像 4.切片:全部切片 5.自己開一個資料夾 6.檔名自取 7.儲存 註:存完後會發現建立的資料夾裡會出現一個HTML檔和一包"images"的資料夾 B.在Dreamweaver下完成拼圖的製作

3.拼图游戏的制作(教案)-王奇珍

3.拼图游戏的制作(教案) 一、基本信息 作者 3 奖级课时10分钟教材 二、教学过程 环节教师学生时间授课思路 创设情境 教师通过拼图游戏这个案例,引导学习复习上节课所 学习到的APDIV元素和拖动AP元素,并为这节课下面 学习的内容进行铺垫与开启教学。 在这个过程中教师主要通过提问、引导、操作例子来 进行授课过程。 学生 通过 聆听 复习 及回 答问 题。 3分 钟 用例子和 话语吸引 学生的思 考。 新课讲解与实践操作 教师通过使用Dreamweaver软件来实际操作,制作 拼图游戏,并通过制作讲解APDIV元素和拖动AP元素 的使用方法。 这个过程中教师主要通过实际操作、解说、提问引导 的方式来进行授课。 学生 观察 操作 步骤, 思考 回答 问题。 5分 钟 用实践操 作的方法 让学生深 刻体会操 作过程, 并通过提 问引导的 让是让学 生跟着老 师思路学 习。 解决问题总结知识实际过程中常遇到问题解决: 我们用到的主要是拖动AP元素这一行为,但是现在, 同学们观察一下,老师点击它却没有反应,难道是这个软 件出了问题?有很多学生做到这一步的时候遇到很多的 困惑,他们都会跟老师说,它是没有的,那么同学们,老 师在这里强调一下,这个软件呢并没有问题,它的行为也 是可以用的,只是我们在添加这个行为之前,一定点击窗 口的空白处,才能够进行行为的添加。 教师总结这节课知识点: 第一就是AP DIV层的绘制以及属性的基本设置, 第二就是掌握拖动AP元素的运用; 第三就是拼图游戏的制作流程。 学生 观察 并思 考问 题解 决方 法,总 结归 纳这 节课 知识 点。 2分 钟 解决实践 操作中常 遇到问 题,解决 学生疑 惑,总结 本节课重 点知识。

VB课程设计:拼图游戏

Visual Basic课程设计报告 题目1:拼图游戏难度: *** 指导教师: 姓名: 学号: 专业: 班级: 学院: 日期:

1.题目简介 (1)本题目要求设计一个拼图游戏程序,要求如下: 指定一幅完整的图片,将其分割成m*n个小图块,打乱后重新排列,其中有一个没有图片的“空当”如图———— (2)使用鼠标单击与空当相邻的图块可以与其互换位置。 (3)利用空当位置使原图恢复原来的顺序,并记下玩家的移动步数,游戏过程中可以查看参考图以方便顺利通过游戏。

2、设计思路与总体方案 本程序包含五个窗体模块,其中以窗体frmMain的作用最为主要,该模块负责加载选定的图片并按所选的行列数分割,进行随机排列并加载空当,实现鼠标点击时其中的图块时与相邻的空当进行替换,实现拼图完成这个结束动作。 该模块中主要的变量有Rows ,Cols ,Arrange() ,space,started,steps showref Function isOK() 其中,Rows ,Cols ,showref这三个为全局变量,分别表示行数,列数,以及是否显示参考图(因此showref为逻辑型变量)其余变量为模块级变量,started也为逻辑变量,负责显示游戏是否已开始,Arrange()数组表示联系图像控件与数组的关系,space显示空当的位置,steps来记录玩家所走的步数,Function isOK()用来检验拼图是否已经完成的函数,为逻辑性变量。除外,过程变量tt(0 to2),b(0 to 2),s ,r ,c用来写入或读取排行榜中的记录。 其中,还设有菜单栏,通过CommonDialog控件负责实现“打开图片”与“配置颜色”对话框,并同时还拥有打开frmRecod(排行榜窗体模块)的工能。 主要代码(游戏初始时加载图片): Dim i As Integer Dim n As Integer CD.Filter = "图片文件(*.JPG,*.BMP)|*.jpg;*.bmp" CD.DialogTitle = "打开图片" CD.InitDir = App.Path & "\pics" CD.ShowOpen (显示指定图片对话框)If CD.FileName = "" Then Exit Sub If started Then For i = 1 To Rows * Cols - 1 '(清除已有的控件数组元素) Unload imgPT(i) Next imgPT(0).Picture = LoadPicture() If showref Then frmRef.Image1.Picture = LoadPicture() Else Me.Picture = LoadPicture() End If frmDivide.Show 1, Me ' (显示指定行列对话框)PC.Picture = LoadPicture(CD.FileName) PC.Rows = Rows PC.Cols = Cols n = Rows * Cols imgPT(0).Width = 320 / Cols ('窗体以像素为单位)

拼图游戏平台设计

毕 业 论 文(设计) 题目拼图大世界专业计算机应用技术 姓名 年级 03计机高级工班 指导教师

前言 多媒体技术是当前计算机科学与技术领域的热点技术,它诞生于20世纪80年代,在20世纪90年代获得突破性的发展,并获得广泛的应用。多媒体技术使计算机具有综合处理文本、声音、视频、图形、图像的能力,它的迅速发展已经深刻影响、改变着人们的生活、工作方式。多媒体的应用丰富多彩,不仅涉及计算机的各应用领域,也涉及教育培训、电子出版、通信、文化娱乐等领域或行业。多媒体计算机技术正朝着高分辨率、高速度、简单化、标准化和智能化方向发展。 Authorware是功能强大的交互式多媒体软件,被广泛应用于多媒体教学和商业领域,在多媒体制作与发展领域有着举足轻重的地位。它能完美地结合文本、图形、音频、视频以及动画等素材,制作出精美的、跨媒体的学习软件、应用软件等,然后通过互联网、局域网或光盘等多种载体进行发布。基于以上原因,Authorware正在被越来越多的多媒体工作者使用。 拼图游戏相信大家都不会陌生,现在我们不妨利用Authorware来制作一个拼图游戏,借此切身体会Authorware 的强大交互设计。现在网络上有各式各样的拼图游戏,其中有用Authorware、flash、Animated Puzzles等做的拼图游戏,如Dreamweaver中有一个行为叫Drag layer (拖动层),用它也可以设计出拼图游戏。而在这里我要为大家做的是用Authorware制作拼图游戏。这个拼图游戏的特战在于,颜色鲜艳,采用静、动相结合的方式,在页面里加入了大量的flash 动画、GIF动态图片,从而令到页面更生动。还有一关于拼图的历史文化信息,游戏玩家可在闷时阅读。 希望大家在通过玩这个游戏,令大家情开朗、愉快,能让大家流连忘返。 - 2 -

用Flash制作拼图游戏,制作flash拼图游戏

用Flash制作拼图游戏,制作flash拼图游戏 https://www.360docs.net/doc/9a17543243.html,/aatd/blog/item/32a4d2a26ef0a6adcbefd07c.html 首先,让我们来构思一下游戏的大致样子:画面上散落着N多块碎图片,透过这些碎图片我们可以隐约看到后面的一块方形的区域,然后在屏幕的右边赫然写着几个大字——简易拼图游戏。OK,构思完毕,下面我们就开做吧。 一、制作图块 1.拼图拼图,没图怎么做拼图呢?所以,我们得先找张图片过来,并将其导入到Flash中。 选择File>Import,导入要做为拼图素材的图片。 2.选中刚刚导入的图片,选择Modify>Transform>Scale,将图片的大小重新进行调整。 3.调整完图片大小后,按Ctrl+B将其打散。 4.选择直线工具,在图片上画个十字,将图片分为四块。因为本例只是要介绍制作拼图的原理,所以这里就只做四个图块。 5.按Ctrl+Alt+Shift+R,显示标尺,然后从标尺上拉出线重合。 6.按Ctrl+Alt+;锁定引导线。接着按住Ctrl键然后用鼠标在四条黑线边界的中间拉出一个拐点。 7.再次按住Ctrl键将突起的两端拉回,形成一个小三角(如图1)。 8.使用鼠标将小三角变形成小圆弧(如图2)。 图2 9.单击选中左上角的那块图片,按F8弹出元件属性对话框。在Name中输入g1,然后将Behavior选为Graphic,单击OK后将所选图片转化为图形元件g1。

同样地,将剩下的另外三块图片使用同样的方法分别转化为图形元件g2、g3、g4。然后将刚才用来分割图片的黑线删除。 10.选中g1、g2、g3、g4四个元件,按Ctrl+C拷贝一份。 11.按Ctrl+V将刚才复制的元件粘贴上来。 12.单击选中g1,按F8弹出元件属性对话框。在Name中输入b将Behavior 选为Button,单击OK后将所选元件g1转化为按钮元件b1。 同样地,将剩下的另外三块图片使用同样的方法分别转化为按钮元件b2、b3、b4。 13.单击选中b1,按F8弹出元件属性对话框。在Name中输入m1,然后将Behavior 选为Movie Clip,单击OK后将所选元件b1转化为影片剪辑m1。 同样地,将剩下的另外三块图片使用同样的方法分别转化为影片剪辑m2、m3、m4。至此,所需的图块已全部制作完成。接下去该是做游戏的背景了。 二、制作背景 1.将当前层的名字改为“图块”。在当前层的下面再新建一层并取名为“背景”。 2.选中刚才复制出来放在一边备用的的群组对象,按Ctrl+X剪切之。 3.选中“背景”层,按Ctrl+V,将图片对象粘贴到这一层上。 4.双击群组进入编辑状态,选中所有图形元件。按Ctrl+I打开实例面板,将Behavior改为Movie Clip(如图3)。 图3 5.选中左上角已变为Movie Clip的g1元件实例,在实例面板的Name中输入d1。同样的,分别将剩余的三块元件命名为d2、d3、d4。 6.选中所有元件,选择Window>Panels>Effect,打开效果面板。从列表中选择Tint效果,然后把Tint Color设置为黑色。 7.换上文字工具,在舞台的右边书上“简易拼图游戏”。 8.锁定“背景”层。

java拼图游戏图片插入与分割

public static void cut(String srcImageFile, String descDir, int destWidth, int destHeight) { try { Image img; ImageFilter cropFilter; // 读取源图像 BufferedImage bi = ImageIO.read(new File(srcImageFile)); int srcWidth = bi.getHeight(); // 源图宽度 int srcHeight = bi.getWidth(); // 源图高度 if (srcWidth > destWidth && srcHeight > destHeight) { Image image = bi.getScaledInstance(srcWidth, srcHeight, Image.SCALE_DEFAULT); destWidth = 200; // 切片宽度 destHeight = 150; // 切片高度 int cols = 0; // 切片横向数量 int rows = 0; // 切片纵向数量 // 计算切片的横向和纵向数量 if (srcWidth % destWidth == 0) { cols = srcWidth / destWidth; } else { cols = (int) Math.floor(srcWidth / destWidth) + 1; } if (srcHeight % destHeight == 0) { rows = srcHeight / destHeight; } else { rows = (int) Math.floor(srcHeight / destHeight) + 1; } // 循环建立切片 // 改进的想法:是否可用多线程加快切割速度 for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { // 四个参数分别为图像起点坐标和宽高 // 即: CropImageFilter(int x,int y,int width,int height) cropFilter = new CropImageFilter(j * 200, i * 150, destWidth, destHeight); img = Toolkit.getDefaultToolkit().createImage( new FilteredImageSource(image.getSource(), cropFilter)); BufferedImage tag = new BufferedImage(destWidth, destHeight, BufferedImage.TYPE_INT_RGB); Graphics g = tag.getGraphics(); g.drawImage(img, 0, 0, null); // 绘制缩小后的图 g.dispose(); // 输出为文件

6拼图游戏的制作过程

拼图游戏的制作过程 1-1创建多媒体项目 (1)启动authorware,弹出如图1-1所示的对话框,单击“不选”按钮,新建一个空白的多媒体项目。 (2)使用快捷键ctrl+I,在名称栏中输入“拼图游戏”字样,在“大小”下拉列表中选择“800*600”选项,调整演示窗口的大小。在“选项”区域中勾选“显示标题”,“显示菜单”和“屏幕居中”选项,其他保持默认。 1-2删除默认菜单 (1)在设计栏中拖动一个交互图标到设计流程图中,并命名为“file”。(2)继续在流程图窗口中的交互图标右侧添加一个群组图标。(3)在弹出的对话框中,选择“下拉菜单”选项,将该交互图标定义为“下拉菜单”,单击“确定”按钮,把交互图标命名为“覆盖file”。(4)在设计流程图中选择“覆盖file”交互图标,使用快捷键ctrl+I,在弹出的属性面板中单击“响应”标签,在范围选项区中勾选“永久”选项,在分支下拉列表中选择“返回”。 (5)在设计图标栏中拖动一个擦除图标到流程图中,并命名为“删除”。 (6)在流程图中双击刚刚创建的“删除”图标,在打开的演示窗口中单击菜单栏“file”菜单,定义删除的对象。 1-3制作游戏的解释文字 (1)从设计图标栏中拖动一个显示图标到设计流程图中,并命名为

“解释文字”。 (2)双击创建的显示图标,在演示窗口中使用绘图工具箱中的文字工具,在演示窗口中输入内容如下: 使用鼠标拖动9个图块,拼合成一个完整的图像 可以通过“选择”图像菜单下的“完整图像”命令预览最终图像。(3)使用文字工具,选中所有的文字,将文字选为宋体,36号字。(4)使用选择工具,选中文本框对象,修改文字颜色为红色,并将其一道合适的位置上。 (5)保持对该对象为选定状态,选择窗口-面板-属性命令在弹出的面板中单击“其他”按钮(带‘…’字样)。 (6)在弹出的对话框中,选择“小矩形变化”的变化方式,单价确定按钮定义文字的转化方式。 (7)拖动一个等待按钮到流程图中,并命名为“等待”。 (8)双击刚刚添加的等待按钮,在等待属性面板中勾选掉“按任意键”和“显示按钮”,选择“鼠标单击”选项。 (9)拖动一个擦除图标到流程图中,并命名为“删除解释文字”。(10)双击刚刚创建的擦除图标,在弹出的演示窗口中单击“解释文字”对象,定义删除的对象。 1-4导入拼图游戏的图块对象 (1)从设计栏中拖动一个群组图标到设计流程图中,并命名为“图块”。 (2)双击刚刚添加的群组图标,将该图标的流程图窗口打开,选择

相关文档
最新文档