算法分析课程设计.docx

上传人:b****1 文档编号:13629013 上传时间:2023-06-15 格式:DOCX 页数:31 大小:22.52KB
下载 相关 举报
算法分析课程设计.docx_第1页
第1页 / 共31页
算法分析课程设计.docx_第2页
第2页 / 共31页
算法分析课程设计.docx_第3页
第3页 / 共31页
算法分析课程设计.docx_第4页
第4页 / 共31页
算法分析课程设计.docx_第5页
第5页 / 共31页
算法分析课程设计.docx_第6页
第6页 / 共31页
算法分析课程设计.docx_第7页
第7页 / 共31页
算法分析课程设计.docx_第8页
第8页 / 共31页
算法分析课程设计.docx_第9页
第9页 / 共31页
算法分析课程设计.docx_第10页
第10页 / 共31页
算法分析课程设计.docx_第11页
第11页 / 共31页
算法分析课程设计.docx_第12页
第12页 / 共31页
算法分析课程设计.docx_第13页
第13页 / 共31页
算法分析课程设计.docx_第14页
第14页 / 共31页
算法分析课程设计.docx_第15页
第15页 / 共31页
算法分析课程设计.docx_第16页
第16页 / 共31页
算法分析课程设计.docx_第17页
第17页 / 共31页
算法分析课程设计.docx_第18页
第18页 / 共31页
算法分析课程设计.docx_第19页
第19页 / 共31页
算法分析课程设计.docx_第20页
第20页 / 共31页
亲,该文档总共31页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

算法分析课程设计.docx

《算法分析课程设计.docx》由会员分享,可在线阅读,更多相关《算法分析课程设计.docx(31页珍藏版)》请在冰点文库上搜索。

算法分析课程设计.docx

算法分析课程设计

姓名挑战游戏

1、课程设计的目的

学习算法的最终目的是解决实际的应用问题,特别是非数值计算类型的应用问题。

课程设计要求同学独立完成一个较为完整的应用需求分析,在完成设计和编程大型作业的过程中,深化对算法课程中基本概念、理论和方法的理解;训练综合运用所学知识处理实际问题的能力,强化面向对象的程序设计理念;使同学的程序设计与调试水平有一个明显的提高。

经过查找参考资料、技术手册和撰写文档的实践,进一步培养软件工程师的综合素质。

2、课程设计的技术要求

同学在处理每一个题目的时候,要从分析题目的需求入手,按设计抽象数据类型、构思算法、通过类的设计实现抽象数据类型、编制上机程序代码并调试的步骤完成题目,最终写出完整的分析报告。

见到题目,案头工作准备不足,忙于上机敲程序不是优秀程序员的工作风格。

注意设计与实现过程的经验积累,编码应尽量利用前阶段的成熟数据结构包,加大代码的重用率。

课程设计所安排的题目,在难度和深度方面都大于课内的上机训练。

程序作业以Java完成,配有图形界面。

作业一般要达到3000行以上的代码量。

最后提交作业包括:

课程设计报告;完整程序,应该具有可显示界面;PPT及算法说明。

3、题目分析

姓名挑战游戏说明:

输入两个中文姓名,通过一种算法,计算出姓名的血值和攻击力,使两个名字进行对战,进行多轮回合后,决定双方输赢。

在运行界面中输入两个挑战者的姓名,软件就会计算出两个挑战者初始状态的血值和攻击力之类的属性值。

然后两个挑战者一边挑战,系统会自动显示目前两个挑战者的一系列属性。

两个人一直挑战,直到其中一者的hp的值为0,则挑战结束,并且hp为0的一方失败。

4、部分程序分析

4.1角色属性定义

