文档库 最新最全的文档下载
当前位置:文档库 › 拼图游戏

拼图游戏

拼图游戏
拼图游戏

B类题——FUNCODE

———拼图游戏

学院计算机科学与技术

专业计算机科学与技术

学号 110341202

学生姓名陈格

指导教师姓名沈中林

题目来源及序号拼图游戏

难度B类

2013 年5月27 日

一、题目

玩家通过鼠标单击相邻位有空位的方块来移动方块,从而最终将一副散乱的图片拼成完整的图片。

二、问题分析及求解基本思路

1.添加一个4x4的二维数组,将图案分成15份,随机摆放,剩下一个位置留空,用于移动方块。

2.游戏的原理:

在一个4 * 4的方块矩阵(二维数组),前15个的值按顺序从1-15依次递增,第16个留空,我们设置为一个名称为“NULL”的精灵。按照这个顺序排列的矩阵值代表游戏胜利。

精灵名称依次是PictureBlock1,PictureBlock2…PictureBlock15。因此,初始化的时候,用一个数组iRandData顺序保存1到15,对应表示15个方块精灵。再用一个二维数组m_iBlockState[4][4]表示这16个位置。

每次随机从iRandData中取一个值,赋给m_iBlockState,表示某个位置放置哪张方块图片。

为了保证同一张方块图片不会被重复使用,每次从iRandData随机取一个值以后,将该随机数后面的数组值往前移一位,并且数组大小减1。

三、问题求解的整体框架结构

实验内容

玩家通过鼠标单击相邻位有空位的方块来移动方块,从而最终将一副散乱的图片拼成完整的图片。要求如下:

1.游戏的初始界面如图一,单击空格键进入游戏,进入游戏之后系统将完成的图片分成大小

相同的15分并随机摆放成如图二。

图一

图二

2.启动游戏,单击空格键进入游戏。通过鼠标单击周围有空格的方块来移动方块,直到全图

拼接成图二中右下角的图案样式,游戏结束,重新回到图一界面。

3.游戏的原理是定义一个4 * 4的方块矩阵(二维数组),前15个的值按顺序从1-15依次递增,

第16个留空为0。按照这个顺序排列的矩阵值代表游戏胜利。初始化的时候,将该16个矩阵值随机排布即得到本局关卡。为0的空位代表附近上下左右的4个方块可以移动过来4.每次单击鼠标左键,方块移动一格。鼠标必须移动到方块范围内单击才能有效移动方块。【实验任务】

步骤一、打开FunCode,创建一个的C++语言项目;

步骤二、导入Puzzle模板。

【实验指导】

1、打开FunCode,点击“项目”菜单,选择“创建C++工程”

注意:工程名名称要求字母开头,只能包含字母和数字,且名字中间不能有空格。

2、点击菜单“项目”中的“导入地图模块”,如图一。跳出一个对话框,选中“Puzzle”模板,

点击“导入到工程”按钮,如图二。

图一图二

3、导入成功后的,界面如下图所示:

步骤、启动游戏显示“空格开始”,单击空格键进入游戏初始界面。

【实验思路】

系统会自动响应OnKeyDown函数来响应键盘按下消息,这部分代码实现在main.cpp里。我们要做的就是通过在main.cpp的OnKeyDown函数里实现我们的代码。当用户单击键盘上的空格键之后,设置GameBegin即“空格开始”精灵不可见。

【实验指导】

1、进入LessonX.h文件中添加“空格开始”精灵变量的声明以及我们自定义处理系统响应键

盘按下消息的函数OnKeyDown的声明:

CSprite* m_spGameBegin; //"空格开始"精灵

void OnKeyDown( const int iKey, const int iAltPress, const int iShiftPress, const int iCtrlPress );

2、进入LessonX.cpp的构造函数里面初始化“空格开始”精灵成员变量:

m_spGameBegin = new CSprite("GameBegin");

在文件的最后面添加OnKeyDown函数的定义代码:

void CGameMain::OnKeyDown( const int iKey, const int iAltPress, const int iShiftPress, const int iCtrlPress )

{

}

3、空格键的键值为KEY_SPACE,当系统判断玩家单击了空格键以及游戏的状态时未进行(即

m_iGameState的值0)则游戏开始设置m_iGameState的值为1,同时隐藏掉“空格开始”

精灵。在步骤2的函数里面添加下面的代码:

if( KEY_SPACE == iKey && 0 == m_iGameState )

{

m_iGameState = 1;

// 隐藏提示开始文字

m_spGameBegin->SetSpriteVisible(0);

}

4、进入Main.cpp函数里面,将系统捕获到的键盘按下消息的参数传给我们自定义的函数,需

要在OnKeyDown函数里面添加下面一行代码:

g_GameMain.OnKeyDown(iKey,bAltPress,bShiftPress,bCtrlPress);

至此,本实验结束。

【实验内容】

步骤一、添加一个4x4的二维数组,将图案分成15份,随机摆放,剩下一个位置留空,用于移动方块。

【实验思路】

游戏的原理是在一个4 * 4的方块矩阵(二维数组),前15个的值按顺序从1-15依次递增,第16个留空,我们设置为一个名称为“NULL”的精灵。按照这个顺序排列的矩阵值代表游戏胜利。

精灵名称依次是PictureBlock1,PictureBlock2…PictureBlock15。因此,初始化的时候,用一个数组iRandData顺序保存1到15,对应表示15个方块精灵。再用一个二维数组m_iBlockState[4][4]表示这16个位置。

每次随机从iRandData中取一个值,赋给m_iBlockState,表示某个位置放置哪张方块图片。

为了保证同一张方块图片不会被重复使用,每次从iRandData随机取一个值以后,将该随机数后面的数组值往前移一位,并且数组大小减1。

【实验指导】

1、进入LessonX.h里面,添加如下的变量声明:

1)添加成员变量声明:

static const float m_fBlockStartX;// 按方块大小,在编辑器里摆放的第一块方块的起

始坐标

static const float m_fBlockStartY ;

static const float m_fBlockSize ; // 屏幕高度75 / 4块= 18.75每块的大小.编辑

器里预先摆放好的方块宽和高必须与此值一致

int m_iBlockState[BLOCK_COUNT][BLOCK_COUNT]; // 二维数组,存储N*N的矩阵

方块信息

