为了账号安全,请及时绑定邮箱和手机立即绑定

最新更新,扑克牌小游戏练习,多次更改后版本.项目虽小但确实囊括了不少java基础的东西.欢迎大神指点,谢谢..

提供下载地址:http://pan.baidu.com/s/1slzgiXR

提供功能:验证输入id:是不是贱贱哒~~~~

http://img1.sycdn.imooc.com//5712dd2a000142ba09830747.jpg

排序功能良好

http://img1.sycdn.imooc.com//5712dd4900010a6908210626.jpg

内容展示

view:

package View;

import java.util.List;
import item.Card;
import item.Player;
import util.PlayerRegistered;
import util.Utils;

/**
 *主函数的入口,向控制台提供简单的视图
 *调用util和PlayerRegistered实现各种功能..
 */
public class View {

	public static void main(String[] args) {
		
		Utils util = new Utils();
		System.out.println("------------创建扑克牌------------");
		List<Card> cardList = util.createCard();
		System.out.println(cardList);
		//可以验证一下,sort功能是否正确,查看sort后扑克牌大小顺序
		//util.sortCard(cardList);
		System.out.println("-----------扑克牌创建成功----------");
		System.out.println("------------玩家注册……-------------");
		
		PlayerRegistered pr = new PlayerRegistered();
		Player p1,p2;
		//try-catch判断是否退出主函数体
		try {
			p1 = pr.playerBuilder();
			p2 = pr.playerBuilder();
		} catch (Exception e) {
			return;
		}
		
		System.out.println("注册的玩家为:");
		System.out.println(p1.toString());
		System.out.println(p2.toString());
		System.out.println("------------开始洗牌:-------------");
		util.shffleCard(cardList);
		System.out.println("------------开始发牌:-------------");
		util.dealCard(p1, p2, cardList);
		System.out.println("------------发牌结束!-------------");
		System.out.println("------------开始游戏……-------------");
		Player winner = util.pointCard(p1, p2);
		//这里如果后面不需要胜利玩家习题,可以把pointCard()方法改为返回值为void类型的;
		
		System.out.println("本局胜利者的信息为:"+winner.toString());
		System.out.println("---------本局结束,再来一次吧!!----------");
		
		
	}
}

Util

package util;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import item.Card;
import item.Player;

/**
 *本类为View提供与扑克牌相关的各种方法
 *
 */
public class Utils {

	List<Card> cardList = new ArrayList<Card>();
	//制作扑克牌
	public List<Card> createCard() {
		for (int i = 0; i < 13; i++) {
			for (int j = 0; j < 4; j++) {
				Card card = new Card();
				card.setPoint(i);
				card.setVariety(j);
				cardList.add(card);
			}
		}
		System.out.println();
		return cardList;
	}
	
	//扑克牌排序,为了验证是否能够比较大小,可以删除此方法
	public  void sortCard(List<Card> cardList){
		Collections.sort(cardList);
		System.out.println(cardList);
	}

	//洗牌
	public void shffleCard(List<Card> cardList){
        Collections.shuffle( cardList);
    }
	
	//为p1,p2发扑克牌
	public void dealCard(Player p1, Player p2, List<Card> cardList) {
		int i = 1;
		p1.setCardList(new ArrayList<Card>());
		p2.setCardList(new ArrayList<Card>());
		Iterator<Card> iterator = cardList.iterator();
		while (iterator.hasNext()) {
			if (i % 2 == 1) {
				System.out.println("玩家" + p1.getName() + "拿牌");
				p1.addCardList(iterator.next());
			}
			if (i % 2 == 0) {
				System.out.println("玩家" + p2.getName() + "拿牌");
				p2.addCardList(iterator.next());
			}
			if (i >= 4) {
				break;
			}
			i++;
		}
	}

	public Player pointCard(Player p1, Player p2) {
		//在这里可以取以中转变量:maxP1,maxP2
		/*Card maxP1 = Collections.max(p1.getCardList());
		Card maxP2 = Collections.max(p1.getCardList());*/
		System.out.println( p1.getName() + "最大的手牌为"+Collections.max(p1.getCardList()));
		System.out.println( p2.getName() + "最大的手牌为"+Collections.max(p2.getCardList()));
		
		List<Card> sum = new ArrayList<Card>();
		//这里的sum可以直接添加注释中的maxP1,maxP2,一个意思...
		sum.addAll(p1.getCardList());
		sum.addAll(p2.getCardList());
		Card max = Collections.max(sum);
		Player winner = sum.indexOf(max) <= 2 ? p1 : p2;
		System.out.println("玩家" + winner.getName() + "赢");
		System.out.println("两人的手牌分别为:");
		System.out.println("玩家"+p1.getName()+"手牌为:"+p1.getCardList());
		System.out.println("玩家"+p2.getName()+"手牌为:"+p2.getCardList());
		return winner;
	}
}
package util;

import java.util.Scanner;

import item.Player;

