连连看课程设计.docx
- 文档编号:7817827
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:16
- 大小:133.47KB
连连看课程设计.docx
《连连看课程设计.docx》由会员分享,可在线阅读,更多相关《连连看课程设计.docx(16页珍藏版)》请在冰豆网上搜索。
连连看课程设计
.
信息科学与工程学院
程序设计实训课程设计
题目连连看游戏
学院信息科学与工程学院
班级
姓名
学号
指导教师
成绩
2013年5月
摘要
在电脑普及发展的今天,游戏已成为人们生活中必不可少的一部分了,不论你走到哪个游戏网站,连连看游戏总是排在受玩家欢迎排名的前5位。
休闲、趣味、益智是连连看玩不厌的精华,且不分男女老少、工薪白领,是一款适合大众的经典休闲小游戏。
而这次我所选的课题连连看小游戏的设计开发正是互联网与社会生活之间关系的紧密体现。
当今社会随着网络的不断发展,游戏行业也如雨后春笋般迅速崛起。
虽然说大型网络游戏能够给游戏开发商带来很大的经济利益,但是它的开发成本大,风险性比较高。
而小型的游戏恰巧避免了这些,它的开发简单,风险相对大型游戏小多了。
因此小型的游戏在游戏开发中占据的地位也不容忽视。
连连看是一个小型的游戏,不仅能够考察一个人的观察能力而且可以用来打发无聊的时间,也可以给上班族在工作之余用来娱乐,这样就可以来减轻工作压力。
与此同时该游戏对电脑的配置无要求,相对于大型的网络游戏来说。
所以这个游戏的开发还是很有意义的。
该连连看游戏是使用Jscript实现,以DreamWeaver为开发环境,玩家通过开发者设置的游戏规则使得游戏区的所有图片都消除,这样就胜利了。
系统定义了一个时间进度条为60秒,当消除一对图片则系统会自动在原有的剩余时间上加上1秒。
如果在规定的时间游戏区的图片没有消除完,则游戏结束。
关键词:
DreamWeaver,Dw,Jscript,连连看,游戏
目录
第1章前言1
1.1简介说明1
1.1.1研究背景1
1.1.2目的1
1.2设计的目的及工作原理1
1.2.1工作原理1
1.2.2设计流程2
1.2.3开发的目的及意义3
1.2.4关于Jscript3
第2章游戏功能分析4
2.1游戏总体功能分析4
2.2游戏区域的设计实现4
2.3初始化工作5
2.4图案方块的连接消除判断7
2.5游戏的胜利13
2.6游戏的重置14
第3章系统测试15
3.1程序运行测试15
3.2游戏失败提示界面16
3.3游戏成功提示界面17
第4章总结18
参考文献19
第1章前言
1.1简介说明
1.1.1研究背景
随着电脑软硬件技术和互联网的飞速发展,电脑游戏也突飞猛进,成功游戏不断涌现。
比较成熟的项目主要有:
反恐精英(CS)、星际争霸、魔兽争霸2、FIFA2003、帝国时代、FIFA2004等等。
这时也出现了越来越多的网络小游戏,休闲类项目包括网络围棋、中国象棋、四国军棋、桥牌、麻将、拱猪、斗地主、拖拉机、连连看等。
1.1.2目的
网络小游戏制作的目的是满足了人们休闲的需要,在紧张工作之余休闲类的小游戏能够给人带来最大程度的放松,也可以增进人们之间的交流,沟通,通过游戏还可以认识更多的朋友,也可以到达跨省、跨市,甚至跨国间人们互相娱乐的目的。
连连看游戏面向的对象对象很广泛,男女老少通吃。
但很奇怪的是,它也真的能吸引老人以及小孩。
闲下来的时候,这款游戏可以有意身心,促进大脑运转,还可以消除心理焦虑,降低来自各方面的压力。
当然,游戏嘛,总归到底,有利也有弊,因为喜欢玩,所以往往让人爱上它,爱的很疯狂。
所以,我在此还是劝诫广大玩家不要沉迷游戏,任何喜欢都得有个度。
过了那个度,就适得其反了。
1.2设计的目的及工作原理
1.2.1工作原理
游戏一开始便定义了一个时间进度条,玩家必须在规定的时间内消除游戏区的所有图片方可取得胜利。
任意两张图片相同的单元格在符合相应的可消除的条件下进行消除,转一次弯或者不转弯,或者转两次弯。
当消除一对图片时时间进度条会自动增加10秒。
一旦游戏定义的时间归零,但是在游戏区域还有图片存在时,游戏失败,同时游戏结束。
反之,游戏胜利,玩家可继续挑战更高级别的。
所有的初始化时随着页面一开始就被载入。
其实现代码为:
window.onload=function(){
SetTab();//绘制游戏区
}
游戏图片是系统产生的webdings图标,接着就是设计游戏规则也就是判断在什么情况下两张图片才能消除,具体实现我们将会在后面一一介绍。
1.2.2设计流程
流程规划大致上可以分为三个部分,分别为:
游戏初始化界面设计、游戏规则的设定,控制模块。
在这其中最主要的就是游戏规则的设置,与游戏窗口的初始化。
当玩家双击该html页面时,一开始系统就会初始化游戏界面,这是该程序至关重要的一部分。
初始化游戏界面主要包括游戏区的图片布局与显示、进度条的显示与初始化。
每次开局的图片布局都是随机的。
时间条的大小设计为1500毫秒。
接着就是点击消除图片的规则设计了,看玩家点的两张图片是否能够消除。
连连看游戏它的构架图如下图所示:
图1.1总架构图
1.2.3开发的目的及意义
大学以来各门专业课程的学习,让我综合知识全面提升了很多。
为了提高自己的动手能力,将知识灵活的运用,此次我设计了一个连连看程序。
希望将书本上所学的理论知识与实际相结合,通过本次的程序设计使自己在程序的开发和设计上有新的认识并能有所提高。
也对于我们以后工作能力的培养具有重要意义。
1.2.4关于Jscript
JScript是Microsoft公司对ECMA262语言规范(ECMAScript编辑器3)的一种实现。
除了少数例外(为了保持向后兼容),JScript完全实现了ECMA标准。
本概述的目的就是引导您学习使用JScript。
JScript是一种解释型的、基于对象的脚本语言。
尽管与C++这样成熟的面向对象的语言相比,JScript的功能要弱一些,但对于它的预期用途而言,JScript的功能已经足够大了。
JScript不是其他语言的精简版(例如,它只是与Java有点模糊而间接的关系),也不是任何事物的简化。
不过,它有其局限性。
例如,您不能使用该语言来编写独立运行的应用程序,并且没有对读写文件的内置支持。
此外,JScript脚本只能在某个解释器或“宿主”上运行,如ActiveServerPages(ASP)、Internet浏览器或者Windows脚本宿主。
JScript是一种宽松类型的语言。
宽松类型意味着您不必显式定义变量的数据类型。
事实上JScript更进一步。
您无法在JScriot上明确地定义数据类型。
此外,在大多数情况下,JScript将根据需要自动进行转换。
例如,如果将一个数值添加到由文本组成的某项(一个字符串),该数值将被转换为文本。
第2章游戏功能分析
2.1游戏总体功能分析
整个游戏区域是根据一开始初始化时根据默认的行数16和列数9来绘制表格的。
使用系统图标webdings(从asc2的32开始)填充其单元格。
默认时间是一分钟。
但是这些都可由玩家自行更改。
游戏中,选取图案相同两张图片并在条件成立的情况下进行消除。
在制定的时间下消除表格中所有图案即可胜利。
2.2游戏区域的设计实现
游戏区域是根据确定的行数和列数绘制好的表格。
但它没有占据整个网页。
表格的行数和列数值越大代表着游戏的难度系数越大。
每一个单元格放置着随机产生的系统图标,这些图案零散的分布在表格的任意单元格里,并且每一个图案都一定会有与之对应的完全一样的另外一张图片存在该表格中。
避免了游戏发生不可能胜利的情况。
经过前面的描述和分析后,我们简要的概括开始游戏的初始化过程。
在js中把表格的行数列数图片数以及时间都作为全局变量,以便在整个游戏过程中值都可以依据程序而变化:
varRowMax=42;//列数
varColMax=22;//行数
varPicMax=26;//总图片数
varTimeMax=60;//总时间
varOffSet=32;//使用系统图标webdings(从asc2的32开始)
varPicAry=newArray(PicMax);
varMatrix=newArray(RowMax);
时间的显示是用的是一个div:
在页面被载入的时候就进行了初始化:
document.getElementById("timebar").style.width=600;//时间条设置其宽度为600px.
document.getElementById("timebar").style.backgroundColor="blue";//设置其一开始的颜色为蓝色。
当随着游戏的时间一秒一秒的逝去,类似进度条的时间栏会显示不同的颜色来提示玩家对应花掉的时间。
如果玩家成功过关,进度条会将其颜色恢复成白色。
2.3初始化工作
绘制表格并对表格各单元格放置的图片数据空间内的进行成对性的随机布局。
这些功能都在页面载入的setTab()函数里实现。
其代码如下:
//绘制表格
TmpStr="
for(j=0;j TmpStr+=" for(i=0;i //绘制单元格的同时给它加上onclick事件。 调用CheckP()函数,当用户单击该点时,对该点进行检测。 TmpStr+=" if(0==i||0==j||(RowMax-1)==i||(ColMax-1)==j){ Matrix[i][j]=0;//边界填充空单元格,连线用。 TmpStr+=">"; } else{ TmpInt--; Matrix[i][j]=1+Math.floor(PicMax*Math.random()); if(TmpInt for(k=1;k<=PicMax;k++){ if(PicAry[k]){ Matrix[i][j]=k; break; } } } //更新该类图片的奇偶数数组,以及单张图片总数 if(PicAry[Matrix[i][j]]){ PicAry[Matrix[i][j]]=0; PicNum--; } else{ PicAry[Matrix[i][j]]=1; PicNum++; } //填写颜色 vartmp_color=Math.floor(0xFFFF00*Matrix[i][j]/PicMax).toString(16); TmpStr+="color=\"#"; for(k=tmp_color.length;k<6;k++)TmpStr+="0"; TmpStr+=tmp_color; TmpStr+="\">"; //添图片(webdings图标) TmpStr+=String.fromCharCode(Matrix[i][j]+OffSet);//不同的图片 } TmpStr+=""; } TmpStr+=""; ";
}
TmpStr+="";
游戏的初始化工作由函数setTab()实现,表格区域中的每一个放置图片的单元格都由两个个二维数组中的元素来定义。
数组中X表示图片在游戏区域的横坐标Y表示图片在游戏区域的纵坐标。
所以在游戏的初始化工作中也要对数组进行初始化,如果在数组元素所表示的区域不可以存放图片则负值为0,如果在该区域可以存放图片则负值为-1。
2.4图案方块的连接消除判断
在检验玩家选择的两张图片能被消除的时候,它们必须符合:
一:
就是选中的两个单元格的图案必须相同。
二:
在选中的两个单元格之间没有障碍物阻碍的情况下,能用若干个平行或垂直垂直的直线线段连接起来。
三:
将两个单元格连接起来的直线线段的折点不能超过两个(连接线由x轴和y轴的平行线组成)。
图片可以消除的连接方式分为三种:
一:
直连方式。
该方式为三种消除图片的连接方式中最简单的一种。
在直接连接方式中,必须要求所选定的两个单元格在同一水平直线上或者在同一垂直线上,并且两个单元格之间没有任何其它图案单元格。
二:
一个折点的平行垂直线段连接。
在该情况下,所选定的两个方块如果通过折点的方式连接,那么对折点来说,每个折点必定有且至少有一个坐标(x或y)是和其中一个目标点相同的,即折点必定在两个目标点所在的x方向或y方向的直线上。
此外,对于一个折点连接的情况,折点应该为第一个选中方块的横向线或纵向线与第二个选中方块的纵向线和横向线相交而得出。
三:
两个折点的平行垂直线段连接。
在该情况下的两个折点所连成的直线与两物件的直接连线可以构成平行线,因此可以根据这个规律,将这条水平线在游戏区域允许的条件上下移动,然后通过判断整条带垂直折线点的曲线之间有无障碍物方式来确定是否可以连同。
它的具体消除图片实例如图2.1所示。
图2.1消除图片实例
它的设计流程图如图2.2所示。
图2.2判断消除图片流程图
首先,对简单直接连的情况进行判断,看它是否符合条件,假如不能,再加深一个级别的复杂度,对一个折点的情况进行判断,依次类推。
在函数LineX()、LineY()、LinkP()中分别对所有可能连线的情况采用枚举法进行判定。
其三个函数的实现分别如下:
//X方向连线。
(有起点,无终点)
functionLineX(x,y,xt){
for(i=x;i!
=xt;(x i++: i--)){ if(Matrix[i][y]){ returnfalse; } } returntrue; } //Y方向连线。 (有起点,无终点) functionLineY(x,y,yt){ for(i=y;i! =yt;(y i++: i--)){ if(Matrix[x][i]){ returnfalse; } } returntrue; } //2个点被3条线连接 functionLinkP(P1,P2){ //P1在P2下方,交换P1、P2 if(P1.y>P2.y){ P3=P1; P1=P2; P2=P3; } //P1下方1点(y+1)先纵向再横向是否可连接。 (因为起点P1不为空,所以检测其下方一点) if(LineY(P1.x,(P1.y+1),P2.y)&&LineX(P1.x,P2.y,P2.x))returntrue; //P1先向左侧连接,再检测该点再纵向再横向是否可连接P2。 for(j=(P1.x-1);j>=0;j--){ if(Matrix[j][P1.y])break; if(LineY(j,(P1.y+1),P2.y)&&LineX(j,P2.y,P2.x))returntrue; } //P1先向右侧连接,再检测该点再纵向再横向是否可连接P2。 for(j=(P1.x+1);j if(Matrix[j][P1.y])break; if(LineY(j,(P1.y+1),P2.y)&&LineX(j,P2.y,P2.x))returntrue; } //P1在P2右侧,交换P1、P2 if(P1.x>P2.x){ P3=P1; P1=P2; P2=P3; } if(LineX((P1.x+1),P1.y,P2.x)&&LineY(P2.x,P1.y,P2.y))returntrue; for(j=(P1.y-1);j>=0;j--){ if(Matrix[P1.x][j])break; if(LineX((P1.x+1),j,P2.x)&&LineY(P2.x,j,P2.y))returntrue; } for(j=(P1.y+1);j if(Matrix[P1.x][j])break; if(LineX((P1.x+1),j,P2.x)&&LineY(P2.x,j,P2.y))returntrue; } returnfalse; } 当玩家单机表格中的单元格时,产生鼠标事件,调用函数checkP()检测该点,函数代码如下: //单击检测该点 functionCheckP(o,x,y){ if(Matrix[x][y]){//非空 if(null==TmpObj){//之前无选中图片 TmpObj=o;//选中该图片 TmpObj.borderColor="0000FF";//改变边框颜色 P[0].x=x;//保存该点 P[0].y=y; } elseif(o! =TmpObj){//非同一点 TmpObj.borderColor="FFFFFF";//恢复边框颜色 P[1].x=x;//保存该点 P[1].y=y; if(Matrix[P[0].x][P[0].y]==Matrix[P[1].x][P[1].y]){//同一类图片 if(LinkP(P[0],P[1])){//可以连接 Matrix[P[0].x][P[0].y]=0;//清零 Matrix[P[1].x][P[1].y]=0; TmpObj.innerHTML="";//原图片显示为空 o.innerHTML=""; TmpTime++;//奖励时间 TmpInt--;//剩余图片减1 if(! TmpInt){//剩余图片为0 clearInterval(st);//清除倒计时document.getElementById("container").innerHTML=""; document.getElementById("timeleft").innerHTML="";document.getElementById("timebar").style.backgroundColor="white"; alert("恭喜您过关! "); } } } TmpObj=null;//无选中图片 } } else{ if(TmpObj){TmpObj.borderColor="FFFFFF";}//恢复边框颜色 TmpObj=null;//无选中图片 } } 在函数shoutime()中,用于更新时间,依据所剩下的时间控制时间进度条的颜色等功能。 其代码如下所示: functionShowTime(){ TmpTime--;//时间减1 //更新时间 document.getElementById("timeleft").innerHTML=+TmpTime; document.getElementById("timebar").style.width=Math.floor(600*TmpTime/TimeMax); if((TimeMax/TmpTime)>4){ document.getElementById("timebar").style.backgroundColor="red"; } elseif((TimeMax/TmpTime)>2){ document.getElementById("timebar").style.backgroundColor="yellow"; } if(! TmpTime){//剩余时间为0 clearInterval(st);//清除倒计时 document.getElementById("container").innerHTML="";//清屏 document.getElementById("timeleft").innerHTML=""; document.getElementById("timebar").style.backgroundColor="white"; alert("时间到! ! ! "); } } 2.5游戏的胜利 游戏的胜利主要跟游戏区域的图片和时间条相关。 在规定的时间内判断游戏区域所剩的图片张数,一旦剩下图片的个数为0了,则弹出游戏胜利的窗口。 规定的时间一秒一秒减少直至为0了,若剩余图片数不为0则该局游戏是失败了的。 不过连连看不涉及到money,不会像其他游戏一样还需金币复活。 但也因为这样,有时候会觉得这个游戏没挑战性。 2.6游戏的重置 当玩家觉得时间不够,或者想加大游戏的难度级别时,输入相应的行列数,图片数,以及时间后单击“重置”按钮就等同于载入用户配置好的游戏。 第3章系统测试 3.1程序运行测试 当用户运行程序时将会出现该界面。 它的运行后的结果如图3.1所示。 图3.1游戏运行的主界面 用户可自行输入表格的行数,列数,图片数,时间数,例如用户自行输入行数为25,列数为10,图片数为12,时间为540秒后,点击重置按钮开始游戏,其运行界面如图3.2所示: 图3.2重新绘制的游戏界面 3.2游戏失败提示界面 当玩家在游戏本身设置的规定时间内没有把游戏区域的所有图片消除,则游戏失败。 它的界面如图3.2所示。 图3.2游戏失败提示界面 3.3游戏成功提示界面 如果玩家在游戏规定的时间内消除了游戏区域的所有图片则游戏胜利,游戏成功时的提示界面如图3.3所示。 3.3游戏成功提示界面 第4章总结 此刻的课程设计让我感触颇多,过程曲折可谓一语难尽。 在此期间我也失落过,也曾一度热情高涨。 从开始时满富盛激情到最后汗水背后的复杂心情,点点滴滴无不令我回味无长。 不仅仅是知识上的学习和掌握,同时也让我明白了很多做人的道理。 通过这次连连看游戏的设计使我懂得了理论与实际相结合是很重要的。 只有把所学的理论知识和实践相结合起来,从理论中得出得出结论,才能真正的提高自己的水平,从而提高自己的实际动手能力和独立思考的能力。 在没有做课程设计以前觉得课程设计知识对这几年来所学知识的单纯总结,但是通过这次做课程设计发现自己的看法有点太片面。 课程设计不仅是对前面所学知识的一种检验,而且也是对自己能力的一种提高。 对我而言,知识上的收获重要,精神上的丰收更加可喜。 挫折是一份财富,经历是一份拥有。 学习是一个长期积累的过程,在以后的工作、生活中都应该不断的学习,努力提高自己知识和综合素质。 很感谢我们的指导老师XX老师对我们的悉心指导,还有同学的热情帮助。 在设计过程中,我通过查阅大量有关资料,与同学交流经验和自学,并向老师请教等方式,使自己学到了不少知识,也
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 连连 课程设计