一直是C#的忠实粉丝,近来想和JAVA来个亲密接触,随即跟着慕课网 一步一步学起了JAVA。
Java入门第一季、第二季、第三季课程还是值得初学者仔细品读,认真完成每一个小练习。
最后,讲师留了一个JAVA简易扑克牌游戏的题目,代码如下,供需要者参考:
Poker.java
/**
*
*/
package andy_poker;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
/**
* @author 安迪名爵
*
*/
public class Poker implements Comparable<Poker>{
private String points;
public String getPoints() {
return points;
}
public void setPoints(String points) {
this.points = points;
}
private String color;
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
List<Poker> pokerList = new ArrayList<Poker>();
public List<Poker> getPokerList() {
return pokerList;
}
public void setPokerList(List<Poker> pokerList) {
this.pokerList = pokerList;
}
//扑克点数样本
List<String> pointExampleList = new ArrayList<String>();
//扑克花色样本
List<String> colorExampleList = new ArrayList<String>();
/**
* Default construction
*/
public Poker() {
}
/**
* Parameter Construction
*/
public Poker(String point, String color) {
setPoints(point);
setColor(color);
}
/**
* 从小到大顺序初始化扑克点数、花色样本List
*/
public void SetExampleSequence() {
String[] pointExample = { "2", "3", "4", "5", "6", "7", "8", "9", "10", "J","Q", "K", "A" };
String[] colorExample = {"方片", "梅花", "红桃", "黑桃"}; //按照从大到小的顺序排列
for (int i = 0; i < pointExample.length; i++) {
pointExampleList.add(pointExample[i]);
}
for (int j = 0; j < colorExample.length; j++) {
colorExampleList.add(colorExample[j]);
}
}
/**
* 创建一副扑克
*/
public void InitialPoker() {
System.out.println("----------创建扑克牌-----------");
String[] point = { "2", "3", "4", "5", "6", "7", "8", "9", "10", "J",
"Q", "K", "A" };
String[] color = { "黑桃", "红桃", "梅花", "方片" };
for (int i = 0; i < point.length; i++) {
for (int j = 0; j < color.length; j++) {
pokerList.add(new Poker(point[i], color[j]));
}
}
System.out.println("----------扑克牌创建成功!-----------");
StringBuffer stringBuffer = new StringBuffer();
for (Poker card : pokerList) {
stringBuffer.append(card.color + card.points);
}
System.out.println("为:[" + stringBuffer + "]");
}
/**
* Shuffle洗牌
*/
public void Shuffle(){
if (pokerList.size() <= 0) {
System.out.println("请先创建一副扑克,才能完成洗牌!");
}
System.out.println("----------开始洗牌-----------");
Random random = new Random();
int size = pokerList.size();
for (int i = 0; i < pokerList.size(); i++) {
int index = random.nextInt(size);
if (index != i) {
Poker currentCard = new Poker();
currentCard = pokerList.get(i);
//随机待交互位置的牌
Poker randomCard = new Poker();
randomCard = pokerList.get(index);
pokerList.set(index, currentCard);
pokerList.set(i, randomCard);
}
}
System.out.println("----------洗牌结束-----------!");
/*StringBuffer stringBuffer = new StringBuffer();
for (Poker card : pokerList) {
stringBuffer.append(card.color + card.points);
}
System.out.println("为:[" + stringBuffer + "]");*/
}
/* (non-Javadoc)
* @see java.lang.Comparable#compareTo(java.lang.Object)
*/
@Override
public int compareTo(Poker o) {
// TODO Auto-generated method stub
//从小到大顺序初始化扑克点数、花色样本List
SetExampleSequence();
int currentPointIndex = pointExampleList.indexOf(points);
int currentColorIndex = colorExampleList.indexOf(color);
int comparetPointIndex = pointExampleList.indexOf(o.getPoints());
int compareColorIndex = colorExampleList.indexOf(o.getColor());
if (currentPointIndex > comparetPointIndex) { //点数大
return 1;
}else if (currentPointIndex < comparetPointIndex) { //点数小时
return -1;
} else { //点数相等时
if (currentColorIndex > compareColorIndex) { //花色大时
return 1;
}else if (currentColorIndex < compareColorIndex) { //花色小时
return -1;
}
}
return 0; //点数、花色一样时(当前例子不会出现)
}
}
Player.java
/**
*
*/
package andy_poker;
import java.util.ArrayList;
import java.util.List;
/**
* @author 安迪名爵
*
*/
public class Player {
private String playerID;
public String getPlayerID() {
return playerID;
}
public void setPlayerID(String playerID) {
this.playerID = playerID;
}
private String playerName;
public String getPlayerName() {
return playerName;
}
public void setPlayerName(String playerName) {
this.playerName = playerName;
}
List<Poker> PlayerCards = new ArrayList<Poker>();
public List<Poker> getPlayerCards() {
return PlayerCards;
}
public void setPlayerCards(List<Poker> playerCards) {
PlayerCards = playerCards;
}
//默认构造函数
public Player(){
}
//带参构造函数(暂不用)
/**
* @param playerID
* @param playerName
*/
public Player(String playerID, String playerName) {
super();
this.playerID = playerID;
this.playerName = playerName;
}
/*
* 拿牌
*/
public void TakeACard(Poker card){
PlayerCards.add(card);
}
/*
* 获取玩家手中最大的牌
*/
public Poker GetBiggestCard(){
Poker biggestCard = new Poker();
if (PlayerCards.size()<= 0) {
System.out.println("玩家手中没有牌,请先拿牌!");
return null;
}
else {
biggestCard = PlayerCards.get(0);
for (Poker card : PlayerCards) {
if (card.compareTo(biggestCard) > 0) {
biggestCard = card;
}
}
return biggestCard;
}
}
}
PlayGame.java
/**
*
*/
package andy_poker;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.Scanner;
import javax.swing.text.StyledEditorKit.ForegroundAction;
/**
* @author 安迪名爵
*
*/
public class PlayGame {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Poker poker = new Poker();
// 创建一副扑克
poker.InitialPoker();
// 洗牌
poker.Shuffle();
// 输入玩家信息
List<Player> playerList = new ArrayList<Player>();
//创建两位玩家(可以用Scanner扩展为用户输入玩家人数,多玩家模式)
playerList.add(null);
playerList.add(null);
PlayGame playGame = new PlayGame();
playGame.InputPlayerInfo(playerList);
//发牌
playGame.Deal(playerList,poker);
System.out.println("----------开始游戏-----------");
for (Player player : playerList) {
Poker card = new Poker();
card = player.GetBiggestCard();
System.out.println("玩家:" + player.getPlayerName() + "最大的手牌为:" + card.getColor() + card.getPoints());
}
System.out.println("----------玩家:"+ playGame.CompareCards(playerList).getPlayerName() +"获胜!-----------");
System.out.println("玩家各自的手牌为:");
for (Player player : playerList) {
String cards = player.getPlayerName() + ":[";
for (Poker aCard : player.getPlayerCards()) {
cards += aCard.getColor() + aCard.getPoints() + ",";
}
cards = cards.substring(0, cards.length()-1); //清除最后一个逗号
cards += "]";
System.out.println(cards);
}
}
/**
* 输入玩家信息
*/
public void InputPlayerInfo(List<Player> playerList){
Scanner scanner = new Scanner(System.in);
for (int i = 0; i < playerList.size(); i++) {
System.out.println("请输入第" + (i+1) + "位玩家的ID和姓名:");
System.out.println("输入ID:");
String playerID = scanner.next();
if (!isNumeric(playerID)) {
System.out.println("请输入整数类型的ID:");
System.out.println("输入ID:");
playerID = scanner.next();
}
System.out.println("输入姓名:");
String playerName = scanner.next();
playerList.set(i, new Player(playerID, playerName));
}
}
/**
* 判断输入的内容是否是整数,是整数返回true,否则返回false
*/
public static Boolean isNumeric(String str) {
for (int i = 0; i < str.length(); i++) {
if (!Character.isDigit(str.charAt(i))) {
return false;
}
}
return true;
}
/**
* 发牌,每人两张牌
*/
public void Deal(List<Player> playerList,Poker poker){
System.out.println("----------开始发牌-----------");
Random random = new Random();
int index;
for (int i = 0; i < 2; i++) { //每人两张牌
for (int j = 0; j < playerList.size(); j++) {
System.out.println("----玩家:" + playerList.get(j).getPlayerName() + "-拿牌");
index = random.nextInt(poker.getPokerList().size());
playerList.get(i).TakeACard(poker.getPokerList().get(index));
poker.getPokerList().remove(index);
}
}
System.out.println("----------发牌结束!-----------");
}
/*
* 比较玩家扑克大小,返回拿牌最大的玩家
*/
public Player CompareCards(List<Player> playerList){
Player WhoHasTheBiggest = new Player();
WhoHasTheBiggest = playerList.get(0);
for (Player player : playerList) {
if (player.GetBiggestCard().compareTo(WhoHasTheBiggest.GetBiggestCard()) > 0) {
WhoHasTheBiggest = player;
}
}
return WhoHasTheBiggest;
}
}
执行结果:
----------创建扑克牌-----------
----------扑克牌创建成功!-----------
为:[黑桃2红桃2梅花2方片2黑桃3红桃3梅花3方片3黑桃4红桃4梅花4方片4黑桃5红桃5梅花5方片5黑桃6红桃6梅花6方片6黑桃7红桃7梅花7方片7黑桃8红桃8梅花8方片8黑桃9红桃9梅花9方片9黑桃10红桃10梅花10方片10黑桃J红桃J梅花J方片J黑桃Q红桃Q梅花Q方片Q黑桃K红桃K梅花K方片K黑桃A红桃A梅花A方片A]
----------开始洗牌-----------
----------洗牌结束-----------!
请输入第1位玩家的ID和姓名:
输入ID:
test
请输入整数类型的ID:
输入ID:
1
输入姓名:
Tommy
请输入第2位玩家的ID和姓名:
输入ID:
2
输入姓名:
James
----------开始发牌-----------
----玩家:Tommy-拿牌
----玩家:James-拿牌
----玩家:Tommy-拿牌
----玩家:James-拿牌
----------发牌结束!-----------
----------开始游戏-----------
玩家:Tommy最大的手牌为:红桃10
玩家:James最大的手牌为:红桃8
----------玩家:Tommy获胜!-----------
玩家各自的手牌为:
Tommy:[梅花6,红桃10]
James:[红桃8,红桃5]
Poker.java
/**
*
*/
package andy_poker;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
/**
* @author 安迪名爵
*
*/
public class Poker implements Comparable<Poker>{
private String points;
public String getPoints() {
return points;
}
public void setPoints(String points) {
this.points = points;
}
private String color;
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
List<Poker> pokerList = new ArrayList<Poker>();
public List<Poker> getPokerList() {
return pokerList;
}
public void setPokerList(List<Poker> pokerList) {
this.pokerList = pokerList;
}
//扑克点数样本
List<String> pointExampleList = new ArrayList<String>();
//扑克花色样本
List<String> colorExampleList = new ArrayList<String>();
/**
* Default construction
*/
public Poker() {
}
/**
* Parameter Construction
*/
public Poker(String point, String color) {
setPoints(point);
setColor(color);
}
/**
* 从小到大顺序初始化扑克点数、花色样本List
*/
public void SetExampleSequence() {
String[] pointExample = { "2", "3", "4", "5", "6", "7", "8", "9", "10", "J","Q", "K", "A" };
String[] colorExample = {"方片", "梅花", "红桃", "黑桃"}; //按照从大到小的顺序排列
for (int i = 0; i < pointExample.length; i++) {
pointExampleList.add(pointExample[i]);
}
for (int j = 0; j < colorExample.length; j++) {
colorExampleList.add(colorExample[j]);
}
}
/**
* 创建一副扑克
*/
public void InitialPoker() {
System.out.println("----------创建扑克牌-----------");
String[] point = { "2", "3", "4", "5", "6", "7", "8", "9", "10", "J",
"Q", "K", "A" };
String[] color = { "黑桃", "红桃", "梅花", "方片" };
for (int i = 0; i < point.length; i++) {
for (int j = 0; j < color.length; j++) {
pokerList.add(new Poker(point[i], color[j]));
}
}
System.out.println("----------扑克牌创建成功!-----------");
StringBuffer stringBuffer = new StringBuffer();
for (Poker card : pokerList) {
stringBuffer.append(card.color + card.points);
}
System.out.println("为:[" + stringBuffer + "]");
}
/**
* Shuffle洗牌
*/
public void Shuffle(){
if (pokerList.size() <= 0) {
System.out.println("请先创建一副扑克,才能完成洗牌!");
}
System.out.println("----------开始洗牌-----------");
Random random = new Random();
int size = pokerList.size();
for (int i = 0; i < pokerList.size(); i++) {
int index = random.nextInt(size);
if (index != i) {
Poker currentCard = new Poker();
currentCard = pokerList.get(i);
//随机待交互位置的牌
Poker randomCard = new Poker();
randomCard = pokerList.get(index);
pokerList.set(index, currentCard);
pokerList.set(i, randomCard);
}
}
System.out.println("----------洗牌结束-----------!");
/*StringBuffer stringBuffer = new StringBuffer();
for (Poker card : pokerList) {
stringBuffer.append(card.color + card.points);
}
System.out.println("为:[" + stringBuffer + "]");*/
}
/* (non-Javadoc)
* @see java.lang.Comparable#compareTo(java.lang.Object)
*/
@Override
public int compareTo(Poker o) {
// TODO Auto-generated method stub
//从小到大顺序初始化扑克点数、花色样本List
SetExampleSequence();
int currentPointIndex = pointExampleList.indexOf(points);
int currentColorIndex = colorExampleList.indexOf(color);
int comparetPointIndex = pointExampleList.indexOf(o.getPoints());
int compareColorIndex = colorExampleList.indexOf(o.getColor());
if (currentPointIndex > comparetPointIndex) { //点数大
return 1;
}else if (currentPointIndex < comparetPointIndex) { //点数小时
return -1;
} else { //点数相等时
if (currentColorIndex > compareColorIndex) { //花色大时
return 1;
}else if (currentColorIndex < compareColorIndex) { //花色小时
return -1;
}
}
return 0; //点数、花色一样时(当前例子不会出现)
}
}
Player.java
/**
*
*/
package andy_poker;
import java.util.ArrayList;
import java.util.List;
/**
* @author 安迪名爵
*
*/
public class Player {
private String playerID;
public String getPlayerID() {
return playerID;
}
public void setPlayerID(String playerID) {
this.playerID = playerID;
}
private String playerName;
public String getPlayerName() {
return playerName;
}
public void setPlayerName(String playerName) {
this.playerName = playerName;
}
List<Poker> PlayerCards = new ArrayList<Poker>();
public List<Poker> getPlayerCards() {
return PlayerCards;
}
public void setPlayerCards(List<Poker> playerCards) {
PlayerCards = playerCards;
}
//默认构造函数
public Player(){
}
//带参构造函数(暂不用)
/**
* @param playerID
* @param playerName
*/
public Player(String playerID, String playerName) {
super();
this.playerID = playerID;
this.playerName = playerName;
}
/*
* 拿牌
*/
public void TakeACard(Poker card){
PlayerCards.add(card);
}
/*
* 获取玩家手中最大的牌
*/
public Poker GetBiggestCard(){
Poker biggestCard = new Poker();
if (PlayerCards.size()<= 0) {
System.out.println("玩家手中没有牌,请先拿牌!");
return null;
}
else {
biggestCard = PlayerCards.get(0);
for (Poker card : PlayerCards) {
if (card.compareTo(biggestCard) > 0) {
biggestCard = card;
}
}
return biggestCard;
}
}
}
PlayGame.java
/**
*
*/
package andy_poker;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.Scanner;
import javax.swing.text.StyledEditorKit.ForegroundAction;
/**
* @author 安迪名爵
*
*/
public class PlayGame {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Poker poker = new Poker();
// 创建一副扑克
poker.InitialPoker();
// 洗牌
poker.Shuffle();
// 输入玩家信息
List<Player> playerList = new ArrayList<Player>();
//创建两位玩家(可以用Scanner扩展为用户输入玩家人数,多玩家模式)
playerList.add(null);
playerList.add(null);
PlayGame playGame = new PlayGame();
playGame.InputPlayerInfo(playerList);
//发牌
playGame.Deal(playerList,poker);
System.out.println("----------开始游戏-----------");
for (Player player : playerList) {
Poker card = new Poker();
card = player.GetBiggestCard();
System.out.println("玩家:" + player.getPlayerName() + "最大的手牌为:" + card.getColor() + card.getPoints());
}
System.out.println("----------玩家:"+ playGame.CompareCards(playerList).getPlayerName() +"获胜!-----------");
System.out.println("玩家各自的手牌为:");
for (Player player : playerList) {
String cards = player.getPlayerName() + ":[";
for (Poker aCard : player.getPlayerCards()) {
cards += aCard.getColor() + aCard.getPoints() + ",";
}
cards = cards.substring(0, cards.length()-1); //清除最后一个逗号
cards += "]";
System.out.println(cards);
}
}
/**
* 输入玩家信息
*/
public void InputPlayerInfo(List<Player> playerList){
Scanner scanner = new Scanner(System.in);
for (int i = 0; i < playerList.size(); i++) {
System.out.println("请输入第" + (i+1) + "位玩家的ID和姓名:");
System.out.println("输入ID:");
String playerID = scanner.next();
if (!isNumeric(playerID)) {
System.out.println("请输入整数类型的ID:");
System.out.println("输入ID:");
playerID = scanner.next();
}
System.out.println("输入姓名:");
String playerName = scanner.next();
playerList.set(i, new Player(playerID, playerName));
}
}
/**
* 判断输入的内容是否是整数,是整数返回true,否则返回false
*/
public static Boolean isNumeric(String str) {
for (int i = 0; i < str.length(); i++) {
if (!Character.isDigit(str.charAt(i))) {
return false;
}
}
return true;
}
/**
* 发牌,每人两张牌
*/
public void Deal(List<Player> playerList,Poker poker){
System.out.println("----------开始发牌-----------");
Random random = new Random();
int index;
for (int i = 0; i < 2; i++) { //每人两张牌
for (int j = 0; j < playerList.size(); j++) {
System.out.println("----玩家:" + playerList.get(j).getPlayerName() + "-拿牌");
index = random.nextInt(poker.getPokerList().size());
playerList.get(i).TakeACard(poker.getPokerList().get(index));
poker.getPokerList().remove(index);
}
}
System.out.println("----------发牌结束!-----------");
}
/*
* 比较玩家扑克大小,返回拿牌最大的玩家
*/
public Player CompareCards(List<Player> playerList){
Player WhoHasTheBiggest = new Player();
WhoHasTheBiggest = playerList.get(0);
for (Player player : playerList) {
if (player.GetBiggestCard().compareTo(WhoHasTheBiggest.GetBiggestCard()) > 0) {
WhoHasTheBiggest = player;
}
}
return WhoHasTheBiggest;
}
}
执行结果:
----------创建扑克牌-----------
----------扑克牌创建成功!-----------
为:[黑桃2红桃2梅花2方片2黑桃3红桃3梅花3方片3黑桃4红桃4梅花4方片4黑桃5红桃5梅花5方片5黑桃6红桃6梅花6方片6黑桃7红桃7梅花7方片7黑桃8红桃8梅花8方片8黑桃9红桃9梅花9方片9黑桃10红桃10梅花10方片10黑桃J红桃J梅花J方片J黑桃Q红桃Q梅花Q方片Q黑桃K红桃K梅花K方片K黑桃A红桃A梅花A方片A]
----------开始洗牌-----------
----------洗牌结束-----------!
请输入第1位玩家的ID和姓名:
输入ID:
test
请输入整数类型的ID:
输入ID:
1
输入姓名:
Tommy
请输入第2位玩家的ID和姓名:
输入ID:
2
输入姓名:
James
----------开始发牌-----------
----玩家:Tommy-拿牌
----玩家:James-拿牌
----玩家:Tommy-拿牌
----玩家:James-拿牌
----------发牌结束!-----------
----------开始游戏-----------
玩家:Tommy最大的手牌为:红桃10
玩家:James最大的手牌为:红桃8
----------玩家:Tommy获胜!-----------
玩家各自的手牌为:
Tommy:[梅花6,红桃10]
James:[红桃8,红桃5]