flash制作连连看

发布时间:2011-10-22


毕业论文



衡水职业技术学院





论文题目:flash制作连连看

所属系部: 计算机系


专业班级: 计算机应用专业


名: 刘艳静


指导老师: 佟玉洁






完成时间 2011 5




目录
一、 绪论„„„„„„„„„„„„„„„„„„„„„„„„„„„„„3 摘要„„„„„„„„„„„„„„„„„„„„„„„„„„„„„3 前言„„„„„„„„„„„„„„„„„„„„„„„„„„„„„3 二、
开发环境及软件

1 Flash软件„„„„„„„„„„„„„„„„„„„„„„„„„„3 2 发展状况„„„„„„„„„„„„„„„„„„„„„„„„„„„4 三、 设计思路及制作过程
3 方案论证„„„„„„„„„„„„„„„„„„„„„„„„„„„4 3.1设计原理„„„„„„„„„„„„„„„„„„„„„„„„4 3.2方案选择„„„„„„„„„„„„„„„„„„„„„„„„„4 3.3主要问题„„„„„„„„„„„„„„„„„„„„„„„„„5 3.4技术要求„„„„„„„„„„„„„„„„„„„„„„„„„5 4、系统设计„„„„„„„„„„„„„„„„„„„„„„„„„„„5 4.1基本思路„„„„„„„„„„„„„„„„„„„„„„„„„5 4.1.1游戏画面的思路„„„„„„„„„„„„„„„„„„„6 4.1.2获取图片位置的思路„„„„„„„„„„„„„„„„„6 4.1.3路径判断的思路„„„„„„„„„„„„„„„„„„„6 4.1.4其它问题的思路„„„„„„„„„„„„„„„„„„„6 4.2主界面的设置„„„„„„„„„„„„„„„„„„„„„„„6 4.2.1界面的设计„„„„„„„„„„„„„„„„„„„„„6 4.2.2图片的随机成„„„„„„„„„„„„„„„„„„„„7 4.2.3单机控件的事件触发„„„„„„„„„„„„„„„„„10 4.2.4得分设置„„„„„„„„„„„„„„„„„„„„„„12 4.2.5过关设置„„„„„„„„„„„„„„„„„„„„„„14 4.2.6音乐设置„„„„„„„„„„„„„„„„„„„„„„15 4.2.7时间控制„„„„„„„„„„„„„„„„„„„„„„17 4.2.8其他控件和功能„„„„„„„„„„„„„„„„„„„17 4.3图片是否可消除的判断„„„„„„„„„„„„„„„„„„„18

四、结论
5、结果分析„„„„„„„„„„„„„„„„„„„„„„„„„„„26 6、总结„„„„„„„„„„„„„„„„„„„„„„„„„„„„„26 参考文献„„„„„„„„„„„„„„„„„„„„„„„„„„„„„26 致谢„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„26





要:游戏“连连看”,只要将相同花色的两张牌用三根以内的直线连在一起就消除,规则简单容易上手。游戏速度节奏快,画面清晰可爱,老少皆宜。丰富的道具和公共模式的加入,增强游戏的竞争性。多样式的地图,是玩家在各个游戏水平都可以寻找到挑战的目标,长度地保持游戏的新鲜感。使用新颖的连击积分规则,使游戏玩家再体会连击后的快感后,同时对自己的游戏速度,更有挑战性和追求极限的欲望。
游戏通过定义数组,根据一定的算法实现规定的路径判断。
关键字小游戏 连连看 数据 路径判断

现在小游戏、网页游戏越来越受网民欢迎,除了玩的方法简单外(不像其他游戏还需要注册下载繁琐过程),很多游戏不乏经典。连连看游戏就是典型了!
不管你走到哪个游戏网站,连连看游戏总是排在受玩家欢迎排列的前五位,休闲、趣味、益智是连连看玩不厌的精华,且不分男女老少、工薪白领,是一款适合大众的经典网络休闲游戏。
游戏产业作为现代电子技术的产物,正在以其独特的魅力在全世界的娱乐领域占据主流的位置,我们在承认广大娱乐网民的选择空间狭小的同时,也必须明确的一点就是游戏本身所具有的强大的吸引力。游戏的吸引力主要在于,他在让玩家打发时间的同时,可以让人实现在现实生活中不能实现的理想,得到在现实生活中不能得到的东西。而且游戏产业促进高科技技术不断升级,作为经济增长的一大支撑点,已经成为经济腾飞的“第四产业”。



