码迷,mamicode.com
首页 > 编程语言 > 详细

Java 小游戏:扎金花

时间:2015-07-29 13:49:55      阅读:191      评论:0      收藏:0      [点我收藏+]

标签:

 

当所有人都拿到3张牌之后,需要比较所有人的牌的大小,这时分为下面几步完成   1) 将一手牌按从大到小的顺序重新排列并计算出当前一手牌的牌型。   2)比较所有参与人的牌,先比较牌型,如果牌型相同再比较点数和花色。
1)先完成一手牌的排列和计算牌型 Yarborough.java
package com.entity;
 
import com.utils.CardUtils;
 
/**
*
* @author Administrator
*
*/
public class Yarborough{
    /**
     *
     */
    private PlayCard first;
    /**
     *
     */
    private PlayCard second;
    /**
     *
     */
    private PlayCard three;
   
    /**
     *
     */
    private String typeName;
   
    /**
     *
     */
    private int typeValue;
   
   
    private PlayCard preCard;
    private PlayCard currCard;
    private PlayCard nextCard;
   
   
    public Yarborough(PlayCard first) {
        super();
        this.first = first;
    }
    public Yarborough(PlayCard first, PlayCard second, PlayCard three) {
        this.first=first;
        this.second=second;
        this.three=three;
    }
   
    /**
     *
     */
    public void resetPlayCard(){
        CardUtils utils=new CardUtils();
        //
        PlayCard[] cards={first,second,three};
        utils.sortPlayCard(cards);
        //
        this.first = cards[2];
        this.second = cards[1];
        this.three = cards[0];
        //
        utils.calculatePlateType(this);
    }
    public PlayCard getFirst() {
        return first;
    }
    public void setFirst(PlayCard first) {
        this.first = first;
    }
    public PlayCard getSecond() {
        return second;
    }
    public void setSecond(PlayCard second) {
        this.second = second;
    }
    public PlayCard getThree() {
        return three;
    }
    public void setThree(PlayCard three) {
        this.three = three;
    }
    public String getTypeName() {
        return typeName;
    }
    public void setTypeName(String typeName) {
        this.typeName = typeName;
    }
    public int getTypeValue() {
        return typeValue;
    }
    public void setTypeValue(int typeValue) {
        this.typeValue = typeValue;
    }
}
 
CardUtils.java添加如下代码:
/**
*
* @param careArray
*/
public void sortPlayCard(PlayCard[] careArray){
    if(careArray!=null && careArray.length>0){
        //
        for(int i=0;i<careArray.length;i++){
            for(int j=i+1;j<careArray.length;j++){
                PlayCard tmp=null;
               
                //
                int index1=getIndexByArray(careArray[i].getNumber(), DefineUtils.NUM_ARRAY);
                int index2=getIndexByArray(careArray[j].getNumber(), DefineUtils.NUM_ARRAY);
                //
                if(index1>index2){
                    tmp=careArray[i];
                    careArray[i]=careArray[j];
                    careArray[j]=tmp;
                }else if(index1==index2){//
                    //
                    int index3=getIndexByArray(careArray[i].getColor(), DefineUtils.COLOR_ARRAY);
                    int index4=getIndexByArray(careArray[j].getColor(), DefineUtils.COLOR_ARRAY);
                    if(index3>index4){
                        tmp=careArray[i];
                        careArray[i]=careArray[j];
                        careArray[j]=tmp;
                    }
                }
            }
        }
    }
}
 
/**
*
* @param value
* @param arrays
* @return
*/
public int getIndexByArray(String value,String[] arrays){
    if(arrays!=null && arrays.length>0){
        for(int i=0;i<arrays.length;i++){
            if(arrays[i].equals(value)){
                return i;
            }
        }
    }
    return -1;
}
 
