感想:

第一次写博客,感觉编辑器挺复杂厉害的,感觉自己的内容挺简单的。有什么问题请多多指教!

思路:

1、创建一个扑克牌的实体类Poker,设置了四个参数:花色、数字、牌值(判断大小)、是否地主牌,实现getset方法和构造方法;

2、创建一个玩家的实体类Player,设置了四个参数: 初始牌集合,排序后牌集合,牌值集合,是否地主,实现getset方法和构造方法;

3、洗牌:循环嵌套花色数组跟数字数组生成52个Poker,手动加入大小王Poker,放进map(int,Poker)里面,利用Collections.shuffle随机排序map的key,再根据key生成排序后的Poker集合

4、发牌:生成3个玩家对象,拿到洗牌后的集合,前51张牌为玩家牌,后3张为地主牌,在51张牌中随机一张为地主牌,遍历玩家牌分配个每一个Player,同时根据玩家牌的牌值生成集合grades存进Player对象中,将grades转为int数组并进行升序排序,根据grade取得新Poker集合分配给玩家。

Poker类:

package com.company;

public class Poker {

private String color;

private String number;

private int grade;

boolean isLandowners;

public boolean isLandowners() {

return isLandowners;

}

public void setLandowners(boolean landowners) {

isLandowners = landowners;

}

public int getGrade() {

return grade;

}

public void setGrade(int grade) {

this.grade = grade;

}

public String getColor() {

return color;

}

public void setColor(String color) {

this.color = color;

}

public String getNumber() {

return number;

}

public void setNumber(String number) {

this.number = number;

}

public Poker() {

}

public Poker(String color, String number ,int grade,boolean isLandowners) {

this.color = color;

this.number = number;

this.grade=grade;

this.isLandowners=isLandowners;

}

public String toString() {

return this.getColor()+this.getNumber();

}

}

Player类:

package com.company;

import java.util.ArrayList;

import java.util.LinkedList;

public class Player {

private ArrayList pokers;

private boolean isLandower;

private ArrayList newPokers;

private LinkedList grades;

public LinkedList getGrades() {

return grades;

}

public void setGrades(LinkedList grades) {

this.grades = grades;

}

public ArrayList getNewPokers() {

return newPokers;

}

public void setNewPokers(ArrayList newPokers) {

this.newPokers = newPokers;

}

public boolean isLandower() {

return isLandower;

}

public void setLandower(boolean landower) {

isLandower = landower;

}

public Player() {

}

public ArrayList getPokers() {

return pokers;

}

public void setPokers(ArrayList pokers) {

this.pokers = pokers;

}

}

洗牌:

/*洗牌*/

public static LinkedList getPokerList() {

LinkedList pokers = new LinkedList();

LinkedList newPokers = new LinkedList();

ArrayList arrayList = new ArrayList<>();

int[] arr;

/*生成54张扑克牌(Poker对象)*/

/*用嵌套循环生成从方块3到黑桃2的Poker对象,放进Poker的LinkedList保证顺序*/

String[] colors = {"♦", "♣", "♥", "♠"};

String[] numbers = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"};

for (int i = 0; i < numbers.length; i++) {

for (int j = 0; j < colors.length; j++) {

Poker p = new Poker(colors[j], numbers[i], (4 * i) + j + 1, false);

pokers.add(p);

}

}

/*添加大小王*/

pokers.add(new Poker("black", "☆", 53, false));

pokers.add(new Poker("red", "☆", 54, false));

/*将生成的54张扑克牌从1到54放进map*/

for (int z = 1; z <= pokers.size(); z++) {

map.put(z, pokers.get(z - 1));

}

/*遍历Map,将每个Poker对应的key放进 ArrayList arrayList */

Set> set = map.entrySet();

Iterator it = set.iterator();

while (it.hasNext()) {

Map.Entry e = (Map.Entry) it.next();

arrayList.add(e.getKey());

}

/*利用Collections.shuffle随机排序key*/

Collections.shuffle(arrayList);

/*将乱序后的key对于的Poker放进newPokers里面 */

for (Integer i : arrayList) {

newPokers.add(map.get(i));

}

return newPokers;

}

发牌:

/*发牌*/

/*根据玩家人数生成Player,默认num=3*/

