适合java新手的小游戏(简易扑克牌游戏)

用java做一个扑克牌比大小游戏

游戏要求

有两个玩家,先输入玩家信息,然后由机器随机给每人发两张牌,玩家先将自己的手牌中最大的那个打出,机器则开始判定两人手中最大的手牌的大小,手牌大的人获胜。手牌先比数字大小,如果数字相等则比花色大小。
最终实现以下效果

在这里插入图片描述创建手牌类

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也进行相同的比较。

这就是大致内容,不懂得可以留言问哦!

发布了29 篇原创文章 · 获赞 10 · 访问量 7494

猜你喜欢

转载自blog.csdn.net/qmqm33/article/details/97233161