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. 解决selenium驱动Firefox跳转页慢慢慢的问题

    首先我给自己定义为是一个更新偏执狂.不知道从哪个版本开始,使用selenium驱动打开Firefox浏览器时,会跳转到官网指定页,这个过程真是慢得要死. 为了解决这个问题,我是查了很多资料,解决方案是 ...

  2. 【转】jQuery Validate验证框架详解

    jQuery校验官网地址:http://bassistance.de/jquery-plugins/jquery-plugin-validation 一.导入js库 <script type=& ...

  3. 笔记本shift变粘贴,粘滞键设置已关闭

    之前手贱吧,拿湿抹布擦了擦笔记本电脑的自带键盘,然后部分按键失灵了. 本想着反正也都是在寝室用的,趁机找借口买了个机械键盘,啪啪啪... 刚开始好好的,后来发现一按shift就会粘贴,百度了下都说是粘 ...

  4. Chart.js – 效果精美的 HTML5 Canvas 图表库

    Chart.js 是一个令人印象深刻的 JavaScript 图表库,建立在 HTML5 Canvas 基础上.目前,它支持6种图表类型(折线图,条形图,雷达图,饼图,柱状图和极地区域区).而且,这是 ...

  5. 你会python不?当你听到这个问题要谨慎回答!!!

    问:你会python不? 答:python啊,略微有点小研究,虽然不精通,但是写写网络小爬虫,搜集搜集网络资源,学习视频什么的,还是手到擒来的...(for循环一小时中) 旁白:然而你没有明白人家的真 ...

  6. JAVA网络编程TCP通信

    Socket简介: Socket称为"套接字",描述IP地址和端口.在Internet上的主机一般运行多个服务软件,同时提供几种服务,每种服务都打开一个Socket,并绑定在一个端 ...

  7. 浅谈MVC数据验证

    一.一般情况 对于使用过MVC框架的人来说,对MVC的数据验证不会陌生,比如,我有一个Model如下: public class UserInfo { [Required(ErrorMessage = ...

  8. 数据库MySQL安装和校验

    1.安装MySQL 双击已经下载的安装包: Typical:典型安装,第一次安装建议选择该类安装 Custom:自定义安装,在对数据库熟悉后,知道自己需要哪些组件时,可以选择该类安装(这里选择的是自定 ...

  9. java(3) if结构

    一.基本if结构 1.流程图 1)输入输出 2)判断和分支 3) 流程线 1.1  简单的if条件判断 if(表达式){             //表达式为true,执行{}中的代码 } 示例1:如 ...

  10. (转)Javascript的DOM操作 - 性能优化

    转载:https://my.oschina.net/blogshi/blog/198910 摘要: 想稍微系统的说说对于DOM的操作,把Javascript和jQuery常用操作DOM的内容归纳成思维 ...