package com.imooc;
/*
* 扑克牌类
* 实现Comparable接口用于比较大小
* */
public class Card implements Comparable<Card> {
//牌的点数
private String pokerpoints;
//牌的花色
private String pokercolor;
//初始化构造方法
public Card(String pokerpoints,String pokercolor){
this.pokerpoints=pokerpoints;
this.pokercolor=pokercolor;
}
public Card(){
}
public String getPokerpoints() {
return pokerpoints;
}
public void setPokerpoints(String pokerpoints) {
this.pokerpoints = pokerpoints;
}
public String getPokercolor() {
return pokercolor;
}
public void setPokercolor(String pokercolor) {
this.pokercolor = pokercolor;
}
@Override
public String toString() {
return pokercolor+pokerpoints+"";
}
//重写Comparable的compareTO方法
@Override
public int compareTo(Card o) {
//用来比较点数
String ifpokerpoints="2,3,4,5,6,7,8,9,10,J,Q,K,A";
//用来比较花色
String ifpokercolor="方片,梅花,红桃,黑桃";
//当前扑克牌点数第一次出现的位置减去O对象扑克牌点数第一次出现的位置
int i=ifpokerpoints.indexOf(o.getPokerpoints())-ifpokerpoints.indexOf(this.getPokerpoints());
//如果点数的位置相同那么点数是一样的
if(i==0){
//如果点数一样那么比较花色的位置是否相同
i=ifpokercolor.indexOf(o.getPokercolor())-ifpokercolor.indexOf(this.getPokercolor());
}
//返回i的值正数大于负数小于
return i;
}
}
package com.imooc;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/*
* 正副扑克牌的类
* */
public class Poker {
//用来存放扑克牌的集合
List<Card> listcard=new ArrayList<Card>();
//创建扑克牌
public void creatPoker(){
System.out.println("-----创建扑克牌-----");
//定义一个牌数的数组
String[] name={"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
//定义一个花色数组
String[] color={"方片","梅花","红桃","黑桃"};
//循环往扑克牌集合中添加扑克
for(int i=0;i<name.length;i++){
for(int j=0;j<color.length;j++){
listcard.add(new Card(name[i],color[j]));
}
}
System.out.println(listcard);
System.out.println("-----创建完成-----");
}
//洗牌
public void randompoker(){
System.out.println("-----开始洗牌-----");
//调用Collections.shuffle()就可以实现顺序打乱
Collections.shuffle(listcard);
System.out.println(listcard);
System.out.println("-----洗牌完成-----");
}
//获取扑克牌的数量
public int size(){
return this.listcard.size();
}
//返回当前扑克牌集合
public List<Card> getlistCard(){
return this.listcard;
}
}
package com.imooc;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/*
* 玩家类
* 包括玩家id,玩家姓名
* 玩家手中最大的牌和存放玩家手牌的集合
* */
public class Player implements Comparable<Player> {
//玩家id
private int id;
//玩家姓名
private String name;
//玩家手中最大的牌
private Card maxcard;
//存放玩家手牌的集合
private List<Card> cards=new ArrayList<Card>();
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;
}
public List<Card> getCards() {
return cards;
}
public void setCards(List<Card> cards) {
this.cards = cards;
}
//构造方法
public Player(int id,String name){
this.id=id;
this.name=name;
}
//获取玩家手中最大的牌
public Card getMaxcard(){
//先排序,Card类中重写了comprarTo()方法,下标为0的是最大的值
Collections.sort(cards);
//返回获取到的最大的值
return this.maxcard=cards.get(0);
}
@Override
public int compareTo(Player o) {
// 根据玩家手中最大的牌进行排序,获胜的玩家排在最前面
return this.getMaxcard().compareTo(o.getMaxcard());
}
//玩家拿牌的方法
public void add(Card card){
System.out.println("玩家:"+this.name+"拿牌:"+card);
//添加到手牌集合
this.cards.add(card);
}
//输出玩家最大的手牌
public void showMax(){
System.out.println("玩家:"+this.name+"的最大手牌为:"+this.getMaxcard());
}
}
package com.imooc;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
/*
* 扑克牌游戏类
* 创建玩家
* 根据输入的玩家信息进行发牌
* 最后比较大小
* */
public class PokerGema {
//存放玩家的集合
private List<Player> listplayer=new ArrayList<Player>();
//整幅扑克牌的类
Poker poker=new Poker();
//接收用户输入的信息
private Scanner scanner=new Scanner(System.in);
//保存玩家的人数
int number=0;
//创建玩家人数
public void creatplayerNumber(){
System.out.println("扑克牌的总数为:"+poker.size());
System.out.println("-----请输入要创建的玩家人数-----");
//判断键盘是否有输入,当有输入时进行循坏
while(scanner.hasNext()){
//判断输入的值是否为整形,当为整形时执行循坏
if(scanner.hasNextInt()){
int j=scanner.nextInt();
//判断输入的值是否大于2并且小于扑克牌的数量
if(j>1&&j<poker.size()){
//接收用户输入的信息
number=j;
break;
}else{
System.out.println("请输入正确的玩家人数");
System.out.println("玩家人数要大于2,并且小于扑克牌的总数:"+poker.size());
continue;//继续循环
}
}else{
System.out.println("请输入数字哦!");
//清空scanner的数据
scanner.next();
continue;//继续循环
}
}
//循环添加玩家
for(int i=1;i<=number;i++){
System.out.println("请输入第:"+i+"个玩家姓名");
listplayer.add(new Player(i,scanner.next()));//添加玩家
}
//循坏输出玩家信息
for (Player player : listplayer) {
System.out.println("欢迎玩家:"+player.getName());
}
}
//开始创建扑克牌
public void StartCreatingPoker(){
//创建扑克牌
poker.creatPoker();
//洗牌
poker.randompoker();
}
//发牌
public void dealpoker(){
//提示用户输入信息
System.out.println("请设置每位玩家发多少张牌");
System.out.println("每位玩家发牌的数量必须大于0并且发牌的总数不能超过扑克牌的数量:"+poker.size());
//用于保存每位玩家发牌的数量
int i=0;
//判断是否有输入
while(scanner.hasNext()){
//判断输入的是否是int型
if(scanner.hasNextInt()){
int j=scanner.nextInt();//将输入的值赋值给j;
int k=j*number;//计算玩家人乘以每位玩家发牌的牌数得到总的发牌数量
//判断每位玩家的牌数要大于0并且小于扑克牌的数量
if(j>0&&k<poker.size()){
i=j;
break;//跳出循环
}else{
System.out.println("每位玩家发牌的数量必须大于0并且小于扑克牌的总数:"+poker.size());
continue;//继续循环
}
}else{
System.out.println("请输入整数");
//清空scanner输入的信息
scanner.next();
continue;//继续循环
}
}
//每位玩家发牌的数量乘以玩家的人数得到发牌的总数
int pokernumber=i*number;
//每位玩家拿牌的数量乘以玩家的人数得到发牌的总数,然后总数多少就循环多少次
for(int j=0;j<pokernumber;){
//依次向玩家1添加扑克牌1,玩家2添加扑克牌2,玩家1添加扑克牌3,玩家2添加扑克牌4.。。。。。
for(int b=0;b<number;b++){
//获得每位玩家然后依次添加扑克牌
listplayer.get(b).add(poker.getlistCard().get(j));
j++;//每次基数加一
}
}
}
//输出玩家手中各自的手牌和最大的扑克牌
public void PlayerMaxPoker(){
//输出玩家各自的手牌
for (Player playername : listplayer) {
System.out.println("玩家:"+playername.getName()+"的手牌为:"+playername.getCards().toString());
}
//输出最大的手牌
for (Player playername : listplayer) {
playername.showMax();
}
}
//比较大小,根据玩家手中最大的牌进行排序
public void comparePlayer(){
Collections.sort(listplayer);
System.out.println("玩家:"+listplayer.get(0).getName()+"获胜!");
}
}
package com.imooc;
public class Test {
/**
*主程序测试类
*/
public static void main(String[] args) {
//创建扑克牌游戏类的实例
PokerGema pokergema=new PokerGema();
//创建扑克牌
pokergema.StartCreatingPoker();
//创建玩家
pokergema.creatplayerNumber();
//发牌
pokergema.dealpoker();
////输出玩家手中各自的手牌和最大的扑克牌
pokergema.PlayerMaxPoker();
//比较大小,根据玩家手中最大的牌进行排序
pokergema.comparePlayer();
}
}