




已阅读5页,还剩18页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
姓名挑战游戏1、课程设计的目的 学习算法的最终目的是解决实际的应用问题,特别是非数值计算类型的应用问题。课程设计要求同学独立完成一个较为完整的应用需求分析,在完成设计和编程大型作业的过程中,深化对算法课程中基本概念、理论和方法的理解;训练综合运用所学知识处理实际问题的能力,强化面向对象的程序设计理念;使同学的程序设计与调试水平有一个明显的提高。经过查找参考资料、技术手册和撰写文档的实践,进一步培养软件工程师的综合素质。 2、课程设计的技术要求 同学在处理每一个题目的时候,要从分析题目的需求入手,按设计抽象数据类型、构思算法、通过类的设计实现抽象数据类型、编制上机程序代码并调试的步骤完成题目,最终写出完整的分析报告。见到题目,案头工作准备不足,忙于上机敲程序不是优秀程序员的工作风格。注意设计与实现过程的经验积累,编码应尽量利用前阶段的成熟数据结构包,加大代码的重用率。课程设计所安排的题目,在难度和深度方面都大于课内的上机训练。程序作业以Java完成,配有图形界面。作业一般要达到3000行以上的代码量。最后提交作业包括:课程设计报告;完整程序,应该具有可显示界面;PPT及算法说明。3、题目分析姓名挑战游戏说明:输入两个中文姓名,通过一种算法,计算出姓名的血值和攻击力,使两个名字进行对战,进行多轮回合后,决定双方输赢。在运行界面中输入两个挑战者的姓名,软件就会计算出两个挑战者初始状态的血值和攻击力之类的属性值。然后两个挑战者一边挑战,系统会自动显示目前两个挑战者的一系列属性。两个人一直挑战,直到其中一者的hp的值为0,则挑战结束,并且hp为0的一方失败。4、部分程序分析4.1 角色属性定义public class Role String playname;/角色名字 int hp;/生命值int ap;/攻击力为ap int dp;/防御力为dpint rate;/攻击速度 int hitRate;/命中率int luck;/运气int array = new int4;/名字数组String Attack_Action = ; /攻击的动作字符串 String Recovery_Action = ;/防御的动作字符串int Attact_Point = 0; /攻击的点数int Recovery_Point = 0;/抵御的点数4.2 构造函数 public Role(String name, int getArray) array = getArray; playname = name; setAttribult(); 4.3 输入挑战者姓名后角色属性值统计在运行界面上输入两个挑战者的姓名后,界面就会自动统计每个挑战者的生命力hp,攻击力ap,防御力dp,攻击速度rate,命中率hitrate,运气luck。public void getAttribult() 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 设置角色属性 public void setAttribult() 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; public int addFun(int index) int res = 0; for (int i = 0; i 4; i+) if (i != index) / 剔出掉vindex指向的数 res += arrayi; return res; 4.5 设置挑战期间各种攻击后各个值的属性 public int chang() /设置中毒的属性 ap = ap - 10; hitRate = hitRate - 10; luck = luck - 10; rate = rate - 10; dp = dp - 10; return 0; 设置10个实例来演示两个挑战者在挑战期间的动作,例如:A向B发动攻击;B向A发动攻击;A冲上前狂咬B一口;A发狂对B暴打一顿;A向B发动攻击,结果摔倒在地;A诅咒B;A向B投毒等。public String useAp(int index, String playname1, String playname2) switch (index) case 0: Attack_Action = 【 + playname1 + 】向 + 【 + playname2 + 】发动攻击; Attact_Point = 25; case 1: Attack_Action = 【 + playname1 + 】向 + 【 + playname2 + 】发动攻击; Attact_Point = 20; case 2: Attack_Action = 【 + playname1 + 】向 + 【 + playname2 + 】发动攻击; Attact_Point = 10; case 3: Attack_Action = 【 + playname1 + 】向 + 【 + playname2 + 】发动攻击; Attact_Point = 15; break; case 4: Attact_Point = 18; Attack_Action = 【 + playname1 + 】向进行 + 【 + playname2 + 】连击; break; case 5: Attact_Point = 20; Attack_Action = 【 + playname1 + 】冲向前狂 咬 + 【 + playname2+ 】一口; break; case 6: Attact_Point = -18; Attack_Action = 【 + playname1 + 】向 + 【 + playname2+ 】发动攻击,结果摔到在地; break; case 7: Attact_Point = 18; Attack_Action = 【 + playname1 + 】向 + 【 + playname2 + 】投毒; break; case 8: Attact_Point = 25; Attack_Action = 【 + playname1 + 】发狂对 + 【 + playname2+ 】进行暴打一顿; break; case 9: Attact_Point = 30; Attack_Action = 【 + playname1 + 】诅咒 + 【 + playname2 + 】; break; return ; public String useDp(int index) /使用防御力 return ; public String useHitRate(int index) /使用命中率 return ; public String useHp(int index) /使用生命值 return ; public String useLuck(int index) /使用运气 return ; public String useRate(int index) /使用速度 return ; 5、实验总结学习每门课程都要学以致用,学习算法设计与分析这门课程是要培养我们自己设计算法的能力。编程不可以一拿到题目就盲目的编程,而是要先分析题目,思考解决这个问题最优的算法,选定算法后才开始进行初步的编程。这次课程设计要求代码不少于三千行,我对于我们而言是个极其艰巨的任务。除了自己构思以外,我们还上网查找了部分代码,把别人的代码和我们自己的合并在一起,最后我们都懂得了所有代码的意思,并且代码运行成功,实现了姓名挑战游戏的基本功能,比如说两个挑战者的挑战过程和结果。虽然最后实现了这个游戏的功能,但是我们也只可以说是成功了一半。因为我们的代码还没有达到三千行,并且游戏没有很好的显示界面,还需要多花时间进行更多的改进。通过这次课程设计,我们还是学会了很多东西,比如怎么设计一个合适的算法,怎样开始编程之类的,把所学的思想成功的运用到了实践中。6、参考文献1.王晓东,算法设计与分析,清华大学出版社。附录MainGame.javapackage PK;public class MainGame static GameWorld gworld; public MainGame() /* * 主函数 */ public static void main(String args) if (gworld = null) gworld = new GameWorld(); gworld.starThread(); InputFun.javapackage PK;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;public class InputFun String name = ; /* * * 返回值 String * 说明 用于获得用户的输入 */ public String input() / 获得用户的输入 BufferedReader br1 = new BufferedReader( new InputStreamReader(System.in); try name = br1.readLine(); catch (IOException e) e.printStackTrace(); return name; /* * * 作者 孙林娟 刘术 徐赫 * 返回值 int * 说明 转化姓名为一个唯一的数组 */ public int changInt(String getname) int array = new int4; while (getname.length() 4) getname += ; int res = 0; for (int k = 0; k 4; k+) String s = getname.substring(k, k + 1); res = s.hashCode(); if (res 1000) / 当输入为英文或则是英文空格的时候默认的给转化过的值加2000 res += 20000; arrayk = res; return array; GameWorld.javapackage PK;import java.util.Random;public class GameWorld implements Runnable /* 用户名 */ private String name1, name2; /* 输入方法 */ InputFun ifun = new InputFun(); /* 两个角色 */ Role r1, r2; /* 随机数 */ Random r = new Random(); /* 线程 */ Thread thread; /* 攻击的动作字符串,防御的动作字符串 */ String Attack_Str = , Recovery_Str = ; /* 攻击的点数 ,抵御的点数 */ int operter1 = 0, operter2 = 0; /* 一个循环变换角色攻击的变量 */ boolean loop = true; /* 投毒的标志 */ private boolean ispoisoning; /* 由人明而转换而来的数组 */ int array1, array2; public GameWorld() init(); r1 = new Role(name1, array1); r2 = new Role(name2, array2); getRuleAttribult(); System.out.println(比赛开始 GO); /* * * 返回值 void * 说明 一个初始化的方法,初始决斗的玩家的属性 */ public void init() array1 = new int4; array2 = new int4; System.out.println(人名大战); System.out.print(请输入挑战者的名字:); name1 = ifun.input();/ 接收玩家的输入 array1 = ifun.changInt(name1); System.out.print(请输入被挑战者的名字:); name2 = ifun.input(); array2 = ifun.changInt(name2); /* * * 返回值 void * 说明 启动游戏的线程 */ public void starThread() if (thread = null) thread = new Thread(this); thread.start(); /* * * 返回值 void * 说明 获得两个人的属性 */ public void getRuleAttribult() r1.getAttribult(); r2.getAttribult(); /* * * 返回值 void * 说明 最后的结果 */ public void getResule() 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 + 】榨干血啊.); else if (r2.hp 0) switch (value) case 2: operter2 = 10; Recovery_Str = 【 + rule2.playname + 】受了内伤; break; case 3: operter2 = operter1 / 10 + 10; Recovery_Str = 【 + rule2.playname + 】小躲了一下,但仍; break; case 4: operter2 = operter1 / 10; Recovery_Str = 【 + rule2.playname + 】 防御了一下下但仍; break; case 5: case 0: case 1: operter2 = operter1; Recovery_Str = 【 + rule2.playname + 】被正面击中了结果; if (ispoisoning) Recovery_Str += 属性全面降低了10点,并; rule2.chang(); break; case 6: operter2 = -operter1; Recovery_Str = 【 + rule2.playname + 】刚好躲过了攻击,不受伤; break; case 7: operter2 = operter1 / 10 + 4; Recovery_Str = 【 + rule2.playname + 】 挣脱了但是仍; break; case 8: operter2 = operter1; Recovery_Str = 【 + rule2.playname + 】被打晕了; break; case 9: operter2 = -operter1 + 10; Recovery_Str = 【 + rule2.playname + 】垂死奋斗; break; int result = operter1 + operter2; if (result != 0) Recovery_Str += 受到 + (result) + 点伤害; rule2.hp -= (result); else Recovery_Str = 【 + rule1.playname + 】 自己受伤了 + (-operter1) + 点伤害; rule1.hp += operter1; ispoisoning = false; /* * * 返回值 int * 说明 产生一个随机的数字 */ public int getRandom() int state = Math.abs(r.nextInt(100); return state; /* * * 参数 * param i * 返回值 void * 说明 一个休眠的动作,根据i的值休眠 */ private void isSleep(int i) try Thread.sleep(i); catch (InterruptedException e) e.printStackTrace(); /* * * 返回值 void * 说明 动作的表现 */ public void paint() System.out.print( + Attack_Str + ; ); isSleep(1200); System.out.println(Recovery_Str); isSleep(1100); System.out.println( 经过本轮角逐: + r1.playname + .hp = + r1.hp + + r2.playname + .hp = + r2.hp); isSleep(1200); /* * 游戏的循环逻辑方法 */ public void run() int debug = 0; try while (r1.hp 0 & r2.hp 0) long time = java.lang.System.currentTimeMillis() + 50; debug = 1; if (loop) update(r1, r2); loop = false; else update(r2, r1); loop = true; debug = 2; paint(); java.lang.Thread.yield(); while (time java.lang.System.currentTimeMillis() ; getResule(); catch (Exception e) System.err.println(run error: + e + debug: + debug); Role.javapackage PK;public class Role /* 名字 */ String playname; /* 生命值 */ int hp; /* 攻击力 ap */ int ap; /* 防御力 dp defence */ int dp; /* 攻击速度 */ int rate; /* 命中率 hitRate */ int hitRate; /* 运气 */ int luck; /* 名字数组 */ int array = new int4; /* 攻击的动作字符串 */ String Attack_Action = ; /* 防御的动作字符串 */ String Recovery_Action = ; /* 攻击的点数 */ int Attact_Point = 0; /* ,抵御的点数 */ int Recovery_Point = 0; /* 构造函数 */ public Role(String name, int getArray) array = getArray; playname = name; setAttribult(); /* * * 作者 孙林娟 刘术 徐赫 * 输出角色属性 * 说明 获得角色的属性 */ public void getAttribult() 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); /* * * 作者 孙林娟 刘术 徐赫 * 返回值 void * 说明 设置角色的各个属性 */ public void setAttribult() 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; /* * * 作者 孙林娟 刘术 徐赫 * 返回值 int * 说明 一个特殊的加法运算方法 */ public int addFun(int index) int res = 0; for (int i = 0; i 4; i+) if (i != index) / 剔出掉vindex指向的数 res += arrayi; return res; /* * * 参数 * return * 返回值 int * 说明 一个属性全面伤害的动作 中毒 */ public int chang() ap = ap - 10; hitRate = hitRate - 10; luck = luck - 10; rate = rate - 10; dp = dp - 10; return 0; /* * * 参数 param index * 参数 param playname1 * 参数 param playname2 * 参数 return * 返回值 String * 说明 使用攻击力 */ public String useAp(int index, String playname1, String playname2) switch (index) case 0: Attack_Action = 【 + playname1 + 】向 + 【 + playname2 + 】发动攻击; Attact_Point = 25; case 1: Attack_Action = 【 + playname1 + 】向 + 【 + playname2 + 】发动攻击; Attact_Point = 20; case 2: Attack_Action = 【 + playname1 + 】向 + 【 + playname2 + 】发动攻击; Attact_Point = 10; case 3: Attack_Action = 【 + playname1 + 】向 + 【 + playname2 + 】发动攻击; Attact_Point = 15; break; case 4: Attact_Point = 18; Attack_Action = 【 + playname1 + 】向进行 + 【 + playname2 + 】连击; break; case 5: Attact_Point = 20; Attack_Action = 【 + playname1 + 】冲向前狂 咬 + 【 + playname2 + 】一口; break; case 6: Attact_Point = -18; Attack_Action = 【 + playname1 + 】向 + 【 + playname2 + 】发动攻击,结果摔到在敌; break; case 7: Attact_Point = 18; Attack_Action = 【
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版房地产项目融资协议书示范
- 2025年度车辆托管与车辆租赁及增值服务协议
- 2025年度企业员工食堂膳食供应合同
- 2025年度企业商业信用贷款抵押合同模板
- 2025版事业单位信息安全人员聘用合同书(含数据安全协议)
- 2025版汽车维修配件进口分销合同
- 2025版水泥沙石行业绿色认证及标准制定合同
- 2025版医疗器械行业高级管理人员劳动合同示范
- 2025版桥梁施工环境保护及恢复合同
- 2025版幼儿园托管服务合同范本下载及解读
- 四年级下册青岛版数学计算题天天练习带答案(共15天)
- 2025年业务接替交接协议书
- 2025年1月浙江省高考地理试卷(含答案)
- 2025年湖南铁道职业技术学院高职单招职业技能测试近5年常考版参考题库含答案解析
- 患者照护用品的应用护理员培训
- DB32-T 4334-2022 薄壳山核桃郁闭园改造技术规程
- 农办主任履行职责工作(2篇)
- 2025年中国维生素C咀嚼片市场供需格局及未来发展趋势报告
- 规则之下方有自由课件-高一上学期行为常规主题班会
- 广东省汕头市金平区2021-2022学年八年级下学期期末英语卷
- 物流行业固废处理方案
评论
0/150
提交评论