CSprite* m_spBlock[BLOCK_COUNT*BLOCK_COUNT];//方块精灵

注意,m_fBlockStartX,m_fBlockStartY,m_fBlockSize三个变量是不能改变的,因此我

们需要将它们设置为const类型,const在c++里面表示只读,即后面程序只能读取使

用它的值而不能对其进行赋值改变。C++类中的成员变量如果是const类型,则需要在

其前面加上一个static的声明,即静态变量的声明,这样,我们才能在cpp文件里面使

用这个变量。

2)添加BLOCK_COUNT的#define声明:

在LessonX.h的#include后面添加下面一行:

#define BLOCK_COUNT 4 // N * N 的矩阵方块,一个N的大小

#define相当于告诉编译器,如果遇到BLOCK_COUNT则它相当与一个int类型的变量,

且值为4。使用#define可以方便改变我们需要的值。

2、进入LessonX.cpp中在最后面添加下面的成员变量的声明:

const float CGameMain::m_fBlockSize=18.75f;

const float CGameMain::m_fBlockStartX=-40.625f;

const float CGameMain::m_fBlockStartY=-28.125f;

因为这三个变量的类型是const类型,因此我们不能在构造函数里面定义它,需要单

独拿出来进行定义。相当于c里面的全局变量的定义。

3、进入LessonX.cpp中的GameInit函数里面填写初始化代码。

1)填写下面几行变量的定义:

int iLoopX = 0, iLoopY = 0, iLoop = 0;

int iOneIndex = 0, iRandIndex = 0;

// 用做随机的数组,当随机抽取到此数组中的一个时,比如随机到第五个,则将第五个取出来用

// 第五个后面的数组都往前移动一位,将第五个覆盖掉,数组总数减一,下次再在这剩余的14个数值里随机抽取

int iDataCount = BLOCK_COUNT * BLOCK_COUNT - 1;

int iRandData[BLOCK_COUNT * BLOCK_COUNT - 1] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,

13, 14, 15};

iDataCount用于记录方块的数目,iRandData是一个二维数组,里面存放了1至15的

int值,对应表示1-15个方块精灵,用于后面对方块进行随机生成。每次随机从此数组中抽取一个值,比如随机到第五个,则将第五个取出来用,第五个后面的数组都往前

移动一位,将第五个覆盖掉,数组总数减一,下次再在这剩余的14个数值里随机抽取。

这样做的好处是确保不会重复两次以上使用同一个方块。

2)由于我们用于记录方块位置的成员变量是一个二维数组m_iBlockState,而我们用于保存所有方块精灵的数组是一个一维数组,所以下面我们需要用到一些自定义的函数用

于从二维数组转换到一维数组。其实二维数组的存放在内存里面也是连续存放的,我

们在读取他们的值得时候当然可以使用一维数组的方法来读取它,只不过这里需要进

行数组下标数值的相应改变。例:二维数组a[x][y]转换为一维数组的计算方法是:x* 二维数组中每行的元素数+y。

进入LessonX.h中添加我们自定义的二维数组索引转换成一维数组索引的函数

XYToOneIndex声明:

int XYToOneIndex( const int iIndexX, const int iIndexY );

进入LessonX.cpp中添加上面函数的定义:

int CGameMain::XYToOneIndex( const int iIndexX, const int iIndexY )

{

return (iIndexY * BLOCK_COUNT + iIndexX);

}

4、我们使用两个for循环来遍历二维数组,第一个for循环遍历二维数组m_iBlockState的第

二个下标,第二个for循环遍历二维数组m_iBlockState的第一个下标。在GameIint函数里面添加下面的代码:

for( iLoopY = 0; iLoopY < BLOCK_COUNT; iLoopY++ )

{

for( iLoopX = 0; iLoopX < BLOCK_COUNT; iLoopX++ )

{

}

}

5、我们首先用刚刚我们自定义的数组下标转换函数XYToOneIndex将二维数组下标转换成一

维数组的下标。在for( iLoopX = 0; iLoopX < BLOCK_COUNT; iLoopX++ )里面填写下面的代码:iOneIndex = XYToOneIndex( iLoopX, iLoopY );

iOneIndex即是二维数组在一维数组里面的下标值。

1)如果遍历到数组的最后一个,我们就将其设定为空位精灵,它的名称为NULL”,后面我们只要判断一个精灵的周围有没有名称为”NULL”的精灵就可以知道他周围是否有空

位,它在二维数组中的值以0来代替。添加下面的代码:

// 数组的最后一个

if( BLOCK_COUNT - 1 == iLoopX && BLOCK_COUNT - 1 == iLoopY )

{

m_iBlockState[iLoopY][iLoopX] = 0;

m_spBlock[iOneIndex] = new CSprite("NULL");

}

2)如果没有遍历到最后一个位置,我们随机从iRandData取一个值赋给m_iBlockState,并且给对应名字的精灵数组m_spBlock初始化,同时将该精灵移动到对应的位置。添加

下面代码:

else

{

// 在当前剩余未使用到的数值里随机一个出来,赋值给二维数组

iRandIndex = CSystem::RandomRange( 0, iDataCount - 1 );

m_iBlockState[iLoopY][iLoopX] = iRandData[iRandIndex];

char* tmpName=CSystem::MakeSpriteName("PictureBlock",m_iBlockState[iLoopY][iLoopX]);

m_spBlock[iOneIndex]=new CSprite(tmpName);

// 将该精灵移动到对应的位置

MoveSpriteToBlock( m_spBlock[iOneIndex], iLoopX, iLoopY );

}

在这里我们需要添加一个移动精灵到特定位置的函数MoveSpriteToBlock。进入

LessonX.h中添加函数的声明:

void MoveSpriteToBlock( CSprite *tmpSprite, const int iIndexX, const int iIndexY );

进入LessonX.cpp中添加该函数的定义:

void CGameMain::MoveSpriteToBlock( CSprite *tmpSprite, const int iIndexX, const int

iIndexY )

{

float fPosX = m_fBlockStartX + iIndexX * m_fBlockSize;

float fPosY = m_fBlockStartY + iIndexY * m_fBlockSize;

tmpSprite->SetSpritePosition(fPosX, fPosY );

}

3)由于是随机从iRandData数组里面取一个数赋给m_iBlockState,所以我们每次赋一个需要将iRandData数组后面的值往前面移动覆盖掉改值。因此我们需要用for循环,将抽

