发牌规则

    黑桃按照从小到大依次为:1-13

   红桃按照从小到大依次为:14-26

   梅花按照从小到大依次为:27-39

   方块按照从小到大依次为:40-52

   小王53   大王54

代码实现:

package com.zsy.study;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;
/**
*
* @author 偶my耶
* 游戏发牌
*/
public class Cards {
/**
* 发牌函数
* @param args
*/
private int[][] player; //玩家
private int[] total; // 底牌数
public int[][] getPlayer() {
return player;
}
public void setPlayer(int[][] player) {
this.player = player;
} public int[] getTotal() {
return total;
} public void setTotal(int[] total) {
this.total = total;
} /**
* 发牌函数
* @param CardNum 总牌数
* @param Rs 人数
* @param Ps 每人的牌数
* @return Cards
*/
public static Cards PlayingCards(int Rs){
int Ps ,CardNum; //每人的牌数 //总牌数
if(Rs==4){ //如果人数是4个,则把总牌数设为108张,每人的牌数设为25张
CardNum=108;
Ps=25;
}else if(Rs==3){ //如果人数是4个,则把总牌数设为54张,每人的牌数设为17张
CardNum=54;
Ps=17;
}else {
CardNum=0;
Ps=0;
System.out.println("输入错误");
System.exit(1);
}
int[] total=new int[CardNum]; //
int[][] player=new int[Rs][Ps]; //定义玩家数和牌数的 数组
int leftNum=CardNum; //剩下的牌数
int ranNumber; //随机发的牌
Random random=new Random();
for (int i = 0; i < total.length; i++) { //将牌数设在1--54之间 其中1~13表示一种花色
total[i]=(i+1)%54; //,依此类推
if (total[i]==0) { //把0设为54
total[i]=54;
} }
for(int i=0;i<player[0].length;i++){ //随机分配牌
for(int j=0;j<player.length;j++){
ranNumber=random.nextInt(leftNum); //随机获取下标,
player[j][i]=total[ranNumber]; //将随机的数赋给玩家
total[ranNumber] = total[leftNum-1];
leftNum--;
}
}
Cards card=new Cards();
card.setPlayer(player);
card.setTotal(total);
return card;
}
public void print(Cards card,int rs) {
int dp;
for (int i = 0; i < card.getPlayer().length; i++) {
System.out.print("玩家"+(i+1)+"的牌");
for (int j = 0; j < card.getPlayer()[i].length; j++) {
System.out.print(" "+card.getPlayer()[i][j]);
}
System.out.println();
}
System.out.print("底牌");
if(rs==4){
dp=8; //设置底牌数
}else {
dp=3; //设置底牌数
}
for (int i = 0; i < dp; i++) {
System.out.print(" "+card.getTotal()[i]);
}
System.out.println();
}
public static void main(String[] args) throws Exception{
System.out.println("请选择游戏:1、斗地主,2、三打哈");
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));//输入语句
Integer rs = Integer.valueOf(br.readLine());
Cards card=PlayingCards(rs+2);
card.print(card,rs); } }

运行结果:

