首先Card类,Player类创建:
Card 写卡牌属性
使用了Compareable为了下面比较卡牌大小
使用了toString()将单张扑克牌属性转化成字符串输出
Player写玩家属性
设置了HashSet接口调用card属性
package com.list;
public class Card implements Comparable<Card> {
public String color;
public String dian;
public Card(String color, String dian) {
this.color = color ;
this.dian = dian;
}
@Override //将单张扑克牌属性转化成字符串输出
public String toString() { return color + dian; }
@Override //将单张扑克牌属性转化成字符串输出
public int compareTo(Card o) {
return this.dian.compareTo(o.dian); }
}
package com.list;
import java.util.HashSet;
import java.util.Set;
public class Player {
public String ID;
public String Name;
public Set<Card> Cards; //设置接口
public Player(String ID,String Name){
this.ID=ID;
this.Name=Name;
this.Cards=new HashSet<Card>();
}
}
然后setTest+主函数 作为一类
先setTest
package com.list;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
//import java.util.Scanner;后面可以用这个输入player
public class SetTest {
public List<Card> cardbiao;
public SetTest(){this.cardbiao=new ArrayList<Card>();//一个动态数组
}
然后各种函数:Quanjia();加入卡牌功能
Quancha();迭代器查找输出所有卡牌功能 用的是List表 有序
fapai(); 简单输出文字
public void Quanjia(){
String[] a1={"黑桃","红桃","梅花","方块"};
String[] a2={"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
for(String str:a1){
for(String str1:a2){
Card c=new Card(str,str1);
cardbiao.add(c);}};//数组转化为课程表
}
/**
* 通过迭代器全查
* @param args
*/
public void Quancha() {
//通过集合的iterator方法,取得迭代器的实例
Iterator<Card> it = cardbiao.iterator();
System.out.println("有如下卡牌(通过迭代器访问):");
while(it.hasNext()) {
Card cr = it.next();
System.out.println("牌:" + cr.color + cr.dian);
}
}
public void fapai(Player player1,Player player2){
System.out.println("******************开始发牌********************");
//将第一张牌发给玩家1
System.out.println("*****玩家:" + player1.Name + "-拿牌");
//将第二张牌发给玩家2
System.out.println("*****玩家:" + player2.Name + "-拿牌");
//将第三张牌发给玩家1
System.out.println("*****玩家:" + player1.Name + "-拿牌");
//将第四张牌发给玩家2
System.out.println("*****玩家:" + player2.Name + "-拿牌");
System.out.println("******************发牌结束*********************");
}
最后主函数:感觉用函数的话会很冗(rong)余
因为我showpai()遍历list并把它放入set集中,set中没有返回值,只能将之用toArray存放入数组中,得到一个随机卡牌数组。这个步骤放入showpai()函数的话,后面函数对数组进行操作就要重新写一遍showpai;
所以在此生成两种做法:
1.函数重复怕什么,直接多个函数
ShowPai(a,c);
MaxPai(a, c);
bijiao(a,c);
public void ShowPai(Player a,Player c){
for(Card kahao:cardbiao){
a.Cards.add(kahao);//
}
Object[]b=a.Cards.toArray();//set型中没有返回值,只能用toarray变成数组
for(int i=0;i<2;i++) System.out.println(a.Name+"得到了卡牌:" + b[i]);
// Object[]d=c.Cards.toArray();//set型中没有返回值,只能用toarray变成数组
for(int i=b.length-1;i>b.length-3;i--)
System.out.println(c.Name+"得到了卡牌:" + b[i]);
}//用了同一个数组,从最后发牌,这样不会重复。
public void MaxPai(Player a,Player c){
for(Card kahao:cardbiao){
a.Cards.add(kahao);//
}
Object[]b=a.Cards.toArray();//set型中没有返回值,只能用toarray变成数组
Object[]b1={b[0],b[1]};
Arrays.sort(b1);
System.out.println(a.Name+"得到的最大卡牌:" + b1[1]);
Object[]b2={b[b.length-1],b[b.length-2]};
Arrays.sort(b2);
System.out.println(c.Name+"得到的最大卡牌:" + b2[1]);
}
public void bijiao(Player a,Player c){
for(Card kahao:cardbiao){
a.Cards.add(kahao);//
}
Object[]b=a.Cards.toArray();//set型中没有返回值,只能用toarray变成数组
Object[]b1={b[0],b[1]};
Arrays.sort(b1);
Object[]b2={b[b.length-1],b[b.length-2]};
Arrays.sort(b2);
Object[]b3={b1[1],b2[1]};
Arrays.sort(b3);
if(b3[1]==b1[1])
{System.out.println("玩家:["+a.Name+"] 获胜!"); }
else{ System.out.println("玩家:["+c.Name+"] 获胜!"); }
}
public static void main(String[] args) {
SetTest run=new SetTest();
run.Quanjia();
run.Quancha();
Player a=new Player("1","小华");
Player c=new Player("2","小孙");
run.fapai(a,c);
System.out.println("===========游戏开始===========");
System.out.println("===========双方手牌如下===========");
run.ShowPai(a,c);
run.MaxPai(a, c);
run.bijiao(a,c);
}
}
2.下面过程不用函数,直接写在主函数中
public static void main(String[] args) {
SetTest run=new SetTest();
run.Quanjia();
run.Quancha();
Player a=new Player("1","小华");
Player c=new Player("2","小孙");
run.fapai(a,c);
System.out.println("===========游戏开始===========");
System.out.println("===========双方手牌如下===========");
for(Card kahao:run.cardbiao){
a.Cards.add(kahao);//
}
Object[]b=a.Cards.toArray();//set型中没有返回值,只能用toarray变成数组
for(int i=0;i<2;i++) System.out.println(a.Name+"得到了卡牌:" + b[i]);
//Object[]d=c.Cards.toArray();//set型中没有返回值,只能用toarray变成数组
for(int i=b.length-1;i>b.length-3;i--)System.out.println(c.Name+"得到了卡牌:" + b[i]);
//用了同一个数组,从最后发牌,这样不会重复。
Object[]b1={b[0],b[1]};
Arrays.sort(b1);
System.out.println(a.Name+"得到的最大卡牌:" + b1[1]);
Object[]b2={b[b.length-1],b[b.length-2]};
Arrays.sort(b2);
System.out.println(c.Name+"得到的最大卡牌:" + b2[1]);
System.out.println("===========结果===========");
Object[]b3={b1[1],b2[1]};
Arrays.sort(b3);
if(b3[1]==b1[1])
{System.out.println("玩家:["+a.Name+"] 获胜!"); }
else{ System.out.println("玩家:["+c.Name+"] 获胜!"); }
// run.ShowPai(a,c);
// run.MaxPai(a, c);
// run.bijiao(a,c);
// 结果是一样的,这样不会冗余
}
}
最后结果贴出:
……因为用循环输出,所以一行接一行。。。
点击查看更多内容
3人点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