神仙道战斗游戏逻辑设计
2012-03-17 14:21
295 查看
一队:
二队:
1、两支队伍,每支队伍最多可以上阵五个武将,每支队伍按九宫格排放,可以随意安排上阵人员的位置。2、打斗过程:例:A、B两支队伍,出手顺序:A1、B1、A2、B2、A3、B3……。直至其中一支队伍没有武将。3、类介绍:武将类(名你,属性:HP,攻击力,防御力)。战斗过程类。辅助类等。4、在控制台打印出输出结果,如(A1的**攻击B1的**,B1损失*点体力[B1死亡]……。A队胜利)。5、公式:攻击力-防御力+(1到20).(如果攻击力-防御力为负值时公式变为:0+(1到20)).(打印)分析:直到一方死亡,需要用到while循环,攻方和防守方一次一替的交换,直到一方没有人了胜利!代码如下:
3 | 2 | 1 |
6 | 5 | 4 |
9 | 8 | 7 |
3 | 2 | 1 |
6 | 5 | 4 |
9 | 8 | 7 |
package moni; import manager.LookForManager; public class ZhanDou { public static void main(String[] args) { Sx[][] a = new Sx[3][3]; Sx[][] b = new Sx[3][3]; LookForManager lookForManager=new LookForManager(); //位置摆放 //设置武将在阵中的位置 a[0][0]=lookForManager.rwshuxing(1);//设置武将属性 a[0][1]=lookForManager.rwshuxing(2); a[1][1]=lookForManager.rwshuxing(3); a[1][0]=lookForManager.rwshuxing(4); a[2][1]=lookForManager.rwshuxing(5); //设置小怪 b[0][1]=lookForManager.gwshuxing(1); b[0][2]=lookForManager.gwshuxing(2); b[1][0]=lookForManager.gwshuxing(3); b[1][2]=lookForManager.gwshuxing(4); b[2][2]=lookForManager.gwshuxing(5); lookForManager.zhao(a, b);//打架方法 } }
package moni;
public class Sx { private int gongji; private int fangyu; private int hp; private String name; private boolean ishander=true; public int getGongji() { return gongji; } public void setGongji(int gongji) { this.gongji = gongji; } public int getFangyu() { return fangyu; } public void setFangyu(int fangyu) { this.fangyu = fangyu; } public int getHp() { return hp; } public void setHp(int hp) { this.hp = hp; } public String getName() { return name; } public void setName(String name) { this.name = name; } public boolean isIshander() { return ishander; } public void setIshander(boolean ishander) { this.ishander = ishander; } }
package manager;import java.util.Random;import moni.Sx; public class LookForManager { //武将属性设置 public Sx rwshuxing(int ms){ Random r=new Random(); //武将选中位置,此时带有属性值 Sx sx=new Sx();//需要优化 sx.setFangyu(r.nextInt(10)); sx.setGongji(r.nextInt(10)); sx.setHp(r.nextInt(100)); sx.setName("A"+ms); return sx; } //怪物属性设置 public Sx gwshuxing(int gs){ Random r=new Random(); //武将选中位置,此时带有属性值 Sx sx=new Sx();//需要优化 sx.setFangyu(r.nextInt(10)); sx.setGongji(r.nextInt(10)); sx.setHp(r.nextInt(100)); sx.setName("B"+gs); return sx; } //输出互相打斗的信息 public void daji(Sx cs,Sx bd){ int xie=0; Random r=new Random(); if(cs!=null&&bd!=null&&cs.getGongji()-bd.getFangyu()>0){ xie=cs.getGongji()-bd.getFangyu()+r.nextInt(20); bd.setHp(bd.getHp()-xie); System.out.println(cs.getName()+"的"+cs.getGongji()+"攻击"+bd.getName()+"的"+bd.getFangyu()+"防御,"+bd.getName()+"损失"+xie+"点体力"); cs.setIshander(false); }else{//(如果攻击力-防御力为负值时公式变为:0+(1到20)). xie=0+r.nextInt(20); if(bd!=null&&cs!=null){ bd.setHp(bd.getHp()-xie); System.out.println(cs.getName()+"的"+cs.getGongji()+"攻击"+bd.getName()+"的"+bd.getFangyu()+"防御,"+bd.getName()+"损失"+xie+"点体力"); cs.setIshander(false); } } } //主体部分 public void zhao(Sx a[][],Sx b[][]){ boolean t=true;//回合初始化武将的属性(所有武将未出手) boolean team=true;//true为A出手,false为B出手 while(t){//循环找到A谁先出手 //全部出手过了,全部设置成未出手 boolean ishandl=true; for (int j2 = 0; j2 < 3; j2++) { for (int k = 0; k < 3; k++) { if(a[j2][k]!=null&&a[j2][k].isIshander()!=true){ ishandl=false; } if(b[j2][k]!=null&&b[j2][k].isIshander()!=true){ ishandl=false; } } } if(ishandl){//所有人初始化未出手 for (int j2 = 0; j2 < 3; j2++) { for (int k = 0; k < 3; k++) { if(a[j2][k]!=null){ a[j2][k].setIshander(true); } if(b[j2][k]!=null){ b[j2][k].setIshander(true); } } } } int ii=0;//存储行变量 Sx bd=null;//被打人 Sx cs=null;//打手 if(team){//true为A出手,false为B出手 for (int tempi = 2; tempi >= 0; tempi--) { for (int tempj = 2; tempj >= 0; tempj--) { if(a[tempi][tempj]!=null&&a[tempi][tempj].isIshander()&&a[tempi][tempj].getHp()>0){ cs=a[tempi][tempj]; ii=tempi; } } } if(cs==null){ //找出已出手但是还有血的人 System.out.println("A队输"); break; } for (int tempi = ii; tempi < 3&&tempi > -1;) { for (int tempj = 2; tempj < 3&&tempj > -1; tempj--) { if(b[tempi][tempj]!=null&&b[tempi][tempj].getHp()>0){ bd=b[tempi][tempj]; } } if(null!=bd){ break; } if(ii!=0){ tempi--; } else{ tempi++; } if(tempi==-1){ tempi=2; } } if(bd==null){ System.out.println("B队输"); break; } }else{ //b队找a队 for (int tempi = 2; tempi >= 0; tempi--) { for (int tempj = 2; tempj >= 0; tempj--) { if(b[tempi][tempj]!=null&&b[tempi][tempj].isIshander()&&b[tempi][tempj].getHp()>0){ cs=b[tempi][tempj]; ii=tempi; } } } if(cs==null){ System.out.println("B队输"); break; } for (int tempi = ii; tempi < 3&&tempi > -1;) { for (int tempj = 2; tempj < 3&&tempj > -1; tempj--) { if(a[tempi][tempj]!=null&&a[tempi][tempj].getHp()>0){ bd=a[tempi][tempj]; } } if(null!=bd){ break; } if(ii!=0){ tempi--; } else{ tempi++; } if(tempi==-1){ tempi=2; } } if(bd==null){ System.out.println("A队输"); break; } } /* * 攻击 */ this.daji(cs, bd); if(team){ team=false; }else{ team=true; } } } }
相关文章推荐
- 我所理解的网络游戏<?>:战斗逻辑设计
- flash 游戏设计笔记:回合制战斗怪物和人物站位坐标行角度分布
- 游戏开发战斗与成长数值设计(10)
- 战斗中的取消:《战神》与动作游戏设计
- 赌博游戏设计逻辑顺序题目
- 如何高效设计游戏——从抽奖模型到圆桌算法(下)附VBA教程&战斗模拟器
- 通关!游戏设计之道的学习笔记(八)战斗的要素
- MMORPG大型游戏设计与开发(服务器 AI 逻辑设定和状态结点)
- 一款SNS战略休闲游戏开发笔记01——分布式系统逻辑架构设计的补充与讨论
- 游戏逻辑服务器和数据缓存服务器交互设计策略总结
- 游戏设计模式系列(一)—— 单线逻辑&&数据驱动,搞定最容易卡死的结算界面
- 关于游戏逻辑系统模块的设计
- 类Kingdom Rush塔防游戏的数值设计(一)——玩法概述和基础战斗模型建立
- iOS简易蓝牙对战五子棋游戏设计思路之二——核心棋盘逻辑与胜负判定算法
- appstore收入分析及策略类游戏的战斗设计
- 游戏设计的资源和数据处理逻辑
- 战斗中的取消:《战神》与动作游戏设计 -
- 游戏开发手记:战斗模块设计
- 游戏开发(三)——WIN32 黑白棋(一)——棋局逻辑的设计
- 游戏逻辑里常用的设计模式