A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© Tibbers_oro 初级黑马   /  2018-7-20 12:43  /  1036 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 Tibbers_oro 于 2018-7-20 16:30 编辑

package cn.itcast.day08.zhoucan;

import java.util.ArrayList;
import java.util.Scanner;

/**
* @Description: java类作用描述
* @Author: 周璨
* @CreateDate: 2018/7/20  9:48
* @Version: 1.0
* 综合目前在基础班所学(以下尽可能多的用到学的内容),我模拟了一个简易的斗地主,要实现开局抽牌的功能,如下:
* 1.进游戏:玩家输入房间密码(20180706)进入游戏房间开始玩斗地主;    (Scanner,while死循环,if-else语句...)
* 2.输入密码错误超过3,游戏强制退出;                             (if语句嵌套,break...)
* 3.系统创造牌并洗牌:得到一副扑克牌(54),并且洗牌;         (面向对象.ArrayList,for嵌套循环,random,remove...)
* 4.发牌:3个玩家("jcc","wzq","lzm")按照顺序分别得到17张牌;      (匿名对象,extends,super,override...)
* 5.抢地主,比分值大小,并且会获取最后3张牌;                           (三元运算....)
*/

//创建一个玩家类
public class Player extends People {
    //定义一个私有变量分数,抢地主的分数(0-3,谁大谁是地主)
    private int point;

    //构造无参
    public Player() {
    }

    //构造满参
    public Player(String name, int point) {
        super(name);
        this.point = point;
    }

    public int getPoint() {
        return point;
    }

    public void setPoint(int point) {
        this.point = point;
    }

    //重写发牌方法
    @Override
    public void naPuke(ArrayList<Puke> puke) {
        super.naPuke(puke);
        //import ArrayList导包,创造集合,用来分别放置3名玩家拿到的牌
        ArrayList<Puke> p1 = new ArrayList<>();
        ArrayList<Puke> p2 = new ArrayList<>();
        ArrayList<Puke> p3 = new ArrayList<>();
        //利用for循环对3个人循环发牌,定义一个num为索引值
        for (int num = 0; num < 51; num++) {
            //从玩家一开始发牌,如果牌索引值模30,则将牌加入玩家一的牌组中
            if (num % 3 == 0) {
                p1.add(puke.get(num));
                //如果牌索引值模31,则将牌加入玩家二的牌组中
            } else if (num % 3 == 1) {
                p2.add(puke.get(num));
                //剩下一种情况,牌索引值模32,将牌加入玩家三的牌组中
            } else {
                p3.add(puke.get(num));
            }
        }
//抢地主,抢到地主的人获得最后3张牌
        //import Scanner导包,键入抢地主分值
        Scanner sc = new Scanner(System.in);
        System.out.println("jcc请输入分数,开始抢地主");
        Player playerone = new Player("jcc", sc.nextInt());
        System.out.println("wzq请输入分数,开始抢地主");
        Player playertwo = new Player("wzq", sc.nextInt());
        System.out.println("lzm请输入分数,开始抢地主");
        Player playerthree = new Player("lzm", sc.nextInt());
        //用变量表示玩家分数
        int a = playerone.getPoint();
        int b = playertwo.getPoint();
        int c = playerthree.getPoint();
        //用三元运算符比较谁的分值最大,if语句判断分值最大的就是地主,并且获取最后3张牌
        int tem = a > (b > c ? b : c) ? a : (b > c ? b : c);
        if (tem == a) {
            System.out.println("玩家" + playerone.getName() + "是地主");
            p1.add(puke.get(51));
            p1.add(puke.get(52));
            p1.add(puke.get(53));
        } else if (tem == b) {
            System.out.println("玩家" + playertwo.getName() + "是地主");
            p2.add(puke.get(51));
            p2.add(puke.get(52));
            p2.add(puke.get(53));
        } else {
            System.out.println("玩家" + playerthree.getName() + "是地主");
            p3.add(puke.get(51));
            p3.add(puke.get(52));
            p3.add(puke.get(53));
        }

        //打印每个人的牌
        System.out.print("玩家" + playerone.getName() + "的牌是:");
        for (int i = 0; i < p1.size(); i++) {
            System.out.print(p1.get(i).getHs() + p1.get(i).getDs()+" ");
        }
        //换行
        System.out.println();
        System.out.print("玩家" + playertwo.getName() + "的牌是:");
        for (int i = 0; i < p2.size(); i++) {
            System.out.print(p2.get(i).getHs() + p2.get(i).getDs()+" ");
        }
        //换行
        System.out.println();
        System.out.print("玩家" + playerthree.getName() + "的牌是:");
        for (int i = 0; i < p3.size(); i++) {
            System.out.print(p3.get(i).getHs() + p3.get(i).getDs()+" ");
        }
        System.out.println();

    }
}


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马