21點游戲java實現


21點的基本知識

21點是世界上比較流行的撲克游戲項目

除掉大小王的一副撲克牌,共計52張牌

21點不區分花色,其中A----10均代表撲克牌本身的點數J Q K代表10

區分庄家和閑家,其中閑家可以優先要牌 而庄家在與閑家點數一樣大的情況下,庄家贏,當有一方點數超過21點則另一方自動獲勝,庄家的點數如果正好是21點,那么庄家直接獲勝,其他情況以點數大的獲勝

流程設計:

人機對戰模式!

1由用戶輸入選擇作庄還是作閑,電腦自動成為另一方

2隨機為雙方發兩張牌

3詢問閑家是否要牌,一直到閑家不再要或者發生暴點為止

4詢問庄家要牌,一直到庄家不再要或者暴點或者正好21點為止

5比較游戲輸贏

6詢問是否繼續

7統計戰果

技術問題:

1. 發牌的時候隨機發取

2. 發牌出來還要判斷是否本張牌已經發過了!如果已經發過了,那么就要重新隨機發另外一張牌,要保證牌的唯一性

3. 當給電腦派牌的時候 要考慮AI的問題!讓電腦的邏輯稍微模擬人的思維

 主類:

import java.util.Scanner;

public class CardTest {
   
	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		int win = 0;
		int lose = 0;

		while (true) {
			System.out.println("請問做庄家1/閑家2?");
			int num = sc.nextInt();
			if (num == 1) {
				System.out.println("你選擇做庄家");

				Ruler r = new Ruler();
				int n=r.play();
				if(n==0) { 
					 //庄家贏
					 win++; 
				 }
				 else
					 lose++;
			} else if (num == 2) {
				System.out.println("你選擇做閑家");
				Player p = new Player();
				 int n= p.play();
				 if(n==1) { 
					 //閑家贏
					 win++;
					 
				 }
				 else
					 lose++;
			} else {
				System.out.println("輸入錯誤,重新輸入");
			}

			System.out.println("是否繼續Y/N");
			if (sc.next().charAt(0) == 'Y')
				continue;
			else {
				
				System.out.println("游戲結束");
				System.out.println("贏:"+win);
				System.out.println("輸:"+lose);
				break;
			}

		}

	}

}

 

import java.util.Random;

public class Card {

	int index = 0; // 發牌索引下標
	String[] card = { "紅桃A", "紅桃2", "紅桃3", "紅桃4", "紅桃5", "紅桃6", "紅桃7", "紅桃8",
             "紅桃9", "紅桃10", "紅桃J", "紅桃Q", "紅桃K", 
             "黑桃A",
			"黑桃2", "黑桃3", "黑桃4", "黑桃5", "黑桃6", "黑桃7", "黑桃8", "黑桃9", "黑桃10", "黑桃J", "黑桃Q", "黑桃K",
			"梅花A", "梅花2", "梅花3",
			"梅花4", "梅花5", "梅花6", "梅花7", "梅花8", "梅花9", "梅花10", "梅花J", "梅花Q", "梅花K", "方片A", "方片2", "方片3", "方片4", "方片5",
			"方片6", "方片7", "方片8", "方片9", "方片10", "方片J", "方片Q", "方片K", };

	public void show() {
		for (int i = 0; i < 52; i++) {
			System.out.println(card[i]);
		}

	}

	// 洗牌,打亂牌的順序
	public void cutcards() {
		int index=0;
		Random rand = new Random();
		for (int i = 0; i < 52; i++) {
			int n = rand.nextInt(52);
			String temp;
			temp = card[n];
			card[n] = card[51 - n];
			card[51 - n] = temp;
		}

	}

	// 發牌,按順序發牌,從下標0開始

	public String deal() {
		String c = card[index];
		index++;
		return c;
	}

}

 

public class JudgeNum {
  
	public int judgeString(String num) {
	
		String word= num.substring(2);
		if(word.equals("A")) {
			return  1;
			
		}
		else if(num.substring(2).equals("J")||
				num.substring(2).equals("Q")||
				num.substring(2).equals("K")||
				num.substring(2).equals("10")) {
			
			return 10;
		}
        	  
         
		else {
			  int n=(int)num.substring(2).charAt(0)-48;
			return n;
		}
		
		
		
	
	}
	
	
}

 

import java.util.Random;
import java.util.Scanner;

public class Player {

