package imooc.cardsplaying;
import java.util.ArrayList;
import java.util.List;
public class Cards {
//扑克牌的花色
private String type;
//扑克牌的数值
private String value;
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
//构造方法
public Cards(String value, String type){
this.setType(type);
this.setValue(value);
}
@Override
public String toString() {
return type + " " + value;
}
}
package imooc.cardsplaying;
import java.util.ArrayList;
import java.util.List;
public class Player {
//用户ID
private int id;
//用户的名字
private String name;
//用于保存用户的卡片
List<Cards> playerCards;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
/**
* @param id
* @param name
*/
public Player(int id, String name){
//在构造器中初始化泛型为Cards的List集合
playerCards = new ArrayList<Cards>();
setId(id);
setName(name);
}
}
package imooc.cardsplaying;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.Scanner;
public class CardsPlaying {
//创建扑克牌并将所有的扑克牌保存在ArrayList<Cards>中
public List<Cards> cards = new ArrayList<Cards>();
public static Player player1;
public static Player player2;
//将所有的花色type保存在String数组中
String[] types = {"黑桃", "红桃", "梅花", "方片"};
//将扑克牌中所有的数值value保存在char数组中
String[] values = {"2", "3", "4", "5", "6", "7", "8", "9",
"10", "J", "Q", "K", "A"};
public static void main(String[] args) {
//创建对象
CardsPlaying cardsPlay = new CardsPlaying();
//创建扑克牌
cardsPlay.createCards();
//显示扑克牌(洗牌前)
cardsPlay.showCards();
//洗牌
cardsPlay.shuffle();
System.out.println("--------------------------洗牌后的卡片-----------------------------");
//显示扑克牌(洗牌后)
cardsPlay.showCards();
System.out.println("请输入第一名玩家的ID和姓名:");
player1 = createPlayer();
System.out.println("请输入第二名玩家的ID和姓名:");
player2 = createPlayer();
System.out.println("欢迎玩家:" + player1.getId() + " " + player1.getName());
System.out.println("欢迎玩家:" + player2.getId() + " " + player2.getName());
cardsPlay.deal();
cardsPlay.playing();
System.out.println("玩家各自的手牌为:");
//显示玩家一的手牌
System.out.println(player1.getName() + ":" + player1.playerCards.toString());
//显示玩家二的手牌
System.out.println(player2.getName() + ":" + player2.playerCards.toString());
}
//开始游戏
public void playing(){
System.out.println("--------------------------开始游戏--------------------------");
//获取玩家一的playerCards中的较大的卡
Cards player1MaxCards = getMaxCard(player1.playerCards.get(0), player1.playerCards.get(1));
//显示玩家一的最大手牌
System.out.println("玩家:" + player1.getName() + "最大的手牌为:"
+ player1MaxCards.getType() + " " + player1MaxCards.getValue());
//获取玩家二的playerCards中的较大的卡
Cards player2MaxCards = getMaxCard(player2.playerCards.get(0), player2.playerCards.get(1));
//显示玩家二的最大手牌
System.out.println("玩家:" + player2.getName() + "最大的手牌为:"
+ player2MaxCards.getType() + " " + player2MaxCards.getValue());
//比较两个玩家的最大手牌
Cards maxCard = getMaxCard(player1MaxCards, player2MaxCards);
//查看最大手牌maxCard是哪个玩家的卡
if(player1.playerCards.contains(maxCard))
{
System.out.println("--------------玩家:" + player1.getName() + "获胜!-----------------");
}
else
System.out.println("--------------玩家:" + player2.getName() + "获胜!-----------------");
}
//取得牌value的最大那张牌
public Cards getMaxCard(Cards card1, Cards card2){
//如果第一张卡的value值比第二张的大,九返回第一张卡
if(getIndex(card1.getValue(), values) > getIndex(card2.getValue(), values)){
return card1;
}
//如果两张卡的value值相同,则继续比较两张卡的type大小
else if(getIndex(card1.getValue(), values) == getIndex(card2.getValue(), values)){
if(getIndex(card1.getType(), types) > getIndex(card2.getType(), types))
{
return card1;
}
else
return card2;
}
else
return card2;
}
//通过数组元素获得数组的索引值
public int getIndex(String str, String[] arr){
for(int i = 0; i < arr.length; i++){
if(str==arr[i]){
return i;
}
}
//若没有找到就返回-1
return -1;
}
//发牌
public void deal(){
System.out.println("---------------------开始发牌-----------------------");
System.out.println("-----玩家:" + player1.getName() + "-拿牌");
player1.playerCards.add(cards.get(0));
System.out.println("-----玩家:" + player2.getName() + "-拿牌");
player2.playerCards.add(cards.get(1));
System.out.println("-----玩家:" + player1.getName() + "-拿牌");
player1.playerCards.add(cards.get(2));
System.out.println("-----玩家:" + player2.getName() + "-拿牌");
player2.playerCards.add(cards.get(3));
System.out.println("---------------------发牌结束-----------------------");
}
//创建所有的扑克牌,并将它们保存在ArrayList集合中
public void createCards(){
System.out.println("---------------------创建扑克牌-------------------------");
for(int i = 0; i < values.length; i++){
for(int j = 0; j < types.length; j++){
Cards newCard = new Cards(values[i], types[j]);
cards.add(newCard);
}
}
System.out.println("------------------扑克牌创建成功!----------------------");
}
//显示所有的扑克牌
public void showCards(){
Cards card;
System.out.println("共有如下扑克牌:");
for (int i = 0; i < cards.size(); i++) {
System.out.print(cards.get(i).getType() + " " + cards.get(i).getValue() + " 、 ");
if((i+1) % 4 == 0){
System.out.println();
}
}
System.out.println();
}
//洗牌
public void shuffle(){
System.out.println("----------------------开始洗牌----------------------");
//共有几张牌就循环随机交换几次位置
for(int i = 0; i < cards.size(); i++){
Cards temp = cards.get(i);
Random random = new Random();
int index = random.nextInt(cards.size());
cards.set(i, cards.get(index));
cards.set(index, temp);
}
System.out.println("-------------------洗牌结束----------------------");
}
//创建玩家
public static Player createPlayer(){
Scanner input = new Scanner(System.in);
int id;
while(true){
try{
System.out.println("输入ID:");
id = input.nextInt();
break;
}
catch(Exception e){
input = new Scanner(System.in);
System.out.println("输入有误,请重新输入数字!");
continue;
}
}
System.out.println("输入姓名:");
String name = input.next();
return new Player(id, name);
}
}
运行结果
---------------------创建扑克牌-------------------------
------------------扑克牌创建成功!----------------------
共有如下扑克牌:
黑桃 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 、
----------------------开始洗牌----------------------
-------------------洗牌结束----------------------
--------------------------洗牌后的卡片-----------------------------
共有如下扑克牌:
方片 J 、 梅花 7 、 方片 10 、 方片 8 、
黑桃 4 、 方片 K 、 红桃 4 、 红桃 J 、
梅花 9 、 方片 6 、 黑桃 K 、 梅花 J 、
红桃 5 、 方片 9 、 红桃 6 、 红桃 Q 、
黑桃 8 、 方片 7 、 梅花 4 、 梅花 5 、
红桃 8 、 黑桃 6 、 梅花 6 、 梅花 A 、
黑桃 3 、 红桃 10 、 红桃 A 、 黑桃 A 、
方片 3 、 方片 2 、 梅花 3 、 梅花 10 、
黑桃 7 、 方片 A 、 黑桃 Q 、 黑桃 5 、
方片 Q 、 黑桃 J 、 红桃 7 、 红桃 9 、
方片 4 、 黑桃 9 、 红桃 3 、 黑桃 2 、
梅花 2 、 梅花 Q 、 方片 5 、 黑桃 10 、
红桃 K 、 梅花 8 、 梅花 K 、 红桃 2 、
请输入第一名玩家的ID和姓名:
输入ID:
1
输入姓名:
Tom
请输入第二名玩家的ID和姓名:
输入ID:
g
输入有误,请重新输入数字!
输入ID:
2
输入姓名:
Jack
欢迎玩家:1 Tom
欢迎玩家:2 Jack
---------------------开始发牌-----------------------
-----玩家:Tom-拿牌
-----玩家:Jack-拿牌
-----玩家:Tom-拿牌
-----玩家:Jack-拿牌
---------------------发牌结束-----------------------
--------------------------开始游戏--------------------------
玩家:Tom最大的手牌为:方片 J
玩家:Jack最大的手牌为:方片 8
--------------玩家:Tom获胜!-----------------
玩家各自的手牌为:
Tom:[方片 J, 方片 10]
Jack:[梅花 7, 方片 8]