Java编程练习(四)——集合框架应用
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java编程练习(四)——集合框架应用,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含7920字,纯文字阅读大概需要12分钟。
内容图文
Java集合框架小应用之扑克牌小游戏
学习了Java集合框架之后,我写了一个扑克牌小游戏来巩固知识。学习之余的练习之作,有不足之处还得多多指教了~(*/ω\*)
扑克牌小游戏背景:
1. 创建一副扑克牌,不考虑大小王
包括四种花色:黑桃、红桃、梅花、方片
十三种点数:2-10,J Q K A
2. 创建两名玩家,玩家至少要有ID、姓名、手牌等属性,手牌为扑克牌的集合
3. 洗牌,将之前创建的扑克牌顺序打乱(说明是有序的)
4. 发牌,将洗牌之后的扑克牌集合,从第一张开始,发给两名玩家,按照一人一张的方式,每人发两张
5. 开始游戏,比大小,取两人各自的点数最大的牌进行比较,点数大的赢,若大小相同比花色(黑红梅方)
直接上代码,就是那么简单粗暴!
1)Poker类(扑克牌类)
1 import java.util.HashMap; 2 import java.util.Map; 3 import java.util.Scanner; 4 5 /** 6 * 扑克牌类 7 * @author acer 8 * 9 */ 10 public class Poker implements Comparable<Poker>{ 11private Scanner in; 12private String kind;//花色13privateint size;//点数大小14 PokerMap map=new PokerMap(); 15privateclass PokerMap{//内部类16public Map<String,Integer> kinds; 17public Map<Integer,String> sizes; 18 { //初始化19 kinds=new HashMap<String,Integer>(); 20 kinds.put("黑桃",4); 21 kinds.put("红桃",3); 22 kinds.put("梅花",2); 23 kinds.put("方片",1); 2425 sizes=new HashMap<Integer,String>(); 26 sizes.put(2,2+""); 27 sizes.put(3,3+""); 28 sizes.put(4,4+""); 29 sizes.put(5,5+""); 30 sizes.put(6,6+""); 31 sizes.put(7,7+""); 32 sizes.put(8,8+""); 33 sizes.put(9,9+""); 34 sizes.put(10,10+""); 35 sizes.put(11,"J"); 36 sizes.put(12,"Q"); 37 sizes.put(13,"K"); 38 sizes.put(1,"A"); 3940 } 4142 } 43public Poker(){} 4445public Poker(String kind,int size){ 46while(!map.kinds.containsKey(kind)){ 47 System.out.println("创建扑克牌花色有误,请重新创建花色!"); 48 in=new Scanner(System.in); 49 kind=in.next(); 50 } 51this.kind=kind; 52while(!map.sizes.containsKey(size)){ 53 System.out.println("创建扑克牌点数有误,请重新创建点数!"); 54 in=new Scanner(System.in); 55 size=in.nextInt(); 56 } 57this.size=size; 5859606162 } 63 @Override 64public String toString() { 65return kind+":"+map.sizes.get(size); 66 } 6768public String getKind() { 69return kind; 70 } 71publicvoid setKind(String kind) { 72this.kind = kind; 73 } 74public String getSizeMap() { 75return map.sizes.get(size); 76 } 77publicint getSize(){ 78return size; 79 } 80publicvoid setSize(int size) { 81this.size = size; 82 } 83848586 @Override 87publicint compareTo(Poker o) {//默认比较大小 88// TODO Auto-generated method stub89if(Integer.valueOf(this.size).compareTo(o.getSize())!=0){//如果点数不同90return Integer.valueOf(this.size).compareTo(o.getSize());//比较点数91 }else{//点数相同92return map.kinds.get(this.getKind()).compareTo(map.kinds.get(o.getKind()));//比较花色93 } 9495 } 96979899 }
2)PokerList类(一副扑克牌类)
1 import java.util.ArrayList; 2 import java.util.Arrays; 3 import java.util.List; 4 import java.util.Random; 5 6 /* 7 * 一副有序的扑克牌类 8 */ 9 public class PokerList { 10 private List<Poker> pokerList; 11public PokerList(){ 12 setPokerList(new ArrayList<Poker>()); 13 } 14/*15 * 创建一副有序的扑克牌 16*/17publicvoid creatPokerList(){ 18 Poker[] list=new Poker[52];//总共有52张牌19for(int i=0;i<list.length;i++){ 20if(i<=12){ 21 list[i]=new Poker("黑桃",i+1); 22 } 23if(i>=13&&i<=25){ 24 list[i]=new Poker("红桃",i%13+1); 25 } 26if(i>=26&&i<=38){ 27 list[i]=new Poker("梅花",i%13+1); 28 } 29if(i>=39){ 30 list[i]=new Poker("方片",i%13+1); 31 } 32 } 33 pokerList.addAll(Arrays.asList(list));//将数组添加到集合34 } 35/*36 * 打印输出一副扑克牌 37*/38publicvoid printPokerList(){ 39 System.out.println("扑克牌为:"); 4041int count=0; 42for(Poker p:pokerList){ 43 System.out.print(p+" "); 44 count++; 45if(count%13==0) 46 System.out.println(); 47 } 484950 } 51/*52 * 打乱扑克牌顺序 53*/54publicvoid shufflePokerList(){ 55 Random random=new Random(); 56 Poker temp; 57//任意从list中取两个元素交换位置,循环52次58for(int i=0;i<pokerList.size();i++){ 59int index1=random.nextInt(pokerList.size()-1); 60int index2=random.nextInt(pokerList.size()-1); 61 temp=pokerList.get(index1); 62 pokerList.set(index1, pokerList.get(index2)); 63 pokerList.set(index2, temp); 64 } 65 } 66public List<Poker> getPokerList() { 67return pokerList; 68 } 69publicvoid setPokerList(List<Poker> pokerList) { 70this.pokerList = pokerList; 71 } 72 }
3)Player类(玩家类)
1 import java.util.ArrayList; 2 import java.util.List; 3 4 /* 5 * 游戏玩家类 6 */ 7 public class Player { 8 private String id;//玩家id 910private String name;//玩家姓名1112private List<Poker> myPoker;//玩家手牌Set集合1314public Player(){setMyPoker(new ArrayList<Poker>());}//初始化Set集合}1516public Player(String id,String name){ 17this(); 18this.id=id; 19this.name=name; 20 } 21public String printMyPoker(){ 22return myPoker.toString(); 23 } 24public String getId() { 25return id; 26 } 27publicvoid setId(String id) { 28this.id = id; 29 } 30public String getName() { 31return name; 32 } 33publicvoid setName(String name) { 34this.name = name; 35 } 3637public List<Poker> getMyPoker() { 38return myPoker; 39 } 4041publicvoid setMyPoker(List<Poker> myPoker) { 42this.myPoker = myPoker; 43 } 444546 }
4)PokerMain类(主方法类)
1 import java.util.Collections; 2 import java.util.Scanner; 3 4 /** 5 * 1.创建一副扑克牌,不考虑大小王 包括四种花色:黑桃、红桃、梅花、方片 十三种点数:2-10,J Q K A 6 * 2.创建两名玩家,玩家至少要有ID、姓名、手牌等属性,手牌为扑克牌的集合 7 * 3.洗牌,将之前创建的扑克牌顺序打乱(说明是有序的) 8 * 4.发牌,将洗牌之后的扑克牌集合,从第一张开始,发给两名玩家,按照一人一张的方式,每人发两张 9 * 5.开始游戏,比大小,取两人各自的点数最大的牌进行比较,点数大的赢,若大小相同比花色(黑红梅方) 10 * @author acer 11 * 12 */ 13 public class PokerMain { 14 PokerList pList; 15 static Scanner in; 16 { 17 pList=new PokerList(); 18 in=new Scanner(System.in); 19 } 20/* 21 * 1.创建一副扑克牌,不考虑大小王 包括四种花色:黑桃、红桃、梅花、方片 十三种点数:2-10,J Q K A 22*/ 23publicvoid CreatPoker(){ 24 System.out.println("----------创建扑克牌----------"); 25 pList.creatPokerList(); 26 System.out.println("----------创建扑克牌成功----------"); 27 pList.printPokerList(); 28 } 29/* 30 * 3.洗牌,将之前创建的扑克牌顺序打乱 31*/ 32publicvoid ShufflePoker(){ 33 System.out.println("----------开始洗牌----------"); 34 pList.shufflePokerList(); 35 System.out.println("----------洗牌结束----------"); 36 37 } 38 39/* 40 * 4.发牌,将洗牌之后的扑克牌集合,从第一张开始,发给两名玩家,按照一人一张的方式,每人发两张 41*/ 42publicvoid PlayPoker(Player p1,Player p2){ 43 System.out.println("----------开始发牌----------"); 44int i=1; 45while(i<=4){ 46if(i%2!=0){ 47 p1.getMyPoker().add(pList.getPokerList().get(i-1)); 48 System.out.println("---玩家:"+p1.getName()+"-拿牌"); 49 }else{ 50 p2.getMyPoker().add(pList.getPokerList().get(i-1)); 51 System.out.println("---玩家:"+p2.getName()+"-拿牌"); 52 } 53 i++; 54 } 55 System.out.println("----------发牌结束----------"); 56 } 57/* 58 * 5.开始游戏,比大小,取两人各自的点数最大的牌进行比较,点数大的赢,若大小相同比花色(黑红梅方) 59*/ 60publicvoid StartGame(Player p1,Player p2){ 61 System.out.println("----------开始游戏----------"); 62 Collections.sort(p1.getMyPoker()); 63 System.out.println("---玩家:"+p1.getName()+"最大手牌为:"+p1.getMyPoker().get(1)); 64 Collections.sort(p2.getMyPoker()); 65 System.out.println("---玩家:"+p2.getName()+"最大手牌为:"+p2.getMyPoker().get(1)); 66switch(p1.getMyPoker().get(1).compareTo(p2.getMyPoker().get(1))){ 67case 1:System.out.println("----------玩家:"+p1.getName()+"获胜!----------"); 68break; 69case -1:System.out.println("----------玩家:"+p2.getName()+"获胜!----------"); 70break; 71case 0:System.out.println("----------平局!!----------"); 72break; 73default: 74 75break; 76 } 77 System.out.println("玩家各自的手牌为:"); 78 System.out.println(p1.getName()+":"+p1.printMyPoker()); 79 System.out.println(p2.getName()+":"+p2.printMyPoker()); 80 } 81publicstaticvoid main(String[] args) { 82// TODO Auto-generated method stub 83 PokerMain test=new PokerMain(); 84 test.CreatPoker(); 85 test.ShufflePoker(); 86 System.out.println("----------创建玩家----------"); 87 System.out.println("请输入第一位玩家的姓名和id"); 88 System.out.println("输入id:"); 89 String id=in.next(); 90 System.out.println("输入姓名:"); 91 String name=in.next(); 92 Player p1=new Player(id,name); 93 System.out.println("请输入第二位玩家的姓名和id"); 94 System.out.println("输入id:"); 95 id=in.next(); 96 System.out.println("输入姓名:"); 97 name=in.next(); 98 Player p2=new Player(id,name); 99 System.out.println("---欢迎玩家1:"+p1.getName()); 100 System.out.println("---欢迎玩家2:"+p2.getName()); 101 test.PlayPoker(p1, p2); 102 test.StartGame(p1, p2); 103 in.close(); 104 } 105106 }
运行结果:
博主只是一个菜鸟鸟,大牛们不要客气,直接给建议吧( ? ?ω?? )?
原文:http://www.cnblogs.com/hysum/p/7147237.html
内容总结
以上是互联网集市为您收集整理的Java编程练习(四)——集合框架应用全部内容,希望文章能够帮你解决Java编程练习(四)——集合框架应用所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。