FLASH课程设计.docx

上传人:b****5 文档编号:11744752 上传时间:2023-03-31 格式:DOCX 页数:21 大小:81.83KB
下载 相关 举报
FLASH课程设计.docx_第1页
第1页 / 共21页
FLASH课程设计.docx_第2页
第2页 / 共21页
FLASH课程设计.docx_第3页
第3页 / 共21页
FLASH课程设计.docx_第4页
第4页 / 共21页
FLASH课程设计.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

FLASH课程设计.docx

《FLASH课程设计.docx》由会员分享,可在线阅读,更多相关《FLASH课程设计.docx(21页珍藏版)》请在冰豆网上搜索。

FLASH课程设计.docx

FLASH课程设计

信息科学与工程学院

课程设计任务书

 

题目:

二维动画设计----五子棋游戏制作

 

学号:

姓名:

专业:

课程:

二维动画设计

指导教师:

职称:

完成时间:

2012年5月----2012年6月

 

课程设计任务书及成绩评定

课程设计的任务和具体要求

《二维动画设计》课程设计为该门课程的综合设计环节,能够有效锻炼学生的自主学习能力和综合设计能力,培养学生的创新精神和动手实践能力。

1、内容要求:

1)Flash动画作品内容完整丰实,思想健康、积极向上,表现一个主题。

2)动画作品有适当的控制交互功能。

2、技术要求:

1)动画画面设计合理,画面转换恰当。

2)体现Flash编写小游戏的优势。

3)掌握ActionScript3.0类的定义和使用。

3)在动画实现中,可采取任意技术。

3、美工要求:

动画画面颜色运用适当,美观,视觉效果好,并具有个人设计风格。

指导教师签字:

日期:

指导教师评语

 

成绩:

指导教师签字:

日期:

课程设计所需软件、硬件等

所需软件:

FlashCS5、Word2010

所需硬件:

PC机

课程设计进度计划

起至日期

工作内容

备注

2012.6.11--2012.6.16

2012.6.17--2012.6.24

2012.6.25--2012.6.26

搜集素材、准备课程设计资料

用FlashCS5制作课程设计

撰写课程设计实验报告

参考文献、资料索引

序号

文献、资料名称

编著者

出版单位

1Flashcs3动画制作案例教程俞欣北京大学出版社

2动画设计原理于瑾西安科技出版社

3Flash精彩动画设计柏松航空工业出版社

4Flash动画风暴伍福军北京电子出版社

5AS3.0游戏制作案例教程张辉清华大学出版社

目录

1、概述……………………………………………………………………………………4

1.1课程设计目的…………………………………………………………………4

  1.2课程设计要求…………………………………………………………………4

1.3ActionScript3.0…………………………·………………………………4

1.4五子棋术语……………………………………………………………………5

2、总体设计方案………………………………………………………………………5

2.1算法分析………………………………………………………………………5

  2.2界面设计………………………………………………………………………6

2.3代码编写………………………………………………………………………6

3、详细设计方案………………………………………………………………………6

3.1游戏界面设计………………………………………………………………6

 3.2代码分析………………………………………………………………………6

3.3类源代码………………………………………………………………………7

4、最终的合成与输出………………………………………………………………15

4.1输出文件……………………………………………………………………15

4.2游戏缺点与改进……………………………………………………………16

5、课程设计的总结…………………………………………………………………16

 

一、概述

1、课程设计目的

《二维动画设计》课程设计为该门课程的综合设计环节,能够有效锻炼自主学习能力和综合设计能力,培养创新精神和动手实践能力。

通过此次课程设计应:

(1).熟练掌握flash制作所需的基本知识。

(2).熟练掌握Flash动画的整个制作过程。

(3).进一步熟悉AS3.0面向对象编程的方法及技巧。

(4).充分利用Flash实现游戏编程的优势完成五子棋游戏的制作。

(5).真正做到学以致用,将所学应用于实践。

(6).将以往所学的知识与本课程综合起来应用于实际设计中,培养在实际工作中分析问题和解决问题的能力。

2、课程设计要求

通过本次设计,应达到下列基本要求:

(1).了解FlashCS3元件、场景、图层、帧的基本概念。