/**
*
* "张(0)","子(1)","子(2)","花(3)","金(4)","子(5)","殊(6)"
* @param yar
* @return
*/
public void calculatePlateType(Yarborough yar){
    if(yar!=null){
        PlayCard firstCard=yar.getFirst();
        PlayCard secondCard=yar.getSecond();
        PlayCard threeCard=yar.getThree();
        //
        if(firstCard.getNumber().equals(secondCard.getNumber())
                && firstCard.getNumber().equals(threeCard.getNumber())){//子:
            yar.setTypeName(DefineUtils.DEF_TYPE_NAME[5]);
            yar.setTypeValue(5);
        }else if(firstCard.getColor().equals(secondCard.getColor())
                && firstCard.getColor().equals(threeCard.getColor())){//
            //
            if(isStraight(yar)){//
                yar.setTypeName(DefineUtils.DEF_TYPE_NAME[4]);
                yar.setTypeValue(4);
            }else{//
                yar.setTypeName(DefineUtils.DEF_TYPE_NAME[3]);
                yar.setTypeValue(3);
            }
        }else if(isStraight(yar)){//
            yar.setTypeName(DefineUtils.DEF_TYPE_NAME[2]);
            yar.setTypeValue(2);
        }else if(firstCard.getNumber().equals(secondCard.getNumber())
                || firstCard.getNumber().equals(threeCard.getNumber())
                || secondCard.getNumber().equals(threeCard.getNumber())){//
            yar.setTypeName(DefineUtils.DEF_TYPE_NAME[1]);
            yar.setTypeValue(1);
        }else if(
                  ("5".equals(firstCard.getNumber())
                   && "3".equals(secondCard.getNumber())
                   && "2".equals(threeCard.getNumber())
                  )
                &&(
                    !firstCard.getColor().equals(secondCard.getColor())
                    && !firstCard.getColor().equals(threeCard.getColor())
                    && !secondCard.getColor().equals(threeCard.getColor())
                  )
                ){//
            yar.setTypeName(DefineUtils.DEF_TYPE_NAME[6]);
            yar.setTypeValue(6);
        }else{//
            yar.setTypeName(DefineUtils.DEF_TYPE_NAME[0]);
            yar.setTypeValue(0);
        }
    }
}
 
/**
*
* @param yar
* @return
*/
private boolean isStraight(Yarborough yar){
    int index1=getIndexByArray(yar.getFirst().getNumber(), DefineUtils.NUM_ARRAY);
    int index2=getIndexByArray(yar.getSecond().getNumber(), DefineUtils.NUM_ARRAY);
    int index3=getIndexByArray(yar.getThree().getNumber(), DefineUtils.NUM_ARRAY);
    if(index1-1==index2 && index2-1==index3){
        return true;
    }
    return false;
}
 
测试类:Test5.java
package com.test;
 
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
 
import com.entity.PlayCard;
import com.entity.Yarborough;
import com.utils.CardUtils;
 
public class Test5 {
    /**
     *
     * @param rsList
     */
    public static void disp(List<Yarborough> rsList){
        System.out.println(rsList.size()+":");
        for(int i=0;i<rsList.size();i++){
            System.out.println("第"+(i+1)+":");
            Yarborough y=rsList.get(i);
            System.out.print("牌:"+(y.getFirst().getNumber())+"["+y.getFirst().getColor()+"] ");
            if(y.getSecond()!=null){
                System.out.print("牌:"+(y.getSecond().getNumber())+"["+y.getSecond().getColor()+"] ");
            }
            if(y.getThree()!=null){
                System.out.print("牌:"+(y.getThree().getNumber())+"["+y.getThree().getColor()+"] ");
            }
            if(y.getTypeName()!=null){
                System.out.print(":"+y.getTypeName());
            }
            System.out.println();
        }
    }
   
    /**
     *
     * @param y
     */
    public static void dispYarborough(Yarborough y,int rotaion){
        switch(rotaion){
        case 1:
            System.out.print("牌:"+(y.getFirst().getNumber())+"["+y.getFirst().getColor()+"] ");
            break;
        case 2:
            System.out.print("牌:"+(y.getSecond().getNumber())+"["+y.getSecond().getColor()+"] ");
            break;
        case 3:
            System.out.print("牌:"+(y.getThree().getNumber())+"["+y.getThree().getColor()+"] ");
            break;
        }
        System.out.println();
    }
   
