java入门第三季——简易扑克牌游戏

700 查看

一开始其实没什么思路但是在看过几位大神的思路之后,自己还是能够写出来的~~思路如下:
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],card1);
        Players player2=new Players(id2,name2,card[2],card[3]);
        /
      • 通过比较各自的牌,分别得到各自最大的牌
        /
        Card c1=Cards.compare(card[0], card1);
        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+
        // " : "+card1.style+card1.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+"获胜");
      }

}
运行结果:
图片描述
第一次发手记,代码中有什么不足的地方,还请大神们多多指教~~