取到的索引iRandIndex后面的数组值依次往前移动一位,同时方块总数目减一。代码

如下:

for( iLoop = iRandIndex; iLoop < iDataCount - 1; iLoop++ )

{

iRandData[iLoop] = iRandData[iLoop + 1];

}

// 剩余有效值总数减一

iDataCount--;

至此,本实验结束。

【实验内容】

步骤一、获取鼠标单击消息

步骤二、判断鼠标点击的方块

步骤三、判断周围是否有空位,移动方块

【实验思路】

遍历一维数组m_spBlock,使用IsPointInSprite 函数判断当前鼠标坐标是否位于某个名字的精灵内部。如果找到某个名字的精灵被点击中,请将当前循环变量iLoop赋值给iClickIndex。再判断该方块精灵周围有没有名称为“NULL”的精灵,有的有的话移动到该位置。

【实验指导】

1、进入LessonX.h中添加我们自定义的处理鼠标单击的函数声明:

void OnMouseClick( const int iMouseType, const float fMouseX, const float fMouseY );

2、进入LessonX.cpp中添加该函数的定义:

void CGameMain::OnMouseClick( const int iMouseType, const float fMouseX, const float fMouseY )

{

}

3、判断游戏是否正在进行,在上面的函数里面添加下面的代码:

// 只处理游戏进行中的鼠标响应

if( 2 != m_iGameState )

return;

4、获取鼠标点击的坐标,使用一个for循环遍历存储所以方块精灵的一维数组m_spBlock,判

断该坐标是否在某一个方块精灵中,是的话得到该精灵的下标值。

添加下面的代码:

int iClickIndex = -1;

int iLoop = 0;

for( iLoop = 0; iLoop < BLOCK_COUNT * BLOCK_COUNT; iLoop++ )

{

if( "NULL" == m_spBlock[iLoop]->GetName() )

continue;

// 使用API dIsPointInSprite 判断指定坐标是否位于某个名字的精灵内部

if(m_spBlock[iLoop]->IsPointInSprite(fMouseX, fMouseY))

{

iClickIndex = iLoop;

break;

}

}

5、这里我们需要用到将一维数组转换为二维数组,原理与我们前面二维数组转换为一维数组

的方面相反。只要将一维数组下标值对二维数组中每行的元素数进行求余就能得到二维数组的X下标值,将一维数组对二维数组中的每行的元素数进行求商就能得到二维数组的Y 下标值。为简化操作,我们分别将这两个操作定义为函数形式直接调用。在LessonX.h中添加这两个函数的声明:

int OneIndexToX( const int iIndex );

int OneIndexToY( const int iIndex );

在LessonX.cpp中添加这两个函数的定义:

int CGameMain::OneIndexToX( const int iIndex )

{

return (iIndex % BLOCK_COUNT);

}

int CGameMain::OneIndexToY( const int iIndex )

{

return (iIndex / BLOCK_COUNT);

}

6、我们将步骤4得到的一维数组下标值转换为二维数组m_iBlockState的下标值。这样我们就

可以在m_iBlockState中查找该鼠标点击到的方块精灵周围是否有空位。在二维数组里查找鼠标点击的方块上下左右4个方向上是否有空位。注意边界判断,否则数组访问会越界。

比如判断左边时,需要判断是否已经是最左边的索引(iIndexX == 0)。如果有空位(值为0),则将该空位的索引赋值给下面这2个变量iEmptyIndexX和iEmptyIndexY保存。在

OnMouseClick中添加下面代码:

// 判断鼠标是否点中方块

if( -1 == iClickIndex )

return;

// 将该一维数组的Index转换成二维数组的X,Y

int iIndexX = OneIndexToX( iClickIndex );

int iIndexY = OneIndexToY( iClickIndex );

int iEmptyIndexX = -1, iEmptyIndexY = -1;

// X 左方向(4个方向均需要判断是否是位于边缘,iIndexX > 0 即起此作用)

if( iIndexX > 0 )

{

if( 0 == m_iBlockState[iIndexY][iIndexX - 1] )

{

iEmptyIndexX = iIndexX - 1;

iEmptyIndexY = iIndexY;

}

}

// X 右方向

if( -1 == iEmptyIndexX && iIndexX < BLOCK_COUNT - 1 )

{

if( 0 == m_iBlockState[iIndexY][iIndexX + 1] )

{

iEmptyIndexX = iIndexX + 1;

iEmptyIndexY = iIndexY;

}

}

// Y 上方向

if( -1 == iEmptyIndexY && iIndexY > 0 )

{

if( 0 == m_iBlockState[iIndexY - 1][iIndexX] )

{

iEmptyIndexX = iIndexX;

iEmptyIndexY = iIndexY - 1;

}

}

// Y 下方向

if( -1 == iEmptyIndexY && iIndexY < BLOCK_COUNT - 1 )

{

if( 0 == m_iBlockState[iIndexY + 1][iIndexX] )

{

iEmptyIndexX = iIndexX;

iEmptyIndexY = iIndexY + 1;

}

}

7、如果找到空位,则将鼠标点击的方块精灵移动到该空位上。在二维数组里,将该索引对应

的值进行交换以及将两个方块精灵的名称交换,然后再将鼠标点击的精灵移动到新的位置上。添加下面代码:

// 判断是否找到空位

if( -1 == iEmptyIndexX || -1 == iEmptyIndexY )

return;

// 有空位,在二维数组里,将该索引对应的值进行交换

m_iBlockState[iEmptyIndexY][iEmptyIndexX] = m_iBlockState[iIndexY][iIndexX];

m_iBlockState[iIndexY][iIndexX] = 0;

// 对应的名字也进行交换

int iOneIndex = XYToOneIndex( iEmptyIndexX, iEmptyIndexY );

const char* tmpName=m_spBlock[iOneIndex]->GetName();

m_spBlock[iOneIndex]=new CSprite(m_spBlock[iClickIndex]->GetName());

m_spBlock[iClickIndex]=new CSprite("NULL");

// 将该精灵移动到对应的位置

MoveSpriteToBlock( m_spBlock[iOneIndex], iEmptyIndexX, iEmptyIndexY );

8、最后我们需要在Main.cpp中的OnMouseClick函数里面添加对鼠标点击消息的响应代码:

g_GameMain.OnMouseClick(iMouseType,fMouseX,fMouseY);

