簡易撲克牌游戲,寫的略長了點,花了一下午,給大家看一下
游戲開始:O(∩_∩)O哈哈~
package?imooc.pocker;
import?java.util.ArrayList;
import?java.util.Collections;
import?java.util.List;
import?java.util.Scanner;
/*
?*?可改變玩家數量和玩家手牌數
?*?根據手牌中最大牌進行簡單大小比較
?*/
public?class?Test?{
public?static?void?main(String[]?args)?{
System.out.println("--------產生一副撲克牌--------");
List<Pocker>?pockers?=?Pocker.createPocker();
System.out.println("--------撲克牌創建成功--------");
System.out.println(pockers.toString());
System.out.println("--------開始洗牌--------");
Collections.shuffle(pockers);
System.out.println("--------洗牌結束--------");
System.out.println(pockers.toString());
System.out.println("--------創建玩家--------");
Scanner?scanner?=?new?Scanner(System.in);
List<Player>?players?=?new?ArrayList<Player>();
int?handCardNum?=?3;
int?playerNum?=?2;
while?(true)?{
try?{
System.out.println("請輸入玩家數量:");
playerNum?=?scanner.nextInt();
int?id;
String?name;
for?(int?i?=?0;?i?<?playerNum;?i++)?{
System.out.println("創建第"?+?(i?+?1)?+?"位玩家的ID和姓名:");
System.out.println("輸入玩家id(int):?");
id?=?scanner.nextInt();
System.out.println("輸入玩家姓名:");
name?=?scanner.next();
players.add(new?Player(id,?name));
}
for?(int?i?=?0;?i?<?playerNum;?i++)?{
System.out.println("歡迎玩家:"?+?players.get(i).getName());
}
System.out.println("--------開始發牌--------");
int?cardNums?=?handCardNum?*?playerNum;
Pocker?pocker;
for?(int?i?=?0;?i?<?cardNums;?i++)?{
pocker?=?pockers.get(i);
players.get(i?%?playerNum).getHandPockers().add(pocker);
}
System.out.println("--------發牌結束--------");
System.out.println("--------開始游戲--------");
Pocker?maxPocker?=?new?Pocker("方塊",?"2");
int?winPlayer?=?0;
for?(int?i?=?0;?i?<?playerNum;?i++)?{
Collections.sort(players.get(i).getHandPockers());?//?對手牌進行排序
Collections.reverse(players.get(i).getHandPockers());?//?排序后的手牌進行翻轉,第一位為最大值
System.out
.println("玩家"
+?players.get(i).getName()
+?"最大手牌為:"
+?players.get(i).getHandPockers().get(0)
.toString());
if?(maxPocker.compareTo(players.get(i).getHandPockers()
.get(0))?<?0)?{
maxPocker?=?players.get(i).getHandPockers().get(0);
winPlayer?=?i;
}
}
System.out.println("玩家"?+?players.get(winPlayer).getName()
+?"獲勝");
System.out.println("玩家各自的手牌為:");
for?(int?i?=?0;?i?<?playerNum;?i++)?{
System.out.println(players.get(i).getName()?+?":?"
+?players.get(i).getHandPockers().toString());
}
break;
}?catch?(Exception?e)?{
System.out.println("輸入值錯誤,請重新輸入");
scanner?=?new?Scanner(System.in);
}
}
}
}玩家類:Player
package?imooc.pocker;
import?java.util.ArrayList;
import?java.util.List;
public?class?Player?{
/*
?*?玩家
?*?屬性:ID,姓名,手牌
?*?手牌為撲克牌的集合
?*/
private?int?id;
private?String?name;
private?List<Pocker>?handPockers;
public?Player(int?id,?String?name)?{
this.id?=?id;
this.name?=?name;
this.handPockers?=?new?ArrayList<Pocker>();
}
public?int?getId()?{
return?id;
}
public?String?getName()?{
return?name;
}
public?List<Pocker>?getHandPockers()?{
return?handPockers;
}
}撲克牌類:Pocker
package?imooc.pocker;
import?java.util.ArrayList;
import?java.util.Arrays;
import?java.util.Collections;
import?java.util.List;
/**
?*?
?*?@author?sun
?*??撲克牌
?*??包括四種花色:黑桃、紅桃、梅花、方塊、
?*??十三中點數:2~10,J、Q、K、A,不包括大小王
?*/
public?class?Pocker?implements?Comparable<Pocker>{
private?String?color;??//撲克牌花色
private?String?value;??//撲克牌面值
private?static?final?int?CARDNUM?=?52;???//撲克牌總量
private?static?final?int?SINGLECOLORNUM?=?13;?//每種顏色撲克牌數量
public?Pocker(){
}
public?Pocker(String?color,?String?value)?{
this.color?=?color;
this.value?=?value;
}
public?String?getColor()?{
return?color;
}
public?String?getValue()?{
return?value;
}
/*
?*?產生52張撲克牌
?*?return?List<Pocker>
?*/
?
public?static?List<Pocker>?createPocker(){
List<Pocker>?pockers?=?new?ArrayList<Pocker>();
for(int?i?=?0;?i?<?CARDNUM;?i++){
String?newValue?=?null;
int?temp?=?i?%?SINGLECOLORNUM;
switch?(temp)?{
case?11:
newValue?=?"j";
break;
case?12:
newValue?=?"Q";
break;
case?0:
newValue?=?"K";
break;
case?1:
newValue?=?"A";
break;
default:
newValue?=?String.valueOf(temp);
}
String?newColor?=?null;
switch?(i?/?SINGLECOLORNUM)?{
case?0:
newColor?=?"黑桃";
break;
case?1:
newColor?=?"紅桃";
break;
case?2:
newColor?=?"梅花";
break;
case?3:
newColor?=?"方塊";
}
pockers.add(new?Pocker(newColor,newValue));
}
return?pockers;
}
/*
?*?Collections.shuffle進行洗牌
?*/
public?static?List<Pocker>?shuffle(List<Pocker>?pockers){
Collections.shuffle(pockers);
return?pockers;
}
/*
?*?(non-Javadoc)
?*?@see?java.lang.Comparable#compareTo(java.lang.Object)
?*?重寫了copmareTo方法,實現了Comparable接口
?*?根據牌值和花色在列表中的順序進行比較
?*/
@Override
public?int?compareTo(Pocker?o)?{
List<String>?valueBase?=?Arrays.asList("2","3","4","5","6","7","8","9","10","J","Q","K","A");
List<String>?colorBase?=?Arrays.asList("方塊","梅花","紅桃","黑桃");
if(valueBase.indexOf(this.value)?==?valueBase.indexOf(o.value))
return?Integer.valueOf(colorBase.indexOf(this.color)).compareTo(Integer.valueOf(colorBase.indexOf(o.getColor())));
else?
return?Integer.valueOf(valueBase.indexOf(this.value)).compareTo(Integer.valueOf(valueBase.indexOf(o.getValue())));
}
@Override
public?String?toString()?{
return?color+value;
}
}
2016-12-25
雖然我暫時寫不好,但是這個軟件問題太多了,比如玩家數可以大于17,在輸完id和姓名后才報錯,然后我試了下17,然后創建玩家就會一直進行下去。
2016-07-04
好東西~
2015-09-04
?pockers.add(new?Pocker(newColor,newValue));這里為什么出錯啊
2015-08-13
這段代碼比較的是什么和什么啊,這段代碼看不懂了,大神們能解釋一下么?valueBase.indexOf(this.value)是誰的值的位置,valueBase.indexOf(o.value)又是誰的值在valueBase里的位置?
2015-08-12
666
2015-07-15
public int compareTo(Pocker o) {
? ? ? ?List<String> valueBase = Arrays.asList("2","3","4","5","6","7","8","9","10","J","Q","K","A");
? ? ? ?List<String> colorBase = Arrays.asList("方塊","梅花","紅桃","黑桃");
? ? ? ?if(valueBase.indexOf(this.value) == valueBase.indexOf(o.value))
? ? ? ? ? ?return Integer.valueOf(colorBase.indexOf(this.color)).compareTo(Integer.valueOf(colorBase.indexOf(o.getColor())));
? ? ? ?else
? ? ? ? ? ?return Integer.valueOf(valueBase.indexOf(this.value)).compareTo(Integer.valueOf(valueBase.indexOf(o.getValue())));
? ?}
請教下各位大牛,這個方法內部為啥可以調用compareTo本身呢?
2015-06-23
這一句怎么理解?直接返回
colorBase.indexOf(this.color).compareTo(colorBase.indexOf(o.getColor()))
不行嗎?
2015-06-19
大贊!
2015-06-04
寫的太棒了~~~~
2015-06-04
就是,傳作品里去吧。