java練習-任務1.2-對戰遊戲

逃亡的詩發表於2020-10-06

實現:
角色情況:
戰士,生命值:120,攻擊力:45,防禦力:30,命中率:%80
騎兵,生命值:110,攻擊力:55,防禦力:30,命中率:%85
法師,生命值:90,攻擊力:60,防禦力:25,命中率:%70
角色特效:
戰士,勇猛:恢復35生命值
騎士,追擊:追加30傷害
法師,魔力:恢復自身20生命,追擊20傷害
特效激發概率均為40%
遊戲開始後,根據提示資訊輸入編號進行戰鬥
20個回合遊戲結束或一方全體角色陣亡遊戲結束
若某個角色陣亡,則無法使用切無法被攻擊

遊戲開始
在這裡插入圖片描述
有特效
在這裡插入圖片描述
在這裡插入圖片描述

在這裡插入圖片描述

在這裡插入圖片描述
20回合,遊戲結束
在這裡插入圖片描述

程式碼:

import java.util.*;
class Combater//戰鬥基礎類
{
		public String name;//名稱
		public int live;//生命值
		public int attack;//戰鬥力
		public int defense;//防禦力
		public int rate;//命中率
		public String addtion;//特效
		public String state;//狀態
	
	public Combater()//無引數的建構函式
		{
	
		}

	public void base_echo()//基本資訊顯示函式
	{
		System.out.print(name+",");
		System.out.print("生命值:"+live+",");
		System.out.print("攻擊力:"+attack+",");
		System.out.print("防禦力:"+defense+",");
		System.out.print("命中率:"+"%"+rate+",");
		System.out.print("特效:"+addtion+",");
		if(live>=0)
		{
			System.out.println("存活");	
		}
		else
		{
			System.out.println("已陣亡");
		}
	}
}


class Soldier extends Combater//子類 戰士
{   
    public Soldier()
    {
    	name="戰士";
		live=120;
		attack=45;
		defense=30;
		rate=80;
		addtion="不屈戰士";
    }
    	
   
}

class Cavalry extends Combater//子類 騎兵
{
	  public Cavalry()
	    {
		  name="騎兵";
			live=110;
			attack=55;
			defense=30;
			rate=85;
			addtion="勇猛騎士";
	    }

}

class Master extends Combater//子類 法師
{
	public Master()
    {
		name="法師";
		live=90;
		attack=60;
		defense=25;
		rate=70;
		addtion="法師藥水";
    }
}

public class mainSet 
{   

