为了账号安全,请及时绑定邮箱和手机立即绑定

简易扑克牌游戏(By Java)@李韬

标签:
Java

这个小游戏是我在消化吸收了一些慕友的代码的基础上写出的,写它的主要目的是为了巩固一下基础知识。
主游戏类

package com.lt.puke;
/**
 * 主游戏类,主要负责输出交互信息并调用其它方法
 * @author 李韬
 *创作时间:2017.7.25
 *简易扑克牌游戏
 *游戏介绍:
 *1. 创建一副扑克牌,不考虑大小王
2. 创建两名玩家,玩家至少要有ID、姓名、手牌等属性,手牌为扑克牌的集合
3. 洗牌,将之前创建的扑克牌顺序打乱(说明是有序的)
4. 发牌,将洗牌之后的扑克牌集合,从第一张开始,发给两名玩家,按照一人一张的方式,每人发两张
5. 开始游戏,比大小,取两人各自的点数最大的牌进行比较,点数大的赢,若大小相同比花色(黑红梅方)
 *
 */
public class MainGame {
        FunRea lt = new FunRea();//将FunRea类作为MainGame类的一个属性,以便实现方法的调用
    public static void main(String[] args) {
        // TODO 自动生成的方法存根
        System.out.println("---------简易扑克游戏(by Java)@李韬");
        System.out.println("----------欢迎进入游戏------------");
        MainGame LT = new MainGame();
        LT.lt.CrePuKe();//创建扑克牌
        LT.lt.CrePlayer();//创建玩家
        LT.lt.XiPai();//洗牌
        LT.lt.FaPai();//发牌
        LT.lt.Compare();//比较大小
        LT.lt.ShowCard();//展示手牌
        System.out.println("-----游戏结束----Game Over-------");
    }

}

功能实现类

package com.lt.puke;

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

/**
 * 功能实现类
 * 实现了创建牌、初始化牌、发牌、洗牌、比大小、展示牌等功能
 * @author 李韬
 *
 */
public class FunRea {
    String[] HuaSe = {"黑桃","红桃","梅花","方块"};//创建一副牌(52张)
    String[] Pai = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
    Scanner input1 = new Scanner(System.in);
    Scanner input2 = new Scanner(System.in);
    List<PuKe> PuKeList = new ArrayList<PuKe>();
    List<Player> PlayerList = new ArrayList<Player>();
    public FunRea(){//构造器

    }
    public void CrePlayer(){//创建玩家
        for(int i=1;i<=2;i++){
            System.out.println("请输入第"+i+"个玩家的ID(整数): ");
            int ID = 0;
            //捕捉玩家ID类型输入错误
            try{
                ID =Integer.parseInt(input1.next());
            }catch(Exception e)
            { System.out.println(e.getMessage()); 
               i--; //重新开始循环
            continue; 
            } 
            for(int j = i;j <= 2; j++){
              System.out.println("请输入第"+i+"个玩家的姓名: ");
              String name = input2.next();
              //判断玩家是否输入姓名,如未输入,则提醒玩家输入
             if(name==null){
                System.out.println("您未输入玩家姓名,");
                j--;//重新开始循环
                continue;
              }else{
                  System.out.println("欢迎第"+i+"个玩家"+name+"加入游戏");
                  PlayerList.add(new Player(ID,name));
                  break;
              }
            }
        }
        System.out.println("--------游戏玩家创建成功--------");
    }
    public void CrePuKe(){//创建扑克
        System.out.println("--------开始创建扑克牌---------");
        for(int i = 0;i<4;i++){
            for(int j = 0;j<13;j++){
                PuKeList.add(new PuKe(HuaSe[i],Pai[j]));//将创建的扑克牌加入牌库中
            }
        }
        int n = 0 ; 
        for(PuKe PuKe: PuKeList) { //将创建的牌依次打印出来
            System.out.print(PuKe.HuaSe+PuKe.Pai+" ");
            if(n%13 == 0) { 
                System.out.println(); 
                } 
            n++; 
            } 
        System.out.println("---------扑克牌创建完毕--------");
    }
    public void XiPai(){//洗牌
        System.out.println("-----------开始洗牌----------"); 
        Collections.shuffle(PuKeList);//List 调用shuffle实现类实现随机排序
        System.out.println("-----------洗牌完毕----------"); 
    }

    public void FaPai(){//发牌
        System.out.println("----------开始发牌-----------");
        System.out.println("玩家"+PlayerList.get(0).name+"拿牌..."); 
        PlayerList.get(0).handCards.add(PuKeList.get(0)); 
        System.out.println("玩家"+PlayerList.get(1).name+"拿牌..."); 
        PlayerList.get(1).handCards.add(PuKeList.get(1));
        System.out.println("玩家"+PlayerList.get(0).name+"拿牌..."); 
        PlayerList.get(0).handCards.add(PuKeList.get(2));
        System.out.println("玩家"+PlayerList.get(1).name+"拿牌..."); 
        PlayerList.get(1).handCards.add(PuKeList.get(3)); 
        System.out.println("--------发牌结束-----------");
    }

