Java集合框架小应用之扑克牌小游戏
学习了Java集合框架之后,我写了一个扑克牌小游戏来巩固知识。学习之余的练习之作,有不足之处还得多多指教了~(*/ω\*)
扑克牌小游戏背景:
1. 创建一副扑克牌,不考虑大小王
包括四种花色:黑桃、红桃、梅花、方片
十三种点数:2-10,J Q K A
2. 创建两名玩家,玩家至少要有ID、姓名、手牌等属性,手牌为扑克牌的集合
3. 洗牌,将之前创建的扑克牌顺序打乱(说明是有序的)
4. 发牌,将洗牌之后的扑克牌集合,从第一张开始,发给两名玩家,按照一人一张的方式,每人发两张
5. 开始游戏,比大小,取两人各自的点数最大的牌进行比较,点数大的赢,若大小相同比花色(黑红梅方)
直接上代码,就是那么简单粗暴!
1)Poker类(扑克牌类)
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner; /**
* 扑克牌类
* @author acer
*
*/
public class Poker implements Comparable<Poker>{
private Scanner in;
private String kind;//花色
private int size;//点数大小
PokerMap map=new PokerMap();
private class PokerMap{//内部类
public Map<String,Integer> kinds;
public Map<Integer,String> sizes;
{ //初始化
kinds=new HashMap<String,Integer>();
kinds.put("黑桃",4);
kinds.put("红桃",3);
kinds.put("梅花",2);
kinds.put("方片",1); sizes=new HashMap<Integer,String>();
sizes.put(2,2+"");
sizes.put(3,3+"");
sizes.put(4,4+"");
sizes.put(5,5+"");
sizes.put(6,6+"");
sizes.put(7,7+"");
sizes.put(8,8+"");
sizes.put(9,9+"");
sizes.put(10,10+"");
sizes.put(11,"J");
sizes.put(12,"Q");
sizes.put(13,"K");
sizes.put(1,"A"); } }
public Poker(){} public Poker(String kind,int size){
while(!map.kinds.containsKey(kind)){
System.out.println("创建扑克牌花色有误,请重新创建花色!");
in=new Scanner(System.in);
kind=in.next();
}
this.kind=kind;
while(!map.sizes.containsKey(size)){
System.out.println("创建扑克牌点数有误,请重新创建点数!");
in=new Scanner(System.in);
size=in.nextInt();
}
this.size=size; }
@Override
public String toString() {
return kind+":"+map.sizes.get(size);
} public String getKind() {
return kind;
}
public void setKind(String kind) {
this.kind = kind;
}
public String getSizeMap() {
return map.sizes.get(size);
}
public int getSize(){
return size;
}
public void setSize(int size) {
this.size = size;
} @Override
public int compareTo(Poker o) {//默认比较大小
// TODO Auto-generated method stub
if(Integer.valueOf(this.size).compareTo(o.getSize())!=0){//如果点数不同
return Integer.valueOf(this.size).compareTo(o.getSize());//比较点数
}else{//点数相同
return map.kinds.get(this.getKind()).compareTo(map.kinds.get(o.getKind()));//比较花色
} } }
2)PokerList类(一副扑克牌类)
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Random; /*
* 一副有序的扑克牌类
*/
public class PokerList {
private List<Poker> pokerList;
public PokerList(){
setPokerList(new ArrayList<Poker>());
}
/*
* 创建一副有序的扑克牌
*/
public void creatPokerList(){
Poker[] list=new Poker[52];//总共有52张牌
for(int i=0;i<list.length;i++){
if(i<=12){
list[i]=new Poker("黑桃",i+1);
}
if(i>=13&&i<=25){
list[i]=new Poker("红桃",i%13+1);
}
if(i>=26&&i<=38){
list[i]=new Poker("梅花",i%13+1);
}
if(i>=39){
list[i]=new Poker("方片",i%13+1);
}
}
pokerList.addAll(Arrays.asList(list));//将数组添加到集合
}
/*
* 打印输出一副扑克牌
*/
public void printPokerList(){
System.out.println("扑克牌为:"); int count=0;
for(Poker p:pokerList){
System.out.print(p+" ");
count++;
if(count%13==0)
System.out.println();
} }
/*
* 打乱扑克牌顺序
*/
public void shufflePokerList(){
Random random=new Random();
Poker temp;
//任意从list中取两个元素交换位置,循环52次
for(int i=0;i<pokerList.size();i++){
int index1=random.nextInt(pokerList.size()-1);
int index2=random.nextInt(pokerList.size()-1);
temp=pokerList.get(index1);
pokerList.set(index1, pokerList.get(index2));
pokerList.set(index2, temp);
}
}
public List<Poker> getPokerList() {
return pokerList;
}
public void setPokerList(List<Poker> pokerList) {
this.pokerList = pokerList;
}
}
3)Player类(玩家类)
import java.util.ArrayList;
import java.util.List; /*
* 游戏玩家类
*/
public class Player {
private String id;//玩家id private String name;//玩家姓名 private List<Poker> myPoker;//玩家手牌Set集合 public Player(){setMyPoker(new ArrayList<Poker>());}//初始化Set集合} public Player(String id,String name){
this();
this.id=id;
this.name=name;
}
public String printMyPoker(){
return myPoker.toString();
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
} public List<Poker> getMyPoker() {
return myPoker;
} public void setMyPoker(List<Poker> myPoker) {
this.myPoker = myPoker;
} }
4)PokerMain类(主方法类)
import java.util.Collections;
import java.util.Scanner; /**
* 1.创建一副扑克牌,不考虑大小王 包括四种花色:黑桃、红桃、梅花、方片 十三种点数:2-10,J Q K A
* 2.创建两名玩家,玩家至少要有ID、姓名、手牌等属性,手牌为扑克牌的集合
* 3.洗牌,将之前创建的扑克牌顺序打乱(说明是有序的)
* 4.发牌,将洗牌之后的扑克牌集合,从第一张开始,发给两名玩家,按照一人一张的方式,每人发两张
* 5.开始游戏,比大小,取两人各自的点数最大的牌进行比较,点数大的赢,若大小相同比花色(黑红梅方)
* @author acer
*
*/
public class PokerMain {
PokerList pList;
static Scanner in;
{
pList=new PokerList();
in=new Scanner(System.in);
}
/*
* 1.创建一副扑克牌,不考虑大小王 包括四种花色:黑桃、红桃、梅花、方片 十三种点数:2-10,J Q K A
*/
public void CreatPoker(){
System.out.println("----------创建扑克牌----------");
pList.creatPokerList();
System.out.println("----------创建扑克牌成功----------");
pList.printPokerList();
}
/*
* 3.洗牌,将之前创建的扑克牌顺序打乱
*/
public void ShufflePoker(){
System.out.println("----------开始洗牌----------");
pList.shufflePokerList();
System.out.println("----------洗牌结束----------"); } /*
* 4.发牌,将洗牌之后的扑克牌集合,从第一张开始,发给两名玩家,按照一人一张的方式,每人发两张
*/
public void PlayPoker(Player p1,Player p2){
System.out.println("----------开始发牌----------");
int i=1;
while(i<=4){
if(i%2!=0){
p1.getMyPoker().add(pList.getPokerList().get(i-1));
System.out.println("---玩家:"+p1.getName()+"-拿牌");
}else{
p2.getMyPoker().add(pList.getPokerList().get(i-1));
System.out.println("---玩家:"+p2.getName()+"-拿牌");
}
i++;
}
System.out.println("----------发牌结束----------");
}
/*
* 5.开始游戏,比大小,取两人各自的点数最大的牌进行比较,点数大的赢,若大小相同比花色(黑红梅方)
*/
public void StartGame(Player p1,Player p2){
System.out.println("----------开始游戏----------");
Collections.sort(p1.getMyPoker());
System.out.println("---玩家:"+p1.getName()+"最大手牌为:"+p1.getMyPoker().get(1));
Collections.sort(p2.getMyPoker());
System.out.println("---玩家:"+p2.getName()+"最大手牌为:"+p2.getMyPoker().get(1));
switch(p1.getMyPoker().get(1).compareTo(p2.getMyPoker().get(1))){
case 1:System.out.println("----------玩家:"+p1.getName()+"获胜!----------");
break;
case -1:System.out.println("----------玩家:"+p2.getName()+"获胜!----------");
break;
case 0:System.out.println("----------平局!!----------");
break;
default: break;
}
System.out.println("玩家各自的手牌为:");
System.out.println(p1.getName()+":"+p1.printMyPoker());
System.out.println(p2.getName()+":"+p2.printMyPoker());
}
public static void main(String[] args) {
// TODO Auto-generated method stub
PokerMain test=new PokerMain();
test.CreatPoker();
test.ShufflePoker();
System.out.println("----------创建玩家----------");
System.out.println("请输入第一位玩家的姓名和id");
System.out.println("输入id:");
String id=in.next();
System.out.println("输入姓名:");
String name=in.next();
Player p1=new Player(id,name);
System.out.println("请输入第二位玩家的姓名和id");
System.out.println("输入id:");
id=in.next();
System.out.println("输入姓名:");
name=in.next();
Player p2=new Player(id,name);
System.out.println("---欢迎玩家1:"+p1.getName());
System.out.println("---欢迎玩家2:"+p2.getName());
test.PlayPoker(p1, p2);
test.StartGame(p1, p2);
in.close();
} }
运行结果:
博主只是一个菜鸟鸟,大牛们不要客气,直接给建议吧( • ̀ω•́ )✧