至此,本实验结束。

【实验内容】

步骤一、循环遍历判断是否胜利

步骤二、重新开始游戏

【实验思路】

判断游戏是否胜利主要是看所有方块的排列顺序是否为1至15,并且第16个位置的值为0。判断是否胜利的函数需要程序每次调用主函数的时候检测一次。

【实验指导】

1、进入LessonX.h中添加我们自定义的判断是否胜利的函数IsGameWin的声明:

int IsGameWin();

2、进入LessonX.cpp中添加该函数的定义,在文件的最后添加如下代码:

int CGameMain::IsGameWin()

{

}

3、判断游戏是否胜利的算法主要是:使用2个for循环遍历二维数组m_iBlockState,当数组

里边的值为如下排列的时候,游戏胜利:第一个值是1,第二个是2,... 第15个是15。

注意第16个(二维数组的最后一个)是空位,不用判断第16个(或者判断第16个的值为0)游戏胜利返回1,否则返回0. 如果在循环判断前15个的时候,只要其中一个值不符,不需要再往下执行,直接返回0即可。

在上面的函数定义里面添加如下的变量声明:

int iLoopX = 0, iLoopY = 0;

int iResult = 1;

利用两个for循环遍历m_iBlockState里面的数值,如果循环到数组的最后一个,说明该数组所有值符合游戏胜利的条件,则跳出循环,函数返回成功。如果有一个值不符合,则代表游戏没有胜利。实现代码如下:

for( iLoopY = 0; iLoopY < BLOCK_COUNT; iLoopY++ )

{

for( iLoopX = 0; iLoopX < BLOCK_COUNT; iLoopX++ )

{

// 数组的最后一个

if( BLOCK_COUNT - 1 == iLoopX && BLOCK_COUNT - 1 == iLoopY )

break;

// 其中一个值不等于,那么就没有胜利

if( m_iBlockState[iLoopY][iLoopX] != iResult )

return 0;

iResult++;

}

}

return 1;

4、判断游戏是否胜利的函数以及完成。但是系统需要定时检测当前游戏是否是胜利的状态,

因此需要在主循环里面添加这个函数的if判断,如果游戏没有胜利,则执行GameRun函数,如果胜利,则执行GameEnd函数。因此在GameMainLoop将GameRun函数的if(true)

改为if(!IsGameWin())。

5、如果游戏成功需要执行GameEnd函数,重新开始游戏。进入GameEnd函数,添加下面一

行:

// 显示提示开始文字

m_spGameBegin->SetSpriteVisible(1);

至此,本实验结束。

五、总结

这是一个综合性较强,很实际的一个编程实例。刚学funcode时候,感觉设计游戏还挺有意思的,刚接触到这个题目时,觉得应该没什么大问题吧,因为,我自认为一些基本知识点都已经掌握了。可是,真的当我动手编程的时候,才发现并没有想象中的那么简单。单个知识点是弄清了,但是,将所有的知识点综合起来运用时,就碰到了各种各样的问题了。有时候,一个错误得找好久,才能发现。

本系统的重点就是要会建立精灵以及怎样随机分配精灵。初始化的时候,用一个数组iRandData 顺序保存1到15,对应表示15个方块精灵。再用一个二维数组m_iBlockState[4][4]表示这16个位置。

每次随机从iRandData中取一个值,赋给m_iBlockState,表示某个位置放置哪张方块图片。

为了保证同一张方块图片不会被重复使用,每次从iRandData随机取一个值以后,将该随机数后面的数组值往前移一位,并且数组大小减1。

最后想说的是,调试程序真的很关键。调试程序需要较大的耐心。可能调试程序的时间比自己编写整个程序的时间还要长,下的工夫还要深,但这是一个程序员必须了解,也必须接受的事实。有好几次,几个错误让我很是头疼啊,很想删了,重新来过,可是最后发现,还是得有耐心去调试程序。

通过这个实验的练习,我也学到了很多东西,特别是加深了对类和对象理解和应用方面,也很谢谢老师给我的帮助。

拼图游戏开发总结报告

拼图游戏开发总结报告 1.引言 (1) 1.1编写目的 (1) 1.2项目背景 (1) 1.3定义 (1) 1.4参考资料 (2) 2.开发结果 (2) 2.1产品 (2) 2.2主要功能及性能 (5) 2.3所用工时 (5) 2.4所用机时 (5) 2.5进度 (5) 2.6费用 (6) 3.评价 (6) 3.1生产率评价 (6) 3.2技术方案评价 (6) 3.3产品质量评价 (6) 4.经验与教训 (6) 1.引言 1.1编写目的 本报告为拼图游戏的开发总结报告,目的在于总结项目开发,描述系统是否符合需求。预期参考人员包括用户、测试人员、、开发人员、项目管理者、其他质量管理人员和需要阅读本报告的高层经理。 1.2项目背景 【说明项目来源、委托单位、开发单位及主管部门。】 1.3定义 【列出报告用到的专门术语的定义和缩写词的原文。】

1.4参考资料 【列出有关资料的作者、标题、编号、发表日期、出版单位或资料来源,可包括: a.项目经核准的计划任务书、合同或上级机关的批文; b.项目开发计划; c.需求规格说明书; d.概要设计说明书; e.详细设计说明书; f.用户操作手册; g.测试计划; h.测试分析报告; i.本报告引用的其他资料、采用的开发标准或开发规范。】 2.开发结果 2.1产品 程序名称:PuzzleGame 目标程序字节数:52k 程序总数:20个 产品文档名称:需求分析、软件总体设计、软件单元测试计划、软件测试报告 产品截图如下:

2.2主要功能及性能 2.3所用工时 14个工作日 2.4所用机时 【按所用计算机机型分别计时。】 2.5进度 与实际进度对比有所延迟,因为时间太分散,效率有点低

拼图游戏制作文档汇总

基于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)游戏判断功能:用户通过移动每一小块图片,最终拼出和导入的图片一致时,系统则会判断你拼图成功,并提示“看来这对你来说太简单了,挑战更高难度吧!”这句话。

基于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;架构

九宫格数字游戏

九宫格数字游戏

九宫格数字游戏 系(院)名称:初等教育学院 年级、专业、班级:2013 级小学教育13本一班 梁芬芬(1331010126) 姓名(学号): 凌惠平(1331010130) 刘彩兰(1331010132) 数:

