模拟洗牌小游戏
洗牌的過程小代碼
用代碼復現棋牌洗牌的過程
今天面試,面試官人挺好,出了一道小算法題,要用類復現一下棋牌室的洗牌,第一次面試,人比較慌張,其實這題還挺簡單了,可惜大腦待機,連java和python都忘了怎么寫了,然后就掛了,還是怪自己算法沒搞好。
python代碼
import random as rd class game():def __init__(self):self.hua1 = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K']self.hua2 = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K']self.hua3 = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K']self.hua4 = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K']self.paper = [self.hua1,self.hua2,self.hua3,self.hua4]def suffle(self):rd.shuffle(self.hua1)rd.shuffle(self.hua2)rd.shuffle(self.hua3)rd.shuffle(self.hua4)def popPaper(self,players):for player in players:for i in range(int(52/len(players))):randomIndex = rd.randint(0, 3)while self.paper[randomIndex] == []:randomIndex = rd.randint(0, 3)player.appendPaper(self.paper[randomIndex].pop(), color=randomIndex)class player():def __init__(self):self.hua1 = []self.hua2 = []self.hua3 = []self.hua4 = []def appendPaper(self,paper,color):if color==0:self.hua1.append(paper)if color==1:self.hua2.append(paper)if color==2:self.hua3.append(paper)if color == 3:self.hua4.append(paper)def show_paper(self):print("紅桃:",self.hua1)print("紅梅:", self.hua2)print("黑桃:", self.hua3)print("黑梅:", self.hua4)if __name__ =='__main__':play1 = player()play2 = player()play3 = player()play4 = player()game = game();game.suffle()game.popPaper(players=[play1,play2,play3,play4])print("玩家一有牌:")play1.show_paper()print("玩家二有牌:")play2.show_paper()print("玩家三有牌:")play3.show_paper()print("玩家四有牌:")play4.show_paper()結果
玩家一有牌: 紅桃: ['6', '7', '1'] 紅梅: ['6', '8'] 黑桃: ['J', '6'] 黑梅: ['9', '7', '2', 'J', '5', 'Q'] 玩家二有牌: 紅桃: ['J', '8'] 紅梅: ['1', 'J', '10', 'K', '2'] 黑桃: [] 黑梅: ['K', '6', '8', '10', '1', '4'] 玩家三有牌: 紅桃: ['3', 'Q', '5', '4'] 紅梅: ['3', '9'] 黑桃: ['3', '9', '1', '2', '5', '7'] 黑梅: ['3'] 玩家四有牌: 紅桃: ['K', '10', '9', '2'] 紅梅: ['7', 'Q', '4', '5'] 黑桃: ['10', '8', 'Q', 'K', '4'] 黑梅: []Java代碼
講一下思路,paper類用于保存某一類的牌,如紅桃,黑桃等,而game用于初始化游戲,一開始游戲有52張牌(粗大地),suff()方法用來洗牌,Player類用來初始化玩家的,玩家手里有4個paper對象用于保存他拿到的所有不同類型的牌。
game類
import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Random;public class game {ArrayList<Paper> allpaper;ArrayList<Player> Players;public game(){//四種不同色號的牌allpaper = new ArrayList<Paper>(4);allpaper.add(new Paper("hua1"));allpaper.add(new Paper("hua2"));allpaper.add(new Paper("hua3"));allpaper.add(new Paper("hua4"));//玩家arrayPlayers = new ArrayList<>();}public void suff(){Collections.shuffle(allpaper.get(0).getPapers());Collections.shuffle(allpaper.get(1).getPapers());Collections.shuffle(allpaper.get(2).getPapers());Collections.shuffle(allpaper.get(3).getPapers());}public void appendPlayer(Player player){//添加玩家this.Players.add(player);}public void openGame(){//4個玩家才能開盤if (Players.size() != 4) throw new RuntimeException("人數不夠");//開盤洗牌this.suff();//給每個玩家分配牌for(Player players:this.Players){for (int i = 0; i < 13; i++) {int index = new Random().nextInt(4);while (allpaper.get(index).getPapers().size()==0)index = new Random().nextInt(4);players.setPaper(allpaper.get(index).getColor(), allpaper.get(index).popPaper());}}}public void showPaperofPlayer(){//查看所有玩家對應的牌for (Player player:this.Players){System.out.println(player.getName());player.showPaper();}}public static void main(String[] args) {game g = new game();g.suff();g.appendPlayer(new Player("張三"));g.appendPlayer(new Player("李四"));g.appendPlayer(new Player("王五"));g.appendPlayer(new Player("劉六"));g.openGame();g.showPaperofPlayer();} }Player類
play類初始化對象,對象中有4種paper(就是用于存儲四種不同色號的),一開始是沒有牌的,當game對象調用opengame()方法時,會重牌室中的4種paper中發放牌給玩家。
import java.util.ArrayList;public class Player {private ArrayList<Paper> haspaper;private String name;public Player(String name){//玩家名字this.name = name;//四種不同色號的牌haspaper = new ArrayList<>();haspaper.add(new Paper(true,"hua1"));haspaper.add(new Paper(true,"hua2"));haspaper.add(new Paper(true,"hua3"));haspaper.add(new Paper(true,"hua4"));}public String getName() {return name;}public void setName(String name) {this.name = name;}public ArrayList<Paper> getHaspaper() {return haspaper;}//該方法添加某一張牌對應到對應色號的牌array中public void setPaper(String color,String number) {if (color.equals("hua1")) {haspaper.get(0).addPaper(number); return;}if (color.equals("hua2")) {haspaper.get(1).addPaper(number);return;}if (color.equals("hua3")) { haspaper.get(2).addPaper(number); return;}if (color.equals("hua4")) { haspaper.get(3).addPaper(number);return; }else throw new RuntimeException("花色錯誤!");}public void showPaper(){//打印玩家持有的對應色號的牌System.out.println("紅桃:"+this.haspaper.get(0).getPapers().toString());System.out.println("黑桃:"+this.haspaper.get(1).getPapers().toString());System.out.println("紅梅:"+this.haspaper.get(2).getPapers().toString());System.out.println("黑梅:"+this.haspaper.get(3).getPapers().toString());} }Paper類
用于存儲某一類牌的類。
import java.util.ArrayList; import java.util.Arrays;public class Paper {private ArrayList<String> papers;private String color;public Paper(String color){String[] papers = {"1","2","3","4","5","6","7","8","9","10","J","Q","K"};this.papers = new ArrayList<>(Arrays.asList(papers));if (color.equals("hua1")||color.equals("hua2")||color.equals("hua3")||color.equals("hua4"))this.color = color;else new RuntimeException("不存在花色");}public Paper(boolean isNull,String color){if (isNull)this.papers = new ArrayList<>();else{String[] papers = {"1","2","3","4","5","6","7","8","9","10","J","Q","K"};this.papers = new ArrayList<>(Arrays.asList(papers));if (color.equals("hua1")||color.equals("hua2")||color.equals("hua3")||color.equals("hua4"))this.color = color;else new RuntimeException("不存在花色");}}public void addPaper(String number){this.papers.add(number);}public String popPaper(){return papers.remove(0);}public String getColor() {return color;}public void setColor(String color) {this.color = color;}public ArrayList<String> getPapers() {return papers;}public void setPapers(ArrayList<String> papers) {this.papers = papers;} }結果
張三 紅桃:[J, K, 5, 3] 黑桃:[2, 10] 紅梅:[3, K, 6] 黑梅:[7, 8, 1, Q] 李四 紅桃:[Q, 9, 10, 8, 1, 2, 4] 黑桃:[1, 4] 紅梅:[1, 7] 黑梅:[4, 2] 王五 紅桃:[6, 7] 黑桃:[6, 9, J, 5] 紅梅:[10] 黑梅:[9, 6, K, 5, J, 10] 劉六 紅桃:[] 黑桃:[Q, 3, K, 7, 8] 紅梅:[5, 4, J, 2, 9, Q, 8] 黑梅:[3]總結

- 上一篇: MySQL深入(一)
- 下一篇: 冒泡排序的改良版