1. 程式人生 > >Java控制檯小專案——我的SSR

Java控制檯小專案——我的SSR

主要是陣列的增刪改查,以及排序的運用

卡牌類

public class Cards
{
	private String talent; //卡牌品質--> R SR SSR
	private String name; //卡牌角色 
	private String element; //元素屬性-->金木水火土
	private int level;  //卡牌等級
	
	//構造方法
	public Cards() {
		
	}
	
	public Cards(String talent,String name,String element,int level) {
		this.talent = talent;
		this.name = name;
		this.element = element;
		this.setLevel(level);
	}
	
	public String getTalent() {
		return talent;
	}
	
	public void setTalent(String talent) {
		this.talent = talent;
	}
	
	public String getName() {
		return name;
	}
	
	public void setName(String name) {
		this.name = name;
	}
	
	public String getElement() {
		return element;
	}
	
	public void setElement(String element) {
		this.element = element;
	}

	public int getLevel()
	{
		return level;
	}

	public void setLevel(int level)
	{
		this.level = level;
	}
}

系統卡池–>包含概率抽卡的方法

package com.clk.myssr;

public class CardPool
{
	int count = 10;
	private Cards[] cardSSR = new Cards[5];
	private Cards[] cardSR = new Cards[4];
	private Cards[] cardR = new Cards[8];
	public CardPool() {
		cardSSR[0] = new Cards("SSR" , "金烏" , "火" , 0);
	    cardSSR[1] = new Cards("SRR" , "弈秋" , "金" , 0);
	    cardSSR[2] = new Cards("SSR" , "河伯" , "水" , 0);
	    cardSSR[3] = new Cards("SRR" , "風伯" , "木" , 0);
	    cardSSR[4] = new Cards("SRR" , "酸與" , "土" , 0);
	    
	    cardSR[0] = new Cards("SR" , "溪囊" , "火" , 0);
	    cardSR[1] = new Cards("SR" , "劍聖" , "金" , 0);
	    cardSR[2] = new Cards("SR" , "兔爺" , "木" , 0);
	    cardSR[3] = new Cards("SR" , "掃晴" , "土" , 0);
	    
	    cardR[0] = new Cards("R" , "狐靈" , "火" , 0);
	    cardR[1] = new Cards("R" , "鏡妖" , "金" , 0);
	    cardR[2] = new Cards("R" , "木靈" , "木" , 0);
	    cardR[3] = new Cards("R" , "鼓妖" , "土" , 0);
	    cardR[4] = new Cards("R" , "燈籠" , "火" , 0);
	    cardR[5] = new Cards("R" , "阿蟾" , "金" , 0);
	    cardR[6] = new Cards("R" , "樹精" , "木" , 0);
	    cardR[7] = new Cards("R" , "龜靈" , "水" , 0);
	}
	
