第三家卡牌 终于搞定 求大神指点

来源:7-1 简易扑克牌游戏

发光的蜜蜂

2016-04-29 17:32

package com.liuyang;

import java.util.ArrayList;
import java.util.List;

public class Card {
 public String ID;
 public String Name;
 public List<poker> pokerCard;
 public Card(){
  
 }
 
 public Card(String ID,String Name){
  this.ID=ID;
  this.Name=Name;
  this.pokerCard =new ArrayList<poker>();
 }

 public String getID() {
  return ID;
 }

 public String getName() {
  return Name;
 }

 public List<poker> getPokerCard() {
  return pokerCard;
 }

}
package com.liuyang;

import java.util.Arrays;
import java.util.List;


public class poker implements Comparable<poker>{
 
  public String value;//扑克牌面值
  public String color;//扑克牌花色
  
  
   public poker(String value,String color){
   this.value=value;
   this.color=color;
  }
   public poker() {
  // TODO 自动生成的构造函数存根
 }

  public String getValue() {
   return value;
  }

  public void setValue(String value) {
   this.value = value;
  }

  public String getColor() {
   return color;
  }

  public void setColor(String color) {
   this.color = color;
  }
  @Override
  public int compareTo(poker o) {
   // TODO 自动生成的方法存根
   List<String> valueBase = Arrays.asList("K","Q","J","10","9","8","7","6","5","4","3","2","A");
         List<String> colorBase = Arrays.asList("黑桃","红桃","梅花","方片");
         if(valueBase.indexOf(this.value) == valueBase.indexOf(o.value))
             return Integer.valueOf(colorBase.indexOf(this.color)).compareTo(Integer.valueOf(colorBase.indexOf(o.getColor())));
         else 
             return Integer.valueOf(valueBase.indexOf(this.value)).compareTo(Integer.valueOf(valueBase.indexOf(o.getValue())));
  }
  

}
package com.liuyang;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;

public class Test {
 public List<poker> pokerTo;
 private int COLORNUM = 13;
 public int CARDNUM = 52;
 public Map<String,Card> cardS;
 public Test(){
  this.cardS=new HashMap<String, Card>();
  pokerTo=new ArrayList<poker>();
 }
 

