Java编程练习(四)——集合框架应用
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.熟练的使用Java语言进行面向对象程序设计,有良好的编程习惯,熟悉常用的Java API,包括集合框架、多线程(并发编程)、I/O(NIO)、Socket、JDBC、XML、反射等。[泛型]\
1.熟练的使用Java语言进行面向对象程序设计,有良好的编程习惯,熟悉常用的Java API,包括集合框架.多线程(并发编程).I/O(NIO).Socket.JDBC.XML.反射等.[泛型]\1* ...
- Java编程手冊-Collection框架(上)
该文章所讲内容基本涵盖了Collection里面的全部东西,尽管基于jdk 1.5的.可是思路非常清晰 1.引言 1.1 Collection框架的介绍 尽管我们能够使用数组去存储具有同样类型的元素集 ...
- Java编程手冊-Collection框架(下)
建议先看Java编程手冊-Collection框架(上) 5. Set<E>接口与实现 Set<E>接口表示一个数学的集合,它不同意元素的反复,仅仅能包括一个null元素. ...
- Java 异常处理机制和集合框架
一.实验目的 掌握面向对象程序设计技术 二.实验环境 1.微型计算机一台 2.WINDOWS操作系统,Java SDK,Eclipse开发环境 三.实验内容 1.Java异常处理机制涉及5个关键字:t ...
- 一起学 Java(三) 集合框架、数据结构、泛型
一.Java 集合框架 集合框架是一个用来代表和操纵集合的统一架构.所有的集合框架都包含如下内容: 接口:是代表集合的抽象数据类型.接口允许集合独立操纵其代表的细节.在面向对象的语言,接口通常形成一个 ...
- Java面试准备之集合框架
集合框架 Collection:List列表,Set集 Map:Hashtable,HashMap,TreeMap Collection 是单列集合 List 元素是有序的(元素存取是有序).可重复 ...
- Java基础---泛型、集合框架工具类:collections和Arrays
第一讲 泛型(Generic) 一.概述 1.JDK1.5版本以后出现的新特性.用于解决安全问题,是一个类型安全机制. 2.JDK1.5的集合类希望在定义集合时,明确表明你要向集合中装入那种类 ...
- Java核心技术点之集合框架
1. 概述 Java集合框架由Java类库的一系列接口.抽象类以及具体实现类组成.我们这里所说的集合就是把一组对象组织到一起,然后再根据不同的需求操纵这些数据.集合类型就是容纳这些对象的一个容 ...
- java第七章集合框架
如果想存储多个人物信息可以使用数组实现但是采用数组存以下明显缺陷: 数组长度不变不能适应元素变化情况,若存储大于20个英雄信息则长度不够,若只存储10个则造成内存空间浪费.可用.length获取数组中 ...
- Java基础知识:集合框架
*本文是最近学习到的知识的记录以及分享,算不上原创. *参考文献见链接. 目录 集合框架 Collection接口 Map接口 集合的工具类 这篇文章只大致回顾一下Java的总体框架. 集合框架 ht ...
随机推荐
- 纯CSS3实现loading正在加载。。。
场景分析:随着我司专职前端切图人员离职,切图的活重新落到我们小组团队成员的日常任务list里面,加上我们小组 7个前端 基本都是后台转的前端 (赶鸭子上架 前端现在需求量大 没办法) 加上自己也将就一 ...
- Lua学习(1)——table
table类型实现了“关联数组”.“关联数组”是一种具有特殊索引方式的数组.不仅可以通过证书来索引它,还可以使用字符串或其他类型(除了nil)来索引它.table是Lua中主要的数据结构机制(事实也是 ...
- 【Python之基本数据类型 基本运算】
一.基本数据类型 1.字符串 类:str 方法:选中str,按住command(ctrl)+左键跳转至对应的方法 字符串常用方法归纳如下: 1)capitalize 功能:实现字符串首字母大写,自身不 ...
- 手把手教你用Eclipse+TestNG搭建接口自动化测试框架
转载于:http://qa.blog.163.com/blog/static/190147002201510275306185/ 把群博里关于接口自动化的文章都看了一遍,都是关于测试过程中遇到的问题及 ...
- C#解析json的两种方式
C#中Json转换主要使用的几种方法! 这篇主要介绍2.4.第三种方法使用的比较局限,所以我没有深入学习. 第二种方法 我使用比较多的方式,这个方法是.NET内置的,使用起来比较方便 A.利用seri ...
- java中的中文参数存到数据库乱码问题
关于java中的中文参数乱码问题,遇见过很多,若开发工具的字符集环境和数据库的字符集环境都一样,存到数据库中还是乱码的话,可以通过以下方法解决: 用数据库客户端检查每个字段的字符集和字符集校对和这个表 ...
- Day1 - Python基础1 Python介绍、基本语法、流程控制习题集
1.打印Hello World! print("Hello World!") 或 name="你好,世界!" print(name) 2.声明变量:打印name ...
- 搭建rtmp直播流服务之2:使用java实现ffmpeg命令接口化调用(用java执行ffmpeg命令)
欢迎大家积极开心的加入讨论群 群号:371249677 (点击这里进群) 一.环境搭建 1.安装ffmpeg 下载对应系统的ffmpeg安装包,个人采用windows平台进行开发,所以安装了windo ...
- windows8.1安装之后的感想
这蛋疼的换了系统之后,发现windows8在界面方面确实花了不少功夫,但是自我感觉,比较适合触屏的平板电脑用. 我笔记本操作体验一般般.windows8不吃内存.这是真的.我机子占了25%左右.刚 ...
- Spring学习(6)---Bean定义及作用域的例子
(一)Bean的定义 先定义一个BeanAnnotation package com.mypackage; import org.springframework.stereotype.Componen ...