	//概率抽卡
	public Cards getCard() {
		if(count == 0) {
			System.out.println("當前抽卡次數為: 0,選擇分解一張卡片可換取一次抽卡機會!");
			return null;
		}
		else {
			System.out.printf("當前抽卡次數:%d\n",count);
			System.out.printf("剩餘抽卡次數:%d\n",count - 1);
		}
		int i = (int)(Math.random() * 99 + 1);
		if(i <= 2) {
			int j = (int)(Math.random() * 4);
			switch(j) {
			case 0:
				System.out.println("哇!運氣爆棚!抽到了" + "【" + cardSSR[0].getTalent() + cardSSR[0].getName() + "】!");
				count--;
				return cardSSR[0];
			case 1:
				System.out.println("抽到了" + "【" + cardSSR[1].getTalent() + cardSSR[1].getName() + "】!");
				count--;
				return cardSSR[1];
			case 2:
				System.out.println("抽到了" + "【" + cardSSR[2].getTalent() + cardSSR[2].getName() + "】!");
				count--;
				return cardSSR[2];
			case 3:
				System.out.println("抽到了" + "【" + cardSSR[3].getTalent() + cardSSR[3].getName() + "】!");
				count--;
				return cardSSR[3];
			case 4:
				System.out.println("抽到了" + "【" + cardSSR[4].getTalent() + cardSSR[4].getName() + "】!");
				count--;
				return cardSSR[4];
		    }
		}
		else if(i > 2 && i <= 30 ) {
			int j = (int)(Math.random() * 3);
			switch(j) {
			case 0:
				System.out.println("抽到了" + "【" + cardSR[0].getTalent() + cardSR[0].getName() + "】!");
				count--;
				return cardSR[0];
			case 1:
				System.out.println("抽到了" + "【" + cardSR[1].getTalent() + cardSR[1].getName() + "】!");
				count--;
				return cardSR[1];
			case 2:
				System.out.println("抽到了" + "【" + cardSR[2].getTalent() + cardSR[2].getName() + "】!");
				count--;
				return cardSR[2];
			case 3:
				System.out.println("抽到了" + "【" + cardSR[3].getTalent() + cardSR[3].getName() + "】!");
				count--;
				return cardSR[3];
			}
		}
		else {
			int j = (int)(Math.random() * 8);
			switch(j) {
			case 0:
				System.out.println("抽到了" + "【" + cardR[0].getTalent() + cardR[0].getName() + "】!");
				count--;
				return cardR[0];
			case 1:
				System.out.println("抽到了" + "【" + cardR[1].getTalent() + cardR[1].getName() + "】!");
				count--;
				return cardR[1];
			case 2:
				System.out.println("抽到了" + "【" + cardR[2].getTalent() + cardR[2].getName() + "】!");
				count--;
				return cardR[2];
			case 3:
				System.out.println("抽到了" + "【" + cardR[3].getTalent() + cardR[3].getName() + "】!");
				count--;
				return cardR[3];
			case 4:
				System.out.println("抽到了" + "【" + cardR[0].getTalent() + cardR[0].getName() + "】!");
				count--;
				return cardR[0];
			case 5:
				System.out.println("抽到了" + "【" + cardR[1].getTalent() + cardR[1].getName() + "】!");
				count--;
				return cardR[1];
			case 6:
				System.out.println("抽到了" + "【" + cardR[2].getTalent() + cardR[2].getName() + "】!");
				count--;
				return cardR[2];
			case 7:
				System.out.println("抽到了" + "【" + cardR[3].getTalent() + cardR[3].getName() + "】!");
				count--;
				return cardR[3];
			case 8:
				System.out.println("抽到了" + "【" + cardR[3].getTalent() + cardR[3].getName() + "】!");
				count--;
				return cardR[3];
		    }
		}
		return null;	
	}
}

卡牌功能類

public class CardsManager
{
	private Cards[] my_cards = new Cards[100];
	private int count = 0;
	
	public Cards[] getMyCards() {
		return my_cards;
	}
	//抽取卡牌
	public void add(Cards card) {
		if(card != null) {
			if(get(card.getName()) != null) {
				get(card.getName()).setLevel(get(card.getName()).getLevel() + 10);
				System.out.println("你已經擁有該卡牌");
				System.out.println("卡牌【" + card.getName() + "】等級 + 10");
			}
			else {
				my_cards[count] = card;
				count++;
			}
		}
	}
	
	//分解卡牌
	public void remove(String name) {
		if(count == 0) {
			System.out.println("你沒有卡牌可分解");
		    return;
	    }
		for(int i = 0; i < count;i++) {
			if(my_cards[i].getName().equals(name)) {
				System.out.println("分解了卡牌【" + my_cards[i].getName() + "】,抽卡次數 + 1");
				count--;
				for(int j = i;j < count;j++) {
					my_cards[j] = my_cards[j+1];
				}
				break;
			}
		}
	}
	
	//檢視卡牌
	public void find(Cards[] card) {
		Cards[] sort_cards = new Cards[count];
		System.out.println("你的卡牌數量:" + count);
		System.out.println("品質   妖靈   屬性  等級");
		if(count >= 2) {
			//排序
			sort_cards = sortCards(card);
		}	
		for(int i = 0; i < count;i++) {
			System.out.printf("%3s%6s%5s%6d\n",sort_cards[i].getTalent(),sort_cards[i].getName(),sort_cards[i].getElement(),sort_cards[i].getLevel());		
		}
	}
	
	//升級卡牌
	public void update(String update_name,String unused_name) {
		Cards update_card = get(update_name);
		Cards unused_card = get(update_name);
		if(update_card != null && unused_card != null) {
			update_card.setLevel(update_card.getLevel() + unused_card.getLevel());
			for(int i = 0; i < count;i++) {
				if(my_cards[i].getName().equals(unused_name)) {
					for(int j = i;j < count - 1;j++) {
						my_cards[j] = my_cards[j+1];
					}
					break;
				}
			}
			System.out.println("卡牌【" + update_name + "】等級 + " + unused_card.getLevel());
		}
		else {
			System.out.println("你沒有卡牌可升級");
		}
	}
	
	//查詢
	public Cards get(String name)	{
		for(int i = 0; i < count;i++) {
			if(my_cards[i].getName().equals(name)) {
				return my_cards[i];
			}
		}
		return null;
	}
	
