gao634209276
2016-02-12 23:12
注意这里的内容我已经更新了,原来的删掉了.这是我最新的代码..修改过的,上午半天写出来了,结果bug好几个,然后就是排序不正常,一直弄到快晚上...现在好了,,大家看看有什么问题没有,提供下载地址:
http://pan.baidu.com/s/1hrL2SS0
整体结构如下:
package item;
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;
public class Player {
private String name;
private int id;
private List<Card> cardList;
int count;
Scanner in;
public Player() {
}
public String getName() {
return name;
}
public int getId() {
return id;
}
public void setName() {
in = new Scanner(System.in);
System.out.println("请输入姓名");
name = in.next();
}
public void SetId() {
if (count == 3) {
System.out.println("对不起,输出次数达到上限,即将退出系统");
return;
}
count++;
in = new Scanner(System.in);
System.out.println("请输出入id");
try {
id = in.nextInt();
if(id<=0){
throw new RuntimeException();
}
} catch (Exception e) {
if (count < 3)
System.out.println("对不起,请输出一个正整数");
SetId();
}
}
@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);
}
}package util;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import item.Card;
import item.Player;
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 = new Card();
card.setPoint(i);
card.setVariety(j);
cardList.add(card);
}
}
System.out.println();
return cardList;
}
public Player playerRegistered() {
Player p = new Player();
p.SetId();
p.setName();
return p;
}
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 void sortCard(List<Card> cardList){
Collections.sort(cardList);
System.out.println(cardList);
}
public void shffleCard(List<Card> cardList){
Collections.shuffle( cardList);
}
public Player pointCard(Player p1, Player p2) {
List<Card> sum = new ArrayList<Card>();
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("玩家" + winner.getName() + "最大的手牌为:" + max.toString());
return winner;
}
}package View;
import java.util.List;
import item.Card;
import item.Player;
import util.Utils;
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);
System.out.println("-----------扑克牌创建成功----------");
System.out.println("------------玩家注册……-------------");
Player p1 = util.playerRegistered();
if(p1.getId()==0){
return;
}
Player p2 = util.playerRegistered();
if(p2.getId()==0){
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("两人的手牌分别为:");
System.out.println("玩家"+p1.getName()+"手牌为:"+p1.getCardList());
System.out.println("玩家"+p2.getName()+"手牌为:"+p2.getCardList());
System.out.println("本局胜利者的信息为:"+winner.toString());
System.out.println("---------本局结束,再来一次吧!!----------");
}
}注意楼下我写的都有点问题,不用看了...
啊...有一个bug,现稍作修改..见谅..bug原因输入一个负数的id 能通过...
然后如果一直输入非int类型的id,会让id为0..在这里修改了..代码如下...
player:
package item;
import java.util.List;
import java.util.Scanner;
public class Player {
private String name;
private int id;
private List<Card> cardList;
int count;
Scanner in;
public Player() {
}
public String getName() {
return name;
}
public int getId() {
return id;
}
public void setName() {
in = new Scanner(System.in);
System.out.println("请输入姓名");
name = in.next();
}
public void SetId() {
if (count == 3) {
System.out.println("对不起输出次数上限");
return;
}
count++;
in = new Scanner(System.in);
System.out.println("请输出入id");
try {
id = in.nextInt();
if(id<=0){
throw new RuntimeException();
}
} catch (Exception e) {
if (count < 3)
System.out.println("对不起,请输出数字");
SetId();
}
}
@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);
}
}view层
package View;
import java.util.Set;
import item.Card;
import item.Player;
import util.Utils;
public class View {
public static void main(String[] args) {
Utils util = new Utils();
System.out.println("------------创建扑克牌------------");
Set<Card> cardSet = util.createCard();
System.out.println("-----------扑克牌创建成功----------");
System.out.println("------------玩家注册……-------------");
Player p1 = util.playerRegistered();
if(p1.getId()==0){
return;
}
Player p2 = util.playerRegistered();
if(p1.getId()==0){
return;
}
System.out.println("注册的玩家为:");
System.out.println(p1.toString());
System.out.println(p2.toString());
System.out.println("------------开始发牌:-------------");
util.dealCard(p1, p2, cardSet);
System.out.println("------------发牌结束!-------------");
System.out.println("------------开始游戏……-------------");
Player winner = util.pointCard(p1, p2);
//这里可以把pointCard()方法该为返回值为void类型的;
System.out.println("两人的手牌分别为:");
util.showCard(p1);
util.showCard(p2);
System.out.println("本局胜利者的信息为:"+winner.toString());
System.out.println("---------本局结束,再来一次吧!!----------");
}
}其他不动.
更改后的公开下载链接:http://pan.baidu.com/s/1geIhiIB
关于这个综合练习,当时我写的是半成品,很多不足,今天我重新写了代码,有需要参考的可以来看看...http://pan.baidu.com/s/1nuLsISx
这个是view层:
package View;
import java.util.Set;
import item.Card;
import item.Player;
import util.Utils;
public class View {
public static void main(String[] args) {
Utils util = new Utils();
System.out.println("------------创建扑克牌------------");
Set<Card> cardSet = util.createCard();
System.out.println("-----------扑克牌创建成功----------");
Player p1 = util.playerRegistered();
System.out.println("------------玩家注册……-------------");
Player p2 = util.playerRegistered();
System.out.println("注册的玩家为:");
System.out.println(p1.toString());
System.out.println(p2.toString());
System.out.println("------------开始发牌:-------------");
util.dealCard(p1, p2, cardSet);
System.out.println("------------发牌结束!-------------");
System.out.println("------------开始游戏……-------------");
Player winner = util.pointCard(p1, p2);
//这里可以把pointCard()方法该为返回值为void类型的;
System.out.println("两人的手牌分别为:");
util.showCard(p1);
util.showCard(p2);
System.out.println("本局胜利者的信息为:"+winner.toString());
System.out.println("---------本局结束,再来一次吧!!----------");
}
}这个是Util层:
package util;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import item.Card;
import item.Player;
public class Utils {
Set<Card> cardSet = new HashSet<Card>();
public Set<Card> createCard() {
for (int i = 0; i < 13; i++) {
for (int j = 0; j < 4; j++) {
Card card = new Card();
card = new Card();
card.setPoint(i);
card.setVariety(j);
// Card c = new Card(card.getPoint(), card.getVariety());
System.out.print(card.toString() + " ");
cardSet.add(card);
}
}
System.out.println();
return cardSet;
}
public Player playerRegistered() {
Player p = new Player();
p.SetId();
p.setName();
return p;
}
public void dealCard(Player p1, Player p2, Set<Card> cardSet) {
/*在这里使用ForEach亦可以
* System.out.println(cardSet.size()); for (Card card : cardSet) {
* System.out.print(card.toString()+" "); }
*/
int i = 1;
p1.setCardList(new ArrayList<Card>());
p2.setCardList(new ArrayList<Card>());
Iterator<Card> iterator = cardSet.iterator();
while (iterator.hasNext()) {
if (i % 2 == 0) {
System.out.println("玩家" + p1.getName() + "拿牌");
// System.out.println(iterator.next().toString() + " ");
p1.addCardList(iterator.next());
}
if (i % 2 == 1) {
System.out.println("玩家" + p2.getName() + "拿牌");
// System.out.println(iterator.next().toString() + " ");
p2.addCardList(iterator.next());
}
if (i >= 4) {
break;
}
i++;
}
}
public void showCard(Player p) {
System.out.println("玩家"+p.getName() + "手牌:");
for (Card card : p.getCardList()) {
System.out.print(card.toString() + " ");
}
System.out.println();
}
public Player pointCard(Player p1, Player p2) {
List<Card> sum = new ArrayList<Card>();
sum.addAll(p1.getCardList());
sum.addAll(p2.getCardList());
for (Card card : sum) {
System.out.println(card.toString());
}
Card max = Collections.max(sum);
Player winner = sum.indexOf(max) <= 2 ? p1 : p2;
System.out.println("玩家"+winner.getName() + "赢");
System.out.println("玩家"+winner.getName()+"最大的手牌为:" + max.toString());
return winner;
}
}这个是items层
Card类:
package item;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
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) {
List<String> point=new ArrayList<String>();
List<String> variety=new ArrayList<String>();
point.addAll(Arrays.asList(p));
variety.addAll(Arrays.asList(v));
int num = (point.indexOf(o.getPoint()))*4+variety.indexOf(o.getVariety());
return num;
}
}Player类:
package item;
import java.util.List;
import java.util.Scanner;
public class Player {
private String name;
private int id;
private List<Card> cardList;
int count;
Scanner in;
public Player() {
}
public String getName() {
return name;
}
public int getId() {
return id;
}
public void setName() {
in = new Scanner(System.in);
System.out.println("请输入姓名");
name = in.next();
}
public void SetId() {
if (count == 3) {
System.out.println("对不起输出次数上限");
return;
}
count++;
in = new Scanner(System.in);
System.out.println("请输出入id");
try {
id = in.nextInt();
} catch (Exception e) {
if (count < 3)
System.out.println("对不起,请输出数字");
SetId();
}
}
@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);
}
}还有,我上传了包里有个test.java和Variety.java没用,可以删掉
写的太好啦!!!有个问题想问一下,Comparat类应该是跟max()方法有关,比较四种花色的大小?能详细讲解一下这块的原理吗?
写的真好,你那个怎么比较大小的啊?没看太明白!把思路说一下呗,谢谢了!
扑克不能有1,小改了一下,在num数组里删除1,在最后加上14,然后在hashMap映射里加上put(14,'A');发现我这编码是编的最少的。。差很多内容啊,这个就当初稿吧,明天再看看
Java入门第三季
409776 学习 · 4546 问题
相似问题