该代码分为三个模块,主要使用的是数组进行遍历,加上面向对象的知识点,串联起来,是java基础阶段的一大趣味游戏,能极高的锻炼你的逻辑思维能力,话不多说,直接放代码:
package com.ddz; public class Card implements Comparable{ private String cardNum; //点数 34567890JQKA2小大 private String cardType; //花色 private int cardValue; //排序的数值 10 11 12 13... public String getCardNum() { return cardNum; } public void setCardNum(String cardNum) { this.cardNum = cardNum; } public String getCardType() { return cardType; } public void setCardType(String cardType) { this.cardType = cardType; } public int getCardValue() { return cardValue; } public void setCardValue(int cardValue) { this.cardValue = cardValue; } public Card(String cardNum, String cardType) { this.cardNum = cardNum; this.cardType = cardType; switch (cardNum) { case "0": this.cardValue = 10; break; case "J": this.cardValue = 11; break; case "Q": this.cardValue = 12; break; case "K": this.cardValue = 13; break; case "A": this.cardValue = 14; break; case "2": this.cardValue = 15; break; case "小": this.cardValue = 16; break; case "大": this.cardValue = 17; break; default: this.cardValue = Integer.parseInt(cardNum); break; } } public Card() { super(); } @Override public String toString() { return cardNum+cardType; } // 重写比较类 @Override public int compareTo(Card o) { //内置比较器 return cardValue - o.cardValue;//比较大小 } }
package com.ddz;
import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;
public class Game {
private static String cardNum = "34567890JQKA2";
private static String cardType = "♠♥♣♦";
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Card[] cards = createCard();
System.out.println(Arrays.toString(cards));
randomCard(cards);
System.out.println(Arrays.toString(cards));//打乱后
//创建3个用户
Player[] players = {new Player(),new Player(),new Player()};
//发牌
giveOutCard(cards, players);
//玩家理牌
for (int i = 0; i < players.length; i++) {
players[i].orderCard();
}
// 调整出牌顺序
Arrays.sort(players);
// 出牌
while(true) {
for (int i = 0; i < players.length; i++) {
Player player = players[i];
System.out.println(players[i].getPlayerType()+":"+Arrays.toString(players[i].getCards()));
System.out.println(players[i].getPlayerType()+"出牌:");
String cardStr = sc.next();
player.outCard(cardStr);
}
}
}
//生成一副牌
public static Card[] createCard() {
Card[] cards = new Card[54];//定义一个数据类型是Card的长度是54的数组
for (int i = 0; i < cardNum.length(); i++) { //两个for循环,一个遍历大小,一个遍历花色,循环嵌套打印所有的牌
for (int j = 0; j < cardType.length(); j++) {
cards[i*4+j] = new Card(cardNum.charAt(i)+"",cardType.charAt(j)+"");//打印数组,顺序是i*4+j 0123 4567
}
}
cards[52] = new Card("小","王");//最后的两张牌
cards[53] = new Card("大","王");
return cards;
}
// 洗牌
public static void randomCard(Card[] cards) {
Random random = new Random();
for (int i = 0; i < cards.length; i++) {
int index = random.nextInt(cards.length-1);//index是随机下标
if (i!=index) {//如果他的索引不等于随机下标,就需要交换位置
Card card = cards[i]; //创建临时对象交换位置
cards[i] = cards[index];
cards[index] = card;
}
}
}
public static void giveOutCard(Card[] cards,Player[] players) {
//选地主
Random random = new Random();
int index = random.nextInt(players.length);
int length = 0;
for (int i = 0; i < players.length; i++) { //012 index是一个随机数 如果随机数等于那个数,那个人就是地主
if (index==i) {
players[i].setPlayerType("地主");
Card[] cards2 = Arrays.copyOfRange(cards, length, 20+length);//复制一个新的数组2 第一个参数是复制的数组,第二个是数组开始,第三个是数组结束
players[i].setCards(cards2);
length+=20;
}else {
players[i].setPlayerType("玩家"+i);
Card[] cards2 = Arrays.copyOfRange(cards, length, 17+length);
players[i].setCards(cards2);
length+=17;
}
}
}
}
package com.ddz; import java.util.Arrays; public class Player implements Comparable{ private Card[] cards; //扑克牌 private String playerType;//地主还是农民 private int outCardNum;//出牌数 //理牌 public void orderCard() { Arrays.sort(cards); } //出牌 public void outCard(String str) { if ("pass".equalsIgnoreCase(str)) { return; } //创建一个新数组 Card[] cards2 = Arrays.copyOf(cards, cards.length); //定义一个出牌的数量 int num = 0; for (int i = 0; i < str.length(); i++) { //要出的牌 String card = str.charAt(i)+""; // 查找是否存在要出的牌 for (int j = 0; j < cards2.length; j++) { if (cards2[j]!=null) { if (cards2[j].getCardNum().equalsIgnoreCase(card)) { cards2[j]=null; num++; break; } } } } // 存在这些牌 if (num==str.length()) { cards=cards2;//数组变为已出的数组 outCardNum+=str.length();//出牌数量+ if (outCardNum==cards.length) { System.out.println(playerType+"赢了"); System.exit(0); } } } public Card[] getCards() { return cards; } public void setCards(Card[] cards) { this.cards = cards; } public String getPlayerType() { return playerType; } public void setPlayerType(String playerType) { this.playerType = playerType; } public int getOutCardNum() { return outCardNum; } public void setOutCardNum(int outCardNum) { this.outCardNum = outCardNum; } public Player(Card[] cards, String playerType, int outCardNum) { super(); this.cards = cards; this.playerType = playerType; this.outCardNum = outCardNum; } public Player() { super(); } @Override public String toString() { return "Player [cards=" + Arrays.toString(cards) + ", playerType=" + playerType + ", outCardNum=" + outCardNum + "]"; } @Override public int compareTo(Player o) { return o.cards.length-cards.length; } }