	public static void main(String[] args)//主函式
	{   int i;
		Soldier srole1=new Soldier();
		Cavalry crole1=new Cavalry();
		Master mrole1=new Master();//建立成員
		
		Soldier srole2=new Soldier();
		Cavalry crole2=new Cavalry();
		Master mrole2=new Master();//建立成員
		
		System.out.println("角色詳情:");
		System.out.println("戰士,生命值:120,攻擊力:45,防禦力:30,命中率:%80,特效:不屈戰士");
		System.out.println("騎兵,生命值:110,攻擊力:55,防禦力:30,命中率:%85,特效:勇猛騎士");
		System.out.println("法師,生命值:90,攻擊力:60,防禦力:25,命中率:%70,特效:法師藥水");
		System.out.println("使用說明:");
		System.out.println("角色陣亡後,無法使用該角色,且無法被攻擊,否則操作無效");
		
		Random random1 = new Random();//生成隨機數,用於玩家1攻擊成功概率
		Random random2 = new Random();//生成隨機數,用於玩家1攻擊成功概率
		Random addtion1 = new Random();//生成隨機數,用於戰士加成產生概率
		Random addtion2 = new Random();//生成隨機數,用於騎士加成產生概率
		Random addtion3 = new Random();//生成隨機數,用於法師加成產生概率
	
		
for(i=1;i<=20;i++)//用於對戰回合進行
	{
	    System.out.println("回合"+i);
			if(i%2==1)//角色1模組
			{//if
				System.out.println("玩家1發動攻擊");
				int choice1;//輸入編號進行戰鬥
				Scanner reader=new Scanner(System.in);
				System.out.println("1、戰士攻擊對方戰士,2、戰士攻擊對方騎士,3、戰士攻擊對方法師,");
				System.out.println("4、騎士攻擊對方戰士,5、騎士攻擊對方騎士,6、騎士攻擊對方法師,");
				System.out.println("7、法師攻擊對方戰士,8、法師攻擊對方戰士,9、法師攻擊對方法師,");
				System.out.print("請輸入:");
				choice1=reader.nextInt();//從鍵盤輸入攻擊情形
		
				if(choice1==1&srole1.live>=0&srole2.live>=0)//輸入1,戰士攻擊對方戰士,若戰士生命值<0,則無法攻擊
				{
					System.out.println("戰士攻擊對方戰士");
					
						if(random1.nextInt(20)<=16)//設定攻擊成功概率
							{	System.out.println("攻擊成功,玩家2戰士生命值減45");
								srole2.live=srole2.live-srole1.attack;//血量計算
								if(addtion1.nextInt(10)<=4)//設定加成產生
								{   
									srole2.live=srole2.live+35;//戰士恢復生命值
									System.out.println("不屈戰士,玩家2戰士生命值恢復35");
								}
							}
						else
							{System.out.println("受擊方閃躲成功");}//顯示攻擊詳情
					
				}
		
				
				else if(choice1==2&srole1.live>=0&crole2.live>=0)//輸入2,戰士攻擊對方騎士,若戰士生命值<0,則無法攻擊
				{
					System.out.println("戰士攻擊對方騎士");
					
						if(random1.nextInt(20)<=16)//設定攻擊成功概率
							{	System.out.println("攻擊成功,玩家2騎士生命值減45");
								crole2.live=crole2.live-srole1.attack;//血量計算
							}
						else
							{System.out.println("受擊方閃躲成功");}//顯示攻擊詳情
					
				}
				
				else if(choice1==3&srole1.live>=0&mrole2.live>=0)//輸入3,戰士攻擊對方法師,若戰士生命值<0,則無法攻擊
				{
					System.out.println("戰士攻擊對方法師");
					
						if(random1.nextInt(20)<=16)//設定攻擊成功概率
							{	System.out.println("攻擊成功,玩家2法師生命值減45");
								mrole2.live=mrole2.live-srole1.attack;//血量計算
							}
						else
							{System.out.println("受擊方閃躲成功");}//顯示攻擊詳情
					
				}
				
				else if(choice1==4&crole1.live>=0&srole2.live>=0)//輸入4,騎士攻擊對方戰士,若騎士生命值<0,則無法攻擊
				{
					System.out.println("騎士攻擊對方戰士");
					
						if(random1.nextInt(20)<=17)//設定攻擊成功概率
							{	System.out.println("攻擊成功,玩家2戰士生命值減55");
								srole2.live=srole2.live-crole1.attack;//血量計算
								if(addtion1.nextInt(10)<=4)//設定戰士加成產生
								{   
									srole2.live=srole2.live+35;//戰士恢復生命值
									System.out.println("不屈戰士,玩家2戰士生命值恢復35");
								}
								if(addtion2.nextInt(10)<=4)//設定騎士加成產生
								{   
									srole2.live=srole2.live-30;//騎士追擊
									System.out.println("勇猛騎士,玩家1追加30傷害");
								}
							}
						else
							{System.out.println("受擊方閃躲成功");}//顯示攻擊詳情
					
				}
				
				else if(choice1==5&crole1.live>=0&crole2.live>=0)//輸入5,騎士攻擊對方騎士,若騎士生命值<0,則無法攻擊
				{
					System.out.println("騎士攻擊對方騎士");
					
						if(random1.nextInt(20)<=17)//設定攻擊成功概率
							{	System.out.println("攻擊成功,玩家2騎士生命值減55");
								crole2.live=crole2.live-crole1.attack;//血量計算
								if(addtion2.nextInt(10)<=4)//設定騎士加成產生
								{   
									crole2.live=crole2.live-30;//騎士追擊
									System.out.println("勇猛騎士,玩家1追加30傷害");
								}
							}
						else
							{System.out.println("受擊方閃躲成功");}//顯示攻擊詳情
					
				}
				
				else if(choice1==6&&crole1.live>=0&mrole2.live>=0)//輸入6,騎士攻擊對方法師,若騎士生命值<0,則無法攻擊
				{
					System.out.println("騎士攻擊對方法師");
					
						if(random1.nextInt(20)<=17)//設定攻擊成功概率
							{	System.out.println("攻擊成功,玩家2法師生命值減55");
								mrole2.live=mrole2.live-crole1.attack;//血量計算
								if(addtion2.nextInt(10)<=4)//設定騎士加成產生
								{   
									mrole2.live=mrole2.live-30;//騎士追擊
									System.out.println("勇猛騎士,玩家1追加30傷害");
								}
								
							}
						else
							{System.out.println("受擊方閃躲成功");}//顯示攻擊詳情
					
				}
			
				else if(choice1==7&mrole1.live>=0&srole2.live>=0)//輸入7,法師攻擊對方戰士,若法師生命值<0,則無法攻擊
				{
					System.out.println("法師攻擊對方戰士");
					
						if(random1.nextInt(20)<=14)//設定攻擊成功概率
							{	System.out.println("攻擊成功,玩家2戰士生命值減60");
								srole2.live=srole2.live-mrole1.attack;//血量計算
								if(addtion1.nextInt(10)<=4)//設定加成產生
								{   
									srole2.live=srole2.live+35;//戰士恢復生命值
									System.out.println("不屈戰士,玩家2戰士生命值恢復35");
								}
								if(addtion3.nextInt(10)<=4)//設定法師加成產生
								{   
									srole2.live=srole2.live-20;//法師追擊
									mrole1.live=mrole1.live+20;//法師恢復
									System.out.println("法師魔法,玩家1自身恢復20生命,追擊20傷害");
								}
							
							}
						else
							{System.out.println("受擊方閃躲成功");}//顯示攻擊詳情
					
				}
				
				else if(choice1==8&mrole1.live>=0&crole2.live>=0)//輸入8,法師攻擊對方騎士,若法師生命值<0,則無法攻擊
				{
					System.out.println("法師攻擊對方騎士");
					
						if(random1.nextInt(20)<=14)//設定攻擊成功概率
							{	System.out.println("攻擊成功,玩家2騎士生命值減60");
								crole2.live=crole2.live-mrole1.attack;//血量計算
								if(addtion3.nextInt(10)<=4)//設定法師加成產生
								{   
									crole2.live=crole2.live-20;//法師追擊
									mrole1.live=mrole1.live+20;//法師恢復
									System.out.println("法師魔法,玩家1自身恢復20生命,追擊20傷害");
								}
							}
						else
							{System.out.println("受擊方閃躲成功");}//顯示攻擊詳情
					
				}
				
				else if(choice1==9&mrole1.live>=0&mrole2.live>=0)//輸入9,法師攻擊對方法師,若法師生命值<0,則無法攻擊
				{
					System.out.println("法師攻擊對方法師");
					
						if(random1.nextInt(20)<=14)//設定攻擊成功概率
							{	System.out.println("攻擊成功,玩家2法師生命值減60");
								mrole2.live=mrole2.live-mrole1.attack;//血量計算
								if(addtion3.nextInt(10)<=4)//設定法師加成產生
								{   
									mrole2.live=mrole2.live-20;//法師追擊
									mrole1.live=mrole1.live+20;//法師恢復
									System.out.println("法師魔法,玩家1自身恢復20生命,追擊20傷害");
								}
							}
						else
							{System.out.println("受擊方閃躲成功");}//顯示攻擊詳情
					
				}
				
				else
				{
				System.out.println("無效攻擊");
				}
				
				
				
				if(srole2.live<=0&crole2.live<=0&mrole2.live<=0) 
				{i=i+100;
				System.out.println("玩家2所有角色陣亡,玩家1勝利");
			 
				//如果血量為零跳出迴圈	
				}
		
			
			}//if	
			
	else  //角色2模組
		{     //else括號
				System.out.println("玩家2發動攻擊");
				int choice2;//輸入編號進行戰鬥
				Scanner reader=new Scanner(System.in);
				System.out.println("1、戰士攻擊對方戰士,2、戰士攻擊對方騎士,3、戰士攻擊對方法師,");
				System.out.println("4、騎士攻擊對方戰士,5、騎士攻擊對方騎士,6、騎士攻擊對方法師,");
				System.out.println("7、法師攻擊對方戰士,8、法師攻擊對方戰士,9、法師攻擊對方法師,");
				System.out.print("請輸入:");
				choice2=reader.nextInt();//從鍵盤輸入攻擊情形
		
				if(choice2==1&srole2.live>=0&srole1.live>=0)//輸入1,戰士攻擊對方戰士,若戰士生命值<0,則無法攻擊
				{
					System.out.println("戰士攻擊對方戰士");
					
						if(random2.nextInt(20)<=16)//設定攻擊成功概率
							{	System.out.println("攻擊成功,玩家1戰士生命值減45");
								srole1.live=srole1.live-srole2.attack;//血量計算
								if(addtion1.nextInt(10)<=4)//設定加成產生
								{   
									srole1.live=srole1.live+35;//戰士恢復生命值
									System.out.println("不屈戰士,玩家1戰士生命值恢復35");
								}
							}
						else
							{System.out.println("受擊方閃躲成功");}//顯示攻擊詳情
					
				}
		
				
				else if(choice2==2&srole2.live>=0&crole1.live>=0)//輸入2,戰士攻擊對方騎士,若戰士生命值<0,則無法攻擊
				{
					System.out.println("戰士攻擊對方騎士");
					
						if(random2.nextInt(20)<=16)//設定攻擊成功概率
							{	System.out.println("攻擊成功,玩家1騎士生命值減45");
								crole1.live=crole1.live-srole2.attack;//血量計算
							}
						else
							{System.out.println("受擊方閃躲成功");}//顯示攻擊詳情
					
				}
				
				else if(choice2==3&srole2.live>=0&mrole1.live>=0)//輸入3,戰士攻擊對方法師,若戰士生命值<0,則無法攻擊
				{
					System.out.println("戰士攻擊對方法師");
					
						if(random2.nextInt(20)<=16)//設定攻擊成功概率
							{	System.out.println("攻擊成功,玩家1法師生命值減45");
								mrole1.live=mrole1.live-srole2.attack;//血量計算
							}
						else
							{System.out.println("受擊方閃躲成功");}//顯示攻擊詳情
					
				}
				
				else if(choice2==4&crole2.live>=0&srole1.live>=0)//輸入4,騎士攻擊對方戰士,若騎士生命值<0,則無法攻擊
				{
					System.out.println("騎士攻擊對方戰士");
					
						if(random2.nextInt(20)<=17)//設定攻擊成功概率
							{	System.out.println("攻擊成功,玩家1戰士生命值減55");
								srole1.live=srole1.live-crole2.attack;//血量計算
								if(addtion1.nextInt(10)<=4)//設定加成產生
								{   
									srole1.live=srole1.live+35;//戰士恢復生命值
									System.out.println("不屈戰士,玩家1戰士生命值恢復35");
								}
								if(addtion2.nextInt(10)<=4)//設定騎士加成產生
								{   
									srole1.live=srole1.live-30;//騎士追擊
									System.out.println("勇猛騎士,玩家2追加30傷害");
								}
							}
						else
							{System.out.println("受擊方閃躲成功");}//顯示攻擊詳情
					
				}
				
				else if(choice2==5&crole2.live>=0&crole1.live>=0)//輸入5,騎士攻擊對方騎士,若騎士生命值<0,則無法攻擊
				{
					System.out.println("騎士攻擊對方騎士");
					
						if(random1.nextInt(20)<=17)//設定攻擊成功概率
							{	System.out.println("攻擊成功,玩家1騎士生命值減55");
								crole1.live=crole1.live-crole2.attack;//血量計算
								if(addtion2.nextInt(10)<=4)//設定騎士加成產生
								{   
									crole1.live=crole1.live-30;//騎士追擊
									System.out.println("勇猛騎士,玩家2追加30傷害");
								}
							}
						else
							{System.out.println("受擊方閃躲成功");}//顯示攻擊詳情
					
				}
				
				else if(choice2==6&crole2.live>=0&mrole1.live>=0)//輸入6,騎士攻擊對方法師,若騎士生命值<0,則無法攻擊
				{
					System.out.println("騎士攻擊對方法師");
					
						if(random1.nextInt(20)<=17)//設定攻擊成功概率
							{	System.out.println("攻擊成功,玩家1法師生命值減55");
								mrole1.live=mrole1.live-crole2.attack;//血量計算
								if(addtion2.nextInt(10)<=4)//設定騎士加成產生
								{   
									mrole1.live=mrole1.live-30;//騎士追擊
									System.out.println("勇猛騎士,玩家2追加30傷害");
								}
							}
						else
							{System.out.println("受擊方閃躲成功");}//顯示攻擊詳情
					
				}
			
				else if(choice2==7&mrole2.live>=0&srole1.live>=0)//輸入7,法師攻擊對方戰士,若法師生命值<0,則無法攻擊
				{
					System.out.println("法師攻擊對方戰士");
					
						if(random1.nextInt(20)<=14)//設定攻擊成功概率
							{	System.out.println("攻擊成功,玩家1戰士生命值減60");
								srole1.live=srole1.live-mrole2.attack;//血量計算
								if(addtion1.nextInt(10)<=4)//設定加成產生
								{   
									srole1.live=srole1.live+35;//戰士恢復生命值
									System.out.println("不屈戰士,玩家1戰士生命值恢復35");
								}
								if(addtion3.nextInt(10)<=4)//設定法師加成產生
								{   
									srole1.live=srole1.live-20;//法師追擊
									mrole2.live=mrole2.live+20;//法師恢復
									System.out.println("法師魔法,玩家2自身恢復20生命,追擊20傷害");
								}
							}
						else
							{System.out.println("受擊方閃躲成功");}//顯示攻擊詳情
					
				}
				
				else if(choice2==8&mrole2.live>=0&crole1.live>=0)//輸入8,法師攻擊對方騎士,若法師生命值<0,則無法攻擊
				{
					System.out.println("法師攻擊對方騎士");
					
						if(random1.nextInt(20)<=14)//設定攻擊成功概率
							{	System.out.println("攻擊成功,玩家1騎士生命值減60");
								crole1.live=crole1.live-mrole2.attack;//血量計算
								if(addtion3.nextInt(10)<=4)//設定法師加成產生
								{   
									crole1.live=crole1.live-20;//法師追擊
									mrole2.live=mrole2.live+20;//法師恢復
									System.out.println("法師魔法,玩家2自身恢復20生命,追擊20傷害");
								}
							}
						else
							{System.out.println("受擊方閃躲成功");}//顯示攻擊詳情
					
				}
				
				else if(choice2==9&mrole2.live>=0&mrole1.live>=0)//輸入9,法師攻擊對方法師,若法師生命值<0,則無法攻擊
				{
					System.out.println("法師攻擊對方法師");
					
						if(random1.nextInt(20)<=14)//設定攻擊成功概率
							{	System.out.println("攻擊成功,玩家1法師生命值減60");
								mrole1.live=mrole1.live-mrole2.attack;//血量計算
								if(addtion3.nextInt(10)<=4)//設定法師加成產生
								{   
									mrole1.live=mrole1.live-20;//法師追擊
									mrole2.live=mrole2.live+20;//法師恢復
									System.out.println("法師魔法,玩家2自身恢復20生命,追擊20傷害");
								}
							}
						else
							{System.out.println("受擊方閃躲成功");}//顯示攻擊詳情
					
				}
				
				else
				{
				System.out.println("無效攻擊");
				}
				
				
				if(srole1.live<=0&crole1.live<=0&mrole1.live<=0) 
				{i=i+100;
				System.out.println("玩家1所有角色陣亡,玩家2勝利");
				//如果血量為零跳出迴圈	
				}
			
		}//else括號
			
			
			System.out.println("玩家1:");
			srole1.base_echo();//顯示角色1
			crole1.base_echo();
			mrole1.base_echo();
			System.out.println("玩家2:");
			srole2.base_echo();//顯示角色1
			crole2.base_echo();
			mrole2.base_echo();
			
			if(i==20)//當回合結束時判斷哪個玩家勝利
			{
				if(srole1.live+crole1.live+mrole1.live>srole2.live+crole2.live+mrole2.live)//根據總血量判斷
				{System.out.println("回合結束,玩家1勝利");}
				else
				{System.out.println("回合結束,玩家2勝利");}
			}
			
  }//for迴圈
		 
		  System.out.println("戰鬥結束.。。。。。。");//戰鬥結束
		  
		
		
	}//主程式括號

	
}//主類括號

相關文章