栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java游戏 斗地主

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java游戏 斗地主

 该代码分为三个模块,主要使用的是数组进行遍历,加上面向对象的知识点,串联起来,是java基础阶段的一大趣味游戏,能极高的锻炼你的逻辑思维能力,话不多说,直接放代码:

package com.ddz;


public class Card implements Comparable{
	
	private String cardNum;			//点数 34567890JQKA2小大
	private String cardType;		//花色
	private int cardValue;			//排序的数值 10 11 12 13...
	
	public String getCardNum() {
		return cardNum;
	}
	public void setCardNum(String cardNum) {
		this.cardNum = cardNum;
	}
	public String getCardType() {
		return cardType;
	}
	public void setCardType(String cardType) {
		this.cardType = cardType;
	}
	public int getCardValue() {
		return cardValue;
	}
	public void setCardValue(int cardValue) {
		this.cardValue = cardValue;
	}
	
	public Card(String cardNum, String cardType) {
		this.cardNum = cardNum;
		this.cardType = cardType;
		switch (cardNum) {
			case "0": 
				this.cardValue = 10;
				break;
			case "J": 
				this.cardValue = 11;
				break;
			case "Q": 
				this.cardValue = 12;
				break;
			case "K": 
				this.cardValue = 13;
				break;
			case "A": 
				this.cardValue = 14;
				break;
			case "2": 
				this.cardValue = 15;
				break;
			case "小": 
				this.cardValue = 16;
				break;
			case "大": 
				this.cardValue = 17;
				break;
			default:
				this.cardValue = Integer.parseInt(cardNum);
				break;
			}
	}
	
	public Card() {
		super();
	}
	
	@Override
	public String toString() {
		return cardNum+cardType;
	}
	
//	重写比较类
	@Override
	public int compareTo(Card o) { //内置比较器
		return cardValue - o.cardValue;//比较大小
	}
	
	
	
	
	
	
}
package com.ddz;

import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;


public class Game {
	
	private static String cardNum = "34567890JQKA2";
	private static String cardType = "♠♥♣♦";
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		Card[] cards = createCard();
		System.out.println(Arrays.toString(cards));
		randomCard(cards);
		System.out.println(Arrays.toString(cards));//打乱后
		//创建3个用户
		Player[] players = {new Player(),new Player(),new Player()};
		//发牌
		giveOutCard(cards, players);
		//玩家理牌
		for (int i = 0; i < players.length; i++) {
			players[i].orderCard();
		}
//		调整出牌顺序
		Arrays.sort(players);
		
//		出牌
		while(true) {
			for (int i = 0; i < players.length; i++) {
				Player player = players[i];
				System.out.println(players[i].getPlayerType()+":"+Arrays.toString(players[i].getCards()));
				System.out.println(players[i].getPlayerType()+"出牌:");
				String cardStr = sc.next();
				player.outCard(cardStr);
			}
		}
		
	}
	
	//生成一副牌
	public static Card[] createCard() {
		Card[] cards = new Card[54];//定义一个数据类型是Card的长度是54的数组
		for (int i = 0; i < cardNum.length(); i++) { //两个for循环,一个遍历大小,一个遍历花色,循环嵌套打印所有的牌
			for (int j = 0; j < cardType.length(); j++) {
				cards[i*4+j] = new Card(cardNum.charAt(i)+"",cardType.charAt(j)+"");//打印数组,顺序是i*4+j 0123 4567
			}
		}
		cards[52] = new Card("小","王");//最后的两张牌
		cards[53] = new Card("大","王");
		return cards;
	}
	
//	洗牌
	public static void randomCard(Card[] cards) {
		Random random = new Random();
		for (int i = 0; i < cards.length; i++) {
			int index = random.nextInt(cards.length-1);//index是随机下标
			if (i!=index) {//如果他的索引不等于随机下标,就需要交换位置
				Card card = cards[i]; //创建临时对象交换位置
				cards[i] = cards[index];
				cards[index] = card;
			}
		}
	}
	
	public static void giveOutCard(Card[] cards,Player[] players) {
		//选地主
		Random random = new Random();
		int index = random.nextInt(players.length);
		int length = 0;
		for (int i = 0; i < players.length; i++) { //012 index是一个随机数 如果随机数等于那个数,那个人就是地主
			if (index==i) {
				players[i].setPlayerType("地主");
				Card[] cards2 = Arrays.copyOfRange(cards, length, 20+length);//复制一个新的数组2 第一个参数是复制的数组,第二个是数组开始,第三个是数组结束
				players[i].setCards(cards2);
				length+=20;
			}else {
				players[i].setPlayerType("玩家"+i);
				Card[] cards2 = Arrays.copyOfRange(cards, length, 17+length);
				players[i].setCards(cards2);
				length+=17;
			}
		}
	}

}
package com.ddz;

import java.util.Arrays;


public class Player implements Comparable{
	
	private Card[] cards; //扑克牌
	private String playerType;//地主还是农民
	private int outCardNum;//出牌数
	
	//理牌
	public void orderCard() {
		Arrays.sort(cards);
	}
	
	//出牌
	public void outCard(String str) {
		if ("pass".equalsIgnoreCase(str)) {
			return;
		}
		//创建一个新数组
		Card[] cards2 = Arrays.copyOf(cards, cards.length);
		//定义一个出牌的数量
		int num = 0;
		
		for (int i = 0; i < str.length(); i++) {
			//要出的牌
			String card = str.charAt(i)+"";
			
//			查找是否存在要出的牌
			for (int j = 0; j < cards2.length; j++) {
				if (cards2[j]!=null) {
					if (cards2[j].getCardNum().equalsIgnoreCase(card)) {
						cards2[j]=null;
						num++;
						break;
					}
				}
			}
		}
		
//		存在这些牌
		if (num==str.length()) {
			cards=cards2;//数组变为已出的数组
			outCardNum+=str.length();//出牌数量+
			if (outCardNum==cards.length) {
				System.out.println(playerType+"赢了");
				System.exit(0);
			}
		}
	}
	
	public Card[] getCards() {
		return cards;
	}
	public void setCards(Card[] cards) {
		this.cards = cards;
	}
	public String getPlayerType() {
		return playerType;
	}
	public void setPlayerType(String playerType) {
		this.playerType = playerType;
	}
	public int getOutCardNum() {
		return outCardNum;
	}
	public void setOutCardNum(int outCardNum) {
		this.outCardNum = outCardNum;
	}
	public Player(Card[] cards, String playerType, int outCardNum) {
		super();
		this.cards = cards;
		this.playerType = playerType;
		this.outCardNum = outCardNum;
	}
	public Player() {
		super();
	}
	@Override
	public String toString() {
		return "Player [cards=" + Arrays.toString(cards) + ", playerType=" + playerType + ", outCardNum=" + outCardNum
				+ "]";
	}

	@Override
	public int compareTo(Player o) {
		return o.cards.length-cards.length;
	}

	
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1028986.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号