(2).熟悉面板设置和场景操作

(3).掌握绘画工具的使用、辅助选项和属性的设置。

(4).掌握FlashCS3时间轴的概念、时间轴中各元素的功能及操作方法。

(5).理解图形、元件与实例相互关系和区别及创建、编辑方法。

(6).掌握逐帧动画和补间动画的制作方法。

 (7).认识Actionscript3.0语句。

(8).利用Actionscript3.0中的语句设计简单的交互能力。

(9).掌握Actionscript3.0编写游戏的方法和技巧。

(10).掌握Actionscript3.0中类的定义及使用方法。

(11).掌握各种动画作品的测试、优化、输出及发布。

3、ActionScript3.0

ActionScript3.0是针对AdobeFlashPlayer运行时环境的编程语言,它在Flash内容和应用程序中实现了交互性、数据处理以及其它许多功能。

各种交互功能的实现都要依赖于AS3.0。

运用它编写具有交互性的小游戏是很有优势的。

4、五子棋术语

五连:

五个同一颜色的棋子在一条线上,首先形成这一局面的的一方获得胜利。

四四:

一子落下同时形成两个“四”的棋形。

四三:

同时具备两个先手,其中一个为“活三”,另一个为“四”。

三三:

一子落下形成了两个活三的棋形。

活四:

四个同一颜色的棋子在一条直线上,并且两边没有阻挡。

嵌五:

也叫跳冲四。

活三(包括连三和跳三):

连三是紧紧相连的同色的三子;跳三是中间间隔一子的活三。

眠三:

一端有对方棋子阻拦的三叫眠三。

假活三:

在活三两端相隔一点的位置上有对方的棋子(或边线)的阻拦。

活二:

包括连二和跳二。

眠二:

一端有对方棋子的阻拦“二”。

假活二:

在活二两端相隔一点的位置上有对方的棋子(或边线)的阻拦。

长连:

相同颜色的连续六子或六子以上。

 

二、总体设计方案

2.1算法分析:

假定我们遵循最基本的五子棋规则,不考虑长连和黑子禁手的问题。

要让电脑能够根据盘面状态决定在哪里下子,就需要考虑盘面上可能落子的重要程度,并选择其中最重要的点,为此需要通过给这些点打分来最为衡量的标准。

对重要程度的评估,主要依据就是在这一点上落子的可能形成的局面,如果能够形成五子连珠,那就是必胜的点,得分最高;同样四四、四三和活四都是可以制胜的棋形,得分也应很高;而三三、眠三等棋形分值相对较低一些。

得分最高的点就是落子的点。

对博弈中的一方而言,不仅要评价对自己最有利的的落子点,还要考察对自己最有威胁的落子点,也就是对对手最有利的落子点,如果对手下一步可以走出五子连珠的棋形而自己只有活四,那么显然应该首先要消除对方的威胁。

因此落子前应综合考虑自己和对方最有利的棋局,然后决定下一步棋该怎么走。

为方便对棋局进行评估,我们在这里规定各个棋形的得分:

眠二:

2分

假活二:

4分

眠三:

5分

活二:

8分

冲四、眠四:

12分

假活三:

15分

活三:

40分

活四:

90分

五连:

200分,当轮到自己落子时加倍。

2.2界面设计

棋子类型:

黑子和白子;

【开始游戏】按钮实例名为btnStart,类型SimpleButton;

【再玩一遍】按钮实例名为btnReplay,类型SimpleButton;

棋子选择按钮实例名为mcSelectChessman,类型MovieClip;

游戏结局提示信息实例名为mcGameState,类型MovieClip;

 

2.3代码编写

游戏程序包含两个类文件,都放在Classes包中。

Clessman用来生成棋子,GobangDoc类是文档类,用来管理游戏的所有交互功能。

在Flash软件中新建两个拓展名为.as的文件,并在其中编写两个类的代码。

 

三、详细设计方案

3.1游戏界面的设计:

游戏界面设计很简单,主要有棋盘、黑白棋子、两个按钮(开始游戏按钮和再玩一遍按钮、),棋子选择按钮和提示消息等组成。

游戏界面分析:

我们把【开始游戏】按钮和【再玩一遍】按钮放在同一位置。

