首页 > IT职业 > IT生活 > Java入门第三季 扑克牌游戏 自写代码
扑克牌游戏的核心在于:如何比较两个扑克牌的大小。利用查表法,将String[]数组的大数值下标分配给点数大的及花色大的,利用数组下标的大小来判断扑克牌的大小。下面是我重写的compare()方法。
package com.game;
import java.util.Comparator;
public class ComparatorPuke implements Comparator
{
@Override
public int compare(Puke o1, Puke o2) {
int x,y;
x = getNum(o1);
y = getNum(o2);
if(x>y) //对点数进行比较
return 1;
else if(xy)
return 1;
else if(x }
public int getNum(Puke puke)
{
String[] c = {"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
int j = 0;
for(int i=0;i
if(puke.getID().equals(c[i]))
j = i;
}
return j;
}
public int getColorNum(Puke puke)
{
String[] c = {"方块","梅花","红桃","黑桃"};
int j = 0;
for(int i=0;i
if(puke.getColor().equals(c[i]))
j = i;
}
return j;
}
}
耗时一天,总算是将程序完整的编写了出来,说实话,很满足。下面是主要代码,就不把几个对象类和子异常类贴出来了:
package com.game;
import java.util.*;
public class Game
{
private List
private Random rd = new Random();
private Scanner input = new Scanner(System.in);
private Map
public static void main(String[] args)
{
Game game = new Game();
game.pukesCreate(); //创建一副扑克牌
game.changePuke(); //洗牌
game.playerCreate(); //创建两个玩家
game.givePuke(); //发牌
game.compareResult(); //比较大小
game.printPukes(); //打印各玩家所持有的扑克
}
public Game() public void pukesCreate() public void changePuke() public void print() public void playerCreate() public Integer getId() throws InputException public void givePuke() public void printPukes() public void compareResult() p1.addAll(players.get(1).getPukes()); //将Set型的Pukes转化为List型,方便比较 p2.addAll(players.get(2).getPukes()); p3.add(pk1); }
{
this.pukes = new ArrayList
players = new HashMap
}
{
String[] c = {"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
Puke pk = new Puke();
for(int i=0;i {
if(i pk = new Puke("方块",c[i]);
if(i>=13&&i pk = new Puke("梅花",c[i-13]);
if(i>=26&&i pk = new Puke("红桃",c[i-26]);
if(i>=39)
pk = new Puke("黑桃",c[i-39]);
pukes.add(i,pk); //将生成的扑克牌对象添加到pukes中,作为一副扑克牌
}
System.out.println("------成功创建扑克牌!------");
print();
}
{
List
Puke pk = new Puke();
for(int i=0;i {
do{
int num = rd.nextInt(52); //随机生成0-52间的数
cp.add(i,num);
pk = pukes.get(num); //得到num位上的元素
pukes.remove(num); //删除num位上的元素,防止对象元素
pukes.add(i,pk); //在i位上插入原num位上的元素
}while(cp.contains(rd)); //判断随机生成数是否已存在,防止一个位上的元素被多次调用
}
System.out.println("------洗牌完成!------");
print();
}
{
Puke pk = new Puke();
for (Object object : pukes) {
pk = (Puke) object; //List中的元素默认为Object类型,取出时需要进行强转
System.out.print(pk.getColor()+pk.getID()+" ");
}
System.out.println();
}
{
for(int i=0;i {
int ID = 0;
System.out.println("请输入第"+(i+1)+"位玩家的ID和姓名:"+"n"+"输入ID:");
try
{
ID = getId(); //获取手动输入值,可能存在异常,利用try catch语句处理
if(players.containsKey(ID)) //判断输入值是否已存在
{
System.out.println("输入的ID已存在,请重新输入!");
continue;
}
}
catch(InputException ie)
{
System.out.println("输入的ID有误,请重新输入!");
continue;
}
System.out.println("输入姓名:");
String name = input.next();
Player p = new Player(ID,name);
players.put(ID, p); //将输入的玩家存入玩家集合
i++; //完成玩家创建后,i++以创建下一个玩家
}
Set
for (Integer integer : keySet)
{
Player player = players.get(integer);
System.out.println("------欢迎玩家:"+player.getName());
}
}
{
try
{
int i = input.nextInt();
if(i>0) //ID需小于等于1,否则抛出异常
return i;
else
throw new InputException();
}
catch(InputMismatchException ie) //ID需为整型,否则抛出异常
{
throw new InputException();
}
}
{
Player p1 = new Player();
Player p2 = new Player();
p1 = players.get(1);
p2 = players.get(2);
System.out.println("------开始游戏!------");
for(int i=0;i {
Puke p = new Puke();
switch(i) //利用switch完成扑克牌的发放
{
case 0:
p = pukes.get(i); //获得扑克牌中的第一张扑克牌
p1.getPukes().add(p); //将第一张扑克牌添加到玩家1的Pukes中
System.out.println("------玩家"+p1.getName()+"-拿牌!");
break;
case 1:
p = pukes.get(i);
p2.getPukes().add(p);
System.out.println("------玩家"+p2.getName()+"-拿牌!");
break;
case 2:
p = pukes.get(i);
p1.getPukes().add(p);
System.out.println("------玩家"+p1.getName()+"-拿牌!");
break;
case 3:
p = pukes.get(i);
p2.getPukes().add(p);
System.out.println("------玩家"+p2.getName()+"-拿牌!");
break;
}
}
System.out.println("------发牌结束!------");
}
{
System.out.println("玩家各自的手牌是:");
Player p1 = new Player();
p1 = players.get(1);
System.out.println(p1.getName()+":");
for (Puke puke : p1.getPukes()) {
System.out.print(puke.getColor()+puke.getID()+" ");
}
System.out.println();
p1 = players.get(2);
System.out.println(p1.getName()+":");
for (Puke puke : p1.getPukes()) {
System.out.print(puke.getColor()+puke.getID()+" ");
}
}
{
System.out.println("------开始游戏!------");
List
List
List
Collections.sort(p1,new ComparatorPuke());
Puke pk1 = p1.get(1); //得到玩家1最大的手牌
System.out.println("玩家"+players.get(1).getName()+"最大的手牌是:"+pk1.getColor()+pk1.getID());
Collections.sort(p2,new ComparatorPuke());
Puke pk2 = p2.get(1);
System.out.println("玩家"+players.get(2).getName()+"最大的手牌是:"+pk2.getColor()+pk2.getID());
p3.add(pk2);
Collections.sort(p3,new ComparatorPuke());
Puke pk3 = p3.get(1); //得到最大手牌
if(p1.contains(pk3)) //判断最大手牌是哪个玩家的,输出玩家胜利提示
System.out.println("------玩家"+players.get(1).getName()+"获胜!------");
if(p2.contains(pk3))
System.out.println("------玩家"+players.get(2).getName()+"获胜!------");
}
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/4405/viewspace-2798926/ ,如需转载,请注明出处,否则将追究法律责任。