九宫格 中国古代的数学,和天文学以及其他许多科学技术一样,有极其辉煌的成就。可以毫不夸张地说,直到明代中叶以前,在数学的许多分支领域里,中国一直处于遥遥领先的地位。中国古代的许多数学家留下了许多璀璨的遗产。许多具有世界意义的成就并得以流传下来。这些中国古代数学家创造成就傲人的丰富宝库。其中最典型的要数九宫格。 一、九宫格由来 九宫格,一款数字游戏,起源于河图洛书( 有条洛河经常发大水,当时的皇帝夏禹带领人们去治水,这时候水中突然浮起了一只大龟,龟背上有很奇特的图案,这就是洛书”), 中国古代流传下来的两幅神秘图案,历来被认为是河洛文化的滥觞,中华文明的源头,被誉为“宇宙魔方”。相传,上古伏羲氏时,洛阳东北孟津县境内的黄河中浮出龙马,背负“河图”,献给伏羲。伏羲依此而演成八卦,后为《周易》来源。又相传,大禹时,洛阳西洛宁县洛河中浮出神龟,背驮“洛书”,献给大禹。大禹依此治水成功,遂划天下为九州。又依此定九章大法,治理社会,流传下来收入《尚书》中,名《洪范》。《易?系辞上》说:“河出图,洛出书,圣人则之”,就是指这两件事。 「重排九宫」,就是「重新排列九宫图」的意思。这是根据当时盛行研 究的数学游戏一「纵横图」(也叫「幻方」或「魔方阵」)发展来的,九宫游戏的起源,更可追溯到我国远古神话历史时代的「河图、洛书」。洛书就是最基本 的3X3阶魔方阵,是数学里的三阶幻方。唐宋时代的数学书中记载有许多纵横图的排法,在此基础上,就产生了重排九宫游戏。目前我们所知道的最早形式还是出现于文字记载。 二、九宫格历史发展 1783年,瑞士数学家莱昂哈德?欧拉发明了一种当时称作“拉丁方块”(Latin Square)的游戏,这个游戏是一个n X n的数字方阵,每一行和每一列都是由不重复的n 个数字或者字母组成的。 19世纪70年代,美国的一家数学逻辑游戏杂志《戴尔铅笔字谜和词语游戏》(Dell Puzzle M a g a zines )开始刊登现在称为“数独”的这种游戏,当时人们称之为“数字拼图” (Number Place),在这个时候,9 X 9的81格数字游戏才开始成型。

MFC课程设计之拼图游戏设计报告

拼图游戏 实验报告 一、实验目的

