为了账号安全,请及时绑定邮箱和手机立即绑定

Java入门第三季——扑克比大小游戏 简单制作(采用了set表变成了乱序)

标签:
Java

首先Card类,Player类创建:
Card 写卡牌属性
使用了Compareable为了下面比较卡牌大小
使用了toString()将单张扑克牌属性转化成字符串输出
Player写玩家属性
设置了HashSet接口调用card属性

package com.list;

public class Card implements Comparable<Card> {

    public String color;

    public String dian;

    public Card(String color, String dian) {
        this.color = color ;

        this.dian = dian;
    }
    @Override //将单张扑克牌属性转化成字符串输出
    public String toString() { return color + dian; } 
    @Override //将单张扑克牌属性转化成字符串输出
    public int compareTo(Card o) { 
        return this.dian.compareTo(o.dian); } 

}
package com.list;

import java.util.HashSet;
import java.util.Set;

public class Player {
  public String ID;
  public String Name;
  public Set<Card>  Cards; //设置接口
  public Player(String ID,String Name){
      this.ID=ID;
      this.Name=Name;
      this.Cards=new HashSet<Card>();
  }
}

然后setTest+主函数 作为一类
先setTest

package com.list;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
//import java.util.Scanner;后面可以用这个输入player

    public class SetTest {
    public List<Card> cardbiao;
    public SetTest(){this.cardbiao=new ArrayList<Card>();//一个动态数组

    }

然后各种函数:Quanjia();加入卡牌功能
Quancha();迭代器查找输出所有卡牌功能 用的是List表 有序
fapai(); 简单输出文字

 public void Quanjia(){
         String[] a1={"黑桃","红桃","梅花","方块"};
         String[] a2={"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
         for(String str:a1){
             for(String str1:a2){
         Card c=new Card(str,str1);
            cardbiao.add(c);}};//数组转化为课程表
          }
        /**
         * 通过迭代器全查
         * @param args
         */
        public void Quancha() {
            //通过集合的iterator方法,取得迭代器的实例
            Iterator<Card> it = cardbiao.iterator();
            System.out.println("有如下卡牌(通过迭代器访问):");
            while(it.hasNext()) {
                Card cr = it.next();
                System.out.println("牌:" + cr.color + cr.dian);
            }
        }

        public void fapai(Player player1,Player player2){
            System.out.println("******************开始发牌********************");
            //将第一张牌发给玩家1 
            System.out.println("*****玩家:" + player1.Name + "-拿牌"); 
            //将第二张牌发给玩家2 
            System.out.println("*****玩家:" + player2.Name + "-拿牌");
            //将第三张牌发给玩家1 
            System.out.println("*****玩家:" + player1.Name + "-拿牌"); 
            //将第四张牌发给玩家2
            System.out.println("*****玩家:" + player2.Name + "-拿牌");
            System.out.println("******************发牌结束*********************");

            }

最后主函数:感觉用函数的话会很冗(rong)余
因为我showpai()遍历list并把它放入set集中,set中没有返回值,只能将之用toArray存放入数组中,得到一个随机卡牌数组。这个步骤放入showpai()函数的话,后面函数对数组进行操作就要重新写一遍showpai;
所以在此生成两种做法:
1.函数重复怕什么,直接多个函数
ShowPai(a,c);
MaxPai(a, c);
bijiao(a,c);

public  void ShowPai(Player a,Player c){

            for(Card kahao:cardbiao){
                a.Cards.add(kahao);//
                }
            Object[]b=a.Cards.toArray();//set型中没有返回值,只能用toarray变成数组

            for(int i=0;i<2;i++) System.out.println(a.Name+"得到了卡牌:" + b[i]);
        //  Object[]d=c.Cards.toArray();//set型中没有返回值,只能用toarray变成数组
            for(int i=b.length-1;i>b.length-3;i--)
                System.out.println(c.Name+"得到了卡牌:" + b[i]);
        }//用了同一个数组,从最后发牌,这样不会重复。

        public void MaxPai(Player a,Player c){
            for(Card kahao:cardbiao){
                a.Cards.add(kahao);//
                }
            Object[]b=a.Cards.toArray();//set型中没有返回值,只能用toarray变成数组

                Object[]b1={b[0],b[1]};
                Arrays.sort(b1);
                System.out.println(a.Name+"得到的最大卡牌:" + b1[1]);
                Object[]b2={b[b.length-1],b[b.length-2]};
                Arrays.sort(b2);
                System.out.println(c.Name+"得到的最大卡牌:" + b2[1]);
        }   
        public void bijiao(Player a,Player c){
            for(Card kahao:cardbiao){
                a.Cards.add(kahao);//
                }
            Object[]b=a.Cards.toArray();//set型中没有返回值,只能用toarray变成数组

                Object[]b1={b[0],b[1]};
                Arrays.sort(b1);
                Object[]b2={b[b.length-1],b[b.length-2]};
                Arrays.sort(b2);        
                Object[]b3={b1[1],b2[1]};
                Arrays.sort(b3);
                if(b3[1]==b1[1])
                {System.out.println("玩家:["+a.Name+"] 获胜!"); }
            else{ System.out.println("玩家:["+c.Name+"] 获胜!"); }
        }
public static void main(String[] args) {
        SetTest run=new SetTest();
        run.Quanjia();
        run.Quancha();      
        Player a=new Player("1","小华");
        Player c=new Player("2","小孙");
        run.fapai(a,c);    
        System.out.println("===========游戏开始===========");
        System.out.println("===========双方手牌如下===========");
        run.ShowPai(a,c); 
            run.MaxPai(a, c);
        run.bijiao(a,c);    
        }   
}

2.下面过程不用函数,直接写在主函数中

public static void main(String[] args) {
        SetTest run=new SetTest();
        run.Quanjia();
        run.Quancha();      
        Player a=new Player("1","小华");
        Player c=new Player("2","小孙");
        run.fapai(a,c);

        System.out.println("===========游戏开始===========");
        System.out.println("===========双方手牌如下===========");

        for(Card kahao:run.cardbiao){
            a.Cards.add(kahao);//
            }
        Object[]b=a.Cards.toArray();//set型中没有返回值,只能用toarray变成数组 
        for(int i=0;i<2;i++) System.out.println(a.Name+"得到了卡牌:" + b[i]);
        //Object[]d=c.Cards.toArray();//set型中没有返回值,只能用toarray变成数组
        for(int i=b.length-1;i>b.length-3;i--)System.out.println(c.Name+"得到了卡牌:" + b[i]);
        //用了同一个数组,从最后发牌,这样不会重复。
        Object[]b1={b[0],b[1]};
        Arrays.sort(b1);
        System.out.println(a.Name+"得到的最大卡牌:" + b1[1]);
        Object[]b2={b[b.length-1],b[b.length-2]};
        Arrays.sort(b2);
        System.out.println(c.Name+"得到的最大卡牌:" + b2[1]);
        System.out.println("===========结果===========");
        Object[]b3={b1[1],b2[1]};
        Arrays.sort(b3);
        if(b3[1]==b1[1])
                    {System.out.println("玩家:["+a.Name+"] 获胜!"); }
                else{ System.out.println("玩家:["+c.Name+"] 获胜!"); }
//      run.ShowPai(a,c); 
//      run.MaxPai(a, c);
//  run.bijiao(a,c);
//  结果是一样的,这样不会冗余
        }

}

最后结果贴出:图片描述
……因为用循环输出,所以一行接一行。。。
图片描述

点击查看更多内容
3人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消