
在设计采用单机模式,当在规定的时间内消完全部的则当前关卡通过,若果在规定的时间内没能消完所有的则游戏结束,重新开始游戏。游戏规则是模仿普通的连连看游戏,主要是鼠标两次点击的是否消去的问题,当前,前提是点击两张相同的,若点击的是同一张或者两张不同的,则不予处理。在两张相同的用三根以内的直线连在一起,就可以消去;否则,不予处理。
游戏过程,如果玩家在一定的时间内消完则提示玩家胜利,并进入下一关。如果在一定的时间内没有消完则提示玩家时间到。每关以此类推。
一、 所有都是按约定好的种类数和在同一区域的重复次数随机出现,并且每张的出现次数为偶数,时间会有限制,每一关的数量或时间是不同的,这样就增加了游戏的难度。
二、 在同一区域中,出现的种类数和重复数是可以由玩家选择的,时间由游戏约定。不过玩家选择的种类数和重复次数必须是偶数才可以顺利完成游戏,否则游戏虽然可以正常运行,但无法完成游戏。
在一种方案中,由于出现的图像按种类数和重复数都由软件约定,这样就缺乏玩家自主选择的空间,只是在完系统已经是设定好的游戏,不能改变什么,这样就在无意中降低了玩家在游戏过程中的乐趣,最后致使玩家放弃继续玩下去。我们参考了网络上的连连看游戏,考虑到游戏的娱乐性。所以我们放弃第一种方案的设计思想,参考网络上流行的连连看游戏,设计第二种方案。
3主要问题
开始制作游戏时,主要解决问题有以下几个方面:如何设置整个游戏的界面;如何控制连连看游戏中随机的生成且每种必须为偶数个;游戏开始后,判断鼠标两次点击的能否消去,即是否相同且之间路径的判断;如何判断游戏是否结束以及输赢问题等。
34技术要求
本游戏软件可以再大多数计算机上运行,游戏中能正确判断鼠标两次点下的是否可以消去、能正确判断游戏是否已经结束。
4、 系统设计:
针对上面的需求分析,我们把整个软件分成两个模块:1、整体界面的设计和的随机生成;2、路径判断函数;
一下就是系统结构图:
41基本思路
411游戏画面问题的思路
画面,对于设计者来说,可以算是最简单的地方;但对于玩家,这却是最重要的,一般玩家不会关心你是怎么实现的,他所关心的是画面的美观,漂亮,是不是能让人赏心悦目。
2获取位置的思路
通过数组从库随即获取规定个数的,随机分布在画布上。个数一定是个偶数个。
413 路径判断的思路
连连看所要求的是:
1:两个目标是相同的
2:两个目标之间连线的折点不超过两个。(连接线由x轴和y轴的平行线组成)那么分析一下连接的情况可以看到,一般分三种情况
1:直线相连2:一个折点3:两个折点;
可以发现,如果有折点,每个折点必定有且至少有一个坐标(x或者y)是和其中一个目标点是相同的,也就是说,折点必定在两个目标点所在的x方向或y方向的直线上。
所以设计思路就是:
假设目标点p1,p2,如果有两个折点分别在z1,z2那么,所要进行的是
1:如果验证p1,p2直线连线,则连接成立
2:搜索以p1,p2的x,y方向四条直线(可能某两条直线会重合)上的有限点,每次取两点作为z1,z2,验证p1到z1/z1到z2/z2到p2是否都能直线相连,是则连接成立。
414其他问题的思路
其他功能将在后面的具体各个部分的设计过程当中分别进行介绍。
42主界面的设计
由于这个程序的界面并不是很复杂,所以用到的控件也不多,主要核心内容还是后台的代码设计。的随机生成主要是用到一个random()函数将随机数赋值给flag[ ]数组中的每个元素,然后根据数组元素值,来显示。
421界面的设计
1、色彩上:总结人们的视觉习惯和色彩对眼睛的健康影响,决定对于画布采用黑色背景,神秘而大方;右边的控制区采用天蓝色,配合左边纯黑的背景,就像黑夜中的蓝天,纯洁而大方。
2、功能上:背景就是窗体,右侧是一个groupbox控件,用来放置控制按钮,下方是一个grogressbar控件,用来显示时间条。
422的随机生成
实现这个功能要分很多个步骤:
1 程序运行时即载入游戏需要的N张,默认情况下种类是18,重复数是4(重复数必须是偶数),并且可以选择是否重列。通过一个循环,加载随机的选择N种。具体载入的代码如下:
private void InteBmp(int maxnum)
{
g_g=thisCreatphics();
for(int i=0;i<MAPWIDTH;i++)
for(int j=0;j<WAPHEIGHT;j++)
gamp[i,j]=0;
IniteRandoMap(ref gamp,maxnum);
AI=new Kernal(ref gmap);
for(int i=0;i<maxnum;i++)
{
ResourceManager rm=new ResourceManager(“LLK data”,Assembly,GetExecut ingAssembly() );
img[i]=(Image)rmGetObject(iToString( )+”bmp”);
//img[i]=(Image)BitmapFormFile(“Images\\”+(i+1) ToString( )+”bmp”);
}
for(int i=0;i<6;i++)
{
//bombimg[i]=(Image)BitmapFromFile(“Image\\B”+(i++) ToString( )+”bmp”);
}
}
2 当确认游戏开始时,通过画图过程完成生成,画图的过程代码如下
private bool CheckWin(ref int[,]map)
{
Bool Win=true;
for(int i=0;i0)
{
for(int i=0;i<multipic;i++)
{
Int xrandom=rNext(19);
Int yrandom=r,Next(11);
If(map[xrandom,yrandom]==0)
{
map[xrandom,yrandom]=num;
}
else
i--;
}
num--;
}
}
private void FreshMap(ref int[,]map)
{
random r=new Random();
for (int i=0;i<MAPWIDTH;i++)
for(int j=0;j<MAPHEIGHT;j++)
{
if(gmap[i,j]!=0)
{
int x=rNext(19);
int y=rNext(11);
int temp=gmap[x,y];
gmap[x,y]=gmap[i,j]
gmap[i,j] =temp;
}
TransportMap(ref gmap);
}
private void TransportMap(ref int[,]map)
{
for (int i=0;i<MAPWIDTH;i++)
for(int j=0;j<MAPHEIGHT;j++)
{
AIGiveMapValue(i,j,map[i,j]);
}
}
//在指定位置画指定图
private void Draw(Graphics g,Image scrImg,int PicxX,int PicV)
{
gDrawImage(scrImg,new Point(PicX,PicV));
}
private void Forml_Paint(object sender,PaintEventArg e)
{
g_gDrawLine(newPen(newSolidBrush(ColorDeepSkyBlue),5),0,1134+5,1934
,1134+5);
If(bStart)
{
For(int i=0;i209)
{
MessageBoxShow(“游戏区域内最多只有209个孔,您选的数据太多!请重新选!”);
textBox1Text=”18”;
textBox2Text=”4”;
return;
}
IniteBmp(picnum);
If(bStart)
{
MessageBoxShow(“游戏已在运行!”);
return;
}
else
{
bStart=true;
thisInvalidate();
musicPlay(“Sounds\\ bg-03mid”);
}
}
重新实现代码如下:
Private void RefreshMap(ref int[,] map)
{
if ( int i=0;i<MAPWIDTH;i++)
for(int j<MAPHEIGHT;j++)
{
If(gmap[I,j]!=0)
{
Draw(g_g,img[gmap[I,j]-1],iPICWIDTH,jPICHEIGHT);
}
}
}
private void FreshMap(ref int[,] map)
{
Random r=new Random();
for(int i=0;j<MAPWIDTH;i++)
for(int j=0;j<MAPHEIGHT;j++)
{
if(gmap[I,j]!=0)
{
int x=r,Nex(19);
int y=r,Nex(11);
int temp=gmap[x,y];
gmap[x,y]=gmap[I,j];
gmap[I,j]=temp;
}
}
TransportMap(ref gmap);
}
Private void button2_Click(object sender,EventArgs e)
{
RefreshplayerPlay();
FreshMap(ref gmap);
ThisInvalidate();
}
424得分设置
本游戏一改前人风格,采用全新计分方式,使人们在寻找相同的同时还注意路径的选择,更增加了游戏的趣味性,具体规则:直连得10分,一个拐点的20,两个拐点得40用一个Label控件存储得分。
实现代码:
Switch(corner[2]X)
{
Case1;
Score+=20;//一个拐点加20;
g_gDrawLine(pen,new Point(p1X31+15,p1Y34+17),new
Point(corner[0]X31+15,corner[0],Y34+17)),;
g_gDrawLine(pen,new point(p2X31+15,p2Y34+17),new
Point(corner[0]X31+15,corner[0],Y34+17));
ThreadSleep(100);
EraseBlock(g_g,p1,p2);
g_gDrawLine(bkpen,new Point(p1X31+15,p1Y34+17)new
Point(corner[0]X31+15,corner[0],Y34+17);
g_gDrawLine(bkpen,new Point(p1X31+15,p2Y34+170new
Point(corner[0]X31+15,corner[0],Y34+17);
break;
case 2;
score+=40;
Point[ ]ps={new Point(p1X31+15,p1Y34+17),new<br/> Point(corner[1]X31+15,corner[1],Y34+17),new<br/> Point(corner[0]X31+15,corner[0],Y34+17),newPoint(p2X31+15,p2Y34+17));<br/> g_gDrawLine(pen,ps);<br/> ThreadSleep(100);<br/> EraseBlock(g_g,p1,p2);<br/>//foreach(Point mp in ps)<br/>//{<br/> //MessageBoxBoxShow(“+mpXToString( )+”,”+mpYToString( )+”)”));<br/>//}
break;
case 0;
score+=10;
g_gDrawLine(pen,ps);Point(corner[0]X31+15,corner[0],Y34+17),newPoint(p2X31+15,p2Y34+17));
ThreadSleep(100);
EraseBlock(g_g,p1,p2);
g_gDrawLine(pen,ps);Point(corner[0]X31+15,corner[0],Y34+17),newPoint(p2X31+15,p2Y34+17));
break;
default:break;
}
//RefreshMap(ref gmap)
Label5Text=scoreToString( );
下面还有
1点击“开始”后,屏幕的下半块是呈**的,这样那些图标就看不出来是什么
答:网络原因或者机器显卡出现问题,建议重新安装显卡驱动。
2“打开游戏客户端失败,如果由此问题而不能进行游戏,请尝试重新安装连连看游戏”
答:游戏客户端问题,建议退出房间,重新进入,或者重新下载安装连连看客户程序。
3“由于未知原因与服务器失去联络”
答:网络原因,建议玩家换一个游戏服务器登陆。也可能是玩家使用了外挂程序导致系统将其踢出。
4为什么有时候是第一个连完却还总是扣分?
答:网络问题,由于网速慢的原因,导致你本地的资料上传不到服务器上,所以你只看到了在你电脑上连完了,而服务器主机接受不到信息。
5“为什么我已经下载了游戏大厅,也下载了连连看这个游戏,但总也连不上游戏大厅,总是说无法连接密码库”
答:服务器原因,建议玩家换一个游戏服务器登陆。
6“我打连连看是总会卡住
出现什么切换到
重试让你选择”
答:内存或游戏客户端问题,建议玩家狂按切换到或者退出游戏大厅重新进入。
1点击“开始”后,屏幕的下半块是呈**的,这样那些图标就看不出来是什么
答:网络原因或者机器显卡出现问题,建议重新安装显卡驱动。
2“打开游戏客户端失败,如果由此问题而不能进行游戏,请尝试重新安装连连看游戏”
答:游戏客户端问题,建议退出房间,重新进入,或者重新下载安装连连看客户程序。
3“由于未知原因与服务器失去联络”
答:网络原因,建议玩家换一个游戏服务器登陆。也可能是玩家使用了外挂程序导致系统将其踢出。
4为什么有时候是第一个连完却还总是扣分?
答:网络问题,由于网速慢的原因,导致你本地的资料上传不到服务器上,所以你只看到了在你电脑上连完了,而服务器主机接受不到信息。
5“为什么我已经下载了游戏大厅,也下载了连连看这个游戏,但总也连不上游戏大厅,总是说无法连接密码库”
答:服务器原因,建议玩家换一个游戏服务器登陆。
6“我打连连看是总会卡住
出现什么切换到
重试让你选择”
答:内存或游戏客户端问题,建议玩家狂按切换到或者退出游戏大厅重新进入。
『连连看』游戏问题经典解答
1 我的连连看无法运行,表现为黑窗口一闪而过(501及以下版本)或d出提示信息(502及以上)
连连看5运行失败的主要原因是没有安装正确的显卡驱动程序或者DirectX 81(或以上)。
1) 没有安装正确的显卡驱动程序:d出的提示文件中有“D3D Driver: vgadll” 字样,表示没有安装正确的显卡驱动,显卡驱动一般在买电脑附送的驱动光盘中,如果没有则请安装“驱动精灵”协助安装。
2) 没有安装DirectX:连连看需要DirectX 81以上的支持,Windows Xp和Vista的 *** 作系统自带,如果DirectX已被删除或 *** 作系统版本为Win2000以下的,请先安装DirectX。
相关提示:开始->运行->输入dxdiag->回车 可以知道当前系统的DirectX版本
3) 系统设置不正确:右键点桌面--->设置--->高级-->硬件加速,调至完全。
开始-->运行输入dxdiag显示dirextX启用DirectDraw、Direct3D、AGP纹理加速。如无法启用,一般是显卡驱动有问题,请重新安装显卡的驱动程序。
4) 以上说明没有帮助,则请在 连连看5无法运行的详细说明及官方解答贴 中提问,我们会尽量帮助玩家解决。
2 为什么我玩了一阵连连看后会死机?
连连看不会直接导致系统死机,请检查以下可能原因:
1) CPU占用率太高:如果在Windows任务管理器中发现LinLink5exe CPU占用率太高(50%或以上),则请在连连看“游戏设置”中调低FPS。
2) 系统散热问题:CPU风扇是最容易损坏的部件,如果风扇转动不正常,则电脑会因CPU过热而自动重启。
3) 显卡驱动问题:如果显卡驱动和系统不兼容,则可能导致死机,解决办法是安装最新且正确的显卡驱动。
3 为什么我的机器配置不差,但是FPS(每秒帧数)却很低?
一般60帧以上即可较流畅的进行游戏,而30帧以下有时候会感觉到画面跳跃。连连看5对硬件要求比较低,经过测试,在2000年购置的赛扬533/内存192M/显卡TNT2 32M 的机器上就可以获得基本的30FPS(每秒30帧)。
下面一些 *** 作可以提高连连看5的FPS:
1) 请关闭其他占用大量CPU时间的程序。
2) 请打开连连看5->游戏设置,检查性能设置中的游戏帧数是否设置过低。
3) 点击连连看5右上角全屏按钮进行全屏游戏可以提高FPS。
4) 请确认 桌面右键->属性->设置->高级->显卡设置->疑难解答 中的硬件加速设置为全开。
5) 把屏幕属性的颜色从32位色设为16位色也可以提高FPS,但是某些场景可能无法进入。
4 连连看5游戏过程中何时会奖励生命及提示?
连连看5每过一小关会自动奖励一条生命及一次提示。同时,游戏过程中15连击奖励一次提示;25和40连击各奖励一条生命,另外10连击以后每一连击奖励一秒游戏时间。
5 为什么我分数够了却无法进入排行榜?
只有经典模式和大师模式的分数才有可能进入排行榜,因为主题模式和地图模式都是可以自定义的,其中大师模式的起评分是100000分。
6 为什么Windows Server 2003或2008无法播放游戏音乐?
因为Windows Server不带DirectMusic组件,下载DirectMusic补丁,解压运行 SETUP x86CMD 或者SETUP x64CMD即可。
我还有其他问题无法解决,怎么办?
请访问连连看官方论坛,那里一定有热心的连友帮你解答。
以上就是关于请问怎样用flash制作连连看的游戏要具体步骤。谢谢!全部的内容,包括:请问怎样用flash制作连连看的游戏要具体步骤。谢谢!、打开连连看客户端失败,如果由于此问题不能进行游戏,请尝试重新安装该游戏、连连看5的常见问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)