	/*
	 * 選擇做閑家
           先得牌 
          您選擇: 閑家 
發牌時間: 閑家:紅桃K 方片3
庄家:黑桃6 梅花4 * 閑家要牌時間:
閑家是否要牌(Y/N)?
Y
發牌:黑桃A * 閑家是否要牌(Y/N)?
Y 發牌:梅花5 閑家是否要牌(Y/N)?
N 閑家不再要牌:
閑家點數:19點
庄家要牌時間:
庄家要牌:梅花5 * 庄家要牌:黑桃4
庄家不再要牌:
庄家點數19點 庄贏 * * * */ Scanner sc= new Scanner(System.in); public int play() { int playernum=0; int rulernum=0; String player1; String player2; String ruler1; String ruler2; JudgeNum judge = new JudgeNum(); Card c = new Card(); c.cutcards(); player1 = c.deal(); player2 = c.deal(); System.out.println("發牌時間:"); System.out.println("閑家:" + player1 + " " + player2); playernum=judge.judgeString(player1)+judge.judgeString(player2); ruler1 = c.deal(); ruler2 = c.deal(); System.out.println("庄家:" + ruler1 + " " + ruler2); rulernum=judge.judgeString(ruler1)+judge.judgeString(ruler2); System.out.println("閑家點數:"+playernum); System.out.println("庄家點數:"+rulernum); System.out.println("閑家要牌時間: " ); //循環要牌階段 while(true) { System.out.println("閑家是否要牌(Y/N)? " ); char w = sc.next().charAt(0); if(w=='Y') { System.out.println("閑家繼續要牌"); String player3=c.deal(); System.out.println("閑家: "+player3 ); playernum=playernum+judge.judgeString(player3); System.out.println("閑家點數:"+playernum); if(playernum>21) { System.out.println("閑家爆掉,庄家贏"); return 0; } } else if(w=='N') { System.out.println("閑家不再要牌,閑家點數:"+playernum); break; } } System.out.println("庄家要牌時間"); while(true) { if(rulernum>=playernum) { System.out.println("庄家不再要牌,庄家贏"); return 0; } else { System.out.println("庄家要牌時間:"); String ruler3=c.deal(); System.out.println("庄家:"+ruler3); rulernum=rulernum+judge.judgeString(ruler3); if(rulernum>21) { System.out.println("庄家點數"+rulernum); System.out.println("庄家爆掉,閑家贏"); return 1; } else if(rulernum>=playernum) { System.out.println("庄家點數:"+rulernum+" 閑家點數:"+playernum); System.out.println("庄家贏"); return 0; } } } } }

 

import java.util.Scanner;

public class Ruler {

	// 選擇做庄家
	/*
	 * 閑家先要牌
	 * 
	 */

	Scanner sc = new Scanner(System.in);

	public int play() {
		int playernum = 0;
		int rulernum = 0;
		String player1;
		String player2;

		String ruler1;
		String ruler2;

		JudgeNum judge = new JudgeNum();
		Card c = new Card();
		c.cutcards();
		player1 = c.deal();
		player2 = c.deal();

		System.out.println("發牌時間:");
		System.out.println("閑家:" + player1 + " " + player2);
		playernum = judge.judgeString(player1) + judge.judgeString(player2);

		ruler1 = c.deal();
		ruler2 = c.deal();
		System.out.println("庄家:" + ruler1 + " " + ruler2);
		rulernum = judge.judgeString(ruler1) + judge.judgeString(ruler2);
		System.out.println("閑家點數:" + playernum);

		System.out.println("庄家點數:" + rulernum);

		System.out.println("閑家要牌時間:");

		while (true) {
			String player3;
			if (playernum <rulernum) {
				System.out.println("閑家要牌");
				player3 = c.deal();
				System.out.println("閑家:" + player3);
				playernum = playernum + judge.judgeString(player3);
			} else if (playernum > 21) {
				System.out.println("閑家點數:" + playernum);

				System.out.println("閑家爆掉,庄家贏");
				return 0;

			} else if (playernum >= 15) {
				System.out.println("閑家不再要牌");
				System.out.println("閑家點數" + playernum);
				break;

			}else {
				
				System.out.println("閑家要牌");
				String player4 = c.deal();
				System.out.println("閑家:" + player4);
				
				playernum=playernum+judge.judgeString(player4);
				
				
				 if (playernum > 21) {
						System.out.println("閑家點數:" + playernum);

						System.out.println("閑家爆掉,庄家贏");
						return 0;
			}

		}
	}
		
		
		// 庄家要牌時間
		System.out.println("庄家要牌時間:");

		while (true) {
			System.out.println("庄家是否要牌(Y/N)");
			char w = sc.next().charAt(0);
			if (w == 'Y') {
				System.out.println("庄家繼續要牌");
				String ruler3 = c.deal();
				System.out.println("庄家: " + ruler3);

				rulernum = rulernum + judge.judgeString(ruler3);
				System.out.println("庄家點數:" + rulernum);
				if (rulernum > 21) {
					System.out.println("庄家爆掉,閑家贏");
					return 1;
				}

			} else if (w == 'N') {
				System.out.println("庄家不再要牌,庄家點數:" + rulernum);
				break;
			}

		}

		if (rulernum >= playernum) {
			System.out.println("庄家贏");
			return 0;
		} else {
			
			System.out.println("閑家贏");
			
			return 1;
		}
	
    
	}
   
}

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM