java实现斗地主发牌系统

本文实例为大家分享了java实现斗地主发牌系统的具体代码,供大家参考,具体内容如下

玩家类

package com.softeem.example;

import java.util.ArrayList;
import java.util.List;

/**
 * 玩家类
 *
 */
public class Player {

 private String name; //名字
 private boolean landowner; //是否地主
 private List<Card> cards = new ArrayList<>(); //手中的所有牌

 public Player() {
 // TODO Auto-generated constructor stub
 }

 public Player(String name) {
 super();
 this.name = name;
 }

 public String getName() {
 return name;
 }
 public void setName(String name) {
 this.name = name;
 }
 public boolean isLandowner() {
 return landowner;
 }
 public void setLandowner(boolean landowner) {
 this.landowner = landowner;
 }
 public List<Card> getCards() {
 return cards;
 }
 public void setCards(List<Card> cards) {
 this.cards = cards;
 }

 @Override
 public String toString() {
 return name+"-是否地主:"+landowner+"->"+cards;
 }

}

牌类

package com.softeem.example;

/**
 * 牌类
 *
 */
public class Card implements Comparable<Card>{

 private int num;//点数
 private String name;//牌面
 private String flower;//花色

 public Card() {
 // TODO Auto-generated constructor stub
 }

 public Card(int num, String name, String flower) {
 super();
 this.num = num;
 this.name = name;
 this.flower = flower;
 }

 public int getNum() {
 return num;
 }
 public void setNum(int num) {
 this.num = num;
 }
 public String getFlower() {
 return flower;
 }
 public void setFlower(String flower) {
 this.flower = flower;
 }

 public String getName() {
 return name;
 }

 public void setName(String name) {
 this.name = name;
 }

 @Override
 public int compareTo(Card c) {
 return this.num - c.num;
 }

 @Override
 public String toString() {
 return name+"-"+flower+"-"+num;
 }

}
package com.softeem.example;

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

public class PokerGame {

 static List<Card> list = new ArrayList<>(); //所有牌集合
 static List<Player> players = new ArrayList<>(); //玩家集合
 static int position; //初始化当前发牌的位置
 static String[] flowers = {"红桃","方片","梅花","黑桃"};
 static String[] names = {"3","4","5","6","7","8","9","10","J","Q","K","A","2","小王","大王"};

 /**
 * 初始化所有牌面和玩家
 */
 static{
 int i = 0;
 //遍历所有的牌面值(除大小王:大小王无花色)
 for (; i < names.length - 2; i++) {
 for (int j = 0; j < flowers.length; j++) {
 list.add(new Card(i, names[i], flowers[j]));
 }
 }
 list.add(new Card(i++, names[names.length-2], null));
 list.add(new Card(i++, names[names.length-1], null));

 }

 /**
 * 初始化玩家
 */
 public void initPlayer(){
 players.clear();
 players.add(new Player("盖伦"));
 players.add(new Player("艾希"));
 players.add(new Player("玛尔扎哈"));
 }

 /**
 * 洗牌
 */
 public void shuffle(){
 //索引重置
 position = 0;
 Collections.shuffle(list);
 Collections.shuffle(list);
 Collections.shuffle(list);
 start();
 }

 /**
 * 发牌
 */
 public void sendCards(){
 //准备玩家
 initPlayer();
 //随机地主(索引)
 int index = new Random().nextInt(players.size());
 //设置为地主
 players.get(index).setLandowner(true);
 Card now = null;
 while(position < list.size() - 3){
 //获取最上面的一张牌
 now = list.get(position);
 if(position % 3 == 0){
 players.get(0).getCards().add(now);
 }else if(position % 3 == 1){
 players.get(1).getCards().add(now);
 }else{
 players.get(2).getCards().add(now);
 }
 position++;
 }
 //获取集合中的最后三张牌
 List<Card> last = list.subList(list.size()-3, list.size());
 //将最后三张牌给地主
 players.get(index).getCards().addAll(last);
 //显示
 show();

 }

 /**
 * 显示发牌结果
 */
 public void show(){
 //排序
 Collections.sort(players.get(0).getCards());
 Collections.sort(players.get(1).getCards());
 Collections.sort(players.get(2).getCards());
 players.stream().forEach(p->System.out.println(p));
 start();
 }

 public void start(){
 System.out.println("***********欢乐斗地主***********");
 System.out.println("***********【1】洗牌***********");
 System.out.println("***********【2】发牌***********");
 Scanner sc = new Scanner(System.in);

 String i = sc.nextLine();
 if(!i.matches("^\\d{1}$")){
 System.out.println("请输入正确的指令!");
 start();
 return;
 }
 switch(i){
 case "1":
 shuffle();
 break;
 case "2":
 sendCards();
 break;
 default:
 System.out.println("指令不正确");
 start();
 break;
 }
 }

 public static void main(String[] args) {

 new PokerGame().start();
 }

}

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

(0)

