62,614
社区成员
发帖
与我相关
我的任务
分享
package cardGame;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class ShuffleAllCards {
//cards应该是不变的, 所以要static,要不然调用的时候创建的是新的.size为0的.
public static List<String> cards;
public ShuffleAllCards(){
ShuffleAllCards.cards = new ArrayList<String>();
}
/**
* 生成所有52张牌
* */
public void CardsCreate(){
System.out.println("-----------游戏开始!-----------");
//通过遍历得到所有52张牌.
String[] number = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
String[] color = {"黑桃","红桃","梅花","方块"};
for(int i=0;i<number.length;i++){
for (int j = 0; j < color.length; j++) {
//第一个是 黑桃A, 然后 红桃A,
String OneCard = color[j]+number[i];
//每一次都加到List里,list是有序的.
cards.add(OneCard);
}
}
if(cards.size() == 52){
System.out.println("-----------生成扑克牌成功-------");
}
}
/**
* 打乱所有52张牌的顺序
* */
public void ShuffleCards(){
System.out.println("-----------开始洗牌-----------");
Collections.shuffle(cards);
for (String str : cards) {
System.out.print(str+", ");
}
System.out.println("-----------洗牌结束-----------");
}
}
package cardGame;
import java.util.ArrayList;
import java.util.List;
/**
* 玩家类,有ID/name/手牌
* 其中手牌来着ShuffleAllCards类.
* */
public class Players {
public int ID;
public String name;
public List<String> HandCards;
public Players() {
}
//实例化属性
public Players(int ID,String name) {
this.ID = ID;
this.name = name;
//不能直接实例化List,因为set是一个接口.
this.HandCards = new ArrayList<String>();
}
public Players(int ID,String name,List<String> HandCard){
this.ID = ID;
this.name = name;
//不能直接实例化List,因为set是一个接口.
this.HandCards = new ArrayList<String>();
}
}
package cardGame;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.InputMismatchException;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
public class LetUsPlay {
Scanner console = new Scanner(System.in);
//定义一个玩家List
public List<Players> players;
public LetUsPlay() {
//初始化玩家List
players = new ArrayList<Players>();
}
/**
* 创建玩家方法
* */
public void CreatePlayers(){
System.out.println("-----------登记玩家信息-----------");
System.out.println("一共有几位玩家呢?");
int playerCounter = console.nextInt();
for(int i=0;i<playerCounter;i++){
//try{
//确定一共有几个玩家
System.out.println("请输入第"+(i+1)+"位玩家ID: ");
int playerId = console.nextInt();
System.out.println("请输入第"+(i+1)+"位玩家姓名: ");
String playerName = console.next();
Players player = new Players(playerId,playerName);
players.add(player);
//}catch(InputMismatchException ex){
// System.out.println("请输入整数类型的ID!");
// i--;
// continue;
//}
}
//for (Players players : players) {
//System.out.println(players.name);
//}
}
/**
* 为玩家发牌,之前扑克牌已经打乱顺序了
* */
public void GiveCards(){
//共有多少个玩家,就循环多少次.比方5个玩家
for(int i=0;i<players.size();i++){
//先给每个玩家发第一张牌, 发的是1-5张牌
players.get(i).HandCards.add(ShuffleAllCards.cards.get(i));
//再发第二张牌,发的是6-10张牌,第6张牌给第1个玩家.
players.get(i).HandCards.add(ShuffleAllCards.cards.get(i+players.size()));
}
}
/**
* 比较玩家手里的卡牌
* 规则为:取两人各自手中点数最大的牌进行比较,点数大的赢.
* 若两人各自的点数最大的牌相等,则再按花色比较.
* (黑桃>红桃>梅花>方块) 方块A, 黑桃Q, 黑桃6, 梅花3,
* */
public void CompareCards(){
for(int i=0;i<players.size();i++){
//每个玩家的手里的第一张和第二张牌
String firstCard = players.get(i).HandCards.get(0);
String SecondCard = players.get(i).HandCards.get(1);
/** 这里, 要比较得到较大的一张牌, 然后把所有玩家的较大的一张牌放到一个集合里, 再比较, 但是 之前的cards集合,
* 是比方说,"方块5"这样的, 必须取出"方块"和5分开, 这一步似乎可以做到, 见下面的代码, 但是感觉很复杂啊,
* 而且像A,J,K,Q和"方块"这样的还不能直接比较
* 并且后面就不知道怎么写了
**/
}
}
}
//先创建一个list用来存放每个玩家手牌里较大的那一张.
List<String> theBigOne = new ArrayList<String>();
//先比较每个玩家自己手中的两张卡牌,找出一张较大的.
for(int i=0;i<players.size();i++){
//每个玩家的手里的第一张和第二张牌
String firstCard = players.get(i).HandCards.get(0);
String SecondCard = players.get(i).HandCards.get(1);
//取得每个玩家两张手牌的点数
String FirstCardPoint = firstCard.substring(2, firstCard.length());
String SecondCardPoint = SecondCard.substring(2, SecondCard.length());
//取得每个玩家两张手牌的花色
String FirstCardColor = firstCard.substring(0,2);
String SecondCardColor = SecondCard.substring(0,2);
//==比较的是值,equals比较的是地址,switch方法在jdk1.6中不能传入String类型
//start 把点数中的A,j,Q,K转成1,11,12,13,然后才能比较大小.
int FirstCardPoint1 = 0,SecondCardPoint1 = 0;
if(FirstCardPoint=="A" || SecondCardPoint=="A"){
FirstCardPoint1= 1; SecondCardPoint1 = 1;
}
if(FirstCardPoint=="J" || SecondCardPoint=="J"){
FirstCardPoint1= 11; SecondCardPoint1 = 11;
}
if(FirstCardPoint=="Q" || SecondCardPoint=="Q"){
FirstCardPoint1= 12; SecondCardPoint1 = 12;
}
if(FirstCardPoint=="K" || SecondCardPoint=="K"){
FirstCardPoint1= 13; SecondCardPoint1 = 13;
}
//end 把点数中的A,j,Q,K转成1,11,12,13,然后才能比较大小.
//start 把花色中的黑桃>红桃>梅花>方块 转成14,15,16,17,然后才能比较大小.
int FirstCardColor1 =0 ,SecondCardColor1 = 0;
if(FirstCardColor=="黑桃" || SecondCardColor=="黑桃"){
FirstCardColor1= 17; SecondCardColor1 = 17;
}
if(FirstCardColor=="红桃" || SecondCardColor=="红桃"){
FirstCardColor1= 16; SecondCardColor1 = 16;
}
if(FirstCardColor=="梅花" || SecondCardColor=="梅花"){
FirstCardColor1= 15; SecondCardColor1 = 15;
}
if(FirstCardColor=="方块" || SecondCardColor=="方块"){
FirstCardColor1= 14; SecondCardColor1 = 14;
}
//end 把花色中的黑桃>红桃>梅花>方块转成14,15,16,17,然后才能比较大小.
//start 比较每个玩家两张手牌的点数的大小,较大的放到新的theBigOne的list里.
if(FirstCardPoint1 > SecondCardPoint1 || Integer.parseInt(FirstCardPoint) > Integer.parseInt(SecondCardPoint)){
theBigOne.add(firstCard);
}
else if(FirstCardPoint1 < SecondCardPoint1 || Integer.parseInt(FirstCardPoint) < Integer.parseInt(SecondCardPoint)){
theBigOne.add(SecondCard);
}
else if(FirstCardPoint1 == SecondCardPoint1 || Integer.parseInt(FirstCardPoint) == Integer.parseInt(SecondCardPoint)){
//点数相同,比较花色
if(FirstCardColor1 > SecondCardColor1){
theBigOne.add(firstCard);
}
else if(FirstCardColor1 < SecondCardColor1){
theBigOne.add(SecondCard);
}
else if(FirstCardColor1 == SecondCardColor1){
System.out.println("不可能!两个人抽到相同的牌了");
}
}
//end 比较每个玩家两张手牌的点数的大小,较大的放到新的theBigOne的list里.
}
for (String string : theBigOne) {
System.out.println(string);
}