21点游戏的简单代码实现

简单地用Java做一个21点的小游戏

主函数部分如下:

package com.ljl.ttd;


import java.util.ArrayList;
import java.util.Collections;
import java.util.List;


public class test {
public static void main(String[] args) {
/**
* 21点游戏
* 分析
* 1、先要有一副牌
* 2、有人  玩家
* 3、游戏的业务逻辑
* 首先,没人发两张牌,随机出一个庄
* 然后,由庄开始,依次发牌,可选择要,或者是不要,一旦不要,则后续也不能要牌了
* 要牌以后,判断一下点数,如果点数大于22,则自动判定为输
* 当有三位玩家判定为输,或者是所有的玩家都不叫牌了,那么开始比较游戏的输赢
* 如果所有人的牌一样大,那么,庄赢
* 如果玩家的牌,大于庄,那么玩家赢
* 如果庄的牌最大,那么庄赢
* 
* 点数:1-10  为自己相应点数         J/Q/K  算一点
*/
//定义一副牌
Card c=new Card();
c.shuffleCard();

//定义玩家
player p1=new player("xxx",c);
player p2=new player("yyy",c);
player p3=new player("aaa",c);
player p4=new player("bbb",c);
//将玩家存到集合中
List list=new ArrayList();
Collections.addAll(list, p1,p2,p3,p4);

Game g=new Game(list,c);
g.startGame();
}

}


定义Card类:

package com.ljl.ttd;


import java.util.ArrayList;
import java.util.Collections;
import java.util.List;


public class Card {
private List flower;        //花色
private List point;         //点数
private List cards;        //所有的牌0-12黑桃    13-25红桃    26-38梅花    39-51方块

//在构造函数里面进行初始化赋值
public Card(){
flower=new ArrayList();
//什么方法可以一次性添加多个值
//flower.addAll();   需要多定义一个collection    还是麻烦
Collections.addAll(flower, "♠","♥","♣","♦");

//点数
point=new ArrayList();
Collections.addAll(point, "A","2","3","4","5","6","7","8","9","10","J","Q","K");

cards=new ArrayList();
for(int i=0;i<52;i++){
cards.add(i);
}
}



//这里稍微注意一下,不需要set,牌是固定的
public List getFlower() {
return flower;
}


public List getPoint() {
return point;
}


public List getCards() {
return cards;
}

//洗牌
public void shuffleCard(){
Collections.shuffle(cards);
}
//得到一张牌的信息                                       这张牌的索引
public String getCardInfo(int index){
//1、得到花色
String str=flower.get(index/13);
str+=point.get(index%13);
return str;
}

//测试一下
public static void main(String[] args) {
//得到一副牌
Card c=new Card();
//洗牌
c.shuffleCard();
List cards=c.getCards();
for(int i=0;i


定义Game类:

package com.ljl.ttd;


import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
import java.util.Scanner;


public class Game {
//首先,多位玩家在一起游戏
private List players;
//对应玩家,来定义对应状态  true代表要牌    false不要牌了
private List bls;
private Card card;


public Game(List players, Card card) {
this.players = players;
this.card = card;
bls=new ArrayList();
for(int i=0;i cards=card.getCards(); //这里已经是洗好了的牌
int index=0;
for(int i=0;i<2;i++){
//增强型的for循环
for(player p1:players){
p1.getCard(cards.get(index));
index++;
}
//for(){
//
//}
}

//首先,先显示玩家的手牌
for(player p1: players){
p1.showCard();
}

//开始每个玩家轮番叫牌
Scanner sc=new Scanner(System.in);
String flag="";
player p;
do{
for(int i=0;i21){
System.out.println("对不起,你已经炸了");
bls.set(i, false);
}
}else{
//不要牌则没有资格
bls.set(i, false);
}
}
}
}while(bls.contains(true));       //什么情况下不用发牌了


//游戏判断
judge(num);

}
private void judge(int num){
//首先,得到庄家
player p=players.get(num);
System.out.println("庄家信息如下:");
p.showCard();
//得到庄的名字     和      点数
String name=p.getName();
int point=p.getPlayerPoint();

for(player play: players){
//庄的信息已经全部都有了
if(!play.equals(p)){
System.out.println("玩家信息如下:");
play.showCard();
//判断输赢
if(point>21){
//玩家爆,输   玩家没爆,赢
if(play.getPlayerPoint()>21){
System.out.println("你炸了,输");
}else{
System.out.println("庄炸了,赢");
}
}else{
//庄没爆         比大小
if(play.getPlayerPoint()>21){
System.out.println("你炸了,输");
}else if(point>=play.getPlayerPoint()){
System.out.println("庄的点数比你大,输");
}else{
System.out.println("你的点数比庄大,赢");
}
}
}
System.out.println();
}
}

}


定义player类:

package com.ljl.ttd;


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


public class player {
//姓名
private String name;
//玩的是哪副牌
private Card c;
//手牌
private List playerCard;
//点数
private int playerPoint;

public player(String name, Card c) {
this.name = name;
this.c = c;
playerCard=new ArrayList();
playerPoint=0;
}


public String getName() {
return name;
}


public int getPlayerPoint() {
return playerPoint;
}



//方法
public void getCard(Integer card){
//把发给我们的牌放入手中
playerCard.add(card);
//计算点数          传过来的是一个索引值,所以要+1
int num=card%13+1;    //19红桃7   ->  7
if(num>10){
//  J  Q  K
playerPoint+=1;
}else{
//A 2 3 4 5 6 7 8 9 10
playerPoint+=num;
}
}

//展示玩家的牌
public void showCard(){
System.out.println("\n"+name+"的手牌为:");
//循环,输出牌
for(int i=0;i cards=c.getCards();
//定义玩家
player p=new player("张三",c);

p.getCard(cards.get(0));
p.getCard(cards.get(1));
p.getCard(cards.get(3));

p.showCard();
}

}

你可能感兴趣的:(21点游戏的简单代码实现)