    /**
     *
     * @param list
     */
    public static void dispNewCard(List<PlayCard> list){
        PlayCard card=null;
        if(list!=null && list.size()>0){
            card=list.get(list.size()-1);
            System.out.println("---------:"+card.getNumber()+"["+card.getColor()+"]");
        }
    }
    public static void main(String[] args) {
        CardUtils utils=new CardUtils();
        List<PlayCard> list=utils.generatorAllCard();//
        int rs=10;//
        List<Yarborough> rsList=new ArrayList<Yarborough>();//
        int maxIndex=0;
        /*
         *
         * 给10
        */
        for(int i=1;i<=3;i++){//
            int count=0;
            //
            //
            System.out.println("---------第"+(maxIndex+1)+"牌");
            dispNewCard(list);//第maxIndex
            while(true){
                switch(i){
                case 1:
                    rsList.add(new Yarborough(utils.popPlayCardByLast(list)));//
                    break;
                case 2:
                    Yarborough y2=rsList.get(maxIndex);
                    y2.setSecond(utils.popPlayCardByLast(list));//
                    break;
                case 3:
                    Yarborough y3=rsList.get(maxIndex);
                    y3.setThree(utils.popPlayCardByLast(list));//
                    break;
                }
                count++;
                maxIndex++;
                if(maxIndex>=rs) maxIndex=0;
                if(count>=rs){
                    count=0;
                    break;
                }
            }
            disp(rsList);
            //
            maxIndex=utils.getMaxCardByRotation(rsList, i);
            System.out.println("===========第"+i+"第"+(maxIndex+1)+":");
            System.out.print("===========");
            dispYarborough(rsList.get(maxIndex),i);
            System.out.println();
           
        }
       
        //
        //1
        utils.resetPlayCard(rsList);
        disp(rsList);
    }
}
 
 
测试结果:
---------1
---------Q[花]
10
1
牌:Q[花]
2
牌:7[片]
3
牌:6[桃]
4
牌:3[桃]
5
牌:8[花]
6
牌:7[花]
7
牌:5[花]
8
牌:5[片]
9
牌:6[桃]
10
牌:K[片]
===========11
===========牌:Q[花]
 
---------1
---------K[桃]
10
1
牌:Q[花] 牌:K[桃]
2
牌:7[片] 牌:8[桃]
3
牌:6[桃] 牌:A[片]
4
牌:3[桃] 牌:J[桃]
5
牌:8[花] 牌:9[桃]
6
牌:7[花] 牌:J[花]
7
牌:5[花] 牌:9[片]
8
牌:5[片] 牌:2[花]
9
牌:6[桃] 牌:J[桃]
10
牌:K[片] 牌:Q[桃]
===========23
===========牌:A[片]
 
---------3
---------7[桃]
10
1
牌:Q[花] 牌:K[桃] 牌:4[桃]
2
牌:7[片] 牌:8[桃] 牌:10[花]
3
牌:6[桃] 牌:A[片] 牌:7[桃]
4
牌:3[桃] 牌:J[桃] 牌:Q[桃]
5
牌:8[花] 牌:9[桃] 牌:2[片]
6
牌:7[花] 牌:J[花] 牌:Q[片]
7
牌:5[花] 牌:9[片] 牌:9[桃]
8
牌:5[片] 牌:2[花] 牌:K[桃]
9
牌:6[桃] 牌:J[桃] 牌:5[桃]
10
牌:K[片] 牌:Q[桃] 牌:9[花]
===========38
===========牌:K[桃]
 
10
1
牌:K[桃] 牌:Q[花] 牌:4[桃]
2
牌:10[花] 牌:8[桃] 牌:7[片]
3
牌:A[片] 牌:7[桃] 牌:6[桃]
4
牌:Q[桃] 牌:J[桃] 牌:3[桃]
5
牌:9[桃] 牌:8[花] 牌:2[片]
6
牌:Q[片] 牌:J[花] 牌:7[花]
7
牌:9[桃] 牌:9[片] 牌:5[花]
8
牌:K[桃] 牌:5[片] 牌:2[花]
9
牌:J[桃] 牌:6[桃] 牌:5[桃]
10
牌:K[片] 牌:Q[桃] 牌:9[花]

Java 小游戏:扎金花

标签:

原文地址:http://www.cnblogs.com/Holing/p/4685631.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!