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. 【charger battery 充電 充電器 電池】停充的種類

    Precondition : 配有 power path 功能的 BQ2589 手機. 接上 pc usb port. Origin : 今天有同事問我, 手機是否可以在接上 pc usb port ...

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

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

  3. jquery实现点击进行跳转后,改点击的元素添加选中的效果

    <style> .active { color: red; } </style> //html代码 <ul id="tab2"> <li& ...

  4. Java静态代理与动态代理模式的实现

    前言:    在现实生活中,考虑以下的场景:小王打算要去租房,他相中了一个房子,准备去找房东洽谈相关事宜.但是房东他很忙,平时上班没时间,总找不到时间去找他,他也没办法.后来,房东想了一个办法,他找到 ...

  5. node.js 开发环境配置 和使用方式

    1.在根目录创建一个文件夹 里面 放入js 编写完成后使用 cmd  进行编译就可以了2.expree 安装    卸载: npm uninstall -g express 安装指定版本: npm i ...

  6. 【数据库】Mean web开发 03-MongoDB客户端管理工具NoSQL Manager for MongoDB的使用

    简介 Mean是JavaScript的全栈开发框架.更多介绍 用MongoDB实现持久数据的存储是Mean Web全栈开发中的一部分. MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非 ...

  7. php面向对象2

    类与对象的区别和联系 通过 http://www.cnblogs.com/we-jack/p/object.html 和 http://www.cnblogs.com/we-jack/p/php.ht ...

  8. [Linux] PHP程序员玩转Linux系列-腾讯云硬盘扩容挂载

    1.PHP程序员玩转Linux系列-怎么安装使用CentOS 2.PHP程序员玩转Linux系列-lnmp环境的搭建 3.PHP程序员玩转Linux系列-搭建FTP代码开发环境 4.PHP程序员玩转L ...

  9. 如何解决wamp中数据库读取数据是???的情况?

    数据库中数据正常,但是从数据库读取出的数据在网页中显示时是???,该怎么办呢? 左键点击托盘区的WampServer图标,选择Mysql--my.ini,就会打开配置文件 1.在[client]段落增 ...

  10. MVC启动windows身份验证时初次访问特别慢

    最近做了一个关于MVC的项目,刚开始往服务器上面部署时,没有开启windows身份验证,等开发基本收尾时候,将验证开启时,第一次打开的时候需要将近15s的访问时间,别说用户受不了,自己都受不了了. 对 ...