這是我寫好的代碼,希望大家共同進步,哪里有不足的希望大家指點
以下是我寫的代碼,希望和大家共同進步(可以創建多名玩家和給每位玩家發多張牌)
*******************Player.java****************
package bean;
import java.util.ArrayList;
import java.util.List;
public class Player {
private int playerId;
private String playerName;
private List<Poker>playerPokers;
public Player(int playerId,String playerName){
this.playerId=playerId;
this.playerName=playerName;
this.playerPokers=new ArrayList<Poker>();
}
public int getPlayerId() {
return playerId;
}
public void setPlayerId(int playerId) {
this.playerId = playerId;
}
public String getPlayerName() {
return playerName;
}
public void setPlayerName(String playerName) {
this.playerName = playerName;
}
public List<Poker> getPlayerPokers() {
return playerPokers;
}
public void setPlayerPokers(List<Poker> playerPokers) {
this.playerPokers = playerPokers;
}
}
*******************Poker.java****************
package bean;
public class Poker {
private String pokerId;
private String pokerClass;
public Poker(String pokerid,String pokerClass){
this.pokerId=pokerid;
this.pokerClass=pokerClass;
}
public String getPokerId() {
return pokerId;
}
public void setPokerId(String pokerId) {
this.pokerId = pokerId;
}
public String getPokerClass() {
return pokerClass;
}
public void setPokerClass(String pokerClass) {
this.pokerClass = pokerClass;
}
}
*******************PokerGame.java****************
package function;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.InputMismatchException;
import java.util.List;
import java.util.Random;
import java.util.Scanner;
import java.util.Set;
import bean.Player;
import bean.Poker;
public class PokerGame {
private List<Poker> pokersList;
private List<Player> playersList;
private List<Poker> eachOtherCompPokers;
private Set<Poker> pokersSet;
// private Scanner input;
public PokerGame() {
this.pokersList = new ArrayList<Poker>();
this.playersList = new ArrayList<Player>();
this.eachOtherCompPokers=new ArrayList<Poker>();
this.pokersSet = new HashSet<Poker>();
// this.input=new Scanner(System.in);
}
/*
* 1.創建撲克牌
*/
public void createPoker() {
List<String> pokerClassStrings = new ArrayList<String>();
String[] pokerClass = { "黑桃", "紅心", "梅花", "方塊" };
pokerClassStrings.addAll(Arrays.asList(pokerClass));
List<String> pokerIdStrings = new ArrayList<String>();
String[] pokerId = { "2", "3", "4", "5", "6", "7", "8", "9", "10", "J",
"Q", "K", "A" };
pokerIdStrings.addAll(Arrays.asList(pokerId));
// pokersList=new ArrayList<Poker>();
for (int i = 3; i >= 0; i--) {
String Class = pokerClassStrings.get(i);
for (int j = 0; j < 13; j++) {
String Id = pokerIdStrings.get(j);
Poker poker = new Poker(Id, Class);
pokersList.add(poker);
}
}
}
/*
* 2.展示撲克牌
*/
public String displayPoker() {
String[] string = new String[52];
for (int i = 0; i < string.length; i++) {
String pokerAll = new String(pokersList.get(i).getPokerClass()
+ pokersList.get(i).getPokerId());
string[i] = pokerAll;
}
return Arrays.toString(string);
}
/*
* 3.創建兩名玩家
*/
public void createPlayer() {
for (int i = 0; i < 3; i++) {? //這里可以設置創建的人數
System.out.println("請輸入第" + (i + 1) + "位玩家的ID和姓名:");
while (true) {
try {
Scanner input = new Scanner(System.in);
System.out.println("輸入ID:");
int ID = input.nextInt();
System.out.println("輸入姓名:");
String name = input.next();
Player player = new Player(ID, name);
playersList.add(player);
break;
} catch (InputMismatchException e) {
// TODO Auto-generated catch block
System.out.println("請輸入整數類型的ID!");
}
}
}
for (Player player : playersList) {
System.out.println("-----歡迎玩家:" + player.getPlayerName());
}
}
/*
* 4.洗牌
*/
// public String massPoker(){
// //pokersSet=new HashSet<Poker>();
// //System.out.println(pokersList.size());
// for (Poker pokerBefore : pokersList) {
// pokersSet.add(pokerBefore);
// }
// for (Poker test : pokersSet) {
// String pokerAll=new String(test.getPokerClass()+test.getPokerId());
// System.out.println("撲克為:"+pokerAll);
// }
// int i=0;
// String[]string=new String[52];
// //System.out.println(pokersSet.size());
// for (Poker pokerAfter : pokersSet) {
// String pokerAll=new
// String(pokerAfter.getPokerClass()+pokerAfter.getPokerId());
// string[i]=pokerAll;
// i++;
// }
// return Arrays.toString(string);
//
// }
public String massPoker() {
Collections.shuffle(pokersList);//Collections的Shuffle方法可以打亂List列表中的順序
String[] string = new String[52];
for (int i = 0; i < string.length; i++) {
String pokerAll = new String(pokersList.get(i).getPokerClass()
+ pokersList.get(i).getPokerId());
string[i] = pokerAll;
}
return Arrays.toString(string);
}
/*
* 給玩家發牌
*/
// public void deliverPoker() {
// Random random = new Random();
// for (int i = 0; i < 2; i++) {
// int a = random.nextInt(pokersList.size());
// Poker poker = pokersList.get(a);
// playersList.get(0).getPlayerPokers().add(poker);
// pokersList.remove(a);
// System.out.println("----玩家:" + playersList.get(0).getPlayerName()
// + "-拿牌");
// int b = random.nextInt(pokersList.size());
// Poker pokertwo = pokersList.get(b);
// playersList.get(1).getPlayerPokers().add(pokertwo);
// pokersList.remove(b);
// System.out.println("----玩家:" + playersList.get(1).getPlayerName()
// + "-拿牌");
// }
// }
public void deliverPoker() {
Random random = new Random();
for (int i = 0; i < 3; i++) {//這里可以設置給每個人發牌的數量
for (int j = 0; j < playersList.size(); j++) {
int randomNumber=random.nextInt(pokersList.size());
Poker poker=pokersList.get(randomNumber);
playersList.get(j).getPlayerPokers().add(poker);
pokersList.remove(randomNumber);
System.out.println("----玩家:" + playersList.get(j).getPlayerName()
+ "-拿牌");
}
}
// for (Player player : playersList) {
// System.out.println("玩家"+player.getPlayerName()+"的牌有:");
// for (Poker poker :player.getPlayerPokers() ) {
// System.out.println("卡牌:"+poker.getPokerClass()+poker.getPokerId());
// }
// }
}
/*
?* 展示玩家手牌
?*/
// public void displayPlarersPoker() {
// System.out.println("玩家各自的手牌為:");
// for (int i = 0; i < playersList.size(); i++) {
// String[]strings=new String[playersList.get(0).getPlayerPokers().size()];
// for(int j=0;j<playersList.get(0).getPlayerPokers().size();j++){
// String userPoker = playersList.get(i).getPlayerPokers().get(j)
// .getPokerClass()
// + playersList.get(i).getPlayerPokers().get(j).getPokerId();
// strings[j]=userPoker;
// }
// System.out.println(playersList.get(i).getPlayerName() + ":"
// + Arrays.toString(strings));
// }
// }
public void displayPlarersPoker() {
System.out.println("玩家各自的手牌為:");
for (Player player : playersList) {
String[]strings=new String[player.getPlayerPokers().size()];
for (Poker poker :player.getPlayerPokers() ) {
String userPoker=poker.getPokerClass()+poker.getPokerId();
int index =player.getPlayerPokers().indexOf(poker);
strings[index]=userPoker;
}
System.out.println(player.getPlayerName() + ":"
+ Arrays.toString(strings));
}
}
/*
* 判斷自己手牌中的最大撲克是那一張
*/
public void maxSelfPoker(){
int length=playersList.get(0).getPlayerPokers().size();
for (Player player : playersList) {
// System.out.println("玩家:"+player.getPlayerName()+"最大的手牌為:"+player.getPlayerPokers().get(length-1).getPokerClass()+
// player.getPlayerPokers().get(0).getPokerId());
Collections.sort(player.getPlayerPokers(), new PokerComparator());
System.out.println("玩家:"+player.getPlayerName()+"最大的手牌為:"+player.getPlayerPokers().get(length-1).getPokerClass()+
player.getPlayerPokers().get(length-1).getPokerId());
}
}
/*
* 兩者最大的排相互比較
*/
public void eachOtherComparePoker() {
int length = playersList.get(0).getPlayerPokers().size();// 的出每個玩家的撲克列表屬性中有多少張牌
//List<Poker> eachOtherCompPokers = new ArrayList<Poker>();
for (Player player : playersList) {
eachOtherCompPokers.add(player.getPlayerPokers().get(length - 1));
}
// for (Poker pokertest : eachOtherCompPokers) {
// System.out.println("該列表元素有:" + pokertest.getPokerClass()
// + pokertest.getPokerId());
// }
Collections.sort(eachOtherCompPokers, new PokerComparator());
// for (Poker pokertest : eachOtherCompPokers) {
// System.out.println("該列表元素有:" + pokertest.getPokerClass()
// + pokertest.getPokerId());
// }
int playerNumber=playersList.size();
System.out.println("結果:經過比較最大的牌為:"+eachOtherCompPokers.get(playerNumber-1).getPokerClass()
+eachOtherCompPokers.get(playerNumber-1).getPokerId());
}
/*
* 通過最大的牌是誰的來判斷贏家
*/
public void judgeWinner(){
int playerNumber=playersList.size();
for (Player player : playersList) {
if(player.getPlayerPokers().contains(eachOtherCompPokers.get(playerNumber-1))){
System.out.println("-------------------玩家:"+player.getPlayerName()+"獲勝!-------------");
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
PokerGame pGame = new PokerGame();
System.out.println("------------------創建撲克牌-------------------");
pGame.createPoker();
System.out.println("----------------創建撲克牌成功-----------------");
System.out.println("為:" + pGame.displayPoker());
System.out.println("-------------------開始洗牌...-------------------");
System.out.println("-------------------洗牌結束!--------------------");
System.out.println("為:" + pGame.massPoker());
System.out.println("-------------------創建玩家...-------------------");
pGame.createPlayer();
System.out.println("-------------------開始發牌...-------------------");
pGame.deliverPoker();
System.out.println("-------------------發牌結束!--------------------");
pGame.displayPlarersPoker();
System.out.println("-------------------開始游戲!--------------------");
pGame.maxSelfPoker();
pGame.eachOtherComparePoker();
pGame.judgeWinner();
}
}
*******************PokerComparator.java****************
package function;
import java.util.Comparator;
import bean.Poker;
public class PokerComparator implements Comparator<Poker> {
@Override
public int compare(Poker o1, Poker o2) {
// TODO Auto-generated method stub
String pokerClass="方塊,梅花,紅心,黑桃";
String PokerID="3,4,5,6,7,8,9,10,J,Q,K,A,2";
int userOneClassIndex=pokerClass.indexOf(o1.getPokerClass());
int userOneIDIndex=PokerID.indexOf(o1.getPokerId());
int userTwoClassIndex=pokerClass.indexOf(o2.getPokerClass());
int userTwoIDIndex=PokerID.indexOf(o2.getPokerId());
if(userOneIDIndex==userTwoIDIndex){
if (userOneClassIndex>userTwoClassIndex)?
return 1;
else
return -1;
}else if (userOneIDIndex>userTwoIDIndex)?
return 1;
else?
return -1;
}
}
都是學過的知識,反復的使用 ,一起加油。
2018-08-03
public void createPlayer() {
for (int i = 0; i < 3; i++) { // 這里可以設置創建的人數
System.out.println("請輸入第" + (i + 1) + "位玩家的ID和姓名:");
while (true) {
try {
boolean flag = true;
while (flag) {
System.out.println("請輸入第" + (i + 1) + "位玩家的ID:");
input = new Scanner(System.in);
ID = input.nextInt();
if (playersList.size() == 0) {
flag = false;
break;
}
for (int i1 = 0; i1 < playersList.size(); i1++) {
if (ID == playersList.get(i1).getPlayerId()) {
System.out.println("ID重復,請重新輸入");
flag = true;
break;
} else
flag = false;
}
}
System.out.println("輸入姓名:");
String name = input.next();
playersList.add(new Player(ID, name));
break;
} catch (InputMismatchException e) {
System.out.println("請輸入整數類型的ID!");
}
}
}
for (Player player1 : playersList) {
System.out.println("-----歡迎玩家:" + player1.getPlayerName());
}
}
2018-08-12
你注釋里寫想創建兩名玩家,但是你i<3,這就是三名玩家了。
2018-08-02
玩家ID相同情況,沒有處理