1
Flash软件
Flash是一种交互式量多媒体技术,早期网上流行的矢量动画插件,到现在网上已经有成千上万个Flash站点,可以说Flash已经渐渐成为交互式知量的标准,未来的一大主流。 2
发展状况:


游戏“连连看“是源自台湾的桌面小游戏,自从流入大陆以来风靡一时,也吸引众多程序员开发出多种版本的“连连看”。
随着Flash应用的流行,网上出现了多种在线Flash版本“连连看”。如果“水晶连连看” 、“果蔬连连看”等,流行的“水晶连连看”以华丽界面吸引了大批的女性玩家。
2008年,随着社交网络的普及和开放平台的兴起,“连连看” 被引入了社交网络。“连连看”于个人空间相结合,被快速的传播,成为一款热门的社交游戏。

3
方案论证: 3.1设计原理
在设计采用单机模式,当在规定的时间内消完全部的图片则当前关卡通过,若果在规定的时间内没能消完所有的图片则游戏结束,重新开始游戏。游戏规则是模仿普通的连连看游戏,主要是鼠标两次点击的图片是否消去的问题,当前,前提是点击两张相同的图片,若点击的是同一张图片或者两张不同的图片,则不予处理。在两张相同的图片用三根以内的直线连在一起,就可以消去;否则,不予处理。
游戏过程,如果玩家在一定的时间内消完则提示玩家胜利,并进入下一关。如果在一定的时间内图片没有消完则提示玩家时间到。每关以此类推。
考虑本游戏软件是单机小游戏,所以充分考虑到了他的娱乐性,并没有很复杂的功能。 3.2方案选择
在概念设计阶段,主要有两种方案可供选择: 一、
所有图片都是按约定好的种类数和在同一区域的重复次数随机出现,并且每张图片的出现次数为偶数,时间会有限制,每一关的图片数量或时间是不同的,这样就增加了游戏的难度。
二、
在同一区域中,图片出现的种类数和重复数是可以由玩家选择的,时间由游戏约定。不过玩家选择的种类数和重复次数必须是偶数才可以顺利完成游戏,否则游戏虽然可以正常运行,但无法完成游戏。


在一种方案中,由于出现的图像按种类数和重复数都由软件约定,这样就缺乏玩家自主选择的空间,只是在完系统已经是设定好的游戏,不能改变什么,这样就在无意中降低了玩家在游戏过程中的乐趣,最后致使玩家放弃继续玩下去。我们参考了网络上的连连看游戏,考虑到游戏的娱乐性。所以我们放弃第一种方案的设计思想,参考网络上流行的连连看游戏,设计第二种方案。
3.3主要问题
开始制作游戏时,主要解决问题有以下几个方面:如何设置整个游戏的界面;如何控制连连看游戏中随机图片的生成且每种图片必须为偶数个;游戏开始后,判断鼠标两次点击的图片能否消去,即图片是否相同且图片之间路径的判断;如何判断游戏是否结束以及输赢问题等。 3.4技术要求
本游戏软件可以再大多数计算机上运行,游戏中能正确判断鼠标两次点下的图片是否可以消去、能正确判断游戏是否已经结束。 4
系统设计:
针对上面的需求分析,我们把整个软件分成两个模块:1、整体界面的设计和图片的随机生成;2、图片路径判断函数; 一下就是系统结构图: 4.1基本思路
4.1.1游戏画面问题的思路
画面,对于设计者来说,可以算是最简单的地方;但对于玩家,这却是最重要的,一般玩家不会关心你是怎么实现的,他所关心的是画面的美观,漂亮,是不是能让人赏心悦目。
4.1.2获取图片位置的思路
通过数组从图片库随即获取规定个数的图片,随机分布在画布上。图片个数一定是个偶数个。 4.1.3 路径判断的思路 连连看所要求的是: 1:两个目标是相同的


