21点纸牌游戏完整代码

一共六大类:
第一类:
public class Card {
	private int num;
	private int type;
	public Card(int num,int color){
		this.num=num;
		this.type=type;		
	}
	public String show(){
		String sNum="",sType="";
		switch(num){
		case 1:sNum="A";break;
		case 11:sNum="J";break;
		case 12:sNum="Q";break;
		case 13:sNum="K";break;
		default:
			sNum=Integer.toString(num);
		}
		switch(type){
		case 0:sType="黑桃";break;
		case 1:sType="红桃";break;
		case 2:sType="方块";break;
		case 3:sType="梅花";break;
		}
		return sType+sNum;
	}
	
	public int getNum(){
		return num;
	}
	public int getType(){
	return type;	
	}
}

第二类:
import java.util.Scanner;
public class Game {
	Poker pk;
	 RobotPlayer robot;
	 UserPlayer user;
	 Player host;
	 Player player;
	 int round=1;
	 int robotNum=0;
	 int userNum=0;
	 public Game(){
		 pk=new Poker();
		 robot=new RobotPlayer();
		 robot.name="机器人";
		 user=new UserPlayer();
		 user.name="小朋友";
		 host=robot;
		 player=user;
	 }
	 public void say(String s){
		 System.out.println(s);
	 }
	public void wait(int second){
		int i=0;
		while(i<second){
			System.out.print(".");
			i++;
			try{
				Thread.sleep(1000);
			}
			catch(Exception E){
				
			}
			
		}
		System.out.println();
	}
	public void start(){
		say("============欢迎参加21点游戏============");
		say("============欢迎参加21点游戏============");
		say("=======================================");
	}
	public void roundStart(){
		host.reset();
		player.reset();
		host.isHost=true;
		player.isHost=false;
		say("==========第"+round+"局================");
		say("==========计算器"+(robot.isHost?"庄家":"")+":"+Integer.toString(robotNum)+"玩家"+(user.isHost?"庄家":"")+":"+Integer.toString(userNum)+"======");
		say("==========第"+round+"局================");
		pk.shuffle();
		pk.shuffle();
		wait(4);
	}
	public void shuffle(){
		say("===========庄家发牌("+host.name+")=============");
		host.deal(pk);
		host.deal(pk);
		wait(2);
		say(host.show(host.equals(user)));
		say("=============玩家发牌("+player.name+"):===============");
		player.deal(pk);
		player.deal(pk);
		say(player.show(player.equals(user)));
		wait(2);
		
	}
	public void hostCard(){
		Card c;
		say("===========庄家("+host.name+")要牌==============");
		do{
			say("===============庄家("+host.name+")是否继续要牌?===========");
			wait(4);
			c=host.deal(pk);
			if(c!=null) say(host.show(host.equals(user)));
		}while(c!=null);
		say("=========庄家("+host.name+")停止要牌!=============");
		wait(2);
	}
	public void playerCard(){
		Card c;
		say("=========玩家("+player.name+")要牌================");
		do{
			c=player.deal(pk);
			if(c!=null) say(player.show(player.equals(user)));
		}while(c!=null);
		say("==============玩家("+player.name+")停止要牌===========");
		wait(2);
	}
	public int result(){
		say("==================开牌============");
	say(host.show(true));
	say(player.show(true));
	wait(4);
	int ret=host.compareTo(player);
	if(ret==1){
		say("==================庄家("+host.name+")赢,玩家("+player.name+")输==========");
		if(host.equals(robot)) robotNum++;
		else userNum++;
	}
	else
		if(ret==-1){
			say("===========庄家("+host.name+")输,玩家("+player.name+")赢==============");
			if(player.equals(user)) userNum++;
			else robotNum++;			
		}
		else say("=========该局为平局============");
	wait(4);
	return ret;
	}
public void play(){
	Player tmp;
	Scanner input=new Scanner(System.in);
	int ret;
	start();
	while(true){
		roundStart();
		shuffle();
		hostCard();
		ret=result();
		say("=============是否继续?Y/N=================");
		String r=input.nextLine().toUpperCase();
		if(r.length()>0)
			if(r.charAt(0)!='Y') break;
		if(ret>=0){
			tmp=host;
			host=player;
			player=tmp;
		}
		round++;
	}
	say("=================谢谢!================");
}
public static void main(String[] args)
{
	Game a=new Game ();
	a.start();
	a.roundStart();
	a.shuffle();
	a.hostCard();
	a.playerCard();
	a.result();
	a.play();
}
}
第三类:
import java.util.ArrayList;
import java.util.Vector;
public class Player {
protected ArrayList cards;
public String name="";
public boolean isHost=false;
public static boolean decide(int percent){
	return Math.random()*100<percent;
}
public Player(){
	cards=new ArrayList();
}
public Card deal(Poker p){
	if(cards.size()>=5) return null;
	Card c=null;
	if(p!=null) c=p.deal();
	if(c!=null) cards.add(c);
	return c;	
}
public int getScore(){
	int count=0;
	int score=0,tmp=0;
	for(int i=0;i<cards.size();i++){
		Card c=(Card)cards.get(i);
		tmp=c.getNum();
		if(tmp==1) count++;
		if(tmp>10) tmp=10;
		score+=tmp;
	}
	if(count>0&&score+10<=21) score+=10;
	if(score>21) score=0;
	return score;
}
public boolean haveJack(){
	boolean bA=false,bk=false;
	for(int i=0;i<cards.size();i++){
		Card c=(Card)cards.get(i);
		if(c.getNum()==1) bA=true;
		if(c.getNum()==13) bk=true;
	}
	return bA&&bk;
}
public boolean haveBlackJack(){
	boolean bA=false,bK=false;
	for(int i=0;i<cards.size();i++){
		Card c=(Card)cards.get(i);
		if(c.getNum()==1&&c.getType()==0) bA=true;
		if(c.getNum()==13&&c.getType()==0) bK=true;
	}
	return bA&&bK;
}
public int compareTo(Player p){
	int myScore=getScore();
	int pScore=p.getScore();
	if(myScore>pScore) return 1;
	else
		if(myScore<pScore) return -1;
		else
		{
			if(haveJack()&&p.haveJack()){
				if(haveBlackJack()) return 1;
				else
					if(p.haveBlackJack()) return -1;
					else return 0;
			}
			else if(haveJack()) return -1;
			else
				if(p.haveJack()) return -1;
				else return 0;
		}
}
public String show(boolean bAll)
{
StringBuffer ret=new StringBuffer();
ret.append(name+":\t");
int i;
Card c=null;
for(i=0;i<cards.size();i++){
	c=(Card)cards.get(i);
	if(i<2) ret.append(c.show()+"\t");
	else
		if(bAll) ret.append(c.show()+"\t");
		else ret.append("XX");
}
return ret.toString();
}
public void reset(){
	cards.clear();
}
}
第四类:

