這是我寫的簡易撲克牌游戲,希望能幫到大家,歡迎建議,共同進步
******player.java**************************************************
package com.PokeGame;
import java.util.ArrayList;
import java.util.List;
public class Player {
????public int id;
????public String name;
????public List<Poke> handpoke;//用來存放玩家手牌
????public Player(int id,String name) {
????????this.id = id;
????????this.name = name;
????????this.handpoke = new ArrayList<Poke>();
????}
}
******poke.java******************************************************
package com.PokeGame;
public class Poke {
????public String pointsort;//用于游戲點數(shù)排序比較
????public String flowercolorsort;//用于游戲花色排序
????public String flowercolor;
????public String point;
????public Poke(String flowercolor, String point, String pointsort, String flowercolorsort){
????this.flowercolor = flowercolor;
????this.point = point;
????this.pointsort = pointsort;
????this.flowercolorsort = flowercolorsort;
????}
????@Override
????public String toString() {
????return flowercolor + point ;
????}
}
******Shuffle.java******************************************************
package com.PokeGame;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Shuffle {
????//用于存放撲克牌的List
????public List<Poke> pokes;
????public? Shuffle(){
????pokes = new ArrayList<>();
????}
????/**
????* 創(chuàng)建撲克牌并添加到撲克牌List
????*/
????public void pokeCreate(){
????????String[] flowercolor = {"方塊","梅花","紅桃","黑桃"};
????????String[] point = {"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
????????for(int i = 0; i<flowercolor.length; i++){
????????????for(int j =0; j<point.length; j++){
????????????????Poke poke = new Poke(flowercolor[i],point[j],j+"",i+"");
????????????????this.pokes.add(poke);
????????????}
????????}
????????System.out.println("------------------創(chuàng)建撲克牌成功----------------");
????????System.out.println(this.pokes.toString());
????}
????/**
????* 使用Collections.shuffle()隨機打亂List順序;
????*/
????public void pokeShuffle(){
????????System.out.println("------------------開始洗牌----------------");
????????Collections.shuffle(pokes);
????????System.out.println("------------------洗牌結束----------------");
????}
}
******Game.java******************************************************
package com.PokeGame;
import java.util.ArrayList;
import java.util.Collections;
import java.util.InputMismatchException;
import java.util.List;
import java.util.Random;
import java.util.Scanner;
public class Game {
????//定義一個玩家List
????public List<Player> players;
????public Game() {
????????//初始化玩家List
????????players = new ArrayList<Player>();
????}
????/**
????* 創(chuàng)建兩位玩家進行游戲
????* 通過輸入玩家ID和姓名進行創(chuàng)建
????*/
????public void createplayer(){
????????System.out.println("------------------創(chuàng)建玩家..---------------");
????????for(int i = 1; i < 3; i++){
????????????System.out.println("請輸入第"+i+"位玩家的ID和姓名:");
????????????try {
????????????????System.out.println("請輸入ID:");
????????????????Scanner console = new Scanner(System.in);
????????????????int playerid = console.nextInt();
????????????????System.out.println("請輸入姓名:");
????????????????String name = console.next();
????????????????Player player = new Player(playerid,name);
????????????????players.add(player);
?????????????} catch (InputMismatchException e) {
????????????????System.out.println("請輸入整數(shù)類型的ID!");
????????????????i--;
????????????????continue;
????????????}
????????}
????}
????/**
????* 通過For Each遍歷玩家List
????*/
????public void forEachPlayers(){
????????for (Player player : players) {
????????????System.out.println("------歡迎玩家:" + player.name);
????????}
????}
????/**
????*傳入創(chuàng)建撲克牌并洗牌的Shuffle類的實例s,
????*才能使用創(chuàng)建存放撲克牌名為pokes的List,
????*并隨機生成52以內的整數(shù)(一共52張牌)作為
????*添加進玩家手牌handpoke中的poke在List中的位置
????*/
????public void faPai(Shuffle s){
????????System.out.println("------------------開始發(fā)牌----------------");
????????Random random = new Random();
????????for(int i = 0; i < 4; i++){
????????????if(i==0||i==2){
????????????????int a = random.nextInt(52);
????????????????players.get(0).handpoke.add(s.pokes.get(a));
????????????????//往玩家手牌(handpoke)List中添加完一張牌,將這張牌從(Pokes)List中刪除
????????????????s.pokes.remove(a);
????????????????System.out.println("玩家:" + players.get(0).name + "--拿牌");
????????????}else{
????????????????int b = random.nextInt(51);
????????????????players.get(1).handpoke.add(s.pokes.get(b));
????????????????System.out.println("玩家:" + players.get(1).name + "--拿牌");
????????????}
????????}
????????System.out.println("------------------發(fā)牌結束----------------");
????}
????/**
????* 通過調用Collectoins的sort()方法對玩家手牌List(handpoke)進行排序,
????* 因為每個玩家只有兩張手牌,排序之后輸入位置為1的元素就是最大手牌
????* 同過實現(xiàn)Comparator接口,用手牌中的pointsort和flowercolorsort,
????* 分別是點數(shù)排序和花色排序
????*/
????public void handPokeSort(){
????????Collections.sort(players.get(0).handpoke, new PokeComparator());
????????System.out.println("玩家:" + players.get(0).name + "最大的手牌為:"+
????????????????players.get(0).handpoke.get(1).toString());
????????Collections.sort(players.get(1).handpoke, new PokeComparator());
????????System.out.println("玩家:" + players.get(1).name + "最大的手牌為:"+
????????????????players.get(1).handpoke.get(1).toString());
????????//定義一個新的List用于存放兩名玩家最大的手牌
????????List<Poke> compare = new ArrayList<Poke>();
????????compare.add(players.get(0).handpoke.get(1));
????????compare.add(players.get(1).handpoke.get(1));
????????Collections.sort(compare, new PokeComparator());
????????//通過輸出的w值來判斷哪名玩家獲勝
????????int w;
????????if(compare.get(1).equals(players.get(0).handpoke.get(1))){
????????????w = 0;
????????}else{
????????????w = 1;
????????}
????????System.out.println("------------------玩家"+players.get(w).name+"獲勝!----------------");
????????System.out.println("玩家各自的手牌為:");
????????System.out.println(players.get(0).name+":"+players.get(0).handpoke.toString());
????????System.out.println(players.get(1).name+":"+players.get(1).handpoke.toString());
????}
????public static void main(String[] args) {
????????Shuffle s = new Shuffle();
????????s.pokeCreate();
????????s.pokeShuffle();
????????Game g = new Game();
????????g.createplayer();
????????g.forEachPlayers();
????????g.faPai(s);
????????g.handPokeSort();
????}
}
******PokeComparator.java******************************************************
package com.PokeGame;
import java.util.Comparator;
public class PokeComparator implements Comparator<Poke> {
????@Override
????public int compare(Poke o1, Poke o2) {
????????if(o1.pointsort.equals(o2.pointsort)){
????????????return o1.flowercolorsort.compareTo(o2.flowercolorsort);
????????}else{
????????????return o1.pointsort.compareTo(o2.pointsort);
????????}
????}
}
2018-08-13
直接用compareTo方法好像比較J,Q,K,A大小好像有問題啊
2018-08-02
我突然發(fā)現(xiàn)自己沒有考慮到創(chuàng)建玩家ID相同的情況,大家做的時候記得考慮
2018-07-31
?players.get(0).handpoke.add(s.pokes.get(a));? ? 這是什么意思????
2018-07-30
你好,我不太明白你的創(chuàng)建撲克牌的代碼里i+"",j+""這部分,這樣就是String類型了嗎?而且我試了一下你的創(chuàng)建方法不知道為什么打印出來的撲克牌是地址
2018-07-28
這是最終的運行結果