【开始游戏】按钮实例名为btnStart、【再玩一遍】按钮实例名为btnReplay。

这两个类型的按钮都是SimpleButton类型。

开始时btnStart遮住btnReplay,当单击btnStart进入游戏后,将btnStart的visible属性设置为false,就可以显示出btnReplay。

棋子选择按钮实例名为mcSelectChessman,类型为MovieClip类型,棋子选择按钮在界面下方,用来让玩家选择自己使用的棋子类型,在时间轴上包含两个关键帧,名称分别为“white”和“black”,在“white”帧上有一个stop()动作。

当玩家选择改变棋子时,就在这两个关键帧之间跳转,以显示白色或黑色的棋子。

游戏结局提示信息实例名为mcGameState,也是一个MovieClip类型的元件,它的时间轴上有两个名为“win”和“lose”的关键帧。

分别显示胜利和失败的信息。

游戏开始时将它的visible属性设为false,一局结束之后在设置为true。

3.2代码分析

游戏程序包含两个类文件,都放在Classes包中。

Clessman用来生成棋子,白子和黑子都是由这个类派生,方法是改变他们的连接属性。

将基类指定为Chessman,而类名分别为“WhiteChessman”和“BlackChessman”.。

我们不必为WhiteChessman类和BlackChessman类提供专门的类定义,它们除了颜色以外其他的属性都相同。

单击【确定】按钮,会弹出“ActionScript类警告”对话框,提示swf文件中会自动生成相应的类定义,继续单击【确定】按钮即可。

Chessman类中有一个属性bPlayer,用来标记当前这种颜色的棋子是不是玩家使用的棋子。

此外还有一个方法是twinkle(),作用是当棋子落在棋盘上后闪烁几次,便于玩家看到。

GobangDoc类是文档类,用来管理游戏的所有交互功能。

3.3两个类源代码

(1)Chessman类的代码如下:

packageClasses{

importflash.display.MovieClip;

importflash.events.*;

publicclassChessmanextendsMovieClip{

privatevarinc:

uint=0;

publicvarbPlayer:

Boolean=false;

publicfunctionChessman(){

this.addEventListener(Event.ENTER_FRAME,twinkle);

}

publicfunctiontwinkle(e:

Event):

void{

if(!

bPlayer){

if(inc<15){

this.alpha=((inc%5)/5)+.2;

inc++;

}else{

this.removeEventListener(Event.ENTER_FRAME,twinkle);

}

}

}

}

}

(2)GobangDoc类的代码如下:

packageClasses{

importflash.display.*;

importflash.events.*;

importflash.geom.*;

importflash.text.TextField;

publicclassGobangDocextendsMovieClip{

privateconstgridsize:

Number=20;

privateconstgridnum:

Number=15;

privateconstNOTHING:

uint=0;

privateconstBLACK:

uint=1;

privateconstWHITE:

uint=2;

privatevarcrtSide:

uint=WHITE;

privatevarmySide:

uint=WHITE;

privatevarotherSide:

uint;

privatevarcanPlay:

Boolean=false;

privatevaraGridState:

Array=[];

privatevaraChessmen:

Array=[];

publicconstSTWO:

int=2;//眠二

publicconstFTWO:

int=4;//假活二

publicconstSTHREE:

int=5;//眠三

publicconstTWO:

int=8;//活二

publicconstSFOUR:

int=12;//冲四

publicconstFTHREE:

int=15;//假活三

publicconstTHREE:

int=40;//活三

publicconstFOUR:

int=90;//活四

publicconstFIVE:

int=200;//五连

privatevaraPlayer:

Array=[];

privatevaraOpponent:

Array=[];

privatevardir:

Array=[[-1,-1],[0,-1],[1,-1],[1,0],[1,1],[0,1],[-1,1],[-1,0]];

publicfunctionGobangDoc(){

mcGameState.visible=false;

otherSide=WHITE+BLACK-mySide;

for(vari:

uint=0;i

aGridState[i]=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];

}

mcChessboard.addEventListener(MouseEvent.MOUSE_DOWN,AddMyChessman);

btnStart.addEventListener(MouseEvent.CLICK,btnStart_Handler);

btnReplay.addEventListener(MouseEvent.CLICK,btnReplay_Handler);

mcSelectChessman.addEventListener(MouseEvent.MOUSE_DOWN,selectChessman);

}

privatefunctioninit():

void{

btnStart.visible=false;

for(vari:

int=0;i

mcChessboard.removeChild(aChessmen[i]);

}

for(varj:

uint=0;j

aGridState[j]=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];

}

aChessmen=[];

canPlay=true;

}

