Java:斗地主 历史手牌写入文件/并查看历史手牌

一个小作业,虽有结果,但是写的太臃肿,而且不规范,好揪心啊!欢迎大家批评,虚心求教!

成长是个痛苦和美好的过程,加油吧!

代码:主方法:

writeFilePoker("C:\\other\\io\\pokerGame.txt", a, true);

构造方法中的true再方法里的定义为isAppend表示为是否继续添加,及保存历史记录!

若是false则不保存历史记录,再次写入时会清空文件里的内容!

//主方法
public static void main(String[] args) throws IOException {
        Poker poker = new Poker();
        System.out.println("欢乐斗地主-开始游戏");
        String a=poker.poker01();
        writeFilePoker("C:\\other\\io\\pokerGame.txt", a, true);
        Scanner sc = new Scanner(System.in);
        System.out.println("是否查看历史手牌: 是/否");
        String look = sc.next();
        if (look.equals("是")) {
                System.out.println(readFilePoker("C:\\other\\io\\pokerGame.txt"));
        } else {
            System.out.println("本局游戏结束!");
        }
    }


    //将执行的结果写入文件!
    public static void writeFilePoker(String path, String s, boolean isAppend) throws IOException {
        File f = new File(path);
        if (f.getParentFile() != null && !f.getParentFile().exists()) {//判断父级路径为空,且判断是否为文件
            f.getParentFile().mkdirs();//迭代查找文件夹及迭代创建文件
        }
        FileWriter fw = new FileWriter(f, isAppend);
        for (int i = 0; i < s.length(); i++) {//按照传入的字节长度进行循环加入文件,
            // 转字符
            fw.write(s.charAt(i));
        }
        fw.close();
    }
    //读取历史手牌!
    public static String readFilePoker(String path) throws IOException {
        File f = new File(path);
        if (!f.exists()) {
            System.out.println("无历史记录,欢迎继续游戏!");
        }
        FileReader fr = new FileReader(f);
        StringBuilder sb = new StringBuilder();
        int tmp;
        while ((tmp = fr.read()) != -1) {  //只要没读取完就一直读取!
            sb.append((char) tmp);//转字符并添加!
        }
        fr.close();
        return sb.toString();
    }

基本类:

//定义牌数于花色
public class Base {
    private String image;
    private  int num;
    public Base() {
    }
    public Base(int num, String image) {
        this.image = image;
        this.num = num;
    }
    @Override
    public String toString() {
        return  num +image ;
    }
    public String getImage() {
        return image;
    }
    public void setImage(String image) {
        this.image = image;
    }
    public int getNum() {
        return num;
    }
    public void setNum(int num) {
        this.num = num;
    }
}
//定义玩家
public class Player {
    private String name;
    public Player() {
    }
    public Player(String name) {
        this.name = name;
    }
    @Override
    public String toString() {
        return  name ;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
//扑克牌
    public  String poker01() {
        ArrayList list = new ArrayList();
        //可以直接13个点数输出!!!!
        String[] hua = { "♤","♡","♧","◇"};
        String[] ajqk = {"3","4",5","6","7","8","9","10","J","Q","K","A","2"};
        for (int i = 0; i < 13; i++) {//52张牌
            for (int j = 0; j < 4; j++) {
                list.add(ajqk[i]+hua[j]);
            }
        }
        list.add("小♛");
        list.add("大♚");
        //54张扑克牌
        //打乱牌序
        Collections.shuffle(list);
//        System.out.println("一副扑克牌:"+list+"牌数:"+list.size()+"张");
        //发牌
        ArrayList play01=new ArrayList();
        ArrayList play02=new ArrayList();
        ArrayList play03=new ArrayList();
        ArrayList residue=new ArrayList();
        for (int i = 0; i < list.size(); i++) {
            Object p=list.get(i);
            if(i%3==0&&i<51){
                play01.add(p);

            }else if(i%3==1&&i<51){
                play02.add(p);
            } else if(i%3==2&&i<51){
                play03.add(p);
            } else{
                residue.add(p);
            }
        }
        Player player01 = new Player("① 赌圣-周星驰");
        Player player02 = new Player("② 赌神-周润发");
        Player player03 = new Player("③ 赌侠-刘德华");
        System.out.println("底牌:"+residue);//地主
        //将底牌取出来
        //随机产生地主:(简化?)
        int a=(int)(Math.random()*3+1);
        switch (a){
            case 1:
                System.out.println("地主是:"+player01);
                play01.add(residue.get(0));
                play01.add(residue.get(1));
                play01.add(residue.get(2));
                System.out.println(player01+":"+play01+"\t玩家牌数:"+ play01.size()+"张");
                System.out.println(player02+":"+play02+"\t玩家牌数:"+ play02.size()+"张");
                System.out.println(player03+":"+play03+"\t玩家牌数:"+ play03.size()+"张");
                break;
            case 2:
                System.out.println("地主是:"+player02);
                play02.add(residue.get(0));
                play02.add(residue.get(1));
                play02.add(residue.get(2));
                System.out.println(player01+":"+play01+"\t玩家牌数:" +play01.size()+"张");
                System.out.println(player02+":"+play02+"\t玩家牌数:" +play02.size()+"张");
                System.out.println(player03+":"+play03+"\t玩家牌数:" +play03.size()+"张");
                break;
            case 3:
                System.out.println("地主是:"+player03);
                play03.add(residue.get(0));
                play03.add(residue.get(1));
                play03.add(residue.get(2));
                System.out.println(player01+":"+play01+"\t玩家牌数:" +play01.size()+"张");
                System.out.println(player02+":"+play02+"\t玩家牌数:" +play02.size()+"张");
                System.out.println(player03+":"+play03+"\t玩家牌数:" +play03.size()+"张");
                break;
            default:
                System.out.println("无人抢地主");
                break;
        }
        return "地主是:"+ a +"号玩家 !祝大家财源滚滚!\n"+
                "底牌:"+residue+"\n"+
                player01+":"+play01+"\t玩家牌数:"+play01.size()+"张\n"+
                player02+":"+play02+"\t玩家牌数:"+play02.size()+"张\n"+
                player03+":"+play03+"\t玩家牌数:"+play03.size()+"张\n\n";
    }

结果:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值