相关推荐

  • java实现斗地主发牌系统

    本文实例为大家分享了java实现斗地主发牌系统的具体代码,供大家参考,具体内容如下 玩家类 package com.softeem.example; import java.util.ArrayList; import java.util.List; /** * 玩家类 * */ public class Player { private String name; //名字 private boolean landowner; //是否地主 private List<Card> cards =

  • java模拟实现斗地主发牌小程序

    一副扑克有54张牌:大小王+4*13,接下来我们来模拟一下斗地主的发牌过程 首先,我们需要买牌,新买来的牌都是按顺序摆放的,因此下一步是洗牌,最后就是发牌了,不过发牌的时候要注意还要在最后留三张底牌. 主要使用的类有 ArrayList:用来存储扑克,Collections用来洗牌. import java.util.ArrayList; import java.util.Collections; /* * 模拟斗地主发牌 一共54张牌 * 买牌 * 洗牌 * 发牌 * */ public cl

  • Java实现扑克牌洗牌和发牌

    本文实例为大家分享了Java实现扑克牌洗牌发牌的具体代码,供大家参考,具体内容如下 实现原理:使用4种花色和13个数字组合成52张牌,放进一个集合中:通过把集合数据排序打乱实现洗牌操作,然后在通过循环把牌抽出来实现发牌操作. 下面是实现代码: import java.util.ArrayList; import java.util.Collections; public class Card { private static ArrayList<String> list = new Array

  • java实现模仿斗地主发牌

    本文实例为大家分享了java斗地主发牌的具体代码,供大家参考,具体内容如下 分析 这是一个模仿斗地主发牌的例子: 按照斗地主的规则,完成洗牌发牌的动作. 具体规则: 用0~53分别对应相应的花色和牌面值: 用shuffle随机打乱排序好的数字,起到洗牌的作用: 使用54张牌打乱顺序,三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌. 实现方式 准备牌: 牌可以设计为一个ArrayList,每个字符串为一张牌. 每张牌由花色数字两部分组成,我们可以使用花色集合与数字集合嵌套迭代完成每

  • Java实现洗牌发牌的方法

    本文实例讲述了Java实现洗牌发牌的方法.分享给大家供大家参考.具体如下: import java.util.*; public class Main { /** * @param args the command line arguments */ static int numbersOfPlayers = 4; static int numbersOfHandCard = 13; public static void main(String[] args) { // TODO code ap

  • java模拟斗地主发牌功能

    本文实例为大家分享了java模拟斗地主发牌的具体代码,供大家参考,具体内容如下 1.案例介绍 规则: 组装54张扑克牌 54张牌顺序打乱 三个玩家参与游戏,三人交替摸牌,每人17张牌,后三张留作底牌 查看三人各自手中的牌(按照牌的大小排序).底牌 2. 分析 1).准备牌: 完成数字与纸牌的映射关系: 使用双列Map(HashMap)集合,完成一个数字与字符串纸牌的对应关系(相当于一个字典). 2).洗牌: 通过数字完成洗牌发牌 发牌: 将每个人以及底牌设计为ArrayList,将后3张牌直接存

  • java实现斗地主发牌功能

    本文实例为大家分享了java实现斗地主发牌的具体代码,供大家参考,具体内容如下 参考斗地主的游戏规则,完成一个发牌的功能(54张牌,考虑点数,花色:三名玩家,其中地主比其他玩家多3张牌) 代码如下: 牌类 import java.util.Objects; /** * 3-10 J Q K A 2 King Queen 牌类 * * @author Administrator * */ public class Card { /** 牌面值 */ private String name; /**

  • 用java实现斗地主发牌过程

    本文实例为大家分享了java实现斗地主发牌过程的具体代码,供大家参考,具体内容如下 一.牌类实现 定义牌的相关属性,点数.花色.大小 package com.softeem.lesson18.doudizhu; import java.util.Objects; public class Card { //牌面值 private String name; //花色 private String flower; //点数 private int num; public Card() { // TO

  • java代码实现斗地主发牌功能

    本文实例为大家分享了java实现斗地主发牌功能的具体代码,供大家参考,具体内容如下 实现斗地主发牌功能 共54张牌,地主比其他两名玩家多三张牌. 有一个card牌类和player玩家类,还有一个发牌类用于实现发牌的方法. 为了模拟每个玩家的牌都是随机的,我是这样想的: 1)初始化方法:用于将54张牌存到一个数组里,每张牌都一个唯一的序号. 2) 利用随机数,将每个序号打乱存到一个新数组里. 3)再根据序号取到初始化牌库数组内的牌,存到每个玩家的牌集合内. 附一个在老师指导下写的:斗地主发牌功能,

  • Java超详细教你写一个斗地主洗牌发牌系统

    目录 一.斗地主 1.前言 2.介绍 3.图解 二.准备牌 1.代码示例 2.数据展示 三.洗发牌与排序 代码示例 四.看牌(打印到控制台) 1.代码示例 2.展示 六.总结 一.斗地主 1.前言 相信每位看过<赌神>的同学都知道,里面有一种神奇的类似于魔术的力量. 没错!我们今天要说的这个神奇的东西就是:特异功能(不是) 就是:斗地主的洗牌发牌系统!!! 2.介绍 扑克牌经典游戏"斗地主"相信很多人都会玩,这次就用Java语言来编写一个斗地主的洗牌发牌程序,要求按照斗地主

  • Java斗地主发牌课程设计

    本文实例为大家分享了Java斗地主发牌的具体代码,供大家参考,具体内容如下 Player类 public class Player { // 玩家姓名 private String name1; private String name2; private String name3; //玩家积分 private int grade; // 玩家类型:农民/地主 private String type1="农民"; private String type2="农民";

  • Java实现斗地主之洗牌发牌

    本文通过实例为大家分享了Java实现斗地主之洗牌发牌的具体代码,供大家参考,具体内容如下 案例分析 需求: 实现斗地主过程中的洗牌,发牌和看牌. 并且确保每一位玩家手上拿到的牌是随机并且按照大小排序好的 思路 1.创建一个牌盒,也就是定义一个集合对象,用ArrayList集合实现 2.往牌盒里面装牌 3.洗牌,也就是把牌打散,用Collections的shuffle()方法实现 4.发牌,也就是遍历结合,给三个玩家发牌 5.看牌,也就是三个玩家分别遍历自己的牌 代码实现 1.创建牌盒,存放所有牌

随机推荐