 public static void main(String[] args) {
  // TODO 自动生成的方法存根
  Test t=new Test();
  System.out.println("----------创建扑克牌-----------");
  t.PokerDeal(); //创建扑克;
  System.out.println("----------扑克牌创建成功---------");
  System.out.print("扑克含有:");
  t.testPoker(); //输出扑克所包含牌;
  System.out.println();
  System.out.println("-----------开始洗牌-------------");
  t.pokerWash(); //打乱扑克顺序;
  System.out.println("-----------洗牌结束-------------");
  System.out.println("-----------创建玩家-------------");
  t.TestIDName(); //创建玩家输入玩家ID,Name;
  System.out.println("-----------开始发牌-------------");
  t.pokerDeal();  //将扑克发到玩家手中;
  System.out.println("-----------发牌结束-------------");
  System.out.println("-----------游戏开始-------------");
  t.TestPokerUp(); //输出玩家手中扑克;
  t.pokerSort();   //比较玩家手中扑克大小;
  }
 
 
 public void PokerDeal(){
  String valueB[]= {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
  String colorB[]= {"黑桃","红桃","梅花","方片"};
  for (int j = 0; j < CARDNUM/COLORNUM;j++) {
   for (int i = 0; i < COLORNUM; i++) {
    poker pokers=new poker(valueB[i],colorB[j]);//向pokers临时对象中保存poker牌组数据;
    pokerTo.add(pokers);       //添加到pokerTo中;
   }
  }   
     }
 
 
     public void testPoker(){
        int size=pokerTo.size();         //用size对pokerTo进行输出
        for (int i = 0; i < size; i++) {
         poker cr = (poker)pokerTo.get(i);  //调用pokerTo中的poker数据,保存在临时对象cr中;
         System.out.print(cr.color+cr.value+","); 
                 }
            }
     
     
     public void pokerWash(){
         Collections.shuffle(pokerTo);  //用Collections.shuffle()语句把顺序打乱;

}


 public void TestIDName() {
  Scanner to=new Scanner(System.in);
  int i=0;    //需要更改游戏参与人数只需要更改while中i的最大值
  while (i<2) { 
   System.out.println("请输入第"+(i+1)+"位玩家ID和姓名");
   System.out.print("输入ID:");
   String ID=to.next();   
   Card ca=cardS.get(ID);
   if(ca==null){    //确认card中是否有该学生ID;
    System.out.print("请输入学生姓名:");
    String Name=to.next();
    Card stu=new Card(ID, Name);
    cardS.put(ID, stu);
    i++;
   }else {
     System.out.println("输入有误");
    }continue;
        } 
  for (String a : cardS.keySet()) {      //用fore循环输出玩家信息
   System.out.println("----欢迎玩家:"+cardS.get(a).ID+"   "+cardS.get(a).Name);
  }
 }
 
 
 public void pokerDeal(){  //发牌
  poker poker;
        for (int i = 0; i < 2; i++) {   //需要更改玩家手牌数量,只需要更改i最大值;
         Set<String> key=cardS.keySet();
         for (String a : key) {
             poker = pokerTo.get(0);  //取出poker中的第一张牌
             pokerTo.remove(0);       //把poker中的第一张牌删除
             System.out.println(cardS.get(a).Name+"拿牌"); 
                   cardS.get(a).getPokerCard().add(poker);   //将取出的牌交给玩家
                   }
         } 
        }
 
 
 public void pokerSort(){
  poker b = null;    //创建放牌的临时变量
  Card d=null;       //创建放玩家信息的临时变量
  for (String a : cardS.keySet()) {
   Collections.sort(cardS.get(a).pokerCard);    //通过collections.sort对玩家手牌进行排序;
   List<com.liuyang.poker> s=cardS.get(a).getPokerCard();  
            poker ss=s.get(0);       //将玩家排序后最大的牌放入临时变量中            
            System.out.println("玩家"+cardS.get(a).Name+"最大手牌为:"+ss.color+ss.value);
            if(b==null||ss.compareTo(b)<0){  
             b=ss;
             d=cardS.get(a);     //存放牌最大的玩家的手牌和信息
            }
  }
  System.out.println("第"+d.ID+"名玩家"+d.Name+"获胜,最大手牌为"+b.value+b.color);  //输出
 }
 
 
 public void TestPokerUp(){    //通过双for循环输出玩家手中的牌
         for (String a : cardS.keySet()) {
          System.out.println(cardS.get(a).Name+"手牌为");
                for (poker poker2 : cardS.get(a).getPokerCard()) {
                 System.out.print(poker2.color+poker2.value); 
                 System.out.println("");
                }
         }
 }
 }


写回答 关注

3回答

  • ran1021
    2016-05-17 15:06:58

    重写的equals方法好像有问题喔

    ran102... 回复发光的蜜蜂

    啊,是我理解错了。没有错的。。

    2016-05-19 09:50:54

    共 2 条回复 >

  • 沫语
    2016-05-14 17:08:40

    能问下,在重写的compaqreTo()方法中,list中为什么能用indexOf()方法查找到this.value的位置吗?不是特别理解

    发光的蜜蜂

    我也是试了半天 才发现同一类下可以直接this.value 并且调用相应的值 然后就用了。。还有 我没有太明白你的问题 如果是this.value怎么找到的牌 是因为有在调用compaqreTO方法前往poker中存储过牌。。好吧 我也是新手说的不一定对。。

    2016-05-19 09:21:04

    共 1 条回复 >

  • sumdi
    2016-05-04 09:40:49

    非常不错

Java入门第三季

Java中你必须懂得常用技能,不容错过的精彩,快来加入吧

409777 学习 · 4339 问题

查看课程

相似问题