publicfunctionAddMyChessman(e:

MouseEvent):

void{

if(!

canPlay||crtSide!

=mySide||e.target.name!

="mcChessboard")

return;

if(mySide==crtSide){

varcrtx:

uint=Math.floor(e.localX/gridsize);

varcrty:

uint=Math.floor(e.localY/gridsize);

if(aGridState[crty][crtx])

return;

//创建棋子

varchessman:

Chessman;

if(mySide==BLACK){

chessman=newBlackChessman();

}else{

chessman=newWhiteChessman();

}

chessman.bPlayer=true;

aGridState[crty][crtx]=mySide;

chessman.x=(crtx+.5)*gridsize;

chessman.y=(crty+.5)*gridsize;

aChessmen.push(chessman);

mcChessboard.addChild(chessman);

checkWinner(crtx,crty,crtSide);

//对方走

crtSide=WHITE+BLACK-mySide;

//计算机走

varopos:

Array=CalculateState(crtSide);

varcx:

int=opos[0];

varcy:

int=opos[1];

AddChessman(cx,cy);

checkWinner(cx,cy,crtSide);

crtSide=mySide;

}

}

//计算机添加棋子

publicfunctionAddChessman(toX:

int,toY:

int):

void{

if(!

canPlay)

return;

varautox:

int=toX;

varautoy:

int=toY;

varchessman:

Chessman;

if(mySide==BLACK){

chessman=newWhiteChessman();

}else{

chessman=newBlackChessman();

}

chessman.x=(autox+.5)*gridsize;

chessman.y=(autoy+.5)*gridsize;

aGridState[autoy][autox]=(BLACK+WHITE)-mySide;

aChessmen.push(chessman);

mcChessboard.addChild(chessman);

}

//评估棋盘上每一格的分值,返回得分最高的棋格坐标

publicfunctionCalculateState(side):

Array{

vari:

int,j:

int,k:

int;

varotherside:

int=WHITE+BLACK-side;

for(i=0;i

for(j=0;j

if(aGridState[i][j]!

=NOTHING){

aOpponent[i*gridnum+j]={val:

-1,x:

j,y:

i};

aPlayer[i*gridnum+j]={val:

-1,x:

j,y:

i};

}

else{

varv1=getScore(aGridState,j,i,side);

aOpponent[i*gridnum+j]={val:

v1,x:

j,y:

i};

varv2=getScore(aGridState,j,i,otherside);

aPlayer[i*gridnum+j]={val:

v2,x:

j,y:

i};

}

}

}

varmaxO:

Object=sortArray(aOpponent);

varmaxP:

Object=sortArray(aPlayer);

varapos:

Array=[0,0];

if(maxO.val

apos=[maxP.x,maxP.y];

else

apos=[maxO.x,maxO.y];

returnapos

}

privatefunctioncheckWinner(xp:

int,yp:

int,side:

int){

varstr:

String=(side*11111).toString();

varwinner:

int=0;

varstr1:

String=getXLine(aGridState,xp,yp,side).join("");

varstr2:

String=getYLine(aGridState,xp,yp,side).join("");

varstr3:

String=getXYLine(aGridState,xp,yp,side).join("");

varstr4:

String=getYXLine(aGridState,xp,yp,side).join("");

if(str1.indexOf(str)>-1||str2.indexOf(str)>-1||str3.indexOf(str)>-1||str4.indexOf(str)>-1)

winner=side;

if(winner){

doWin(winner);

}

}

//取胜后触发的事件

privatefunctiondoWin(side:

int):

void{

mcGameState.visible=true;

canPlay=false;

mcChessboard.alpha=.5;

if(side==mySide){

mcGameState.gotoAndStop("win");

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1