纸牌游戏思路

内容大多来自网络,非原创作品。

纸牌游戏思路

首先分析要面临的问题,问题分析清楚了,离解决问题就不远了。

1 首先要画出对象,即Card类和Player类

2 扑克花色和点数的算法

3 程序体系结构设计


一 类方法属性

Card.java

有点数和花色的属性,注意数据结构是数组

public class Card {
	public int[] num = new int[13]; //点数
	public String[] cName ={"黑桃","红心","方块","草花"}; //花色
	

}


Player.java

Card 也是Player属性之一

public class Player {
	public Card card;
	public int nums = 13;
	
	
	public Player(){
		card = new Card();
		
		for(int i=0; i<nums; i++){
			card.num[i] = 0;
		}
	}

}


二、主要的算法

1 点数

1>先生成0~51随机数

lCard = new ArrayList<Integer>();
		
		for(int i=0; i<52; i++){
			
			dd = Math.random()*52;   //0~51随机数
			nums = (int)Math.rint(dd);   //取整
			
			while(lCard.contains(nums) || nums == 52){
				dd = Math.random()*52;
				nums = (int)Math.rint(dd);
			}
			
			lCard.add(nums);
		}


2 > 用生成的随机数除4取商

int data =0; //点数
data = p.card.num[i]/4;

2 花色

用生成的随机数除4取余

int type =0; //花色
type = p.card.num[i]%4;

三 玩牌类方法

PlayCard.java 主要3个方法

1 洗牌

public List shuffle(){
		int[] cards ={};
		int nums;
		double dd;
		boolean flag = false;  //标识是否有重复的值
		
		lCard = new ArrayList<Integer>();
		
		for(int i=0; i<52; i++){
			
			dd = Math.random()*52;   //0~51随机数
			nums = (int)Math.rint(dd);   //取整
			
			while(lCard.contains(nums) || nums == 52){
				dd = Math.random()*52;
				nums = (int)Math.rint(dd);
			}
			
			lCard.add(nums);
		}
		
		return lCard;
	}


2 发牌

public void dealCard(){
		int j=0;
		for(int i=0; i<nums; i++){
			p1.card.num[i]=lCard.get(j++);
			p2.card.num[i]=lCard.get(j++);
			p3.card.num[i]=lCard.get(j++);
			p4.card.num[i]=lCard.get(j++);
		}
	}


3 显示牌

//打印牌
	public void showCard(Player p){
		int type =0; //花色
		int data =0; //点数
		for(int i=0; i<p.card.num.length; i++){
			type = p.card.num[i]%4;
			data = p.card.num[i]/4;
			
			switch(data){
			case 0:
				System.out.println("-->"+p.card.cName[type] + "K"); 
				break;
			case 1:
				System.out.println("-->"+p.card.cName[type] + "A");
				break;
			case 11:
				System.out.println("-->"+p.card.cName[type] + "J");
				break;
			case 12:
				System.out.println("-->"+p.card.cName[type] + "Q");
				break;
				
				default:
					System.out.println("-->"+p.card.cName[type] + data);
			}
		}
		
	}

打印牌包括了花色和点数的算法


PlayCard.java类的主方法

public void run() {
		// TODO Auto-generated method stub
		p1 = new Player();
		p2 = new Player();
		p3 = new Player();
		p4 = new Player();
		
		//0 洗牌
		this.shuffle();
		
		//1 发牌
		this.dealCard();
		
		//2 打印牌
		System.out.println("开始打印P1的牌======");
		this.showCard(p1);
		System.out.println("====P1打印结束!!!");
		
		System.out.println("开始打印P2的牌======");
		this.showCard(p2);
		System.out.println("====P2打印结束!!!");
		
		System.out.println("开始打印P3的牌======");
		this.showCard(p3);
		System.out.println("====P3打印结束!!!");
		
		System.out.println("开始打印P4的牌======");
		this.showCard(p4);
		System.out.println("====P4打印结束!!!");

	}

四 程序体系机构示意图




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值