    public void Compare(){//比较大小
        System.out.println("---------获胜方---------");
        ComparePuKe comparePuKe = new ComparePuKe();
        List<PuKe> PuKe1 = new ArrayList<PuKe>(); 
        List<PuKe> PuKe2 = new ArrayList<PuKe>(); 
        //获取玩家1的第一张手牌 
        PuKe1.add(0, PlayerList.get(0).handCards.get(0)); 
        //获取玩家1的第二张手牌
        PuKe1.add(1, PlayerList.get(0).handCards.get(1));
        //获取玩家2的第一张手牌
        PuKe2.add(0, PlayerList.get(1).handCards.get(0));
        //获取玩家2的第二张手牌 
        PuKe2.add(1, PlayerList.get(1).handCards.get(1)); 
        //调用方法比较大小,先确定玩家各自手牌中较大的一张 
        PuKe a = comparePuKe.compareTest(PuKe1.get(0), PuKe1.get(1)); 
        PuKe b = comparePuKe.compareTest(PuKe2.get(0), PuKe2.get(1));
        int c = comparePuKe.compare(a, b);
        if(c > 0){//玩家1赢了
            System.out.println("玩家"+ PlayerList.get(0).name + "获胜!");
        }else{//玩家2赢了
            System.out.println("玩家"+ PlayerList.get(1).name + "获胜!"); 
        }
}

    public void ShowCard(){//展示
        System.out.println("--------开始展示玩家手牌--------");
        for(Player player : PlayerList){
            System.out.println("玩家"+player.name+"的手牌为: ");
            for(PuKe puke : player.handCards){
                System.out.println(puke.HuaSe + puke.Pai);
            }
            System.out.println();
        }
    }
}

玩家类

package com.lt.puke;

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

/**
 * 创建玩家类,添加ID和姓名属性
 * @author 李韬
 *
 */
public class Player {
    public int playerID;

    public String name;

    List<PuKe> handCards = new ArrayList<PuKe>();  

    public Player(int playerID,String name){        
         this.playerID = playerID;

         this.name = name;    
    }
}

扑克类

package com.lt.puke;
/**
 * 创建扑克牌类,添加花色和牌属性
 * @author 李韬
 *
 */
public class PuKe {
    public String HuaSe;
    public String Pai;
    public PuKe(String HuaSe,String Pai){
     this.HuaSe = HuaSe;
     this.Pai = Pai;
    }
    public PuKe(){

    }
}

比较类

package com.lt.puke;

import java.util.Comparator;
/**
 * 比较方法类,接入Comparator接口实现compare方法
 * @author 李韬
 *
 */
public class ComparePuKe implements Comparator<PuKe> {
    String[] HuaSe = {"黑桃","红桃","梅花","方块"}; 
    String[] Pai = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};//提前将大小排序,届时只需比较数组下标,方便比较大小 
    public int compare(PuKe pk1, PuKe pk2){ 
    int p1 = 0, p2 = 0,flog = 0;//flag为判断大小标志的返回值 
    for(int i=0; i<Pai.length; i++) { 
        if(pk1.Pai == Pai[i])
            p1 = i; 
        if(pk2.Pai == Pai[i]) 
            p2 = i; 
        }
    if(p1 > p2) //比较大小
        flog = 1;
    else if(p1 < p2)
        flog = -1; 
    else if(p1 == p2){ //数字相等时 
            int k1 = 0, k2 = 0; 
            for(int j=0; j<HuaSe.length; j++){ 
             if(pk1.HuaSe == HuaSe[j])
               k1 = j ;
             if(pk2.HuaSe == HuaSe[j]) 
               k2 = j ;
             } 
               if(k1 > k2)//比较花色
                 flog = -1; 
               else 
                 flog = 1; 
         } 
        return flog;
    } 
    public PuKe compareTest(PuKe pk3,PuKe pk4){//返回大的扑克牌 
        int p1 = 0, p2 = 0;
        PuKe flog = new PuKe();//flag为判断大小标志的返回值 
        for(int i=0; i<Pai.length; i++) { 
            if(pk3.Pai == Pai[i])
                p1 = i; 
            if(pk4.Pai == Pai[i]) 
                p2 = i; 
            }
        if(p1 > p2) //比较大小
            flog = pk3;
        else if(p1 < p2)
            flog = pk4; 
        else if(p1 == p2){ //数字相等时 
                int k1 = 0, k2 = 0; 
                for(int j=0; j<HuaSe.length; j++){ 
                 if(pk3.HuaSe == HuaSe[j])
                   k1 = j ;
                 if(pk4.HuaSe == HuaSe[j]) 
                   k2 = j ;
                 } 
                   if(k1 > k2)//比较花色
                     flog = pk4; 
                   else 
                     flog = pk3; 
             } 
            return flog;    
    }
}

刚开始学Java,有些东西还不太熟练,难免会有些错误,希望广大慕友批评指正。

点击查看更多内容
31人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消