神仙道战斗游戏逻辑设计

一队:                                                                                                 

321
654
987
二队:

321
654
987

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循环,攻方和防守方一次一替的交换,直到一方没有人了胜利!

代码如下:
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;
       	}
   	}
   }

	
}





评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值