	//按卡牌品質排序,相同品質卡牌按等級排序
	public Cards[] sortCards(Cards[] card) {
		for(int i = 0;i < count - 1;i++) {
			for(int j = 0;j < count - i - 1;j++){
				if(card[j].getTalent().length() < card[j + 1].getTalent().length()) {
					Cards temp = new Cards();
					temp.setTalent(card[j].getTalent());
					temp.setName(card[j].getName());
					temp.setElement(card[j].getElement());
					temp.setLevel(card[j].getLevel());
					
					card[j].setTalent(card[j+1].getTalent());
					card[j].setName(card[j+1].getName());
					card[j].setElement(card[j+1].getElement());
					card[j].setLevel(card[j+1].getLevel());
					
					card[j+1].setTalent(temp.getTalent());
					card[j+1].setName(temp.getName());
					card[j+1].setElement(temp.getElement());
					card[j+1].setLevel(temp.getLevel());
				}
			}
		}
		for(int i = 0;i < count - 1;i++) {
			for(int j = 0;j < count - i - 1;j++){
				if(card[j].getTalent().length() == card[j + 1].getTalent().length() && card[j].getLevel() < card[j + 1].getLevel()) {
					Cards temp1 = new Cards();
					temp1.setTalent(card[j].getTalent());
					temp1.setName(card[j].getName());
					temp1.setElement(card[j].getElement());
					temp1.setLevel(card[j].getLevel());
					
					card[j].setTalent(card[j+1].getTalent());
					card[j].setName(card[j+1].getName());
					card[j].setElement(card[j+1].getElement());
					card[j].setLevel(card[j+1].getLevel());
					
					card[j+1].setTalent(temp1.getTalent());
					card[j+1].setName(temp1.getName());
					card[j+1].setElement(temp1.getElement());
					card[j+1].setLevel(temp1.getLevel());
				}
			}
		}
		return card;
	}
}

檢視類

public class View
{
	CardsManager cm = new CardsManager();
	CardPool cp = new CardPool();
	public void mainView() {
		System.out.println("----------------------------------------");
		System.out.println("|              我的SSR                 |");
		System.out.print("|    你沒有玩過的船新版本,只需體驗兩分|\n"
				+ "|鍾,你就會愛上這個遊戲!                |\n");
		System.out.println("----------------------------------------");
		System.out.print("\n             [Y]開始遊戲\n");
		System.out.println("             [N]殘忍退出");
		System.out.println("輸入Y/N:");
	}
	public void gameView(String choose) {
		Scanner sc = new Scanner(System.in);
		switch(choose) {
		case "Y":
			System.out.println("\n歡迎來到這個“玄不救非 氪不改命”的世界!");
			while(true) {
			    System.out.println("----------------------------------------");	
			    System.out.println("1、抽卡");	
			    System.out.println("2、分解卡牌");	
			    System.out.println("3、檢視卡牌");	
			    System.out.println("4、升級卡牌");	
			    System.out.println("5、要上課忍痛離開");	
			    System.out.println("----------------------------------------");	
			    System.out.println("輸入選擇(1-4):");
			    int cs = sc.nextInt();
			    switch(cs) {
			    case 1:
				    System.out.println("溫馨提示:抽卡前先洗臉");
				    cm.add(cp.getCard());
				    break;
			    case 2:
				    System.out.println("溫馨提示:分解卡牌可獲得抽卡次數");
			    	System.out.println("要刪除的卡牌:[妖靈名字]");
			    	String remove_name = sc.next();
			    	cm.remove(remove_name);
			    	cp.count++;
			    	break;
			    case 3:
				    cm.find(cm.getMyCards());
				    break;
			    case 4:
			    	System.out.println("溫馨提示:通過吸收卡牌升級");
			    	System.out.println("要升級的卡牌:[妖靈名字]");
			    	String update_name = sc.next();
			    	System.out.println("要吸收的卡牌:[妖靈名字]");
			      	String unused_name = sc.next();
			    	cm.update(update_name, unused_name);
			    	break;
			    case 5:
			    	System.exit(0);
			    }
			}
		case "N":
			System.exit(0);
		}
	}
}

主類

public class MySSR
{
	public static void main(String[] args)
	{
		Scanner sc = new Scanner(System.in);
		View v = new View();
		v.mainView();
		String choose = sc.next();
		v.gameView(choose);
		sc.close();
	}
}

執行測試