private static void sentPoker(int num) {

/*获取洗牌后的LinkedList,保证顺序*/

LinkedList Allpokers = getPokerList();

ArrayList pokers = new ArrayList<>();

ArrayList BottomPokers = new ArrayList<>();

/*生成玩家对象*/

for (int i = 0; i < num; i++) {

Player p = new Player();

players.add(p);

}

/*前50张牌为玩家牌,后三张为底牌*/

for (int p = 0; p < Allpokers.size(); p++) {

if (p <= 50) {

pokers.add(Allpokers.get(p));

} else {

BottomPokers.add(Allpokers.get(p));

}

}

/*玩家牌中随机一张为地主牌*/

Random rand = new Random();

int s = rand.nextInt(51);

pokers.get(s).setLandowners(true);

System.out.println("地主牌: " + pokers.get(s));

/*根据num生成Player对象*/

for (int j = 0; j < num; j++) {

/*玩家的牌值集合*/

LinkedList grades = new LinkedList<>();

/*玩家的手牌集合*/

ArrayList playerPokers = new ArrayList();

/*根据玩家个数分配玩家牌*/

for (int z = j; z < pokers.size(); z = z + num) {

playerPokers.add(pokers.get(z));

grades.add(pokers.get(z).getGrade());

players.get(j).setPokers(playerPokers);

players.get(j).setGrades(grades);

}

/*根据玩家牌中的地主牌设置玩家是否地主*/

for (Poker p : players.get(j).getPokers()) {

if (p.isLandowners() == true) {

players.get(j).setLandower(true);

}

}

/*根据玩家的牌值集合生成数组*/

Integer[] gs = new Integer[players.get(j).getGrades().size()];

grades.toArray(gs);

/*排序数组,由低到高*/

Arrays.sort(gs);

/*排序后的玩家牌*/

ArrayList newPokers = new ArrayList<>();

for (int g = 0; g < gs.length; g++) {

Poker p = map.get(gs[g]);

newPokers.add(p);

}

players.get(j).setNewPokers(newPokers);

System.out.println("玩家" + (j + 1) + ": " + players.get(j).getNewPokers() + " 是否地主:" + players.get(j).isLandower());

}

System.out.print("底牌为: ");

for (Poker p : BottomPokers) {

System.out.print(p + " ");

}

}

效果如下:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

java 斗地主_java实现斗地主游戏相关推荐

  1. java版斗地主_Java实现斗地主简化版

    本文实例为大家分享了Java实现斗地主的具体代码,供大家参考,具体内容如下 package com.westos.chinesePoker; import java.util.ArrayList; i ...

  2. 单机斗地主java下载_java单机斗地主

    [实例简介] java单机斗地主源码.jdk1.6+eclipse正常运行 AI适中比较简单 [实例截图] [核心代码] 斗地主2 └── 斗地主 ├── bin │   └── com │   ├─ ...

  3. 潜艇大战java代码_java潜艇大战游戏源码项目

    代码如下 package com.util; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimensio ...

  4. java射击_java射击类游戏

    [实例简介] java射击类小游戏,适合初学者学习,对java的综合应用 [实例截图] [核心代码] d383e3a0-dbab-4bcd-8bd2-3a45e4d25b49 └── Game ├── ...

  5. 推箱子游戏 java源代码_java推箱子游戏源代码(含推箱子的判断)

    <java推箱子游戏源代码(含推箱子的判断)>由会员分享,可在线阅读,更多相关<java推箱子游戏源代码(含推箱子的判断)(6页珍藏版)>请在人人文库网上搜索. 1.第一个Ja ...

  6. java走棋_Java五子棋小游戏(控制台纯Ai算法)

    Java五子棋小游戏(控制台纯Ai算法) 继续之前的那个五子棋程序 修复了一些已知的小Bug 这里是之前的五子棋程序 原文链接 修复了一些算法缺陷 本次增加了AI算法 可以人机对战 也可以Ai对Ai看 ...

  7. java冒险游戏_Java冒险小游戏

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/qq_40176716/article/ ...

  8. java太阳系_Java太阳系小游戏分析和源代码

    Java太阳系小游戏分析和源代码 -20150809 近期看了面向对象的一些知识.然后跟着老师的解说做了一个太阳系各行星绕太阳转的小游戏,来练习巩固一下近期学的知识: 用到知识点:类的继承.方法的重载 ...

  9. java钓鱼_java实现纸牌游戏之小猫钓鱼算法

    星期天小哼和小哈约在一起玩桌游,他们正在玩一个非常古怪的扑克游戏--"小猫钓鱼".游戏的规则是这样的:将一副扑克牌平均分成两份,每人拿一份.小哼先拿出手中的第一张扑克牌放在桌上,然 ...

最新文章

  1. jQuery仿淘宝商城天猫鼠标移动过去,透明度降低
  2. json schema如何约束为小数_如何使用jsonschema进行接口响应断言
  3. 鸟哥的 Linux 私房菜7 -- 首次开机关机与基本指令执行
  4. 如何高效学习算法【实例 + 可视化】
  5. java运行时内存分配详解
  6. 数据挖掘基础数学知识博客
  7. 【记事】今年的中秋节
  8. memcached telnet命令
  9. 下载android平台源码
  10. MariaDB一之编译安装MariaDB、MariaDB初始化及MariaDB的图形化工具
  11. Vue 中实现双向绑定的 4 种方法
  12. Flash 第九章 运动补间动画
  13. 嵌入式程序和FW的区别
  14. 现在学 Prolog 递归
  15. uc浏览器登录报错50001解决方案,登录失败,请重试50001
  16. div3 C. Dominant Piranha
  17. 云洲无人船:驶向水上智能时代
  18. 超精细写实的3D人物模型,这可不是照片!
  19. centos7里xxx.jar解压和压缩
  20. thinkpad T480s使用体验

热门文章

  1. 冰封王座1.20(转载)
  2. vue双向数据绑定原理详解(附源码)
  3. 计算机毕业设计asp.net考试安排管理系统VS开发sqlserver数据库web结构c#编程计算机网页源码项目
  4. 分时显示不同图片和问候语
  5. 技术学校有哪些专业计算机,自贡计算机职业技术学校有哪些专业
  6. python课程回顾复习记录简要2
  7. 智和网管平台SugarNMS能源行业综合网管解决方案
  8. LED和LCD有什么区别?
  9. 机器学习笔记 - 特征分解
  10. 科学家打造出神奇飞毯