1、通过实践加强对程序设计语言课程知识点的理解和掌握,培养对课程知识综合运用能力、实际分析问题能力及编程能力,养成良好的编程习惯。 2、通过实践进一步领会程序设计的特点和应用,提高运用C++ 以及面向对象知识解决实际问题的能力,初步掌握MFC变成的基本功能。 3、通过实践掌握用C++ 编写面向对象的实用程序的设计方法,对面向对象方法和思想增加感性的认识;学会利用C++程序设计语言编写出一些短小、可靠的Windows实用程序,切实提高面向对象的程序设计能力,为后续的相关课程的学习打下基础。 二、小组分工 为了发挥组内同学的各自特长,我们小组分工如下: 1、苏嘉彬——前期进行系统需求分析,系统结构设计,完成拼图界面的设计工作, 后期完成课程设计报告 2、嵇鹏飞(组长)——完成主要程序的编写工作(图形分割、存储、拼图) 3、依代吐力·艾尼——搜集资料,完成计时器的设计工作,软件接口的设计及测 试 三、程序设计思路 1、初步方案讨论 拼图游戏是同学们喜欢的益智游戏之一,带着浓厚的兴趣,我们选择拼图游戏设计 作为我们小组本次MFC课程设计的课题。在讨论中,有的同学希望用单文档(SDI) 的形式完成本次设计,有的同学则偏向于用对话框(Dialogue)的形式,最终我们小组 讨论决定最终的设计采用对话框形式实现拼图功能。 2、方案变更、疑难解决 (1)最初我们决定采用对话框形式来实现拼图的基本功能,但是在实施过程中出 现了几次很严重的错误:Debug Assertion Failed,缺少ivewers.dll文件等等,在最后的 尝试中我们发现如果采用单文档(SDI)形式写拼图的话,可以实现最基本的功能,因 此我们最终决定使用单文档来完成该课程设计。 (2)一开始我们讨论决定采用的方式是将位图读入后再进行图片的分割,而在实 际的操作过程中由于图片的分割有一定的困难,因此我们最后采用的方式是将位图进行 分割完毕后再逐个用Brush在指定位置上进行绘画,实现图形的分割。 3、系统需求分析 (1)系统功能 简单的拼图游戏应该有拼图、计时、判断拼图成功、游戏者用时统计排名等功能, 拼图内部还应该有难度选择、相邻拼图块自动拼图等功能。图1所示是拼图游戏的用例 图,表明拼图游戏的主要功能。 图1 (

16格智力拼图技巧

( 图 5 ) 状况一:1、2、3 已就位, 4 从左方来,如何让 4 就位? 步骤:(有些简单步骤省略) 本状况的处理,要打破已摆好位置的数字不要再动的迷思,否则虽也可用类似状况 3 、4 之解法,但求 解步骤将大幅增加。本解法也可适用于「5、6、7 已就位, 8 从左方来,如何让 6 就位?」的情形。 * 状况二:1、2、3 已就位, 4 从下方来,如何让 4 就位?

( 图6 ) 状况二:1、2、3 已就位,4 从下方来,如何让4 就位? 本状况也可适用于「5、6、7 已就位,8 从下方来,如何让8 就位?」的情形。* 状况三:1、2、3 已就位,4 从右下方来,如何让4 就位? ( 图7 ) 状况三:1、2、3 已就位,4 从右下方来,如何让4 就位?

本状况也可适用于「5、6、7 已就位,8 从右下方来,如何让8 就位?」的情形。 由解答示范的第一步竟然回头向下走,可以给我们一个警示,以后遇此状况,就不要向上去逼近是非之地比较好。 * 状况四:1、2 已就位,如何让3、4 就位? ( 图8 ) 状况四:1、2 已就位,如何让3、4 就位?

本状况示范数字3、4 都尚未就位时,比较节省移动步数的方法,尤怪把它叫做倒车入库,先把数字3 放到位置4 ,数字4 移到数字3 的下方后再倒退就位;有时则要以相反的方式处理:先把数字4 放到位置3 ,数字3 移到数字4 的下方后再倒退就位。如何应用要看盘面数字的相对位置而定,所谓应用之妙存乎一心是也。 * 状况五:上半部已就位,如何让最后两列就位? ( 图10 ) 状况五:上半部已就位,如何让最后两列就位?

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 (),读取该游戏的最高记录,并将该记录输出到标签上;为各个菜单添加事件,鼠标点击“开

java拼图游戏面向对象课程设计报告

姓名Name 学号 Student No. 20137045 班级 Class 代码总行数Code Lines 222 项目名称 Item 1.实验目的 本次课程设计旨在通过一个完整项目的开发,巩固面向对象程序设计、软件工程、数据库技术等课程的相关知识,加深学生对Java语言的理解,尤其是对面向对象思想、Java编码规范、JDBC访问数据库的理解,使学生进一步掌握环境构建、代码编写、文档阅读与理解、文档编写、软件测试、发行与部署等技能,进一步提高学生的学习能力、理解能力、表达能力及沟通能力。 2.实验内容 本次课程设计选定的实验项目是使用JAVA语言编写一个拼图游戏并实现其基本功能。不用自己手动切割图片,再进行加载。而是应用类方法在内存中进行图片切割和加载,方便了用户的使用。 利用了Graphics中的public abstract boolean drawImage()方法把img 中由(sx1, sy1)(sx2, sy2)指定的矩形区域画到observer 中由(dx1, dy1)(dx2, dy2)指定的矩形区域内进行构思拼图游戏的具体实现。 导入了一个可播放背景音乐的jar包,在玩游戏时可以欣赏背景音乐。 3.类图

4.运行界面

图1、游戏初始界面 图2、游戏运行界面

图3、拼图成功界面 5.关键代码(要求在类的定义以及方法定义的前面给出相关描述信息)//定义一个Pintu类 public class Jpgsaw extends JFrame{

private Image image, buff; //原始图片,缓存图片 private int[][] map = {{0, 1, 2}, {3, 4, 5}, {6, 7, 8} }; //定义数组map,给分割后的图片标号 private Point point = new Point(2, 2); //记录第九块图片位置 private int sx; //分割后每一个图片的宽度 private int sy; //分割后每一个图片的高度 private Canvas canvas; //加载图片容器,定义可以显式定位子元素使用坐标是相对 Canvas 区域的区域,绘制图形 private Graphics gs; //gs画出Canvas图片坐标 private Graphics gb; //gb画出buff图像 private boolean isRunning = false; //游戏是否正在进行 private JButton start = new JButton("开始新的游戏"); // 按钮1 private JButton show = new JButton("显示正确图片"); //按钮2 private JTextArea showStep = new JTextArea("显示步骤");//设置步骤显示 private JPanel panel = new JPanel(); //一般轻量级面板容器,装在上面2个按钮 private int steps = 0; // 记录移动的步骤 public Jpgsaw(String title) { //构造方法,初始化变量 super(title);//调用了当前类Jpgsaw的父类JFrame的构造方法 try { //异常抛出 image = ImageIO.read(new File("gg.jpg")); //装载图片 } catch (IOException e) {//捕获自定义的异常 e.printStackTrace(); } initScreen(); //用此方法来初始化canvas,由于canvas 初始化较复杂,所以单独写一个方法 buff = new BufferedImage(715, 381, BufferedImage.TYPE_INT_BGR);//Image的一个子类,BufferedImage生成的图片在内存里有一个图像缓冲区,利用这个缓冲区我们可以很方便的操作这个图片 gb = buff.getGraphics();//存在于Image类中,存在于缓冲器中的图片,设置坐标 sx = image.getWidth(this) / 3;//图片分割后每一个图片的宽度 sy = image.getHeight(this) / 3;//图片分割后每一个图片的高度 setLayout(new BorderLayout());//设置此布局方法,加入控件 add(panel, BorderLayout.SOUTH);//布置容器的边框布局,它可以对容器组件进行安排,并调整其大小 add(canvas, BorderLayout.CENTER); panel.setLayout(new GridLayout(1, 4));//把组件按指定的几行几列分开,添加其他组件时,会按添加的顺序挨个添加到该组件上 panel.add(start); panel.add(show); panel.add(showStep); showStep.setEditable(false);//步骤默认false,使调用这个函数的控件不能被编辑 showStep.setFont(new Font("黑体", Font.PLAIN, 16));//设置字体

幼儿园大班数学游戏:好玩的七巧板

幼儿园大班数学游戏:好玩的七巧板 参考范本

【设计意图】 七巧板是我国民间流传最广、也是最常见的一种古典智力玩具,是世界公认的中国人创造的智慧游戏,这种游戏老少皆宜。幼儿已有过用几何图形进行拼图游戏的经验,因此很容易引导幼儿进行七巧板拼图活动。 开展七巧板游戏活动,可以充分发挥幼儿的想象力拼摆出许多的图案,让幼儿在活动中积累了数学经验,更扎实地巩固基础知识;玩的时候可以打破定势,转换思维,展开想像,对开发幼儿的智力,培养创造性思维都有很大的帮助;幼儿能用语言正确表述自己的图案,并且在相互表达、评价和交流中,提高幼儿的探究兴趣和探究能力. 【活动目标】 1、认识七巧板,学习看图完成简单的拼图。(重难点) 2、激发幼儿对拼图游戏的兴趣,体验成功的快乐。 【活动准备】 1、课件。 2、幼儿每人一套七巧板。 【活动过程】 (一)开始部分 师幼问好,稳定幼儿情绪。 (二)基本部分 1、七巧板的秘密游戏:快找快拿:

(1)师:我们都玩过七巧板,还记得七巧板中有哪几种形状的板吗? (2)师:现在来玩一个快找快拿的小游戏,听清楚规则: 5秒钟时间内,请你们看图片,找出同样形状的板,放在操作板上。 时间到,手立即放膝盖上,不能再碰板。 幼儿根据图片找出红色大三角形、正方形、平行四边形。 师:这次请你们找两块板,而且摆放的方向要和我的图片一样。 师:红色三角形方向是向哪边?绿色三角形方向是向哪边? 小结:形状相同,放的方向不同,给我们的感觉也不同。 师:刚才两个三角形摆放的方向也是这样的,那这次是什么地方改变了呢? 小结:位置换了一下,给我们又是一种新的感觉。 总结:用7块大大小小、不同形状的板块,变一变方向、换一换位置,就会出现奇妙变化。 2、七巧板的组合 (1)幼儿尝试选择其中的三角形组合不同的形状师:其实啊,七巧板设计非常巧妙,巧在哪里你们知不知道?那请你在七块板中选择其中的两块三角形组合一下,看看能不能产生新的形状呢? (2)交流: 师:你用哪两块三角形拼成了什么形状? 师:谁也一样拼出这样形状的图形了?怎么不一样呢? 小结:大三角和大三角组合在一起变大正方,小三角和小三角组合在一起变小正方。

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++) {

VB课程设计报告--拼图游戏

VB课程设计报告 —拼图游戏 知识点:控件数组,公共对话框控件,PictureClip控件,多模块程序设计,图片的应用。 1.题目介绍 “拼图”是一种老少皆宜、容易上手的益智类小游戏,本题目要求编制一个拼图游戏程序。使用方法如下: (1)指定一幅图片,将其分割成m × n 个小图块并且打乱顺序后重新排列,其中有一块没有图块的“空挡”。 (2)使用鼠标单击与空挡相邻的图块使该图块与空挡的位置互换。(3)利用空挡位置移动各图块,最终恢复图片原貌,完成拼图。移动的步数越少则说明游戏者的水平越高。游戏过程中,可以打开参考图帮助找到正确的位置。 2.功能要求 (1)运行程序,在进入游戏之前显示一个背景图片。 (2)选择菜单中的“打开图片”命令,显示打开图片对话框,“打开图片”对话框使用公共对话框控件实现,并且只能指定以*.jpg *.bmp 为扩展名的文件。可以在查看菜单中选着“缩略图”进行预览。(3)选择图片之后,程序弹出“指定行列数”对话框,提示将图片分几行几列。使用微调按钮可以调节行数和列数,限制在3-7之间。(4)指定行列数之后,单击确定返回主窗口,程序自动按照指定的

行列数将图片进分割,然后随机排列。 (5)打乱的图片中一空挡位置,用户单击与空挡相邻的图块可以与其互换位置。点击了空挡或者与其不相邻的,程序不做任何操作。原图只少右下角的图块。 (6)图片复原时,程序显示消息框表示祝贺,同时显示游戏共使用的步数。 (7)游戏过程中,如果用户希望参考原图,可以单击“显示原图”按钮,打开“参考图”窗口。 (8)窗体中的背景颜色可以改变,从菜单中选择“背景颜色”命令,弹出“颜色”飞、公共对话框,用户从中选择一颜色即可。 (9)在游戏过程中或在完成后,均可退出程序或选择“打开图片”菜单命令重新开始一个新图片。 (10)“参考图”窗口应是一个非模态窗口,在关闭主窗口时同时卸载,而不是隐藏,否则该程序不会完全关闭,仍会驻留内存。 3.程序设计 概述:(1)PictureClip 控件来管理打开图片并将其分为指定的行列图块,其Picture、Rows、Cols等属性值应在程序中设定。 (2)使用image控件数组来显示图块,设计时只需在窗体上放置一个image控件并将其的index设为0 ,其他的用load语句加载。 (3)“打开图片”和“颜色”对话框commondialog控件实现。设置其filter属性使之只能打开bmp和jpg类型的图片文件。 (4)将image控件的stretch属性设计为TRUE。

16格智力拼图技巧

16格智力拼图技巧

16格智力拼图技巧 * 益智游戏是一种较为大众化的应用数学,任何人不论对数学是否感兴趣,或多或少都会为它着迷。主要是因为它具有趣味性、消遣性及益智性,而不似一般数学那么的深奥及枯燥。当然最主要的是因为它的大众化,无需具有高深理论即可实施,故不分男女老幼及教育程度,都能享有这份乐趣! * 数字拼图就是这样的一个数学益智游戏,每隔一段时间就会掀起一阵流行,在小朋友中尤其普及,是一个十分迷人的个人操作游戏。 * 一般的游戏方式或市售的数字盘,是在一个 4 * 4 的盘面中放入1~15 的数字,并保留一个空格,游戏者的任务是利用移动空格旁边的数字到空格中的方法,使得所有的数字由左而右、由上而下依序排列(以下简称顺序花式) ,所以本游戏也被叫做「移动十五」、「十五子棋」、「十五子迷」、「数字智慧盘」等。 * 其实这个游戏并不必限定在4*4 的盘面 中操作,但是市售的实体数字盘要做到任意改变大小似乎有点困难,而且4*4 的盘面难易度最

为适中,所以大家就习以为常了。 * 数字拼图通常的玩法有下列几种: 1. 第一种玩法:将数字盘中的数字方块全部倒 出,然后随意的将数字方块装回盘中(以下简称随机花式),请游戏者排出顺序花式。 8 4 7 9 12 13 10 3 5 15 1 11 6 14 2 ===> 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ( 图1 ) 随机花式一例。 2. 第二种玩法:将数字盘中的数字方块先排成 顺序花式,然后随意移动到满意为止(以下简称随移花式),请游戏者复原成顺序花式。 8 2 1 13 10 4 5 14 7 9 11 3 12 15 6 ===> 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ( 图2 ) 将数字方块随意移动后,再要求复原。 3. 第三种玩法:游戏的目的花式不再是顺序花 式,而是指定的任一种花式,请游戏者由目前花式转换过去。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <===> 1 3 5 7 9 11 13 15 2 4 6 8 10 12 14 <===> 1 2 3 4 12 13 14 5 11 15 6 10 9 8 7 ( 图3 ) 由指定的花式变成另一个花式。

基于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年中,个人电脑应用的迅速普及促进了测试测量和自动化仪器系统的革新,其中最显著的就是虚拟仪器的出现与发展。虚拟仪器为工程师和科学家们提高生产效率、测量精度以及系统性能方面做出了卓越的贡献。 虚拟仪器的概念是由美国国家仪器公司提出来的,虚拟仪器本质是虚拟现实一个方面的应用结果。也就是说虚拟仪器是一种功能意义上的仪器,它充分利用计算机系统强大的数据处理能力,在基本硬件的支持下,利用软件完成数据的采集、控制、数据分析和处理

数字拼图游戏

安徽新华学院计科软件测试方法和技术 课程设计任务书 一、设计题目:数字拼图游戏(出题人:於世芳) 说明:一个拼图游戏。 二、目的与要求 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));

