有两个玩家,先输入玩家信息,然后由机器随机给每人发两张牌,玩家先将自己的手牌中最大的那个打出,机器则开始判定两人手中最大的手牌的大小,手牌大的人获胜。手牌先比数字大小,如果数字相等则比花色大小。
最终实现以下效果
package com.imm;
public class Playcards {
public int num;
public String type;
public Playcards(int num,String type) {
this.num=num;
this.type=type;//传进去的跟当前的相等
}
}
创建玩家类
package com.imm;
import java.util.HashSet;
import java.util.Set;
public class Player {
public String name;
public Set<Playcards>Playcards;
public Player(String name) {
this.name=name;
this.Playcards=new HashSet<Playcards>();
}
}
游戏开始,包含主函数代码
package com.imm;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;
public class ListText {
public List PlayerTo;
public List<Playcards>palyto;
public ListText() {
this.PlayerTo=new ArrayList();
this.palyto=new ArrayList<Playcards>();
}
public void textAdd() {
Playcards[] nums=new Playcards[10];
for(int i=0;i<10;i++)
{
nums[i]=new Playcards(i+1,"方片");
PlayerTo.add(nums[i]);
}
Playcards[] nums1=new Playcards[10];
for(int i=0;i<10;i++)
{
nums1[i]=new Playcards(i+1, "黑桃");
PlayerTo.add(nums1[i]);
}
Playcards[] nums2=new Playcards[10];
for(int i=0;i<10;i++)
{
nums2[i]=new Playcards(i+1, "红心");
PlayerTo.add(nums2[i]);
}
}
public void textIterator() {
Iterator it=PlayerTo.iterator();
System.out.println("有以下扑克牌");
while(it.hasNext()) {
Playcards cars=(Playcards)it.next();
System.out.print(cars.type+cars.num+" ");
}
}
public int compare(String a,String b) {
int result = a.compareTo(b);
return result;
}
public int compare1(int a,int b) {
int result=0;
if(a>b)result=1;
if(a<b)result=-1;
if(a==b)result=0;
return result;
}
public void playAdd() {
Scanner input=new Scanner(System.in);
System.out.print("请输入1玩家信息");
String nam=input.next();
Player pal=new Player(nam);
System.out.print("请输入2玩家信息");
String nam1=input.next();
Player pal1=new Player(nam1);
System.out.println("-------洗牌成功,开始发牌-------------");
Collections.shuffle(PlayerTo);
Playcards temp=(Playcards)PlayerTo.get(0);
pal.Playcards.add(temp);
System.out.println(pal.name+"获得了扑克牌:"+temp.type+temp.num);
Playcards temp1=(Playcards)PlayerTo.get(1);
pal1.Playcards.add(temp1);
System.out.println(pal1.name+"获得了扑克牌:"+temp1.type+temp1.num);
Playcards temp2=(Playcards)PlayerTo.get(29);
pal.Playcards.add(temp2);
System.out.println(pal.name+"获得了扑克牌:"+temp2.type+temp2.num);
Playcards temp3=(Playcards)PlayerTo.get(28);
pal.Playcards.add(temp3);
System.out.println(pal1.name+"获得了扑克牌:"+temp3.type+temp3.num);
Playcards max1;
int result1=compare1(temp.num,temp2.num);
if(result1<0) {
System.out.println(pal.name+"的扑克牌中:"+temp2.type+temp2.num+"最大");
max1=(Playcards)PlayerTo.get(29);
}else if(result1>0){
System.out.println(pal.name+"的扑克牌中:"+temp.type+temp.num+"最大");
max1=(Playcards)PlayerTo.get(0);
}else {
ListText it=new ListText();
int result=it.compare(temp.type,temp2.type);
if(result>0) {
System.out.println(pal.name+"的扑克牌中:"+temp.type+temp.num+"最大");
max1=(Playcards)PlayerTo.get(0);
}
else {
System.out.println(pal.name+"的扑克牌中:"+temp2.type+temp2.num+"最大");
max1=(Playcards)PlayerTo.get(29);
}
}
Playcards max2;
int result2=compare1(temp1.num,temp3.num);
if(result2<0) {
System.out.println(pal1.name+"的扑克牌中:"+temp3.type+temp3.num+"最大");
max2=(Playcards)PlayerTo.get(28);
}else if(result2>0){
System.out.println(pal1.name+"的扑克牌中:"+temp1.type+temp1.num+"最大");
max2=(Playcards)PlayerTo.get(1);
}else {
ListText it=new ListText();
int result3=it.compare(temp1.type,temp3.type);
if(result3>0) {
System.out.println(pal1.name+"的扑克牌中:"+temp1.type+temp1.num+"最大");
max2=(Playcards)PlayerTo.get(1);
}
else {
System.out.println(pal1.name+"的扑克牌中:"+temp3.type+temp3.num+"最大");
max2=(Playcards)PlayerTo.get(28);
}
}
int result4=compare1(max1.num,max2.num);
if(result4>0) {
System.out.println(pal.name+"WIN");
}if(result4<0) {
System.out.println(pal1.name+"WIN");
}else {
int result5=compare(max1.type,max2.type);
if(result5>0)System.out.println(pal.name+"WIN");
else System.out.println(pal1.name+"WIN");
}
}
public static void main(String[] args) {
System.out.println("-----------创建扑克牌-------------");
System.out.println("---------扑克牌创建成功-------------");
ListText it=new ListText();
it.textAdd();
it.textIterator();
System.out.println();
it.playAdd();
}
}
1.首先是对于手牌的建立。将手牌大小改为int类型,在后面方便比较。创建Playcards类型的数组,将手牌依次存入,在这里不需要每次单独存入,减少了过多冗杂重复的代码出现。
具有创建手牌功能的方法
public void textAdd() {
Playcards[] nums=new Playcards[10];
for(int i=0;i<10;i++)
{
nums[i]=new Playcards(i+1,"方片");
PlayerTo.add(nums[i]);
}
Playcards[] nums1=new Playcards[10];
for(int i=0;i<10;i++)
{
nums1[i]=new Playcards(i+1, "黑桃");
PlayerTo.add(nums1[i]);
}
Playcards[] nums2=new Playcards[10];
for(int i=0;i<10;i++)
{
nums2[i]=new Playcards(i+1, "红心");
PlayerTo.add(nums2[i]);
}
}
2.那么创建好了如何进行遍历将所存储的数据输出,方法很多,例如foreach等,在这里运用了迭代器来巩固新学的知识。
那么遍历的方法如下所示
public void textIterator() {
Iterator it=PlayerTo.iterator();
System.out.println("有以下扑克牌");
while(it.hasNext()) {
Playcards cars=(Playcards)it.next();
System.out.print(cars.type+cars.num+" ");
}
}
3.手牌已经建立好了,下面马上就要步入正题了。玩家的建立,以及对于玩家手牌的发放,这里将剩余的写在一个方法里面,减少了总的代码长度,但是当下方法不是那么简练。
其中有两个辅助方法,用于比较手牌的大小。
第一个compare1用来比较数字大小,第二个compare则是比较花色大小。
public int compare(String a,String b) {
int result = a.compareTo(b);
return result;
}
public int compare1(int a,int b) {
int result=0;
if(a>b)result=1;
if(a<b)result=-1;
if(a==b)result=0;
return result;
}
那么实际上的创建玩家信息,和随机发放手牌是如何做到的呢?
我们都知道发放手牌是要随机发放的,我们以list存储手牌信息,那么就要对于list进行顺序的打乱。其中用到了 Collections.shuffle(PlayerTo)函数功能,用来打乱顺序。打乱顺序后,在从一些位置得到手牌。
代码实现如下
public void playAdd() {
Scanner input=new Scanner(System.in);
System.out.print("请输入1玩家信息");
String nam=input.next();
Player pal=new Player(nam);
System.out.print("请输入2玩家信息");
String nam1=input.next();
Player pal1=new Player(nam1);
System.out.println("-------洗牌成功,开始发牌-------------");
Collections.shuffle(PlayerTo);
Playcards temp=(Playcards)PlayerTo.get(0);
pal.Playcards.add(temp);
System.out.println(pal.name+"获得了扑克牌:"+temp.type+temp.num);
Playcards temp1=(Playcards)PlayerTo.get(1);
pal1.Playcards.add(temp1);
System.out.println(pal1.name+"获得了扑克牌:"+temp1.type+temp1.num);
Playcards temp2=(Playcards)PlayerTo.get(29);
pal.Playcards.add(temp2);
System.out.println(pal.name+"获得了扑克牌:"+temp2.type+temp2.num);
Playcards temp3=(Playcards)PlayerTo.get(28);
pal.Playcards.add(temp3);
System.out.println(pal1.name+"获得了扑克牌:"+temp3.type+temp3.num);
Playcards max1;
int result1=compare1(temp.num,temp2.num);
if(result1<0) {
System.out.println(pal.name+"的扑克牌中:"+temp2.type+temp2.num+"最大");
max1=(Playcards)PlayerTo.get(29);
}else if(result1>0){
System.out.println(pal.name+"的扑克牌中:"+temp.type+temp.num+"最大");
max1=(Playcards)PlayerTo.get(0);
}else {
ListText it=new ListText();
int result=it.compare(temp.type,temp2.type);
if(result>0) {
System.out.println(pal.name+"的扑克牌中:"+temp.type+temp.num+"最大");
max1=(Playcards)PlayerTo.get(0);
}
else {
System.out.println(pal.name+"的扑克牌中:"+temp2.type+temp2.num+"最大");
max1=(Playcards)PlayerTo.get(29);
}
}
Playcards max2;
int result2=compare1(temp1.num,temp3.num);
if(result2<0) {
System.out.println(pal1.name+"的扑克牌中:"+temp3.type+temp3.num+"最大");
max2=(Playcards)PlayerTo.get(28);
}else if(result2>0){
System.out.println(pal1.name+"的扑克牌中:"+temp1.type+temp1.num+"最大");
max2=(Playcards)PlayerTo.get(1);
}else {
ListText it=new ListText();
int result3=it.compare(temp1.type,temp3.type);
if(result3>0) {
System.out.println(pal1.name+"的扑克牌中:"+temp1.type+temp1.num+"最大");
max2=(Playcards)PlayerTo.get(1);
}
else {
System.out.println(pal1.name+"的扑克牌中:"+temp3.type+temp3.num+"最大");
max2=(Playcards)PlayerTo.get(28);
}
}
int result4=compare1(max1.num,max2.num);
if(result4>0) {
System.out.println(pal.name+"WIN");
}if(result4<0) {
System.out.println(pal1.name+"WIN");
}else {
int result5=compare(max1.type,max2.type);
if(result5>0)System.out.println(pal.name+"WIN");
else System.out.println(pal1.name+"WIN");
}
}
这里写的比较繁杂,因为将比较的结果也写在了这个方法里,其实也可以放在主函数里面,玩家获得手牌后,先取出玩家各自最大的手牌用max1和max2表示,之后对于max1和max2也进行相同的比较。