java实现简单的21点小游戏(第一版)

您所在的位置:网站首页 扑克牌的最简单玩法双人游戏 java实现简单的21点小游戏(第一版)

java实现简单的21点小游戏(第一版)

2023-11-29 11:55| 来源: 网络整理| 查看: 265

距离上一次博客更新已经有了快半个月的时间,由于实习期间的公司业务,所以一直无暇顾及博客的更新。今天终于忙里偷闲,为广大博友带来一个半月前写的小游戏。希望大家多多支持 如有不足请多多留言! 21点游戏(BlackJack)

游戏规则:玩家和电脑初始各自获得2张扑克牌,累加扑克牌点数(A代表1点,2-10代表2-10点,J,Q,K 代表 10点)。

玩家和电脑均能继续要牌,累计点数不超过21点且累加值大的乙方获胜。

下图是游戏运行画面:

游戏开始时,系统自动发牌,玩家和电脑各2张,玩家看不到电脑的第一张牌。

开始后玩家能得到一个电脑当前2张牌累加值的范围,并且可以利用这个值来判断是否需要增加自己的手牌。

输入指令K表示开牌, A表示加牌,R表示重新开始游戏,Q表示退出游戏。

下面演示开牌后的结果:

玩家获得了胜利,接着我们输入R指令开始开始一局新的游戏:

这次我们选择加一张牌然后开牌:

可惜由于加牌后,玩家的累加值超过21点,电脑获胜!

以上只是游戏的基本操作,博友可以根据以下提供的代码自行测试

废话不多少,开始上代码:

21点游戏分为2个类,一个是Card类:

public class Card { private String mask; private int value; private int icon; private String iconMask; private boolean isShow; public Card(String mask, int value, int icon, String iconMask,boolean isShow){ this.mask = mask; this.value = value; this.icon = icon; this.iconMask = iconMask; this.isShow = isShow; } public boolean isShow() { return isShow; } public void setShow(boolean isShow) { this.isShow = isShow; } public int getIcon() { return icon; } public void setIcon(int icon) { this.icon = icon; } public String getIconMask() { return iconMask; } public void setIconMask(String iconMask) { this.iconMask = iconMask; } public String getMask() { return mask; } public void setMask(String mask) { this.mask = mask; } public int getValue() { return value; } public void setValue(int value) { this.value = value; } } Card类包含了扑克牌的各种属性,包括牌的值,花色,值的MASK,花色的MASK 以及 是否显示。同时还包含各项属性的getter和setter。

第二个类是游戏主类,包含了MAIN 函数以及一些游戏逻辑(初始化发牌,加牌 ,正常发牌,输出打印等):

import java.util.ArrayList; import java.util.Collections; import java.util.Scanner; public class BlackJack { private static ArrayList cards = new ArrayList(); private static ArrayList cardsComputer = new ArrayList(); private static ArrayList cardsPlayer = new ArrayList(); public static void main(String[] args){ System.out.println("21点游戏"); System.out.println("****************"); System.out.println("A表示1点,2-10表示2-10点,J、Q、K表示10点"); reset(); System.exit(0); } public static int sendCardInit(int id){ int counter = 1; int point = 0; if(id == 1){ point = sendCard(id,counter)+sendCard(id,counter+1); System.out.println("玩家的总点数: "+point); }else{ int x = sendCard(id,counter); counter = counter +1; int y = sendCard(id,counter); point = x+y; System.out.println("电脑可能的点数: "+(point-x+1)+"~"+(point-x+10)); //System.out.println(point); } return point; } public static int sendCard(int id,int counter){ //printCards(); int sum = 0; Card curr = cards.get(0); if(id == 0){ if(counter == 1){ System.out.println("第"+counter+"张牌: *"); sum = sum +curr.getValue(); //System.out.println(sum); //System.out.println(curr.getIconMask()+curr.getMask()); }else{ sum = sum +curr.getValue(); System.out.print("第"+counter+"张牌: "); System.out.println(curr.getIconMask()+curr.getMask()); } cardsComputer.add(cards.get(0)); }else{ sum = sum +curr.getValue(); System.out.print("第"+counter+"张牌: "); System.out.println(curr.getIconMask()+curr.getMask()); cardsPlayer.add(cards.get(0)); } cards.remove(0); return sum; } public static int extraCard(int id, int counter,int point){ int sum = point; System.out.print("第"+(counter+2)+"张牌: "); System.out.println(cards.get(0).getIconMask()+cards.get(0).getMask()); sum = sum +cards.get(0).getValue(); if(id == 0){ cardsComputer.add(cards.get(0)); }else{ cardsPlayer.add(cards.get(0)); } cards.remove(0); return sum; } public static void printCards(){ for(int i=0; iindex && i =10+index && i 21){ System.out.println("****************"); printComputer(); System.out.println("电脑的最终点数: " + computer); System.out.println("----------------"); printPlayer(); System.out.println("玩家的最终点数: " + player); System.out.println("真遗憾,您输了,电脑获胜!"); } if(computer player){ System.out.println("****************"); printComputer(); System.out.println("电脑的最终点数: " + computer); System.out.println("----------------"); printPlayer(); System.out.println("玩家的最终点数: " + player); System.out.println("真遗憾,您输了,电脑获胜!"); }else if(computer < player){ System.out.println("****************"); printComputer(); System.out.println("电脑的最终点数: " + computer); System.out.println("----------------"); printPlayer(); System.out.println("玩家的最终点数: " + player); System.out.println("真厉害,您赢了,玩家获胜!"); }else{ System.out.println("****************"); printComputer(); System.out.println("电脑的最终点数: " + computer); System.out.println("----------------"); printPlayer(); System.out.println("玩家的最终点数: " + player); System.out.println("平局,无人获胜!"); } }else if(command.equals("A")||command.equals("a")){ System.out.println("玩家加牌"); for(int j =0; j< cardsPlayer.size();j++){ System.out.print("第"+(j+1)+"张牌: "); System.out.println(cardsPlayer.get(j).getIconMask()+cardsPlayer.get(j).getMask()); } player =extraCard(1,cardsPlayer.size()-2+1,player); System.out.println("玩家的总点数: "+player); if(player>21){ System.out.println("****************"); printComputer(); System.out.println("电脑的最终点数: " + computer); System.out.println("----------------"); printPlayer(); System.out.println("玩家的最终点数: " + player); System.out.println("真遗憾,您输了,电脑获胜!"); } }else if(command.equals("R")||command.equals("r")){ System.out.println("21点游戏"); System.out.println("****************"); System.out.println("A表示1点,2-10表示2-10点,J、Q、K表示10点"); cards.clear(); cardsComputer.clear(); cardsPlayer.clear(); init(); Collections.shuffle(cards); System.out.println("电脑的牌: "); computer = sendCardInit(0); System.out.println("----------------"); System.out.println("玩家的牌: "); player = sendCardInit(1); System.out.println("----------------"); print(); }else if(command.equals("Q")||command.equals("q")){ System.err.println("成功退出游戏"); break; }else{ System.err.println("无效输入!输入K表示开牌;输入A表示加牌;输入R表示重置;输入Q表示退出"); } } s.close(); } public static void print(){ System.out.println("请输入指令:"); System.out.println("输入K表示开牌;输入A表示加牌;输入R表示重置;输入Q表示退出"); } } 未来发展:

这只是21一点游戏的第一个版本,基本后台逻辑已经完成,下一步就是考虑完善游戏,包括A牌的多值计算(A可以当1也可以当11使用),以及可视化处理。

如需转载,请注明出处,谢谢合作!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3