運行時牌大小判斷會出錯...檢查不出來5555,誠心求助,謝謝!
第一個類,player
package PokerGame;
import java.util.ArrayList;
import java.util.List;
public class Player {
Integer id;
String name;
List<Poker> hisPoker=new ArrayList<Poker>();
public Player(Integer id,String name){
this.id=id;
this.name=name;
}
public Player(){
}
}
第二個類,poker
package PokerGame;
public class Poker implements Comparable<Poker> {
String flower;
String number;
Integer numCompare;
Integer floCompare;
public Poker(String flower,String number,Integer numCompare,Integer floCompare){
this.flower=flower;
this.number=number;
this.numCompare=numCompare;
this.floCompare=floCompare;
}
public Poker(){
}
@Override
public int compareTo(Poker o) {
// TODO Auto-generated method stub
if(this.numCompare==o.numCompare){
return this.numCompare.compareTo(o.numCompare);
}else
return this.floCompare.compareTo(o.floCompare);
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Poker other = (Poker) obj;
if (flower == null) {
if (other.flower != null)
return false;
} else if (!flower.equals(other.flower))
return false;
if (number == null) {
if (other.number != null)
return false;
} else if (!number.equals(other.number))
return false;
return true;
}
}
主程序
package PokerGame;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
public class Major {
//把list定義在這里,使用方法后list得知將會隨方法改變
List<Poker> pokerList=new ArrayList<Poker>();
//導入scanner對象來接受
Scanner console=new Scanner(System.in);
? ??
//創(chuàng)建玩家
Player player1=new Player();
Player player2=new Player();
//創(chuàng)建撲克牌
public void buildPoker(){
String[] flowerS={"方塊","梅花","紅桃","黑桃"};
? ? ? ? Integer[] flowerCompareS={1,2,3,4};
? ? ? ? String[] numberS={"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
? ? ? ? Integer[] numberCompareS={1,2,3,4,5,6,7,8,9,10,11,12,13};
for(int i=0;i<=12;i++){
for(int j=0;j<=3;j++){
? ? ? ? ?Poker poker=new Poker();
? ? ? ? ?poker.number=numberS[i];
? ? ? ? ?poker.numCompare=numberCompareS[i];
? ? ? ? ?poker.flower=flowerS[j];
? ? ? ? ?poker.floCompare=flowerCompareS[j];
? ? ? ? ?pokerList.add(poker);
? ? ? ? ?}
}
System.out.println("撲克牌建立完成啦~~~建立的牌為:");
for(Poker poker:pokerList){
System.out.print(poker.flower+poker.number+" ");
}
}
//洗牌
public void washPoker(){
System.out.println("洗牌時間~~~");
Collections.shuffle(pokerList);//shuffle方法用于打亂順序
System.out.println("洗牌完成~~~");
}
//輸入玩家信息
public void buildPlayer(){
? ?System.out.println("請輸入玩家一ID");
Integer id1=console.nextInt();
System.out.println("請輸入玩家一姓名");
String name1=console.next();
player1.name=name1;
player1.id=id1;
System.out.println("請輸入玩家二ID");
Integer id2=console.nextInt();
System.out.println("請輸入玩家二姓名");
String name2=console.next();
player2.name=name2;
player2.id=id2;
System.out.println("歡迎玩家:"+player1.name+"和"+player2.name);
}
//發(fā)牌
public void playerGetPoker(){
player1.hisPoker.add(pokerList.get(0));
System.out.println("玩家"+player1.name+"拿牌啦~~~"+pokerList.get(0).flower+pokerList.get(0).number);
player2.hisPoker.add(pokerList.get(1));
System.out.println("玩家"+player2.name+"拿牌啦~~~");
player1.hisPoker.add(pokerList.get(2));
System.out.println("玩家"+player1.name+"拿牌啦~~~"+pokerList.get(2).flower+pokerList.get(2).number);
player2.hisPoker.add(pokerList.get(3));
System.out.println("玩家"+player2.name+"拿牌啦~~~");
}
//判斷兩個玩家最大的手牌
//用重新定義的compare來進行sort排序,再打印出第一個就可以啦,排序為從小到大
//本游戲精華部分
public void judgeBigOne(){
Collections.sort(player1.hisPoker);
System.out.println("玩家:"+player1.name+"小的手牌為:"+player1.hisPoker.get(0).flower+
player1.hisPoker.get(0).number+",大的手牌為:"+player1.hisPoker.get(1).flower+
player1.hisPoker.get(1).number);
Collections.sort(player2.hisPoker);
System.out.println("玩家:"+player2.name+"小的手牌為:"+player2.hisPoker.get(0).flower+
player2.hisPoker.get(0).number+",大的手牌為:"+player2.hisPoker.get(1).flower+
player2.hisPoker.get(1).number);
}
//判斷勝利
public void judgeWinner(){
List<Poker> temp=new ArrayList<Poker>();
temp.add(player1.hisPoker.get(1));
temp.add(player2.hisPoker.get(1));
Collections.sort(temp);
if(temp.get(1).equals(player1.hisPoker.get(1))){
System.out.println("獲勝者為"+player1.name+"!~~恭喜");
}else{
System.out.println("獲勝者為"+player2.name+"!~~恭喜");
}
System.out.println("~~~~~游戲結束~~~~~");
}
public static void main(String[] args) {
Major mj=new Major();
mj.buildPoker();
mj.washPoker();
mj.buildPlayer();
mj.playerGetPoker();
mj.judgeBigOne();
mj.judgeWinner();
}
}
2016-04-01
你的判斷大小方法中的get(1)應該改為get(0)吧?
2016-04-01
2016-03-31
我也寫了這麼一個,請指教:
/*
?* 撲克牌類
?*/
public class poke {
?public String number;
?public int color; //1-紅桃 2-方片 3-黑桃 4-梅花
?public int value;
?
?public poke(String number, int color, int value){
??this.number = number;
??this.color = color;
??this.value = value;
?}
}
//////////////////////////////////////////
/*
?* 玩家類
?*/
public class player implements Comparable<player>{
?private String id;
?private String name;
?private Set<poke> playerPokes;
?private poke pkMaxValue;
?
?public poke getPkMaxValue() {
??return pkMaxValue;
?}
?public void setPkMaxValue(poke pkMaxValue) {
??this.pkMaxValue = pkMaxValue;
?}
?/*
? * 默認構造器
? */
?public player(){
??playerPokes = new HashSet<poke>();
?}
?
?/*
? * 操作手牌方法
? */
?public void addPoke(poke pk){
??this.playerPokes.add(pk);
?}
?public Set<poke> getPoke(){
??return playerPokes;
?}
?public String getId() {
??return id;
?}
?public void setId(String id) {
??this.id = id;
?}
?public String getName() {
??return name;
?}
?public void setName(String name) {
??this.name = name;
?}
?@Override
?public int compareTo(player o) {
??// TODO Auto-generated method stub
??return this.id.compareTo(o.id);
?}
}
//////////////////////////////////////////
/*
?* 簡單撲克牌游戲
?*/
public class pokeGame {
?public List<poke> pokeList;??//撲克牌列表
?public List<player> playerList; //玩家列表
?
?/*
? * 默認構造器
? */
?public pokeGame(){
??pokeList = new ArrayList<poke>();
??playerList = new ArrayList<player>();
?}
?/*
? * 新建一手牌
? */
?public void newCreatePokes(){
??//數字
??for (int i=2; i<=10; i++){
???for (int j=1; j<=4; j++){
????poke pkt = new poke(i+"", j, i);
????pokeList.add(pkt);?
???}
??}
??//字母
??for (int k=1; k<=4; k++){
???poke pk1 = new poke("A", k, 14);
???pokeList.add(pk1);?
???poke pk2 = new poke("J", k, 11);
???pokeList.add(pk2);?
???poke pk3 = new poke("Q", k, 12);
???pokeList.add(pk3);?
???poke pk4 = new poke("K", k, 13);
???pokeList.add(pk4);?
??}
?}
?/*
? * 洗牌
? */
?public void resetPoke(){
??Random rad = new Random();
??for (int i=0; i<pokeList.size(); i++){
???int v1 = rad.nextInt(pokeList.size());
???int v2 = rad.nextInt(pokeList.size());
???//任意交換隨機的兩個位置的元素
???Collections.swap(pokeList, v1, v2);
??}
?}
?/*
? * 打印撲克牌
? */
?public void printPoke(){
??for (int i=0; i<pokeList.size(); i++){
???if (1 == pokeList.get(i).color){
????System.out.print("紅桃"+pokeList.get(i).number+" ");
???}
???if (2 == pokeList.get(i).color){
????System.out.print("方片"+pokeList.get(i).number+" ");
???}
???if (3 == pokeList.get(i).color){
????System.out.print("黑桃"+pokeList.get(i).number+" ");
???}
???if (4 == pokeList.get(i).color){
????System.out.print("梅花"+pokeList.get(i).number+" ");
???}
??}
??System.out.println("");
?}
?/*
? * 打印玩家信息
? */
?public void printPlayerInfo(){
??for (player p: playerList){
???System.out.println(p.getId() + ":" + p.getName());
??}
?}
?/*
? * 打印玩家手中的牌
? */
?public void printPlayerPokeInfo(){
??for (int i=0; i<playerList.size(); i++){
???System.out.print("玩家" +playerList.get(i).getName() + ":");
???for (poke p:playerList.get(i).getPoke()){
????if (1 == p.color){
?????System.out.print("紅桃"+p.number+" ");
????}
????if (2 == p.color){
?????System.out.print("方片"+p.number+" ");
????}
????if (3 == p.color){
?????System.out.print("黑桃"+p.number+" ");
????}
????if (4 == p.color){
?????System.out.print("梅花"+p.number+" ");
????}
???}
???System.out.println("");
??}
?}
?
?/*
? * 返回集合中最大撲克牌
? */
?public poke returnMaxPoke(Set<poke> pks){
??poke ptemp = new poke("", 4, 0);
??for (poke pt : pks){
???if (pt.value>ptemp.value){
????ptemp= pt;
???}else if(pt.value == ptemp.value){
????if (pt.color<=ptemp.color){
?????ptemp= pt;
????}?
???}
??}
??return ptemp;
?}
?/*
? * 評判比賽結果
? */
?public void printResult(poke p1, poke p2){
??if (p1.value>p2.value){
???System.out.println("玩家"+playerList.get(0).getName()+"獲勝!");
??}else if(p1.value == p2.value){
???if (p1.color<=p2.color){
????System.out.println("玩家"+playerList.get(0).getName()+"獲勝!");
???}else{
????System.out.println("玩家"+playerList.get(1).getName()+"獲勝!");
???}?
??}else{
???System.out.println("玩家"+playerList.get(1).getName()+"獲勝!");
??}
?}
?/*
? * 返回一組玩家中的贏家
? */
?public void printResult(List<player> pList){
??if(pList.size()<=0){
???return;
??}
??player plyTemp = pList.get(0);
??for (int i=0; i<pList.size(); i++){
???if (pList.get(i).getPkMaxValue().value > plyTemp.getPkMaxValue().value){
????plyTemp= pList.get(i);
???}else if(pList.get(i).getPkMaxValue().value == plyTemp.getPkMaxValue().value){
????if (pList.get(i).getPkMaxValue().color <= plyTemp.getPkMaxValue().color){
?????plyTemp= pList.get(i);
????}?
???}?
??}
??System.out.println("玩家"+plyTemp.getName()+"獲勝!");
?}
?/*
? * 打印玩家最大手牌
? */
?public void printMaxPoke(int color, String number, String name){
??if (1 == color){
???System.out.println("玩家"+ name+"的最大手牌為:"+"紅桃"+number);
??}
??if (2 == color){
???System.out.println("玩家"+name+"的最大手牌為:"+"方片"+number);
??}
??if (3 == color){
???System.out.println("玩家"+name+"的最大手牌為:"+"黑桃"+number);
??}
??if (4 == color){
???System.out.println("玩家"+name+"的最大手牌為:"+"梅花"+number);
??}
?}
?/**
? * @param args
? */
?public static void main(String[] args) {
??// TODO Auto-generated method stub
??pokeGame pg = new pokeGame();
??pg.newCreatePokes();
??System.out.println("新建一幅撲克牌:");
??pg.printPoke();
??
??System.out.println("------------------------------");
??//洗牌次數可自己定,當然是越多洗的越開
??for (int i=0; i<5; i++){
???pg.resetPoke();
??}
??System.out.println("洗牌后:");
??pg.printPoke();
??
?//?System.out.println(pg.pokeList.size());
??System.out.println("----------創(chuàng)建玩家--------------");
??Scanner cos = new Scanner(System.in);
??
??System.out.println("請輸入需要創(chuàng)建的玩家個數(正整數):");
??int nPlayerNum = 0;
??try{
???nPlayerNum = cos.nextInt();
??}catch(InputMismatchException e){
???System.out.println("你太笨了!輸入的值有問題!游戲還沒開始就已經結束了!");
???return;
??}
??//創(chuàng)建兩個玩家
??for (int i=0; i<nPlayerNum; i++){
???String idt = "";
???boolean bt=false;
???boolean g = false;
???do{
????System.out.println("請輸入第" + (i+1)+ "個玩家ID:");
????idt = cos.next();
????try{
?????int it = Integer.valueOf(idt);
?????bt = false;
????}catch(NumberFormatException e){
?????System.out.println("提示:請輸入合規(guī)的玩家ID!");
?????bt = true;
????}
????
????g = pg.playerList.contains(idt);
???}while(!g && bt);
???player pt = new player();
???pt.setId(idt);
???System.out.println("請輸入合規(guī)的玩家姓名:");
???pt.setName(cos.next());
???pg.playerList.add(pt);
??}
??
??//顯示玩家信息
??System.out.println("-----------玩家信息---------------");
??pg.printPlayerInfo();
??
??System.out.println("------------發(fā)牌----------------");
??System.out.println("每個人發(fā)牌數:");
??int nPokeNum = 0;
??try{
???nPokeNum = cos.nextInt();
??}catch(InputMismatchException e){
???System.out.println("你太笨了!輸入的值有問題!將默認為每個用戶發(fā)2張牌!");
???nPokeNum = 2;
???return;
??}
??for (int i=0, j=0; i<nPokeNum; i++){
???for (int k=0; k<nPlayerNum; k++){
????if(j>=52){
?????System.out.println("牌發(fā)光啦!?。?);
?????break;
????}
????poke pt = pg.pokeList.get(j);
????pg.playerList.get(k).addPoke(pt);
????j++;
???}
???if(j>=52){
????break;
???}
??}
??
??//通用玩法
??for (int i=0; i<nPlayerNum; i++){
???Set<poke> p = pg.playerList.get(i).getPoke();
???poke ptMax = pg.returnMaxPoke(p);
???pg.playerList.get(i).setPkMaxValue(ptMax);
??}
??
??
??//比賽結果
?//?pg.printResult(ptMax1, ptMax2);??//兩個玩家的比較,一組玩家比較的話待定
??pg.printResult(pg.playerList);
??
??//打印玩家手中的牌
??pg.printPlayerPokeInfo();
?}
}
2016-03-31
不好意思,代碼實在是沒有看下去,不過有點建議:寫代碼有一定的通用性,方便在需求更改的時候改很少的代碼或者不改代碼!
2016-03-30
你compareTO 寫反了
public int compareTo(Poker o) {
// TODO Auto-generated method stub
if(this.numCompare==o.numCompare){
?return this.floCompare.compareTo(o.floCompare);
}else
??? return this.numCompare.compareTo(o.numCompare);
}
2016-03-05
花色大小沒有定義