最新更新,扑克牌小游戏练习,多次更改后版本.项目虽小但确实囊括了不少java基础的东西.欢迎大神指点,谢谢..
提供下载地址:http://pan.baidu.com/s/1slzgiXR
提供功能:验证输入id:是不是贱贱哒~~~~

排序功能良好

内容展示
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);
}
}