publicclassRole{

Stringplayname;//角色名字

inthp;//生命值

intap;//攻击力为ap

intdp;//防御力为dp

intrate;//攻击速度

inthitRate;//命中率

intluck;//运气

int[]array=newint[4];//名字数组

StringAttack_Action="";//攻击的动作字符串

StringRecovery_Action="";//防御的动作字符串

intAttact_Point=0;//攻击的点数

intRecovery_Point=0;//抵御的点数

4.2构造函数

publicRole(Stringname,int[]getArray){

array=getArray;

playname=name;

setAttribult();

}

4.3输入挑战者姓名后角色属性值统计

在运行界面上输入两个挑战者的姓名后,界面就会自动统计每个挑战者的生命力hp,攻击力ap,防御力dp,攻击速度rate,命中率hitrate,运气luck。

publicvoidgetAttribult(){

System.out.println(playname+"的属性:

");

System.out.println("生命值hp="+hp);

System.out.println("攻击力attack="+ap);

System.out.println("防御力recovery="+dp);

System.out.println("攻击速度rate="+rate);

System.out.println("命中率hit="+hitRate);

System.out.println("运气luck="+luck);

}

4.4设置角色属性

publicvoidsetAttribult(){

hp=addFun(4)/500;

ap=100-addFun(0)/1900;

dp=100-addFun

(1)/2100;

rate=100-addFun

(2)/2100;

hitRate=100-addFun(3)/2400;

luck=100-addFun(4)/1700;

}

publicintaddFun(intindex){

intres=0;

for(inti=0;i<4;i++){

if(i!

=index){//剔出掉vindex指向的数

res+=array[i];

}

}

returnres;

}

4.5设置挑战期间各种攻击后各个值的属性

publicintchang(){//设置中毒的属性

ap=ap-10;

hitRate=hitRate-10;

luck=luck-10;

rate=rate-10;

dp=dp-10;

return0;

}

设置10个实例来演示两个挑战者在挑战期间的动作,例如:

A向B发动攻击;B向A发动攻击;A冲上前狂咬B一口;A发狂对B暴打一顿;A向B发动攻击,结果摔倒在地;A诅咒B;A向B投毒等。

publicStringuseAp(intindex,Stringplayname1,Stringplayname2){

switch(index){

case0:

Attack_Action="【"+playname1+"】向"+"【"+playname2+"】发动攻击";

Attact_Point=25;

case1:

Attack_Action="【"+playname1+"】向"+"【"+playname2+"】发动攻击";

Attact_Point=20;

case2:

Attack_Action="【"+playname1+"】向"+"【"+playname2+"】发动攻击";

Attact_Point=10;

case3:

Attack_Action="【"+playname1+"】向"+"【"+playname2+"】发动攻击";

Attact_Point=15;

break;

case4:

Attact_Point=18;

Attack_Action="【"+playname1+"】向进行"+"【"+playname2+"】连击";

break;

case5:

Attact_Point=20;

Attack_Action="【"+playname1+"】冲向前狂咬"+"【"+playname2+"】一口";

break;

case6:

Attact_Point=-18;

Attack_Action="【"+playname1+"】向"+"【"+playname2+"】发动攻击,结果摔到在地";

break;

case7:

Attact_Point=18;

Attack_Action="【"+playname1+"】向"+"【"+playname2+"】投毒";

break;

case8:

Attact_Point=25;

Attack_Action="【"+playname1+"】发狂对"+"【"+playname2+"】进行暴打一顿";

break;

case9:

Attact_Point=30;

Attack_Action="【"+playname1+"】 诅咒 "+"【"+playname2+"】";

break;

}

return"";

}

publicStringuseDp(intindex){//使用防御力

return"";

}

publicStringuseHitRate(intindex){//使用命中率

return"";

}

publicStringuseHp(intindex){//使用生命值

return"";

}

publicStringuseLuck(intindex){//使用运气

return"";

}

publicStringuseRate(intindex){//使用速度

return"";

}

5、实验总结

学习每门课程都要学以致用,学习算法设计与分析这门课程是要培养我们自己设计算法的能力。

编程不可以一拿到题目就盲目的编程,而是要先分析题目,思考解决这个问题最优的算法,选定算法后才开始进行初步的编程。

这次课程设计要求代码不少于三千行,我对于我们而言是个极其艰巨的任务。

除了自己构思以外,我们还上网查找了部分代码,把别人的代码和我们自己的合并在一起,最后我们都懂得了所有代码的意思,并且代码运行成功,实现了姓名挑战游戏的基本功能,比如说两个挑战者的挑战过程和结果。

虽然最后实现了这个游戏的功能,但是我们也只可以说是成功了一半。

因为我们的代码还没有达到三千行,并且游戏没有很好的显示界面,还需要多花时间进行更多的改进。

通过这次课程设计,我们还是学会了很多东西,比如怎么设计一个合适的算法,怎样开始编程之类的,把所学的思想成功的运用到了实践中。

6、参考文献

1.王晓东,《算法设计与分析》,清华大学出版社。

 

附录

MainGame.java

packagePK;

publicclassMainGame{

staticGameWorldgworld;

publicMainGame(){

}

/**

*主函数

*/

publicstaticvoidmain(String[]args){

if(gworld==null){

gworld=newGameWorld();

gworld.starThread();

}

}

}

InputFun.java

packagePK;

importjava.io.BufferedReader;

importjava.io.IOException;

importjava.io.InputStreamReader;

publicclassInputFun{

Stringname="";

/**

*

*@返回值String

*@说明用于获得用户的输入

*/

publicStringinput(){//获得用户的输入

BufferedReaderbr1=newBufferedReader(

newInputStreamReader(System.in));

try{

name=br1.readLine();

}catch(IOExceptione){

e.printStackTrace();

}

returnname;

}

/**

*

*@作者孙林娟刘术徐赫

*@返回值int[]

*@说明转化姓名为一个唯一的数组

*/

publicint[]changInt(Stringgetname){

int[]array=newint[4];

while(getname.length()<4){

getname+="";

}

intres=0;

for(intk=0;k<4;k++){

Strings=getname.substring(k,k+1);

res=s.hashCode();

if(res<1000){//当输入为英文或则是英文空格的时候默认的给转化过的值加2000

res+=20000;

}

array[k]=res;

}

returnarray;

}

}

GameWorld.java

packagePK;

importjava.util.Random;

publicclassGameWorldimplementsRunnable{

/**用户名*/

privateStringname1,name2;

/**输入方法*/

InputFunifun=newInputFun();

/**两个角色*/

Roler1,r2;

/**随机数*/

Randomr=newRandom();

/**线程*/

Threadthread;

/**攻击的动作字符串,防御的动作字符串*/

StringAttack_Str="",Recovery_Str="";

/**攻击的点数,抵御的点数*/

intoperter1=0,operter2=0;

/**一个循环变换角色攻击的变量*/

booleanloop=true;

/**投毒的标志*/

privatebooleanispoisoning;

/**由人明而转换而来的数组*/

int[]array1,array2;

publicGameWorld(){

init();

r1=newRole(name1,array1);

r2=newRole(name2,array2);

getRuleAttribult();

System.out.println("比赛开始GO~~");

}

/**

*

*@返回值void

*@说明一个初始化的方法,初始决斗的玩家的属性

*/

publicvoidinit(){

array1=newint[4];

array2=newint[4];

System.out.println("人名PK大战");

System.out.print("请输入挑战者的名字:

");

name1=ifun.input();//接收玩家的输入

array1=ifun.changInt(name1);

System.out.print("请输入被挑战者的名字:

");

name2=ifun.input();

array2=ifun.changInt(name2);

}

/**

*

*@返回值void

*@说明启动游戏的线程

*/

publicvoidstarThread(){

if(thread==null){

thread=newThread(this);

thread.start();

}

}

/**

*

*@返回值void

*@说明获得两个人的属性

*/

publicvoidgetRuleAttribult(){

r1.getAttribult();

r2.getAttribult();

}

/**

*

*@返回值void

*@说明最后的结果

*/

publicvoidgetResule(){

System.out.println("******************************");

if(r1.hp<=0){

if(r1.hp==0){

System.out.println("【"+r1.playname+"】被打败了.");

}else{

r1.hp=0;

System.out.println("【"+r2.playname+"】真残忍真想把【"+r1.playname

+"】榨干血啊.");

}

}elseif(r2.hp<=0){

if(r2.hp==0){

System.out.println("【"+r2.playname+"】被打败了.");

}else{

r2.hp=0;

System.out.println("【"+r1.playname+"】真残忍真想把【"+r2.playname

+"】榨干血啊.");

}

}

System.out.println("******************************");

getRuleAttribult();//得到最后的属性

}

/**

*

*@参数

*@paramrule1

*@参数

*@paramrule2

*@返回值void

*@说明游戏的循环方法

*/

publicvoidupdate(Rolerule1,Rolerule2){

rule_Attack(rule1,rule2);

rule_Recovery(rule1,rule2);

}

/**

*

*@参数

*@paramrule1

*@参数

*@paramrule2

*@返回值void

*@说明攻击的方法

*/

publicvoidrule_Attack(Rolerule1,Rolerule2){

intstate=rule1.ap;

intvalue=getRandom();

value=(state+value)/10/2;//把属性和随机数相加再除二,得到一个在属性范围内的新数

switch(value){

case0:

Attack_Str="【"+rule1.playname+"】向"+"【"+rule2.playname

+"】发动攻击";

operter1=25;

case1:

Attack_Str="【"+rule1.playname+"】向"+"【"+rule2.playname

+"】发动攻击";

operter1=20;

case2:

Attack_Str="【"+rule1.playname+"】向"+"【"+rule2.playname

+"】发动攻击";

operter1=10;

case3:

Attack_Str="【"+rule1.playname+"】向"+"【"+rule2.playname+"】发动攻击";

operter1=15;

break;

case4:

operter1=18;

Attack_Str="【"+rule1.playname+"】向进行"+"【"+rule2.playname+"】连击";

break;

case5:

operter1=20;

Attack_Str="【"+rule1.playname+"】冲向前狂咬"+"【"+rule2.playname+"】一口";

break;

case6:

operter1=-18;

Attack_Str="【"+rule1.playname+"】向"+"【"+rule2.playname+"】发动攻击,结果摔到在敌";

break;

case7:

operter1=18;

Attack_Str="【"+rule1.playname+"】向"+"【"+rule2.playname+"】投毒";

ispoisoning=true;

break;

case8:

operter1=25;

Attack_Str="【"+rule1.playname+"】发狂对"+"【"+rule2.playname

+"】进行暴打一顿";

break;

case9:

operter1=30;

Attack_Str="【"+rule1.playname+"】 诅咒 "+"【"+rule2.playname

+"】";

break;

}

}

/**

*

*@返回值void

*@说明受到攻击,作出响应的动作

*/

publicvoidrule_Recovery(Rolerule1,Rolerule2){

intstate=rule2.dp;

intvalue=getRandom();

value=(state+value)/10/2;

if(operter1>0){

switch(value){

case2:

operter2=10;

Recovery_Str="【"+rule2.playname+"】受了内伤.";

break;

case3:

operter2=operter1/10+10;

Recovery_Str="【"+rule2.playname+"】小躲了一下,但仍";

break;

case4:

operter2=operter1/10;

Recovery_Str="【"+rule2.playname+"】防御了一下下.但仍";

break;

case5:

case0:

case1:

operter2=operter1;

Recovery_Str="【"+rule2.playname+"】被正面击中了.结果";

if(ispoisoning){

Recovery_Str+="属性全面降低了10点,并";

rule2.chang();

}

break;

case6:

operter2=-operter1;

Recovery_Str="【"+rule2.playname+"】刚好躲过了攻击,不受伤.";

break;

case7:

operter2=operter1/10+4;

Recovery_Str="【"+rule2.playname+"】挣脱了.但是仍";

break;

case8:

operter2=operter1;

Recovery_Str="【"+rule2.playname+"】被打晕了.";

break;

case9:

operter2=-operter1+10;

Recovery_Str="【

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

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2