一共六大类:
第一类:
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;
}
}
21点纸牌游戏完整代码
最新推荐文章于 2024-08-05 22:01:02 发布