小学校本教材《智力拼图——七巧板》

小学校本教材 智力拼图——七巧板 主编: 目录 七巧板的来历及说明————————(1)七巧板拼图的游戏规则————————(2)

七巧板拼图的玩法——————————(3) 七巧板拼图的作用———————————(4) 七巧板拼图图案————————————(5—7) 七巧板拼图图案汇总———————————(8) 制作七巧板拼图——————————————(9) 七巧板的来历及说明 七巧板的定义:七巧板也称“七巧图”、“智慧板”,是汉族民间流传的智力玩具.它是由唐代的燕几演变而来的,原为文人的一种室内游戏,后在民间广为应用。 现在社会竞争越来越激烈,家长们为了让孩子以后更有竞争力,从孩子小时候开始就对孩子的德智体美劳各方面综合培养。家长们会经常和孩子互动,做一些益智游戏,帮助开发孩子的大脑。七巧板拼图,是现在很多家长都会教孩子玩的智力小游戏。

七巧板拼图既能锻炼孩子的动手协调能力,还能开发孩子的大脑,让小朋友们的童年色彩斑斓。七巧板拼图是一种智力游戏,是由七块板组成的。而这七这块板可拼成许多图形(1600种以上),例如:三角形、平行四边形、不规则多边形、玩家也可以把它拼成各种人物、形象、动物、桥、房、塔等等,亦可是一些中、英文字母。七巧板拼图的种类有这么多种选择,可以让孩子更具想象力,寓教于乐。 1 七巧板拼图的游戏规则 七巧板拼图的游戏规则一:在排七巧板的时候,所有的组件必须使用到,而且只能使用者7个组件排列。七巧板拼图的游戏规则二:七个组件之间可以角边相接,或边边相接,但绝对不能重叠,所以,不论排成哪种图形,总面积一定相等。知道了七巧板拼图的游戏规则后,我们来看看它的拼图玩法吧!

