Java基础篇【斗地主】


前言

嗯~怎么说呢,就是心血来潮想练下基础,但又不知道练什么好。就干脆做个小游戏玩一玩。


一、设计

首页斗地主有这么几个需要的东西:

  1. 玩家
  2. 扑克牌
  3. 发牌的??

每局游戏玩家需要3个,扑克牌每3个人一套,而发牌的就叫庄家了吧,也是每三人一个。

综上所述,程序运行需要的对象有

  1. 庄家:有一套完整的牌和三个玩家
  2. 玩家:有一套自己的牌
  3. 扑克牌:有牌的大小和类型(对子,炸弹啥的)

二、流程

  1. 初始化54张牌
  2. 选定谁是地主
  3. 发牌(每人17张牌)
  4. 剩余3张牌给地主
  5. 地主出牌
  6. 按顺序下一位出牌
  7. 重复5-6至有人手牌全部出完
  8. 宣布胜利者

三、方法定义

  1. 初始化54张牌
  2. 选定谁是地主
  3. 发牌(每人17张牌)
  4. 剩余3张牌给地主
  5. 地主出牌
  6. 按顺序下一位出牌
  7. 重复5-6至有人手牌全部出完
  8. 宣布胜利者
  1. 这个当然是庄家初始化,也就是庄家对象需要初始化54张牌的方法
  2. 谁是地主也是庄家选定的,专家对象需要一个选定地址的方法
  3. 发牌也是庄家干的事,但发给玩家,玩家需要拿到牌,也就是庄家需要一个发牌的方法,玩家需要一个收牌的方法
  4. 没啥好说的
  5. 出牌也就是玩家需要一个出牌的方法
  6. 决定出牌的顺序和记录上一个出牌的玩家也是庄家需要的方法
  7. 循环,交给主程序
  8. 最后的输出也交给主程序

整理成代码:

扑克牌

**
 * @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("水煮鱼") 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值