java开发之发牌小程序的更多相关文章

  1. Java可视化日历(Date类、DATe Format类、Calendar类综合运用),开发可视化日历小程序

    Java时间日期类综合运用,开发可视化日历小程序 由键盘输入指定格式的日期,打印这个月的日历 1.代码 import java.text.DateFormat; import java.text.Pa ...

  2. java全栈商业小程序开发

    此次开发只为学习和巩固,第一次学习开发 一.开发前需要了解: 开发框架MVVM.痛点.开源工具.VUE前端框架.微信支付模块.uni-app前端框架.小程序申请.开发工具下载.编写测试小程序.小程序结 ...

  3. 如何快速地开发一个微信小程序

    如何快速地开发一个微信小程序呢?我觉得作为初学者,最好能有一个模板,然后改这个模板. 同样作为初学者,刚开始的时候我有下面的几个问题,后来通过问同学,我弄清楚了. 微信小程序可以连接MySQL或者Sq ...

  4. Java之——实现微信小程序加密数据解密算法

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/79450115 一.概述 微信推出了小程序,很多公司的客户端应用不仅具有了APP.H ...

  5. 开发一个微信小程序教程

    一.注册小程序账号 1.进入微信公众平台(https://mp.weixin.qq.com/),注册小程序账号,根据提示填写对应的信息即可. 2.注册成功后进入首页,在 小程序发布流程->小程序 ...

  6. 开发一个微信小程序项目教程

    一.注册小程序账号 1.进入微信公众平台(https://mp.weixin.qq.com/),注册小程序账号,根据提示填写对应的信息即可.2.注册成功后进入首页,在 小程序发布流程->小程序开 ...

  7. 全栈开发工程师微信小程序-中(下)

    全栈开发工程师微信小程序-中(下) 微信小程序视图层 wxml用于描述页面的结构,wxss用于描述页面的样式,组件用于视图的基本组成单元. // 绑定数据 index.wxml <view> ...

  8. 全栈开发工程师微信小程序-中(中)

    全栈开发工程师微信小程序-中(中) 开放能力 open-data 用于展示微信开放的数据 type 开放数据类型 open-gid 当 type="groupName" 时生效, ...

  9. 全栈开发工程师微信小程序-中

    全栈开发工程师微信小程序-中 多媒体及其他的组件 navigator 页面链接 target 在哪个目标上发生跳转,默认当前小程序,可选值self/miniProgram url 当前小程序内的跳转链 ...

随机推荐

  1. Oracle 12C -- truncate的级联操作

    在之前的版本中,存在外键约束时,无法直接truncate父表.在12C中,对truncate操作添加了级联操作特性. 前提是创建外键约束时,使用了"on delete casacde&quo ...

  2. C++的std::string的“读时也拷贝”技术!

    C++的std::string的读时也拷贝技术! 嘿嘿,你没有看错,我也没有写错,是读时也拷贝技术.什么?我的错,你之前听说写过时才拷贝,嗯,不错的确有这门技术,英文是Copy On Write,简写 ...

  3. javascript控件(二):一个好用的表格(分页实例)

    一.官网 https://datatables.net/ 二.引用 <script src="bower_components/datatables.net/js/jquery.dat ...

  4. Git实战(二)原理

    上次的博文Git实战(一)版本号控制概述中我们简介了一下版本号控制系统的概念,重点对版本号控制的三种类型进行了分析和对照,从本篇博文開始我们进入Git的世界,首先介绍一下Git实现版本号控制的原理. ...

  5. (面试题)synchronized 和 java.util.concurrent.locks.Lock 的异同

    主要相同点: Lock 能完成 synchronized 所实现的所有功能: 主要不同点: Lock 有比 synchronized 更精确的线程语义和更好的性能. synchronized 会自动释 ...

  6. SeqGAN 原理简述

    1. 背景GAN在之前发的文章里已经说过了,虽然现在GAN的变种越来越多,用途广泛,但是它们的对抗思想都是没有变化的.简单来说,就是在生成的过程中加入一个可以鉴别真实数据和生成数据的鉴别器,使生成器G ...

  7. Java多线程框架Executor详解

       原文链接  http://www.imooc.com/article/14377 为什么引入Executor线程池框架new Thread()的缺点 每次new Thread()耗费性能调用ne ...

  8. centos7 中搭建gitlab

    1.在virtual box中新建一个虚拟机 2.gitlab ce(community版本)地址:https://about.gitlab.com/installation/#centos-7?ve ...

  9. Atitti html5 h5 新特性attilax总结

    Atitti html5 h5 新特性attilax总结 Attilax觉得不错的新特性 3.语义Header和Footer (The Semantic Header and Footer) 8.占位 ...

  10. Windows系统环境变量path优先级测试报告

    转自:http://bluekylin.cnblogs.com/archive/2005/12/16/298797.html 总以为自己很已经会操作windows了,今天在它帮助中看到一大片还不知道的 ...