/**
 *玩家注册,验证类
 *提供输入,返回玩家信息
 *如果验证失败,主程序退出!!
 */
public class PlayerRegistered {

	private Player p;
	static int count;
	Scanner in;
	
	//PlayerRegistered的唯一入口,其他封装其他方法.
	public Player playerBuilder() throws Exception{
		p = new Player();
		inputId();
		if(p.getId()==0){
			throw new RuntimeException();
		}
		inputName();
		return p;
	}
	
	private void inputName() {
		in = new Scanner(System.in);
		System.out.println("请输入姓名");
		p.setName(in.next());
	}
	
	private void inputId() {
		if (count == 3) {
			System.out.println("对不起,输出次数达到上限,系统退出");
			return;
		}
		count++;
		in = new Scanner(System.in);
		System.out.println("请输出入id");
		try {
			int id = in.nextInt();
			if(id<=0){
				//这里可以设置一个与nextInt()不同的异常,
				//然后再分别catch处理,我这里简单的统一处理了
				throw new RuntimeException();
			}
			p.setId( id);
		} catch (Exception e) {
			if (count < 3){
				System.out.println("对不起,请输出一个正整数,(还有"+(3-count)+"次机会)");
			}
			inputId();
		}
	}
	
	
}

item

package item;

/**
 *Card类,封装单张扑克牌的属性point,variety
 */
public class Card implements Comparable<Card> {

	private String point;
	private String variety;
	private String[] p = { "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A" };
	private String[] v = { "黑桃", "红桃", "梅花", "方块" };

	public String getVariety() {
		return variety;
	}

	public void setVariety(int variety) {
		this.variety = v[variety];
	}

	public String getPoint() {
		return point;
	}

	public void setPoint(int point) {
		this.point = p[point];
	}

	public Card() {

	}

	@Override
	public String toString() {
		return this.getVariety() + this.getPoint();
	}

	@Override
	public int compareTo(Card o) {
		String point = "12345678910JQKA";
		String variety = "方块梅花红桃黑桃";
		int p = point.indexOf(this.getPoint())-point.indexOf(o.getPoint());
		int v = variety.indexOf(this.getVariety())-variety.indexOf(o.getVariety());
		//String str2 = "黑桃红桃梅花方块";
		return p*4+v/2;
	}

}
package item;

import java.util.List;
import java.util.Scanner;

/**
 *玩家实体类,封装name,id
 *玩家游戏时候获取扑克牌,所以添加cardList的属性
 */
public class Player {

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

	public void setId(int id) {
		this.id = id;
	}

	private int id;
	private List<Card> cardList;
	int count;
	Scanner in;

	public Player() {

	}

	public String getName() {
		return name;
	}

	public int getId() {
		return id;
	}

	@Override
	public String toString() {
		return "Player [name=" + name + ", id=" + id + "]";
	}

	public List<Card> getCardList() {
		return cardList;
	}

	public void setCardList(List<Card> cardList) {
		this.cardList = cardList;
	}

	public void addCardList(Card c) {
		
		this.cardList.add(c);

	}

}


正在回答

3 回答

今天才知道有个函数  Collections.shuffle(cardList)  直接给随机洗牌了   23333

0 回复 有任何疑惑可以回复我~

感觉写的随机洗牌有点问题,  还是有规律的,是不是借助随机函数洗牌或者发牌按随机比较好点

0 回复 有任何疑惑可以回复我~
#1

gao634209276 提问者

确实有时候连着好几次打乱后的顺序很类似,可以,看你的了
2016-05-28 回复 有任何疑惑可以回复我~

为了避免误解,将复写的compareTo方法更改如下..

public int compareTo(Card o) {

String sortp = "12345678910JQKA";

String sortv = "方块梅花红桃黑桃";

int p = sortp.indexOf(this.getPoint())-sortp.indexOf(o.getPoint());

int v = sortv.indexOf(this.getVariety())-sortv.indexOf(o.getVariety());

//String str2 = "黑桃红桃梅花方块";

return p*4+v/2;

}


1 回复 有任何疑惑可以回复我~
#1

gao634209276 提问者

return的系数关系: p乘数只要大于 花色种类/2 也就是4就可以了..
2016-04-17 回复 有任何疑惑可以回复我~
#2

gao634209276 提问者

刚给项目新增了一个小功能,可以通过控制进行多次游戏并简单统计胜率等..有感兴趣的可以看一看.链接如下 http://pan.baidu.com/s/1nuV2hpn
2016-04-17 回复 有任何疑惑可以回复我~
#3

狒狒zzz 回复 gao634209276 提问者

什么意思?
2016-04-19 回复 有任何疑惑可以回复我~
#4

沫语

能问下return 那个系数为什么是那样吗?
2016-05-14 回复 有任何疑惑可以回复我~
查看2条回复

举报

0/150
提交
取消

最新更新,扑克牌小游戏练习,多次更改后版本.项目虽小但确实囊括了不少java基础的东西.欢迎大神指点,谢谢..

我要回答 关注问题
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号