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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

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

package cn.itcast.day08.zhoucan;

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

/**
* @Description: java类作用描述
* @Author: 周璨
* @CreateDate: 2018/7/19  18:22
* @Version: 1.0
* <p>
* 综合目前在基础班所学(以下尽可能多的用到学的内容),我模拟了一个简易的斗地主,要实现开局抽牌的功能,如下:
* 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 Game {
    public static void main(String[] args) {
//import Scanner导包
//通过键入房间密码进入游戏
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入房间密码:");
        Player player = new Player();
        int mima = sc.nextInt();
        int count = 0;
//通过while死循环多次键入密码到密码正确为止,或者输错过多次,退出(break)
        while (true) {
            if (mima == 20180706) {
                System.out.println("欢迎进入房间,游戏开始!");
                //调用getPuke()方法拿牌,将拿到的牌(puke)作为参数调用flushPuke()方法进行洗牌,得到新牌newpuke
                //发牌
                player.naPuke(flushPuke(getPuke()));
                //发牌完毕,此简易斗地主功能完成
                System.out.println("请出牌!");
                break;
            } else {
                System.out.println("密码错误,请重新输入!");
                sc.nextInt();
//计数器计数
                count++;
                if (count > 2) {
                    System.out.println("输入密码错误次数过多,游戏退出!");
                    break;
                }
            }
        }
    }

    //创建一个得到扑克集合的方法,返回一个puke集合(一副扑克牌)
    private static ArrayList<Puke> getPuke() {
//import ArrayList导包
        ArrayList<Puke> puke = new ArrayList<>();
//定义花色数组
        String[] hs = {"黑桃", "红桃", "梅花", "方块"};
//定义点数数组
        String[] ds = {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"};
//hs.fori       // for嵌套循环得到一副扑克数组
        for (int i = 0; i < hs.length; i++) {
//ds.fori
            for (int j = 0; j < ds.length; j++) {
                Puke pk = new Puke(hs, ds[j]);
//添加到集合
                puke.add(pk);
            }
        }
// 补充花牌以外的两张王牌
        puke.add(new Puke("小王", ""));
        puke.add(new Puke("大王", ""));
//执行此方法将返回一整副扑克
        return puke;
    }

    //创建一个洗牌的方法,参数是一副牌的集合,通过洗牌操作获得一副新的扑克牌集合
    public static ArrayList<Puke> flushPuke(ArrayList<Puke> puke) {
        ArrayList<Puke> newpuke = new ArrayList<>();
//import Random导包
//通过randon集合索引位置来洗牌
        while (puke.size() > 0) {
            int size = puke.size();
//size为限,生成0~size之间的随机数
            Random r = new Random();
            int index = r.nextInt(size);

//index就是拿出来的牌的索引值,加到新的集合中,从原来集合中删除
            Puke result = puke.get(index);
            newpuke.add(result);
            puke.remove(index);
        }
//执行此方法将返回一整副洗牌后的新的扑克
        return newpuke;
    }
}

0 个回复

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