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";
    }

结果:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Sure! Here's a simple implementation of a console-based "Landlord" game in C++: ```cpp #include <iostream> #include <vector> #include <algorithm> // Function to print the cards in a player's hand void printHand(const std::vector<int>& hand) { for (int card : hand) { std::cout << card << " "; } std::cout << std::endl; } int main() { // Create a deck of cards std::vector<int> deck; for (int i = 3; i <= 15; i++) { deck.push_back(i); } // Shuffle the deck std::random_shuffle(deck.begin(), deck.end()); // Distribute the cards to three players std::vector<int> player1, player2, player3; for (int i = 0; i < 51; i += 3) { player1.push_back(deck[i]); player2.push_back(deck[i + 1]); player3.push_back(deck[i + 2]); } // Sort the cards in each player's hand std::sort(player1.begin(), player1.end()); std::sort(player2.begin(), player2.end()); std::sort(player3.begin(), player3.end()); // Print each player's hand std::cout << "Player 1: "; printHand(player1); std::cout << "Player 2: "; printHand(player2); std::cout << "Player 3: "; printHand(player3); return 0; } ``` This code represents a simplified version of the "Landlord" game. It generates a deck of cards from 3 to 15 (where 11 represents Jack, 12 represents Queen, 13 represents King, 14 represents Ace, and 15 represents 2). The deck is then shuffled and distributed to three players. Finally, the cards in each player's hand are sorted and printed on the console. Please note that this implementation doesn't include the game logic for playing rounds or determining the winner. It only demonstrates the initial distribution of cards.

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值