public class Poker {
private Card[] cards;
private int deal=0;
public Poker(){
	cards=new Card[52];
	int i,j,h=0;
	for(i=0;i<4;i++)
		for(j=1;j<14;j++){
cards[h]=new Card(j,i);
h++;
}	
}
public void xipai(){
	int i,j;
	Card tmp;
	for(i=0;i<cards.length ;i++){
		j=(int)(Math.random()*52);
		if(i!=j){
			tmp=cards[i];
			cards[i]=cards[j];
			cards[j]=tmp;
		}
	}
	deal=0;
}
public Card deal(){
	if(deal<cards.length){
		deal++;
		return cards[deal-1];
	}
	return null;
}
public String show(){
	StringBuffer ret=new StringBuffer();
	int i;
	for(i=0;i<cards.length;i++)
		ret.append(cards[i].show()+" ");
	return ret.toString();
}
public void shuffle() {
	// TODO Auto-generated method stub
	
}
}
第五类:
public class RobotPlayer extends Player{
	public Card deal(Poker p){
		if(cards.size()<2) return super.deal(p);
		int score =getScore();
		if(score>21) return null;
		Card c=null;
		if(score<=10) c=super.deal(p);
		else
			if(score<15){
				if(decide(70)) c=super.deal(p);
			}
			else
				if(score<18){
					if(decide(30)) c=super.deal(p);
				};
				return c;
		
	}

}

第六类:

import java.util.Scanner;
public class UserPlayer extends Player {
	Scanner input=new Scanner(System.in);
public Card deal(Poker p){
	if(cards.size()<2) return super.deal(p);
	int score=getScore();
	if(score>21) return null;
	Card c=null;
	System.out.println("你的点数为:"+score+",是否继续要牌?Y/N");
	String r=input.nextLine().toUpperCase();
	if(r.length()>0&&r.charAt(0)=='Y') c=super.deal(p);
	return c;
	
}
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小猪爱学习biu~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值