内容
纪念写的第一个项目(虽然还有很多没写完而且也有bug)

文件结构
Poker
package PokerPackage;
//管理一副牌
public class Poker {
//保存这张牌的点数和花色
private String dot;
private String pic;
//保存一副牌的点数(静态)
public static String[] POKER_DOTS = {"3","4","5","6",
"7","8","9","10",
"J","Q","k","A","2"
};
//使用内部类保存一副牌的花色(静态),并设置映射关系
public static class POKER_PICS{
//①保存一副牌的花色
static String[] pic = {"♠","♥","♣","♦"};
//②将花色对应映射关系(难点一)
int tag;
//构造方法
POKER_PICS(String pic,int tag){
this.tag = tag;
}
}
//给这张牌附上点数和花色
public void setOnePoker(String dot,String pic) {
this.dot = dot;
this.pic = pic;
}
}
PokerManager
package PokerPackage;
import java.util.*;
//管理一副牌的所有操作(使用单例模式)
public class PokerManager {
ArrayList<Poker> pokers;
//3.创建变量保存对象
private static PokerManager pokermanager;
//1.私有化构造方法
private PokerManager() {
}
//2.对外部提供获得对象方法
public static PokerManager getInstance() {
if(pokermanager == null) {
pokermanager = new PokerManager();
return pokermanager;
}
return null;
}
//生成一副牌
public void producePoker(){
pokers = new ArrayList<>();
}
//获取一副牌
public void getAllPokers() {
//先得到点数
for(int i=0;i < Poker.POKER_DOTS.length;i++) {
//再得到花色
for(int j=0;j < Poker.POKER_PICS.pic.length;j++) {
//1.先创建一张牌
Poker poker = new Poker();
//2.给这张牌附上花色
poker.setOnePoker(Poker.POKER_DOTS[i], Poker.POKER_PICS.pic[j]);
//3.保存这张牌
pokers.add(poker);
}
}
}
//打乱一副牌
public void shuffle() {
Collections.shuffle(pokers);//这里一开始又写错了
}
//获取一张牌
public Poker getOnePoker(int i) {
Poker onePoker = pokers.get(i);
return onePoker;
}
}
Player
package PokerPackage;
//管理一个玩家的信息
public class Player{
int id;//编号
String name;//姓名
int chip;//筹码
int state;//玩家的状态
Poker poker;//玩家的一张牌
int finalMoney = chip;//最后还剩多少钱
int curlost;//当前下的赌注
//初始化某个玩家
Player(int id,String name,int chip){
this.id = id;
this.name = name;
this.chip = chip;
}
//玩家状态
public int playerState(int state){
this.state = state;
if(this.state == 0) {
System.out.println(""+name+"玩家弃牌,请下一位玩家出牌");
return 0;
}
return 1;
}
//玩家的一张牌
public void getPlayerPoker(Poker poker) {
this.poker = poker;
}
//加注时扣钱方法
public int lostMoney(int lostmoney) {
finalMoney = finalMoney - lostmoney;
return finalMoney;
}
//赢钱的时候加钱方法
public int winMoney(int winmoney) {
finalMoney = finalMoney + winmoney;
return finalMoney;
}
//退还金钱方法
public void returnMoney(int returnmoney) {
finalMoney = finalMoney = returnmoney;
}
}
PlayManager
package PokerPackage;
import java.util.*;
//管理玩家的类
public class PlayManager {
ArrayList<Player> players;//保存所有玩家
int number;//一桌玩家的数目
//2.保存对象
private static PlayManager playmanager;
//1.私有化构造方法
private PlayManager() {
}
//3.创建获取对象方法
public static PlayManager getInstance() {
if(playmanager == null) {
playmanager = new PlayManager();
return playmanager;
}
return null;
}
//设置玩家数目
public void setPlayerNum(int number) {
this.number = number;
}
//初始化所有玩家
public void initPlayers() {
players = new ArrayList<>();//一开始忘了new集合,报了空指针异常的错误
for(int i = 0;i < number;i++) {
Player player = new Player(i,"我是"+i+"号",500);
players.add(player);
}
}
//获取一个玩家
public Player getOnePlayer(int i) {
return players.get(i);
}
}
PlayGameCenter
package PokerPackage;
import java.util.*;
public class PokerGameCenter {
int currentAllMoney;//当前游戏桌的总金额;
int bottom;//当前底注
Player curPlayer;//当前玩家
PlayManager playmanager;//玩家管理器
PokerManager pokermanager;//扑克管理器
//2.保存当前对象
private static PokerGameCenter pokergamecenter;
//1.构造方法私有化
private PokerGameCenter() {
}
//3.获取当前对象的方法
public static PokerGameCenter getinstance() {
if(pokergamecenter == null) {
pokergamecenter = new PokerGameCenter();
return pokergamecenter;
}
return null;
}
//初始化数据
public void initGame() {
//得到玩家管理器和游戏管理器
playmanager = PlayManager.getInstance();
pokermanager = PokerManager.getInstance();
//设置玩家数目与初始化所有玩家
playmanager.setPlayerNum(2);//有两个人参与游戏
playmanager.initPlayers();
//生成一副牌,保存,并打乱
pokermanager.producePoker();
pokermanager.getAllPokers();
pokermanager.shuffle();
}
//开始游戏
public void startGame() {
//给每位玩家发牌
for(int i = 0;i < playmanager.number;i++) {
//得到一张牌
Poker tempPoker = pokermanager.getOnePoker(i);
//得到一个玩家
Player tempPlayer = playmanager.getOnePlayer(i);
//把这张牌发给玩家
tempPlayer.getPlayerPoker(tempPoker);
}
//按照顺序下注
for(int i = 0;i < playmanager.number;i++) {
curPlayer = playmanager.getOnePlayer(i);
//下注方法提示
System.out.println("第"+(i+1)+"号玩家你好,请问您要选择哪种方式下注呢?");
System.out.println("输入1:自由下注");
System.out.println("输入2:跟注");
/*System.out.println("输入1:自由下注");
System.out.println("输入1:自由下注");*/
System.out.println("输入5:放弃");
System.out.println("请输入");
Scanner input = new Scanner(System.in);
int select = input.nextInt();
switch(select) {
case 1:
//自由下注
System.out.println("请输入自由下注金额");
Scanner money = new Scanner(System.in);
int lostmoney = money.nextInt();
curPlayer.curlost = lostmoney;
//如果是第一个玩家,或者是下注金额比前一个玩家的大,则直接下注
if(i == 0 || lostmoney >= playmanager.getOnePlayer(i - 1).curlost) {
curPlayer.lostMoney(lostmoney);
}else {
System.out.println("下注失败,请重新下注");
continue;
}
break;
case 2:
//跟注
curPlayer.lostMoney(playmanager.getOnePlayer(i - 1).curlost);
break;
case 5:
//弃牌
System.out.println("您选择弃牌");
curPlayer.playerState(0);
break;
default:
System.out.println("输入无效,视为弃牌");
curPlayer.playerState(0);
break;
}
System.out.println("下注成功!");
}
}
}
Main
package PokerPackage;
public class Main {
public static void main(String[] args) {
//创建游戏中心
PokerGameCenter gameCenter = PokerGameCenter.getinstance();
//初始化数据‘
gameCenter.initGame();
//开始游戏
gameCenter.startGame();
}
}
运行结果

①不理解IGameState接口的好处,可以直接用int state,0表示弃牌,1表示正在玩吗?为什么要用接口来搞state?
②不晓得花色之间比较大小的方法思路怎么写
③不会用IGame接口
④比赛规则(all-in,比牌。这两个不太会写)。
加油
本文详细介绍了使用Java实现德州扑克游戏的过程,从游戏规则到玩家管理,再到牌局流程,全面解析了游戏开发的各个环节。文章深入探讨了单例模式、集合操作、随机算法的应用,以及如何处理玩家下注、发牌、弃牌等复杂逻辑。

被折叠的 条评论
为什么被折叠?



