java实现斗地主游戏

感想:

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

思路:

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<Poker> pokers;
 private boolean isLandower;
 private ArrayList<Poker> newPokers;
 private LinkedList<Integer> grades;

 public LinkedList<Integer> getGrades() {
  return grades;
 }

 public void setGrades(LinkedList<Integer> grades) {
  this.grades = grades;
 }

 public ArrayList<Poker> getNewPokers() {
  return newPokers;
 }

 public void setNewPokers(ArrayList<Poker> newPokers) {
  this.newPokers = newPokers;
 }

 public boolean isLandower() {
  return isLandower;
 }

 public void setLandower(boolean landower) {
  isLandower = landower;
 }

 public Player() {
 }

 public ArrayList<Poker> getPokers() {
  return pokers;
 }

 public void setPokers(ArrayList<Poker> pokers) {
  this.pokers = pokers;
 }
}

洗牌:

/*洗牌*/
 public static LinkedList<Poker> getPokerList() {
  LinkedList<Poker> pokers = new LinkedList<Poker>();
  LinkedList<Poker> newPokers = new LinkedList<Poker>();
  ArrayList<Integer> 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<Integer> arrayList */
  Set<Map.Entry<Integer, Poker>> set = map.entrySet();
  Iterator it = set.iterator();
  while (it.hasNext()) {
   Map.Entry<Integer, Poker> e = (Map.Entry<Integer, Poker>) 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<Poker> Allpokers = getPokerList();
  ArrayList<Poker> pokers = new ArrayList<>();
  ArrayList<Poker> 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<Integer> grades = new LinkedList<>();
   /*玩家的手牌集合*/
   ArrayList<Poker> playerPokers = new ArrayList<Poker>();

   /*根据玩家个数分配玩家牌*/
   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<Poker> 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 + " ");
  }
 }

效果如下:

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

(0)

相关推荐

  • Java版AI五子棋游戏

    本文实例为大家分享了java五子棋游戏的具体代码,供大家参考,具体内容如下 AI思路:通过判断棋盘上每个空位的分数,去分数最高的几个点,随机下棋 分数计算思路:能成5个说明能赢了,给最高分 不能成5个,对方能成5个,说明对方要赢了,给第二高分 能成活4,给第三高分 能成活3,给第四高分 能成冲4,给第五高分 能成冲3,给第六高分 能成活2,给第七高分 能成冲2,给第八高分 其他,给最低分 分数设定可自己定义. 因为是去年写的了,思路记得大概就是这样.最近根据书上写了个棋类游戏的设计框架,待完善后

  • Java Swing实现扫雷小游戏

    swing设计扫雷心得,供大家参考,具体内容如下 最近学习swing学习之余做了一个小游戏:扫雷 1.前期设计 2.实现 其实完成这个游戏的核心就在于对数组的操纵,下面贴主要代码Main.java: package first; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.GridLayout; import java.awt.Image; import java.

  • java实现简单扫雷小游戏

    本文实例为大家分享了java实现扫雷游戏的具体代码,供大家参考,具体内容如下 import java.awt.BorderLayout; import java.awt.Color; import java.awt.Container; import java.awt.GridLayout; import java.awt.Insets; import java.awt.Label; import java.awt.event.ActionEvent; import java.awt.event

  • java连连看游戏菜单设计

    本文实例为大家分享了java连连看游戏菜单的具体实现代码,供大家参考,具体内容如下 先写GUI. 首先初始化框架,菜单,按钮,需要把菜单和按钮都添加在框架中.注意添加的顺序,首先要设置菜单,再设置框架,再设置按钮,如果交换了设置菜单和框架的顺序,会导致菜单显示不出,被框架挡住.对菜单设置了三个选项,第一个选项有五个下拉按键,用循环添加,第二个和第三个选项的下拉按键直接添加. GUI代码如下: package gui; import java.awt.Font; import javax.swin

  • Java实现的打地鼠小游戏完整示例【附源码下载】

    本文实例讲述了Java实现的打地鼠小游戏.分享给大家供大家参考,具体如下: 这里涉及到java线程和GUI的相关知识,一个简单的java小游戏打地鼠,有兴趣的朋友可以优化一下.先来看看运行效果: 具体代码: Mouse.java: import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Image; import java.awt.Toolkit; import java.awt

  • 小伙熬夜用Java重现经典超级马里奥代码实例

    说起Java,很多人都想问,Java这么火但是Java能干什么呢?Java主要是做企业级的应用开发,其实Java还可以做游戏开发,Java不仅开发过电脑端的游戏,手游也有开发过,经典的游戏有很多,比如<我的世界>.<吃豆>等等,今天小编来分享一个用Java开发超级马里奥. 游戏界面展示: 游戏代码如下: 以上所述是小编给大家介绍的Java重现经典超级马里奥详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的.在此也非常感谢大家对我们网站的支持!

  • java实现flappy Bird小游戏

    本文实例为大家分享了java实现flappy Bird游戏的具体代码,供大家参考,具体内容如下 整个游戏由3个类构成.Bird类,Pipe类,stage类 第一步:首先写一个Bird类 //鸟类 public class Bird { private int flyHeight;//飞行高度 private int xpos;//距离y轴(窗口左边缘)的位置, public static int Up=1;//向上飞 public static int Down=-1;//向下飞 public

  • Java实现Flappy Bird游戏源码

    本文实例为大家分享了Java实现Flappy Bird游戏的具体代码,供大家参考,具体内容如下 1.首先在mainActivity.xml中放置一个View,ID为viewDraw 2.开始编程,程序中自定义一个View类的子类,与viewDraw关联,程序除了放置如一个view控件,没有其他控件,程序上面的所有图片都是通过控制canvas画图实现 3.游戏是依据flappybird的游戏过程重新写的算法,功能与原版游戏相似,可能有些地方不足,完全是学习练习编程而已,做的不好见谅 4.原图片大小

  • java实现猜拳游戏

    本文实例为大家分享了java实现猜拳游戏的具体代码,供大家参考,具体内容如下 package com.farsight.session7; import java.util.Scanner; /** * 根据输入的数字,判断数组strs的值 然后进行逻辑判断 */ public class 猜拳 { public static void main(String[] args) { String[] strs = { "石头", "剪刀", "布"

  • java实现24点游戏

    游戏规则 从扑克中每次取出4张牌.使用加减乘除,第一个能得出24者为赢.(其中,J代表11,Q代表12,K代表13,A代表1),按照要求编程解决24点游戏. 基本要求 随机生成4个代表扑克牌牌面的数字字母,程序自动列出所有可能算出24的表达式 列出表达式无重复 用户初始生命值为一给定值(比如3),初始分数为0.随机生成4个代表扑克牌牌面的数字或字母,由用户输入包含这4个数字或字母的运算表达式(可包含括号),如果表达式计算结果为24则代表用户赢了此局. 使用计时器要求用户在规定时间内输入表达式,如

随机推荐