欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java入门第三季—简易扑克牌游戏

程序员文章站 2024-02-26 18:49:16
...

 一,Java入门第三季—简易扑克牌游戏

  • 创建一副扑克牌

  1. 四种花色:黑桃,红桃,梅花,方片
  2. 十三种点数:2-10,J,Q,K,A,不包含大小王
  • 创建两名玩家

  1. 有ID,姓名,手牌(为玩家拥有的扑克牌集合)
  • 洗牌

  1. 将牌的顺序打乱
  • 发牌

  1. 从第一张开始发牌
  2. 按照一人一张的方式
  • 游戏

  1. 比较玩家手中的扑克牌
  2. 先比较出自己手中最大的牌
  3. 再互相比较,点数大的获胜
  4. 点数相同,比较花色

这里我的花色最大是黑桃,然后是红桃,梅花,方片


二,

1,下面public void pokerComp() 中写的不够简洁,感觉还能改进,不过现在脑子知识不足,并且有点混乱,不够熟悉没改出来

2,创建玩家ID没有用try...catch,防止输入字符时出错

Test.java 

package com.scy.poker;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Random;
import java.util.Scanner;
import java.util.Set;

/**
 * 花色顺序:黑桃,红桃,梅花,方片
 * 十三种点数:2——10,J,Q,K,A,不考虑大小王
 * @author scy
 *
 */
public class Test {

	
	//用于存放扑克的List,poker1按顺序存储,poker2存放洗牌之后的
	public  List poker1= new ArrayList();
	public  List poker2 =new ArrayList();;

	//存放玩家的List
	public static  List player=new ArrayList();;
	Scanner sc=new Scanner(System.in);
	