----------------------------------------
|              我的SSR                 |
|    你沒有玩過的船新版本,只需體驗兩分|
|鍾,你就會愛上這個遊戲!                |
----------------------------------------

             [Y]開始遊戲
             [N]殘忍退出
輸入Y/N:
Y

歡迎來到這個“玄不救非 氪不改命”的世界!
----------------------------------------
1、抽卡
2、分解卡牌
3、檢視卡牌
4、升級卡牌
5、要上課忍痛離開
----------------------------------------
輸入選擇(1-4):
1
溫馨提示:抽卡前先洗臉
當前抽卡次數:10
剩餘抽卡次數:9
抽到了【R木靈】!
----------------------------------------
1、抽卡
2、分解卡牌
3、檢視卡牌
4、升級卡牌
5、要上課忍痛離開
----------------------------------------
輸入選擇(1-4):
1
溫馨提示:抽卡前先洗臉
當前抽卡次數:9
剩餘抽卡次數:8
抽到了【SR兔爺】!
----------------------------------------
1、抽卡
2、分解卡牌
3、檢視卡牌
4、升級卡牌
5、要上課忍痛離開
----------------------------------------
輸入選擇(1-4):
1
溫馨提示:抽卡前先洗臉
當前抽卡次數:8
剩餘抽卡次數:7
抽到了【SR溪囊】!
----------------------------------------
1、抽卡
2、分解卡牌
3、檢視卡牌
4、升級卡牌
5、要上課忍痛離開
----------------------------------------
輸入選擇(1-4):
1
溫馨提示:抽卡前先洗臉
當前抽卡次數:7
剩餘抽卡次數:6
抽到了【SR溪囊】!
你已經擁有該卡牌
卡牌【溪囊】等級 + 10
----------------------------------------
1、抽卡
2、分解卡牌
3、檢視卡牌
4、升級卡牌
5、要上課忍痛離開
----------------------------------------
輸入選擇(1-4):
1
溫馨提示:抽卡前先洗臉
當前抽卡次數:6
剩餘抽卡次數:5
抽到了【R鼓妖】!
----------------------------------------
1、抽卡
2、分解卡牌
3、檢視卡牌
4、升級卡牌
5、要上課忍痛離開
----------------------------------------
輸入選擇(1-4):
1
溫馨提示:抽卡前先洗臉
當前抽卡次數:5
剩餘抽卡次數:4
抽到了【R木靈】!
你已經擁有該卡牌
卡牌【木靈】等級 + 10
----------------------------------------
1、抽卡
2、分解卡牌
3、檢視卡牌
4、升級卡牌
5、要上課忍痛離開
----------------------------------------
輸入選擇(1-4):
1
溫馨提示:抽卡前先洗臉
當前抽卡次數:4
剩餘抽卡次數:3
抽到了【R鏡妖】!
----------------------------------------
1、抽卡
2、分解卡牌
3、檢視卡牌
4、升級卡牌
5、要上課忍痛離開
----------------------------------------
輸入選擇(1-4):
1
溫馨提示:抽卡前先洗臉
當前抽卡次數:3
剩餘抽卡次數:2
抽到了【R鼓妖】!
你已經擁有該卡牌
卡牌【鼓妖】等級 + 10
----------------------------------------
1、抽卡
2、分解卡牌
3、檢視卡牌
4、升級卡牌
5、要上課忍痛離開
----------------------------------------
輸入選擇(1-4):
1
溫馨提示:抽卡前先洗臉
當前抽卡次數:2
剩餘抽卡次數:1
抽到了【SR劍聖】!
----------------------------------------
1、抽卡
2、分解卡牌
3、檢視卡牌
4、升級卡牌
5、要上課忍痛離開
----------------------------------------
輸入選擇(1-4):
1
溫馨提示:抽卡前先洗臉
當前抽卡次數:1
剩餘抽卡次數:0
抽到了【R鼓妖】!
你已經擁有該卡牌
卡牌【鼓妖】等級 + 10
----------------------------------------
1、抽卡
2、分解卡牌
3、檢視卡牌
4、升級卡牌
5、要上課忍痛離開
----------------------------------------
輸入選擇(1-4):
3
你的卡牌數量:6
品質   妖靈   屬性  等級
 SR    溪囊    火    10
 SR    兔爺    木     0
 SR    劍聖    金     0
  R    鼓妖    土    20
  R    木靈    木    10
  R    鏡妖    金     0
----------------------------------------
1、抽卡
2、分解卡牌
3、檢視卡牌
4、升級卡牌
5、要上課忍痛離開
----------------------------------------
輸入選擇(1-4):

還是一如既往的臉黑,目前沒有副本功能,學一點寫一點。