您的位置:首页 > 其它

简单实现21点游戏(文字界面)

2013-11-04 12:20 381 查看
这个游戏的规则我不是太了解,我的这个游戏规则是大于21点就失败,正好等于21点或最后剩一个人是胜利者。首先定义一个Person类,用来定义玩家:
package gao.entity;import java.math.BigDecimal;public class Person {private String name;private BigDecimal money;private boolean isZhuangjia;private boolean isOut;public Person(String name,BigDecimal money,boolean isZhuangjia) {this.isZhuangjia = isZhuangjia;this.money = money;this.name = name;this.isOut = false;}public boolean isOut() {return isOut;}public void setOut(boolean isOut) {this.isOut = isOut;}public String getName() {return name;}public void setName(String name) {this.name = name;}public BigDecimal getMoney() {return money;}public void setMoney(BigDecimal money) {this.money = money;}public boolean isZhuangjia() {return isZhuangjia;}public void setZhuangjia(boolean isZhuangjia) {this.isZhuangjia = isZhuangjia;}}
然后创建桌子类,这个类包含了初始化(扑克牌,庄家等信息),发牌,判断输赢等方法
package gao.entity;import java.math.BigDecimal;import java.util.ArrayList;import java.util.Collections;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.Set;public class ZhuoZi {private static List<String> pukepai;   //扑克牌列表private static List<Person> wanjiaList; //玩家列表private static int index = 0;           //扑克牌索引值private static Map<String, List<String>> wanjiaDuiYingDePai = null;  //玩家和手中扑克牌对应关系public List<Person> getWanjiaList() {return wanjiaList;}public Map<String, List<String>> getWanjiaDuiYingDePai() {return wanjiaDuiYingDePai;}/*** 开始方法,初始化信息,加入庄家* */public void start(){wanjiaDuiYingDePai = new HashMap<String,List<String>>();wanjiaList = new ArrayList<Person>();wanjiaList.add(new Person("庄家",new BigDecimal(1000000),true));}/*** 新开局,重置扑克牌、索引、玩家手中的牌等信息* */public void xinKaiJu(){pukepai = new Puke().getPukepai();Collections.shuffle(pukepai);if(wanjiaDuiYingDePai != null){Set<String> nameSet = wanjiaDuiYingDePai.keySet();for (String name : nameSet) {wanjiaDuiYingDePai.put(name, new ArrayList<String>());}}for(Person p : wanjiaList){p.setOut(false);}index = 0;}/*** 玩家加入* */public void addPerson(Person p){wanjiaList.add(p);}/*** 玩家离开* */public void deletePerson(String personName){for (int i = 0;i < wanjiaList.size();i++) {Person p = wanjiaList.get(i);if(p.getName().equals(personName)){wanjiaList.remove(p);wanjiaDuiYingDePai.remove(p.getName());break;}}}/*** 发第一张牌* */public void diyicifapai(){if(wanjiaDuiYingDePai == null || index >= pukepai.size()){index = 0;wanjiaDuiYingDePai = new HashMap<String,List<String>>();}for (int i = 0; i < wanjiaList.size(); i++) {Person p = wanjiaList.get(i);if(p.isOut() == false){List<String> wanjiaDePai = wanjiaDuiYingDePai.get(p.getName());if(wanjiaDePai == null || wanjiaDePai.size() <= 0){wanjiaDePai = new ArrayList<>();}wanjiaDePai.add(pukepai.get(index++));wanjiaDuiYingDePai.put(p.getName(), wanjiaDePai);}}}/*** 判断赢家* */public Person panDuan(){List<Person> notOutPersonList = new ArrayList<Person>();;for (int i = 0; i < wanjiaList.size(); i++) {Person p = wanjiaList.get(i);if(p.isOut() != true){List<String> wanjiaDePai = wanjiaDuiYingDePai.get(p.getName());int dianShu = getPersonDianshu(wanjiaDePai);if(dianShu > 21){p.setOut(true);wanjiaDuiYingDePai.put(p.getName(), null);}else if(dianShu == 21){return p;}else{notOutPersonList.add(p);}}}if(notOutPersonList.size() == 1){return notOutPersonList.get(0);}return null;}/*** 获得玩家手中牌的总点数* */private int getPersonDianshu(List<String> pukePai){int sum = 0;for (int i = 0; i < pukePai.size(); i++) {String shuzi = pukePai.get(i).substring(1);inner : for (int j = 0; j < Puke.shuzi.length; j++) {String string = Puke.shuzi[j];if(string.equals(shuzi)){sum += (j + 1);break inner;}}}return sum;}/*** 普通发牌* */public void fapai(Person nowPerson) {List<String> wanjiaDePai = wanjiaDuiYingDePai.get(nowPerson.getName());if(wanjiaDePai == null || wanjiaDePai.size() <= 0){wanjiaDePai = new ArrayList<>();}wanjiaDePai.add(pukepai.get(index++));}}class Puke{public static final String[] huase = {"♠","♥","♦","♣"};public static final String[] shuzi = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};private List<String> pukepai;public Puke() {pukepai = new ArrayList<>();for (String hs : huase) {for (String sz : shuzi) {pukepai.add(hs+sz);}}}public List<String> getPukepai(){return pukepai;}}
然后是主类,控制流程
package gao.entity;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.math.BigDecimal;import java.util.List;import java.util.Map;import java.util.Set;public class MainClass {public static void main(String[] args) throws IOException {System.out.println("先开始,然后加入,然后新开局");ZhuoZi zhuoZi = new ZhuoZi();newGame(zhuoZi);}private static void newGame(ZhuoZi zhuoZi) throws IOException {System.out.println("新开局(N) 加入(A) 退出(O) 开始(S)");BufferedReader br = new BufferedReader(new InputStreamReader(System.in));String input = br.readLine();if("N".equals(input)){zhuoZi = new ZhuoZi();zhuoZi.xinKaiJu();startGame(zhuoZi);}else if("A".equals(input)){System.out.println("请输入姓名:");String name = br.readLine();zhuoZi.addPerson(new Person(name, new BigDecimal(1000), false));newGame(zhuoZi);}else if("O".equals(input)){System.out.println("请输入姓名:");String name = br.readLine();zhuoZi.deletePerson(name);newGame(zhuoZi);}else if("S".equals(input)){zhuoZi.start();newGame(zhuoZi);}else{newGame(zhuoZi);}}private static void startGame(ZhuoZi zhuoZi) throws IOException {BufferedReader br = new BufferedReader(new InputStreamReader(System.in));List<Person> personList = zhuoZi.getWanjiaList();Map<String,List<String>> map = zhuoZi.getWanjiaDuiYingDePai();zhuoZi.diyicifapai();Set<String> nameSet = map.keySet();System.out.println("目前每个人的牌:");for (String name : nameSet) {System.out.print(name+":"+map.get(name)+";");}xiayilun(personList,br,zhuoZi,map);}private static void xiayilun(List<Person> personList, BufferedReader br, ZhuoZi zhuoZi, Map<String, List<String>> map) throws IOException {System.out.println();for (Person nowPerson : personList) {if(nowPerson.isOut() != true){System.out.println(nowPerson.getName()+"是否继续要牌:Y/N");String yorn = br.readLine();if("Y".equals(yorn)){zhuoZi.fapai(nowPerson);System.out.println(nowPerson.getName()+":"+map.get(nowPerson.getName()));}else if("N".equals(yorn)){nowPerson.setOut(true);map.put(nowPerson.getName(), null);}Person winPerson = zhuoZi.panDuan();if(winPerson != null){System.out.println(winPerson.getName()+"获得胜利!");newGame(zhuoZi);}}}Set<String> nameSet = map.keySet();System.out.println("目前每个人的牌:");for (String name : nameSet) {System.out.print(name+":"+map.get(name)+";");}Person winPerson = zhuoZi.panDuan();if(winPerson != null){System.out.println(winPerson.getName()+"获得胜利!");newGame(zhuoZi);}else{xiayilun(personList,br,zhuoZi,map);}}}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: