扑克牌的创建、洗牌、发牌、大小对比,输出赢家牌;
//扑克牌
public class Card {
private int color;
private int number;
public Card() {
}
public Card(int color, int number) {
this.color = color;
this.number = number;
}
public int getColor() {
return color;
}
public void setColor(int color) {
this.color = color;
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
@Override
public String toString() {
return this.colorToString(this.color) +
this.numberToString(this.number);
}
//对花色进行字符化,黑桃最大,方块最小,
private String colorToString(int i){
String flower = null;
switch (i){
case 1:
flower = "方块";
break;
case 2:
flower = "梅花";
break;
case 3:
flower = "红心";
break;
case 4:
flower = "黑桃";
break;
}
return flower;
}
//对扑克牌的JQKA进行字符化,A为14,K为13,Q为12,J为11
private String numberToString(int i){
String num = null;
switch (i){
case 11:
num = "J";
break;
case 12:
num = "Q";
break;
case 13:
num = "K";
break;
case 14:
num = "A";
break;
default:
if (i >= 2 && i <= 10) {
num = new Integer(i).toString();
}else
num = "3";
}
return num;
}
}
import java.util.*;
//扑克牌
public class Cards {
public List initCards(){ //将52张牌创建并加入List集合中
List list = new ArrayList<>(); //创建List集合
for (int i = 1; i < 5; i++) { //i对应为花色
for (int j = 2; j < 15; j++) { //j对应为数字
Card card = new Card(); //在循环中创建扑克牌对象,该代码执行4*13=52次
card.setColor(i); //设置扑克牌花色
card.setNumber(j); //设置扑克牌数字
list.add(card); //将扑克牌加入List集合
}
}
return list;
}
}
//洗牌
public List shuffle(List list){
List slist = new ArrayList<>(); //创建List集合,保存洗牌后的扑克
Random random = new Random();
while (list.size() > 0){
int r = random.nextInt(list.size()); //生成正整型的随机数
Card card = list.remove(r); //返回list中,随机数位置的元素并且移除对应位置的元素
slist.add(card);
}
return slist;
}
//对手牌进行排序
public List playListSort(List playList){
playList.sort(new Comparator() {
@Override
public int compare(Card c1, Card c2) {
return c1.getNumber() - c2.getNumber();
}
});
return playList;
}
//判断牌型是否为豹子(三张牌的数字都是一致的)
public boolean isTheSameNumber(List playList){
if (playList != null && playList.size() == 3){
if (playList.get(0).getNumber() == playList.get(1).getNumber()
&& playList.get(1).getNumber() == playList.get(2).getNumber()){
return true;
}else{
return false;
}
}else {
System.err.println("手牌不符合规则");
throw new RuntimeException("手牌不符合规则");
}
}
//判断牌型是否为同花(三张牌的牌色都是一致的)
public boolean isFlushColor(List playList) {
if (playList != null && playList.size() == 3){
if (playList.get(0).getColor() == playList.get(1).getColor()
&& playList.get(1).getColor() == playList.get(2).getColor()){
return true;
}else{
return false;
}
}else {
System.err.println("手牌不符合规则");
throw new RuntimeException("手牌不符合规则");
}
}
//判断牌型是否为顺子(三张牌的数字是连续的) (2 3 A)也为顺子
public boolean isStraight(List playList) {
if (playList != null && playList.size() == 3){
if ((playList.get(0).getNumber() + 1 == playList.get(1).getNumber()
&& playList.get(1).getNumber() + 1 == playList.get(2).getNumber())
|| (playList.get(2).getNumber() == 14 && playList.get(0).getNumber() == 2 && playList.get(1).getNumber() == 3)){
return true;
}else{
return false;
}
}else {
System.err.println("手牌不符合规则");
throw new RuntimeException("手牌不符合规则");
}
}
//判断牌型是否为对子(三张牌中有两张牌为相同)
public boolean isPair(List playList){
if (playList != null && playList.size() == 3){
if (playList.get(0).getNumber() == playList.get(1).getNumber()
&& playList.get(1).getNumber() == playList.get(2).getNumber()){
return false;
}else {
if (playList.get(0).getNumber() == playList.get(1).getNumber()
|| playList.get(1).getNumber() == playList.get(2).getNumber()){
return true;
}
return false;
}
}
else {
System.err.println("手牌不符合规则");
throw new RuntimeException("手牌不符合规则");
}
}
import java.util.*;
//玩家
public class Player {
private String name; //玩家姓名
private List handCards; //玩家手牌
private int grade; //牌型等级
public Player() {
}
public Player(String name, List handCards, int grade) {
this.name = name;
this.handCards = handCards;
this.grade = grade;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List getHandCards() {
return handCards;
}
public void setHandCards(List handCards) {
this.handCards = handCards;
}
public int getGrade() {
return grade;
}
public void setGrade(int grade) {
this.grade = grade;
}
@Override
public String toString() {
String h = "";
for (int i = 0; i < this.handCards.size(); i++) {
h += this.handCards.get(i).toString();
}
return this.name + ":" + h;
}
}
import java.util.*;
public class PokerGame {
private Player p1; //玩家1
private Player p2; //玩家2
public void startPlayingCards(){ //开始游戏
p1 = new Player(); //创建玩家
p1.setName("Liu");
p2 = new Player(); //创建玩家
p2.setName("Li");
Cards cards = new Cards(); //创建扑克牌
List list = cards.initCards();
List slist = cards.shuffle(list); //洗牌
List playlist1 = new ArrayList<>(); //发牌
for (int i = 0; i < 3; i++) {
Card card = slist.remove(0);
playlist1.add(card);
p1.setHandCards(playlist1);
}
List playlist2 = new ArrayList<>(); //发牌
for (int i = 0; i < 3; i++) {
Card card = slist.remove(0);
playlist2.add(card);
p2.setHandCards(playlist2);
}
List card1 = cards.playListSort(p1.getHandCards()); //手牌排序
p1.setHandCards(card1);
List card2 = cards.playListSort(p2.getHandCards()); //手牌排序
p2.setHandCards(card2);
}
//查看玩家手中的牌
public void showPlayer(){
String cardType1 = this.getCardType(p1);
String cardType2 = this.getCardType(p2);
System.out.println(p1.toString() + " 牌型为:" + cardType1);
System.out.println(p2.toString() + " 牌型为:" + cardType2);
}
//判断手中牌型
private String getCardType(Player p){
List cardList = p .getHandCards();
Cards cards = new Cards();
String cardType = "单张";
if (cards.isTheSameNumber(cardList)){
cardType = "豹子";
p.setGrade(6);
return cardType;
}
if (cards.isFlushColor(cardList)){
if (cards.isStraight(cardList)){
cardType = "同花顺";
p.setGrade(5);
return cardType;
}else {
cardType = "同花";
p.setGrade(4);
return cardType;
}
}else {
if (cards.isStraight(cardList)){
cardType = "顺子";
p.setGrade(3);
return cardType;
}
}
if (cards.isPair(cardList)){
cardType = "对子";
p.setGrade(2);
return cardType;
}
p.setGrade(1);
return cardType;
}
//判断手牌大小
public Player getWinner(){
int grade1 = p1.getGrade();
int grade2 = p2.getGrade();
Player winner = grade1 > grade2 ? p1 : p2;
if (grade1 != grade2){
return grade1 > grade2 ? p1 : p2;
}
switch (grade1){
case 6: //豹子
winner = p1.getHandCards().get(0).getNumber() > p2.getHandCards().get(0).getNumber() ? p1 : p2;
break;
case 5: //同花顺
case 3: //顺子
winner = p1.getHandCards().get(0).getNumber() > p2.getHandCards().get(0).getNumber() ? p1 : p2;
break;
case 4: //同花
case 1: //单张
if (p1.getHandCards().get(2).getNumber() > p2.getHandCards().get(2).getNumber()){
winner = p1;
}else if (p1.getHandCards().get(2).getNumber() == p2.getHandCards().get(2).getNumber()){
if (p1.getHandCards().get(1).getNumber() > p2.getHandCards().get(1).getNumber()){
winner = p1;
}else if (p1.getHandCards().get(1).getNumber() == p2.getHandCards().get(1).getNumber()){
if (p1.getHandCards().get(0).getNumber() > p2.getHandCards().get(0).getNumber()){
winner = p1;
}else if (p1.getHandCards().get(0).getNumber() == p2.getHandCards().get(0).getNumber()){
winner = p2;
}else {winner = p2;}
}else {winner = p2;}
}else {winner = p2;}
break;
case 2: //对子
winner = p1.getHandCards().get(1).getNumber() > p2.getHandCards().get(1).getNumber() ? p1 : p2;
break;
}
return winner;
}
}
public class Test {
public static void main(String[] args) {
PokerGame pokerGame = new PokerGame();
pokerGame.startPlayingCards();
pokerGame.showPlayer();
Player winner = pokerGame.getWinner();
System.out.println("获胜者为:"+ winner.getName());
}
}