一开始其实没什么思路但是在看过几位大神的思路之后,自己还是能够写出来的~~思路如下:
1)创建一个Card类,它包含两个属性—面值,花色;
2)创建两个List<String>一个用于存储扑克牌的花色信息,一个用于储存面值信息;
3)创建一个List<Card>,用于接收创建的扑克牌
4)创建一个Player类用于存储玩家信息
package com.imooc;
/**
* 扑克牌类,有着两个属性 style(花色)name(具体点数)
* @author xl
*
*/
public class Card {
public String style;
public String name;
public Card(String style, String name) {
super();
this.style = style;
this.name = name;
}
@Override
//重写toString()方法
public String toString() {
String string="["+this.style+" "+this.name+"]";
return string;
}
}
package com.imooc;
import java.util.ArrayList;
import java.util.List;
//创建对应的不同花色
public class styleList {
public List<String>styleList;
public styleList(){
styleList=new ArrayList<String>();
styleList.add("黑桃");
styleList.add("红心");
styleList.add("梅花");
styleList.add("方片");
}
}
package com.imooc;
import java.util.ArrayList;
import java.util.List;
//创建具体点数大小的扑克牌
public class nameList {
public List<String> numList;
public nameList(){
numList =new ArrayList<String>();
for(int i=0;i<9;i++){
numList.add((i+2)+"");
}
numList.add("J");
numList.add("Q");
numList.add("K");
numList.add("A");
}
}
package com.imooc;
//玩家类,用于创建具体玩家对象
public class Players {
public Integer id;
public String name;
Card card1,card2;
public Players(Integer id, String name, Card card1, Card card2) {
super();
this.id = id;
this.name = name;
this.card1 = card1;
this.card2 = card2;
}
public String toString() {
String string="玩家"+name+"的牌为:"+card1+" : "+card2;
return string;
}
}
package com.imooc;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
//通过List<Card>来接收产生的扑克牌
public class List_test {
List<Card>table;
public List_test(){
table=new ArrayList<Card>();
styleList styleList=new styleList();
nameList nameList=new nameList();
System.out.println("--------------------开始创建扑克牌-------------------");
System.out.println();
/**
* 通过循环嵌套创建扑克牌
*/
for(int i=0;i<4;i++){
for(int j=0;j<13;j++){
Card c=new Card(styleList.styleList.get(i),
nameList.numList.get(j));
table.add(c);
}
}
/**
* 格式化输出创建的扑克牌信息
*/
for(int i=0;i<52;i++){
System.out.print("创建扑克牌"+table.get(i).style
+table.get(i).name+" ");
if((i+1)%13==0)
System.out.println();
}
System.out.println();
System.out.println("------------------创建扑克牌完毕!---------------");
}
/**
* 将新创建的扑克牌进行洗牌
*/
public void washCard(){
//创建一个新的容器用于存储随机取出的扑克牌
List<Card>newtable=new ArrayList<Card>();
Random random=new Random();
System.out.println("----------------------开始洗牌--------------------");
for(int i=0;i<52;i++){
Card c;
do {//确保添加到新容器的扑克牌都是新容器没有的牌
c=table.get(random.nextInt(51));
newtable.add(c);
} while (!newtable.contains(c));
}
this.table=newtable;
System.out.println("------------------------洗牌结束------------------");
}
/**
* 获取扑克牌,进行发牌操作
* @param num
* @return
*/
public List<Card> give_card(int num){
List<Card>newtable=new ArrayList<Card>();
Random random=new Random();
for(int i=0;i<num;i++){
Card c;
do {
c=table.get(random.nextInt(51));
newtable.add(c);
} while (!newtable.contains(c));
}
return newtable;
}
/**
* 比较牌的大小
* @param cd1
* @param cd2
* @return
*/
public Card compare(Card cd1,Card cd2){
styleList st=new styleList();
nameList nt=new nameList();
int i=nt.numList.indexOf(cd1.name);
int j=nt.numList.indexOf(cd2.name);
if(i>j){
return cd1;
}
if(i==j){
int i1=st.styleList.indexOf(cd1.style);
int i2=st.styleList.indexOf(cd2.style);
if(i1>i2)
return cd1;
}
return cd2;
}
}
package com.imooc;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
/**
* @author xl
*
*/
public class gameTest {
/**
* 测试类
* @param args
*/
public static void main(String []args){
Integer id1;
Integer id2;
String name1;
String name2;
System.out.println("----------------------欢迎进入游戏--------------------");
List_test Cards=new List_test();
Scanner input=new Scanner(System.in);
/*
* 开始输入玩家信息
*/
System.out.println("------------------开始创建玩家(2人)------------------");
System.out.println("请输入玩家1的ID");
id1=input.nextInt();
input.nextLine();
System.out.println("请输入玩家1的姓名");
name1=input.nextLine();
System.out.println("请输入玩家2的ID");
id2=input.nextInt();
input.nextLine();
System.out.println("请输入玩家2的姓名");
name2=input.nextLine();
System.out.println("-------------------玩家创建完成----------------------");
/*
* 开始洗牌
*/
Cards.washCard();
/*
* 获取四张牌,每人两张
*/
List<Card>newtable=Cards.give_card(4);
Card[]card=new Card[newtable.size()];
for(int i=0;i<newtable.size();i++){
card[i]=newtable.get(i);
}
/*
* 完善玩家信息:id/name/card1/card2
*/
Players player1=new Players(id1,name1,card[0],card[1]);
Players player2=new Players(id2,name2,card[2],card[3]);
/*
* 通过比较各自的牌,分别得到各自最大的牌
*/
Card c1=Cards.compare(card[0], card[1]);
Card c2=Cards.compare(card[2], card[3]);
/*
* 再次比较,得到最终四张牌中的最大的牌
*/
Card c3=Cards.compare(c1, c2);
/*
* 最简单的读取玩家信息的方法,分别输出对应属性
*/
// System.out.println(" "+player1.name+"的牌为:"+card[0].style+card[0].name+
// " : "+card[1].style+card[1].name);
// System.out.println(" "+player2.name+"的牌为:"+card[2].style+card[2].name+
// " : "+card[3].style+card[3].name);
/*
* 通过重写Players和Card的toString方法,调用toString方法输出玩家信息
*/
System.out.println(player1);
System.out.println(player2);
/*
* 判断输赢,并输出
*/
if(c3.equals(c1))
{
System.out.println("玩家 --"+player1.name+"获胜");
}else
System.out.println("玩家 --"+player2.name+"获胜");
}
}
运行结果:
第一次发手记,代码中有什么不足的地方,还请大神们多多指教~~