	//定义两个数组用来存放,花色,字母(数字),用来添加进poker1中
	String[] suit= new String[]{"黑桃","红桃","梅花","方片"};
	String[] num1= new String[]{"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
	
	//创建扑克
	public void createPoker() {
		
		System.out.println("----------------创建扑克牌...----------------");
		int s=0;
		//
		for(int j=0;j<4;j++) {
			for(int i=0;i<13;i++) {				
				//将编号,花色,数字    添加进去
				Poker p=new Poker(s++,suit[j],num1[i]);
				poker1.add(p);
				
			}	
		}
		System.out.println("----------------扑克牌创建成功!-------------");
	
	}
	
	//输出按顺序排列的扑克
	public void testSys() {
		System.out.println("为以下:");

		for(int i=0;i<52;i++) {
			//每13个换一行
			if(i%13==0&&i!=0) {	
				System.out.println();
			}
			//用get(),,并输出
			Poker po= (Poker) poker1.get(i);
			System.out.print(po.suits+po.num+"  ");
		}	
		
		System.out.println("\n");
	}
	
	//洗牌
	public void washPoker() {
		System.out.println("------------------开始洗牌...----------------");
		//定义随机数
		Random random=new Random();
		
		//从第一张牌,循环到最后一张
		for(int i=0;i<52;i++) {
			//用随机来获取某个随机的位置,将该位置的数,添加到poker2中
			int ran= random.nextInt(52);
			Poker po=(Poker) poker1.get(ran);
			//if,,contains()判断此随机数是否已经放进poker2中
			if(poker2.contains(po)) {
				i--;
				continue;
			}
			poker2.add(po);
		}
		System.out.println("------------------洗牌结束...----------------");

	}
	
	//创建两名玩家
	public void createPlayer() {
		System.out.println("------------------创建玩家...----------------");

		for(int i=0;i<2;i++) {
			System.out.println("请输入第"+(i+1)+"位玩家的ID和姓名:");
			//
			System.out.println("输入ID:");
			int id=sc.nextInt();
			//
			System.out.println("输入姓名:");
			String name=sc.next();
			//
			Player p=new Player(id,name);
			//
			player.add(p);
		}
		
	}

	//开始发牌
	public void startPlay() {
		for(Object p:player) {
			Player po=(Player) p;
			System.out.println("欢迎玩家:"+po.name);
		}
		//
		System.out.println("------------------开始发牌...----------------");
				
		for(int i=0;i<4;i=i+2) {				
			Poker po1= (Poker) poker2.get(i);	
			Poker po2= (Poker) poker2.get(i+1);
			
			//给1号玩家1,3位置的牌
			Player p1=(Player) player.get(0);
			System.out.println("玩家:"+p1.name+"拿牌");
			p1.pok.add(po1);
			//给2号玩家2,4位置的牌
			Player p2=(Player) player.get(1);
			System.out.println("玩家:"+p2.name+"拿牌");
			p2.pok.add(po2);	
		}
		System.out.println("------------------发牌结束...----------------");

	}
	
	/**
	 * 比较两个玩家牌的大小
	 * 先比数字大小
	 * 如果数字相同比较花色,花色大小我定义为,,大小从黑桃开始依此减小(黑桃,红桃,梅花,方片)
	 */
	public void pokerComp() {
		System.out.println("------------------开始游戏...----------------");
		//用两个pok1,pok2分别 放两个玩家最大的牌
		Poker pok1=new Poker();
		Poker pok2=new Poker();
		//用max1,max2放最大牌的数字,在num1中位置
		int max1,max2;
		//将num1数组,变成List
		List list=new ArrayList(Arrays.asList(num1));
		
		//找玩家1手里的最大牌
		Player p1=(Player) player.get(0);
		Poker po11=(Poker)  p1.pok.get(0);
		Poker po12=(Poker)  p1.pok.get(1);
		int pos1=list.indexOf(po11.num);
		int pos2=list.indexOf(po12.num);
		if(pos1>pos2) {
			pok1=po11;
			max1=pos1;
			System.out.println("玩家:"+p1.name+"最大的手牌为:"+po11.suits+po11.num);
		}else if(pos1<pos2){
			pok1=po12;
			max1=pos2;
			System.out.println("玩家:"+p1.name+"最大的手牌为:"+po12.suits+po12.num);
		}else {
			
			if(po11.id>po12.id) {
				pok1=po12;
				max1=pos2;
				System.out.println("玩家:"+p1.name+"最大的手牌为:"+po12.suits+po12.num);
			}else {
				pok1=po11;
				max1=pos2;
				System.out.println("玩家:"+p1.name+"最大的手牌为:"+po11.suits+po11.num);
			}
		}
		//找玩家2手里的最大牌
		Player p2=(Player) player.get(1);
		Poker po21=(Poker)  p2.pok.get(0);
		Poker po22=(Poker)  p2.pok.get(1);
		int pos3=list.indexOf(po21.num);
		int pos4=list.indexOf(po22.num);
		if(pos3>pos4) {
			pok2=po21;
			max2=pos3;
			System.out.println("玩家:"+p2.name+"最大的手牌为:"+po21.suits+po21.num);
		}else if(pos3<pos4){
			pok2=po22;
			max2=pos4;
			System.out.println("玩家:"+p2.name+"最大的手牌为:"+po22.suits+po22.num);
		}else {
			if(po21.id>po22.id) {
				pok2=po22;
				max2=pos4;
				System.out.println("玩家:"+p2.name+"最大的手牌为:"+po22.suits+po22.num);
			}else {
				pok2=po21;
				max2=pos4;
				System.out.println("玩家:"+p2.name+"最大的手牌为:"+po21.suits+po21.num);
			}
		}
		
		//玩家1,2,比较手里的最大牌,找出最大的,输出该玩家名字
		if(max2>max1) {
			System.out.println("------------------玩家:"+p2.name+"获胜----------------");
		}else if(max2<max1) {
			System.out.println("------------------玩家:"+p1.name+"获胜----------------");
		}
		else {//数字相等时,通过花色比大小,用序号来比较,花色大的序号小
			if(pok1.id>pok2.id) {
				System.out.println("------------------玩家:"+p2.name+"获胜----------------");
			}else {
				System.out.println("------------------玩家:"+p1.name+"获胜----------------");
			}
		}
	}
	
	//
	public static void main(String[] args) {
		Test te=new Test();
		//创建扑克
		te.createPoker();
		te.testSys();
		
		//洗牌
		te.washPoker();
			
		//创建2个玩家
		te.createPlayer();		
		
		//开始游戏
		te.startPlay();
		
		//比较那位玩家拥有的牌最大
		te.pokerComp();
		
		//输出2名玩家手里拥有的牌
		for(int i=0;i<2;i++) {
			Player b=(Player) player.get(i);
			System.out.print(b.name+":");
			for(Poker p:b.pok) {
				System.out.print(p.suits+p.num+"  ");
			}
			System.out.println();
		}
		
		
	}
}

 Player.java

package com.scy.poker;

import java.util.ArrayList;
import java.util.List;
import java.util.Set;

public class Player {

	public String name;//姓名
	public int id;//编号
	public List<Poker> pok; //玩家的牌
	
	public Player(int id,String name) {		
		this.id=id;
		this.name=name;
		this.pok=new ArrayList<Poker>();
	}
}

Poker.java

package com.scy.poker;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class Poker implements Comparable<Poker>{
	
	public int id;  	//序号

	public String suits;//花色
	
	public String num;  //数字(字母)

	public Poker(int id,String suits, String num) {
		this.id=id;
		this.suits=suits;
		this.num=num;
	}
	
	public Poker() {
		
	}

	public boolean contains(String suits2) {
		// TODO Auto-generated method stub
		return false;
	}
	
	//@Override
		public int compareTo(Poker o) {
			// TODO Auto-generated method stub
			return this.num.compareTo(o.num);
		}

		
}

 

三,运行结果 

Java入门第三季—简易扑克牌游戏

相关标签: java学习 java