2:两个目标之间连线的折点不超过两个。(连接线由x轴和y轴的平行线组成)那么分析一下连接的情况可以看到,一般分三种情况 1:直线相连2:一个折点3:两个折点;
可以发现,如果有折点,每个折点必定有且至少有一个坐标(x或者y)是和其中一个目标点是相同的,也就是说,折点必定在两个目标点所在的x方向或y方向的直线上。
所以设计思路就是:
假设目标点p1p2,如果有两个折点分别在z1z2那么,所要进行的是 1:如果验证p1p2直线连线,则连接成立
2:搜索以p1p2xy方向四条直线(可能某两条直线会重合)上的有限点,每次取两点作为z1z2,验证p1z1/z1z2/z2p2是否都能直线相连,是则连接成立。
4.1.4其他问题的思路
其他功能将在后面的具体各个部分的设计过程当中分别进行介绍。 4.2主界面的设计
由于这个程序的界面并不是很复杂,所以用到的控件也不多,主要核心内容还是后台的代码设计。图片的随机生成主要是用到一个random()函数将随机数赋值flag[ ]数组中的每个元素,然后根据数组元素值,来显示图片。 4.2.1界面的设计
1色彩上:总结人们的视觉习惯和色彩对眼睛的健康影响,决定对于画布采用黑色背景,神秘而大方;右边的控制区采用天蓝色,配合左边纯黑的背景,就像黑夜中的蓝天,纯洁而大方。
2、功能上:背景就是窗体,右侧是一个groupbox控件,用来放置控制按钮,下方是一个grogressbar控件,用来显示时间条。 4.2.2图片的随机生成
实现这个功能要分很多个步骤:
1. 程序运行时即载入游戏需要的N张图片,默认情况下图片种类是18重复数是4(重复数必须是偶数),并且可以选择是否重列。通过一个循环,加载随机的选N种图片。具体载入图片的代码如下:
private void InteBmp(int maxnum

{ g_g=this.Creatphics(; for(int i=0;ii++ for(int j=0;j gamp[i,j]=0; IniteRandoMap(ref gamp,maxnum; AI=new Kernal(ref gmap; for(int i=0;i{ ResourceManager rm=new ResourceManager(LLK data,Assembly,GetExecut ingAssembly( ; img[i]=(Imagerm.GetObjecti.ToString( +.bmp”); //img[i]=(ImageBitmap.FormFile(Images\\+(i+1. ToString( +.bmp”); } for(int i=0;i<6;i++ { //bombimg[i]=(ImageBitmap.FromFile(Image\\B+(i++. ToString( +.bmp”);. } } 2. 当确认游戏开始时,通过画图过程完成图片生成,画图的过程代码如下 private bool CheckWin(ref int[,]map { Bool Win=true; for(int i=0;i for(int j=0;j if(map[I,j]!=0 Win=false; returnWin;

} private void IniteRandomMap(ref int[,] map,int num { Random r=new Random( ; While(num>0 { for(int i=0;i{ Int xrandom=r.Next(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 for(int j=0;j { if(gmap[i,j]!=0 { int x=r.Next(19;

int y=r.Next(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 for(int j=0;j { AI.GiveMapValue(i,j,map[i,j]; } } //在指定位置画指定图
private void Draw(Graphics g,Image scrImg,int PicxX,int PicV { g.DrawImage(scrImg,new Point(PicX,PicV; }
private void Forml_Paint(object sender,PaintEventArg e { g_g.DrawLine(new.Pen(newSolidBrush(Color.DeepSkyBlue,5,0,11*34+5,19*34 ,11*34+5; If(bStart { For(int i=0;i For(int j=0;j

{
If(gmap[I,j]!=0 Draw(g_g,img[gmap[I,j]-1],i*PICHEIGHT; } } } } 4.2.3单机控件的事件触发 总共有两个单机按钮。
分别是:开始游戏(进入游戏状态)、重列(重新加载图片)。 开始游戏实现代码如下: Bool starttimer=false;
Private void button1_Click_1(object sender,EventArgs e { If(!starttimer { progressBar1.Value=PBMAX; pbtimer.Interval=500; pbtimer.Start(; starttimer=true; } score=0; multpic=Convert.Toint16(textBox1.Text; multpic=Convert.Toint16(textBox2.Text; if(picnum*multipic>209 { MessageBox.Show(“游戏区域内最多只有209个孔,您选的数据太多!请重新选!”; textBox1.Text=18;

textBox2.Text=4; return; } IniteBmp(picnum; If(bStart { MessageBox.Show(“游戏已在运行!”; return; } else { bStart=true; this.Invalidate(; music.Play(Sounds\\ bg-03.mid; } } 重新实现代码如下:
Private void RefreshMap(ref int[,] map { if ( int i=0;i for(int j { If(gmap[I,j]!=0
{ Draw(g_g,img[gmap[I,j]-1],i*PICWIDTH,j*PICHEIGHT; } } } private void FreshMap(ref int[,] map {

Random r=new Random(; for(int i=0;j for(int j=0;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 { Refreshplayer.Play(; FreshMap(ref gmap; This.Invalidate(; } 4.2.4得分设置
本游戏一改前人风格,采用全新计分方式,使人们在寻找相同图片的同时还注意路径的选择,更增加了游戏的趣味性,具体规则:直连得10分,一个拐点的20两个拐点得40.用一个Label控件存储得分。 实现代码:
Switchcorner[2].X
{ Case1
Score+=20;//一个拐点加20


g_g.DrawLine(pen,new Point(p1.X*31+15,p1.Y*34+17,new
Point(corner[0].X*31+15,corner[0],Y*34+17,; g_g.DrawLine(pen,new point(p2.X*31+15,p2.Y*34+17,new Point(corner[0].X*31+15,corner[0],Y*34+17; Thread.Sleep(100; EraseBlock(g_g,p1,p2;
g_g.DrawLine(bkpen,new Point(p1.X*31+15,p1.Y*34+17new Point(corner[0].X*31+15,corner[0],Y*34+17; g_g.DrawLine(bkpen,new Point(p1.X*31+15,p2.Y*34+170new Point(corner[0].X*31+15,corner[0],Y*34+17; break; case 2; score+=40; Point[ ]ps={new Point(p1.X*31+15,p1.Y*34+17,new Point(corner[1].X*31+15,corner[1],Y*34+17,new
Point(corner[0].X*31+15,corner[0],Y*34+17,newPoint(p2.X*31+15,p2.Y*34+17; g_g.DrawLine(pen,ps; Thread.Sleep(100; EraseBlock(g_g,p1,p2; //foreach(Point mp in ps //{ //MessageBox.Box.Show(+mp.X.ToString( +,+mp.Y.ToString( +; //} break;

case 0; score+=10;
g_g.DrawLine(pen,ps;Point(corner[0].X*31+15,corner[0],Y*34
+17,newPoint(p2.X*31+15,p2.Y*34+17;
Thread.Sleep(100;
EraseBlock(g_g,p1,p2;
g_g.DrawLine(pen,ps;Point(corner[0].X*31+15,corner[0],Y*3
4+17,newPoint(p2.X*31+15,p2.Y*34+17; break; default:break;
}
//RefreshMap(ref gmap Label5.Text=score.ToString( ; 4.2.5过关设置
把界面上全部图片都消去即为通过此关,进入下一关,种类数加1. 实现代码:
Private bool CheckWin(ref int[,] map {
Bool Win=true; for(int i=0;i for(int j=0;j if(map[i,j]!=0 Win=false; Return Win; } If(CheckWin(ref gmap {
Starttimer=false; MessageBox.Show(“恭喜过关”; bStart=false;

picnum++; } 4.2.6音乐设置
音乐分为背景音乐和点击的音乐。具体实现如下:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using SystemText; using System.WindowsForm; using System.Media; using System.Runtime.InteropServices;
namespace LLK class Music { [DllImport(winum.dll] Private static extern int mciSendString ( String lpstrCommand, String lpstrReturnString, Int uReturnLength, Int hwndCallback [DllImport(kernel32.dll,CharSet.Auto] public static extern int GetShortPatihName ( [MarshalAs(UnmanagedType.LPTStr] string path, [MarshalAs(UnmanagedType.LPTStr] StringBuilder shortPath,

int shortPathLength ; Public void Play(string FileName {
StringBuilder shortPathTemp=new StringBuilder(225; int result=GeShortPathName(FileName,shortpathTemp.Capacity; string ShortPath=shortPathTemp.ToString( ; mciSendString(open+shorpath+alias song,””,0,00 mciSendString(play song,””,0,00
} Public void Stop( { mciSendString(play song,””,0,00
} Public void Pause( { mciSendString(pause song,””,0,00 }

public void Close( { mciSendString(close song,” “,0,0; } } 4.2.7时间控制
pbtimer来控制时间,progressbar控件显示时间进度条。具体代码如下: Private void pbtimer_Tick(objrct sender,Eventargs e { Pbvalue=pbvalue-reducestep;

If(pbvalue>100 Pbvalue=100;
If(pbvalue==0&&strttimer
{ Starttimer=false; Pbtimer.Stop( ; MessageBox.Show(Failed!; Return; } else ProgressBarl.Value=pbvalue; 4.2..8其他控件与功能
两个文本框中一个是用来输入加载的图片种类数;另一个是用来输入图片重复数的,也因为画布的大小所限,只有209个格,所以要保证输入的两个数的乘积在209以下。
picnum=Convert.ToInt16(textBox1.Text; multipic= Convert.ToInt16(textBox2.Text; if (picnum*multipic>209 { MessageBox.Show(“游戏区域内最多只有209个空,您选的数据太多!重新选择!”; Picnum=Convert.ToInt16(textBox1.text; Multipic= Convert.ToInt16(textBox2.text; If(picnum*multipic>209 { MessageBox.Show(“游戏区域内最多只有209个空,您选的数据太多!请重新选择!”; TextBox1.Text=18; TextBox2.Text=4; Return;

} 4.2图片是否可消除的判断
实现的思路前面已经说了,具体实现代码如下:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Mesia; using System.Runtime.InteropService; namespace LLK { Class Kernal { private const int M=19; private const int N=11; private const int BLACK=0; private static int [,] map=new int[M,N]; Point[ ] arr1=new Point[209]; int arr1Len, arr2Len; Point[ ] arr2=new Point[209]; static Point[ ] corner=new Point[2]; static int,co=0; public Kernal(ref int[,] map { For(int i=0;iFor(int j=0;j

Map[I,j]=map[I,j] Corner[0]=new point(0,0; Corner[1]=new point(0,0; } Public Point[ ] Getpoints( { Point[ ]p=new Point[3]; P[0]=corner[0]; p[1]=corner[1]; p[2]=new Point(co,o; return p; } /// /// ///a1>数组一 ///a1Len>数组一的长度 ///a2>数组二 ///a2Len>数组二的长度 /// Public bool IsShare(ref Point[ ] al,inta1Len,ref Point[ ] a2,int a2Len { bool result=false; for(int i=0;i for(int j=0;i if(a1[i],X==a2[j].X&&a1[i].Y==a2[j].Y { Corner[0]=new Point(a1[i].X,a1[i].Y; Result=true; } Return result;

} Public bool IsDirectLink(int x1,int y1,int x2,int y2 { If(x1==x2 &&y1==y2 { Return false; } if (x1==x2 { int bigger=y1>y2?y1:y2; int smaller=y1>y2?y2:y1; int miny=smaller+1; while(map[x],miny==BLANK { Miny++; If(miny >=N break; } If(miny==bigger Return true; Else Returnfalse; } If(y1==y2 Int bigger=x1>x2?x1:x2; Int smaller=x1>x2?x2:x1; Int minx=smaller+1; While(map[minx,y1]==BLANK { Minx++;

If(minx>=M Break; } if(minx==bigger return true; else return false; } return false; } Public int FindEmpty(int x,int y,ref Point[ ] arr { Int count=0; Int pos=x-1; While(0<=pos &&pos{ Arr[count],X=pos; Arr[count],Y=y Pos--; Count++; } Pos=x+1; While(0<=pos &&pos { Arr[count].X=pos; arr[count],Y=y; pos++; count++; } Pos=y-1;

While(0<=pos && pos && map[x,pos]==BLANK { arr[count].X=x; arr[count].Y=pos; pos--; count++; } pos=y+1; while(0<=pos && pos { Arr[count].X=x; Arr[count].Y=pos; Pos++; Count++; } Return count; } Public bool IndirectLink(int x1,int y1,int x2,int y2 { int pos=0; Point[ ]ar1=new Point[209]; Int ar1Len=0; Point[ ]ar2=new Point[209]; Int ar2Len=0; Pos=y1-1; While(0<=pos && pos { arr1Len=FindEmpty(x1,pos,ref arr1; arr2Len=FindEmpty(x2,y2,ref arr1;

if(IsShare(ref arr1,arr1Len,ref arr2,arr2Len { Co=2; Corner[1]=new Point(x1,pos; Return true; } Pos--; } Pos=y1+1; While(0<=pos && pos Arr1Len=FindEmpty(x1,pos,ref arr1; arr2Len=FindEmpty(x2,y2,ref arr1; if(IsShare(ref arr1,arr1Len,ref arr2,arr2Len { Co=2; Corner[1]=new Point(x1,pos; Return true; } Pos++; } Pos=x1-1; While(0<=pos && pos{ Ar1Len=FindEmpty(x1,pos,ref ar1; arr2Len=FindEmpty(x2,y2,ref arr1; if(IsShare(ref arr1,arr1Len,ref arr2,arr2Len { Co=2; Corner[1]=new Point(x1,pos; Return true;

} Pos--; }
Pos=x1+1; While(0<=pos && pos Arr1Len=FindEmpty(,pos y1,ref arr1; arr2Len=FindEmpty(x2,y2,ref arr2; if(IsShare(ref arr1,arr1Len,ref arr2,arr2Len { Co-2; Corner[1]=new Point(pos y1; Return true; } Pos++; } Return false; } Public bool IndirectLink(int x1,int y1,int x2,int y2 { If(x1==x2&&y1==y2 { Return false; } If(map[x1,y1]==map[x2,y2] { Return false; { If(IsDirectLink(x1,y1,x2,y2 { co=0; return true;

} Else { Arr1Len=FindEmpty(,x1, y1,ref arr1; arr2Len=FindEmpty(x2,y2,ref arr2; if(IsShare(ref arr1,arr1Len,ref arr2,arr2Len { Co=1; Return true; } Else { Return IndirectLink(z1,y1,x2,y2; ; ; ; Return false; } Public void GiveMapValue(int XX,int YY,int value { Map[XX ,YY]=value; } } }
结果分析: 运行结果分析
由于经验不足,能力有限,第一次成功运行出现好多问题。 1. 过关后,时间不回满;


2. 过关后,分数不累计,而且难度没加大,相当于重新开始了。
3. 开始没有重列,以至于有时候进入死局,也就是没有能连得图片了。以后不断地完善,终于解决了这些问题,使功能趋于完善。 5
总结:
这个游戏是我完成的,控件命名,代码书写都有各自的习惯,给程序的写作带来了很多麻烦。为了克服这些困难解决这些问题,我取长补短,统一了格式。
这个游戏分为两个模式,其中第一的内容是非常分散,而且内部又有很多小模块,互相之间也有非常密切的联系,很多变量之间数据的传递都要考虑好。而第二个模板(即路径判断问题)相对比较集中,代码内容非常长,工作量也是很大的,且几乎全部是在代码中编写,没有添加什么界面上的控件操作。 另外这个游戏没有用到数据库,所使用的功能也不是很多,但是由于考虑到按固有的游戏规则来编写,因此要写较多时间考虑游戏怎么玩,怎么通过代码判断用户每个鼠标点击的坐标以及当前坐标位置代表的图片内容等各方面的判断考虑得就较多了。
参考文献:
公司明日科技 VisualC#2005程序设计》 北京:人民邮电出版社 VisualC#.NET项目开发实战》 北京:清华大学出版社 C语言程序设计》 中国水利水电出版社.2006 致谢:
感谢老师,在毕业过程中,他对我的毕业设计悉心的指导,从开题到系列设计,从程序开发到论文的写作,纠正了我的许多不成熟的想法,给我提出了许多建议,更在程序开发中遇到的最困难的时候给予开导给我继续完成设计的信心。杨老师严谨的作风和对我严格要求的态度。使我克服了懒惰和投机取巧的毛病,给予了我很大的动力,使我在毕业设计过程中学到了很多东西,使我的毕业设计能够顺利完成。
感谢我的全体舍友,他们给予了许多做直接的帮助和鼓励,与他们三年的相处使我学到很懂东西。感谢三年中帮助我、关心我、支持我的人们。


flash制作连连看

相关推荐