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();
} }

运行结果:

博主只是一个菜鸟鸟,大牛们不要客气,直接给建议吧( • ̀ω•́ )✧

Java编程练习(四)——集合框架应用的更多相关文章

  1. 已看1.熟练的使用Java语言进行面向对象程序设计,有良好的编程习惯,熟悉常用的Java API,包括集合框架、多线程(并发编程)、I/O(NIO)、Socket、JDBC、XML、反射等。[泛型]\

    1.熟练的使用Java语言进行面向对象程序设计,有良好的编程习惯,熟悉常用的Java API,包括集合框架.多线程(并发编程).I/O(NIO).Socket.JDBC.XML.反射等.[泛型]\1* ...

  2. Java编程手冊-Collection框架(上)

    该文章所讲内容基本涵盖了Collection里面的全部东西,尽管基于jdk 1.5的.可是思路非常清晰 1.引言 1.1 Collection框架的介绍 尽管我们能够使用数组去存储具有同样类型的元素集 ...

  3. Java编程手冊-Collection框架(下)

    建议先看Java编程手冊-Collection框架(上) 5.  Set<E>接口与实现 Set<E>接口表示一个数学的集合,它不同意元素的反复,仅仅能包括一个null元素. ...

  4. Java 异常处理机制和集合框架

    一.实验目的 掌握面向对象程序设计技术 二.实验环境 1.微型计算机一台 2.WINDOWS操作系统,Java SDK,Eclipse开发环境 三.实验内容 1.Java异常处理机制涉及5个关键字:t ...

  5. 一起学 Java(三) 集合框架、数据结构、泛型

    一.Java 集合框架 集合框架是一个用来代表和操纵集合的统一架构.所有的集合框架都包含如下内容: 接口:是代表集合的抽象数据类型.接口允许集合独立操纵其代表的细节.在面向对象的语言,接口通常形成一个 ...

  6. Java面试准备之集合框架

    集合框架 Collection:List列表,Set集 Map:Hashtable,HashMap,TreeMap Collection 是单列集合 List 元素是有序的(元素存取是有序).可重复 ...

  7. Java基础---泛型、集合框架工具类:collections和Arrays

    第一讲     泛型(Generic) 一.概述 1.JDK1.5版本以后出现的新特性.用于解决安全问题,是一个类型安全机制. 2.JDK1.5的集合类希望在定义集合时,明确表明你要向集合中装入那种类 ...

  8. Java核心技术点之集合框架

    1. 概述     Java集合框架由Java类库的一系列接口.抽象类以及具体实现类组成.我们这里所说的集合就是把一组对象组织到一起,然后再根据不同的需求操纵这些数据.集合类型就是容纳这些对象的一个容 ...

  9. java第七章集合框架

    如果想存储多个人物信息可以使用数组实现但是采用数组存以下明显缺陷: 数组长度不变不能适应元素变化情况,若存储大于20个英雄信息则长度不够,若只存储10个则造成内存空间浪费.可用.length获取数组中 ...

  10. Java基础知识:集合框架

    *本文是最近学习到的知识的记录以及分享,算不上原创. *参考文献见链接. 目录 集合框架 Collection接口 Map接口 集合的工具类 这篇文章只大致回顾一下Java的总体框架. 集合框架 ht ...

随机推荐

  1. 关于springmvc时request的getReader()和getInputStream()只能调用一次的解决办法

    最近准备在原有的SSM项目的基础上添加完善的日志分析,由于是APP的后台系统,之前在规划APP的时候,并没有在APP上做埋点的处理,而如果想要进行埋点处理的话,对于未能新升级的APP用户来说,就是去了 ...

  2. ionic 使用mobisscrolls,实现日期选择的插件

    废话不多说,直接说用法: 1,先下载mobisscrolls的破解版,下载地址,链接:http://pan.baidu.com/s/1boSKf51 密码:5dft 当然你也可以去官网下载,不过官网的 ...

  3. 刨根究底字符编码之七——ANSI编码与代码页(Code Page)

    ANSI编码与代码页(Code Page) 一.ANSI编码 1. 如前所述,在全世界所有国家和民族的文字符号统一编码的Unicode编码方案问世之前,各个国家.民族为了用计算机记录并显示自己的字符, ...

  4. WebService入门实例教程

    什么是WebService 通过使用WebService,您的应用程序可以向全世界发布信息,或提供某项功能,它是基于Web的服务,通过Web进行发布.查找和使用. WebService脚本平台需支持X ...

  5. Python中的模块介绍和使用

    在Python中有一个概念叫做模块(module),这个和C语言中的头文件以及Java中的包很类似,比如在Python中要调用sqrt函数,必须用import关键字引入math这个模块,下面就来了解一 ...

  6. nodejs 开发指南 书中小项目 代码

    最近 在学习node.js 先看了下语法 ,然后就看这个开发指南感觉书还是很有用,但是代码太旧了,网上也没有最新的,所以就自己查着前人的痕迹和自己修改,现在可以跑了. https://github.c ...

  7. Ionic3新特性--页面懒加载2加载其他组件

    在第一节中,我们介绍了页面的懒加载方式,并进行了初步的分析,这里,我们将进一步介绍如何配合页面懒加载进行其他组件Component.Pipe.Directive等的模块化,和加载使用. 首先说明一点, ...

  8. 深入研究React setState的工作机制

    前言 上个月发表了一篇 React源码学习--ReactClass,但是后来我发现,大家对这种大量贴代码分析源码的形式并不感冒.讲道理,我自己看着也烦,还不如自己直接去翻源码来得痛快.吸取了上一次的教 ...

  9. xtrabackup备份原理

    Percona XtraBackup工作原理 Percona XtraBackup是基于InnoDB的崩溃恢复功能.复制InnoDB数据文件,导致内部不一致的数据; 但随后它对文件执行崩溃恢复,使它们 ...

  10. 手动添加git到目录右键菜单

      1.通过在"运行"中输入'regedit',打开注册表. 2.找到[HKEY_CLASSES_ROOT\Directory\Background]. 3.在[Backgroun ...