前言
嗯~怎么说呢,就是心血来潮想练下基础,但又不知道练什么好。就干脆做个小游戏玩一玩。
一、设计
首页斗地主有这么几个需要的东西:
- 玩家
- 扑克牌
- 发牌的??
每局游戏玩家需要3个,扑克牌每3个人一套,而发牌的就叫庄家了吧,也是每三人一个。
综上所述,程序运行需要的对象有
- 庄家:有一套完整的牌和三个玩家
- 玩家:有一套自己的牌
- 扑克牌:有牌的大小和类型(对子,炸弹啥的)
二、流程
- 初始化54张牌
- 选定谁是地主
- 发牌(每人17张牌)
- 剩余3张牌给地主
- 地主出牌
- 按顺序下一位出牌
- 重复5-6至有人手牌全部出完
- 宣布胜利者
三、方法定义
- 初始化54张牌
- 选定谁是地主
- 发牌(每人17张牌)
- 剩余3张牌给地主
- 地主出牌
- 按顺序下一位出牌
- 重复5-6至有人手牌全部出完
- 宣布胜利者
- 这个当然是庄家初始化,也就是庄家对象需要初始化54张牌的方法
- 谁是地主也是庄家选定的,专家对象需要一个选定地址的方法
- 发牌也是庄家干的事,但发给玩家,玩家需要拿到牌,也就是庄家需要一个发牌的方法,玩家需要一个收牌的方法
- 没啥好说的
- 出牌也就是玩家需要一个出牌的方法
- 决定出牌的顺序和记录上一个出牌的玩家也是庄家需要的方法
- 循环,交给主程序
- 最后的输出也交给主程序
整理成代码:
扑克牌
**
* @author: ljp
* @description: 牌
* @date:
*/
public class Brand {
/**
* 扑克牌数字
*/
private static final String[] NUMBER = new String[] {
"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A",
"2", "joker" };
/**
* 扑克牌花色
*/
private static final String[] COLOUR = new String[] {
"♥", "♠", "♣", "♦" };
/**
* 卡牌数组
*/
public static final String[] DEFAULT_BRAND = new String[54];
/**
* 初始化
*/
static {
}
/** 类型-1错误类型0-单1-对子2-王炸3-三带一4-三带二5-顺子6-连队7-炸弹 */
private int type = -1;
/** 牌的大小-组 */
private int[] brandSize = new int[20];
/** 数组大小 */
private int brandLength = 0;
/** 存储重复出现次数的数组 */
private int[] brandNum = new int[NUMBER.length];
/**
* 创建牌对象
* @param brands 可以有多张牌
*/
public Brand(String... brands) {
}
/**
* 排序
*
*/
public void sort() {
}
/**
* 计算类型
*/
public void updateType() {
type = -1;
}
/**
* 获取牌下标
*/
public static int getBrandIndex(String brand) {
return -1;
}
/**
* 根据下标获取牌
*/
public static String getBrandByIndex(int index) {
return "大王";
}
/**
* 获取牌的大小
*/
public static int getBrandSize(String brand) {
return 0;
}
/**
* 比较牌大小
*
* @return -true 大于,false 无法判断或小于等于
*/
public boolean extent(Brand brand) {
return true;
}
}
玩家
/**
* @author: ljp
* @description: 玩家
* @date:
*/
public class User {
/**
* 初始化
*
* @param userName
*/
public User(String userName) {
this.userName = userName;
}
/** 用户名 */
private String userName;
/** 卡牌数 */
private int brandNumber = 0;
/** 是否地主 */
private boolean isLord = false;
/** 用户持有卡牌 */
private String[] userp = new String[20];
/**
* 发牌
*/
public void deal(String brand) {
}
/**
* 出牌
*
* @param index 用户牌下标
* @return
*/
public void outBrand(int[] indexs) {
}
/**
* 排序
*/
public void sort() {
}
/**
* 输出手牌
*/
public String getBrand() {
}
/**
* 输出手牌序号
*/
public String getBrandNo() {
}
public String getUserName() {
return userName;
}
public Integer getBrandNumber() {
return brandNumber;
}
public Boolean isLord() {
return isLord;
}
public void setIsLord(Boolean isLord) {
this.isLord = isLord;
}
}
庄家
/**
* @author: ljp
* @description: 庄家
* @date:
*/
public class Maker {
/**
* 卡牌数组
*/
private String[] p = new String[54];
/**
* 用户出的牌
*/
private Brand brand;
/**
* 出牌的用户下标
*/
private int uIndex = -1;
/**
* 地主下标
*/
private int lordIndex = -1;
/**
* 初始化54张牌
*/
public Maker() {
}
/** 玩家 */
private User[] user = new User[3];
/**
* 伪随机洗牌
*/
public void washBrand() {
}
/**
* 发牌
*/
public void start() {
}
/**
* 用户出牌
*
* @param uIndex 用户下标
* @param pIndex 用户牌下标
*/
public boolean outBrand(int uIndex, int[] pIndex) {
}
/**
* 输出玩家出的牌
*/
public String getOutBrand(Integer lordIndex) {
}
public User[] getUser() {
return user;
}
public void setUser(User[] user) {
this.user = user;
}
public Integer getLordIndex() {
return lordIndex;
}
}
主程序
/**
* @author: ljp
* @description:
* @date:
*/
public class Main {
public static void main(String[] args) {
Maker m = new Maker();
m.setUser(new User[] {
new User("天天"), new User("可可儿"), new User("水煮鱼")