数字排序拼图游戏

数字排序拼图游戏 【摘要】:Java语言的学习热潮并没有因为时间的推移而消退,相反,由于计算机技术的发展所带来的新应用的出现,Java越来越流行,这种情况是以往程序设计语言在其生存周期内所不多见的。Java语言之所以这样长盛不衰,一是因为其众多的技术特点与现今的应用十分合拍,可以覆盖大部分的需求;二是因为SUN公司不断推出新的版本,完善Java自身的功能。有了这两点,Java语言成为程序员首选的程序设计开发工具就在情理之中了。 【关键字】:Java;发展;程序设计 一引言 现代科学技术的发展,改变了人类的生活,作为新世纪的大学生,应该站在时代发展的前沿,掌握现代科学技术知识,以适应社会的发展,能够独立完成面临的任务,作为一名有创新意识的新型人才。 拼图游戏是广受欢迎的一种智力游戏,它的变化多端,难度不一,让人百玩不厌。个性化的拼图,拼凑的不仅仅是一张照片,而是一个故事,一段回忆,一缕温情。每一片的单片都有它自己的位置,就像每段回忆都有它的故事,你要将它放在专属的地方,放对了就慢慢丰富起来,放错了就无法完整。 二设计大作业的目的与要求 1.1 设计目的 JSP/JAVA是计算机相关专业的必修专业基础课程,其实践性、应用性很强。实践教学环节是必不可少的一个重要环节。本课程的程序设计专题实际是计算机相关专业学生学习完JSP/JAVA课程后,进行的一次全面的综合训练,JAVA程序的设计目的是加深对理论教学内容的理解和掌握,使学生较系统地掌握程序设计及其在网络开发中的广泛应用,基本方法及技巧,为学生综合运用所学知识,利用软件工程为基础进行软件开发、并在实践应用方面打下一定基础。

QT拼图实验报告

拼图游戏 1. 文档介绍 本文档主要介绍了一个简单的拼图游戏的开发过程 2. 系统概述 就是一个简单的拼图游戏,将一幅图片随机打散,然后拼出原图,很简单,也没有加入时间限制,只是一个拼图游戏的核心。 3. 设计约束 本软件是用Qt开发出来的,Qt一个c++的gui类库,可以跨多种操作系统平台。除了Qt库,还用到的就是标准的c程序库,各个系统中的开发环境也都有。基于这两点,所以我开发出来的拼图游戏可以跨平台移植而不用修改代码,直接在目标平台上再重新编译一下就行了。另外,我开发的只是一个拼图游戏的核心。有很强的可扩展性,可以根据不同的需要而加入代码进行定制。拼图中用到的图像分割和随机打散算法都是比较高效的。鼠标点击图像块进行图像的交换,非常易用,对用户来说,非常清晰。 4. 开发与运行环境 ●操作系统:Windows7 32位旗舰版Service Pack 1 ●处理器:Pentium(R) Dual-Core CPU E6300 @ 2.8GHz 2.8GHz ●安装内存(RAM): 2.00GB ●编译器:minGW移植到windows下的gcc编译器 ●调试器:minGW移植到windows下的gdb调试器 ●Make:minGW中的mingw32-make ●Qt C++ GUI库 ●软件开发成功后拿到windowx xp和其他windows 7下运行毫无问题。

5. 软件的总体结构图 图1 程序总流程图

5.1 随机打散图片 图2 随机打散图片

5.2 拼图流程 图3 拼图流程

6. 功能模块设计 对于一个拼图游戏的核心来说,主要的模块就是图片的随机打散模块和拼图模块。我将屏幕窗口分成9块,如下图所示: 图4 屏幕窗口 6.1 图像随机分割 我们将图像也分成和屏幕窗口一样的9块,如下图所示: 图5 图像分割 在Qt中,视口是物理坐标系下指定的任意矩形,窗口指的是同一矩形,只不过是逻辑坐标系下的。我们先将视口设置成屏幕上的一块,然后窗口设置成一块大小和一块图像的大小一样的矩形,我们将一块图像绘制到窗口中,经过窗口-视口变换后就绘制到了视口所对应的屏幕上。

相关文档