91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用Java怎么制作一個24點游戲

發布時間:2021-05-13 16:30:54 來源:億速云 閱讀:146 作者:Leah 欄目:開發技術

本篇文章給大家分享的是有關使用Java怎么制作一個24點游戲,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

一、常見游戲規則

從撲克中每次取出4張牌。使用加減乘除,第一個能得出24者為贏。(其中,J代表11,Q代表12,K代表13,A代表1),按照要求編程解決24點游戲。

基本要求: 隨機生成4個代表撲克牌牌面的數字字母,程序自動列出所有可能算出24的表達式,用擅長的語言(C/C++/Java或其他均可)實現程序解決問題。

1.程序風格良好(使用自定義注釋模板)

2.列出表達式無重復。

提高要求:用戶初始生命值為一給定值(比如3),初始分數為0。隨機生成4個代表撲克牌牌面的數字或字母,由用戶輸入包含這4個數字或字母的運算表達式(可包含括號),如果表達式計算結果為24則代表用戶贏了此局。

1. 程序風格良好(使用自定義注釋模板)

2.使用計時器要求用戶在規定時間內輸入表達式,如果規定時間內運算正確則加分,超時或運算錯誤則進入下一題并減少生命值(不扣分)。

3.所有成績均可記錄在TopList.txt文件中。

二、算法分析

用戶需要提前輸入4個數,作為湊成24點的基數,構成arr數組,從而求解目標數T=24。

在數arr中,首先取兩個數與操作符集合進行組合,分別得到一組表達式,對于新得到的每個表達式,都可以和原集合中剩下的元素,組合成新的集合組,將每次得到的表達式,都用"()"包住,以保證計算先后順序。

對集合中所有元素進行兩兩組合,并與剩余元素形成新的集合。由此,我們得到了一組元素為k-1個的集合組

對新集合組中的每一個集合,重復以上1-3步,可得到一組包含k-2個元素的集合組...以此類推,最后會得到一組集合,其中每個集合都只包含一個元素,這個就是我們合成的最終表達式.對第四步得到的表達式集合進行求解,判斷其是否等于目標數24,將符合條件的過濾出來,即得到所有滿足條件的表達式。

三、概要設計

主函數程序流程圖

使用Java怎么制作一個24點游戲

四、代碼

package Game;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;

public class Compute {
	//定義隨機產生的四個數
	static int number[] = new int[4];
	//轉換后的num1,num2,num3,num4
	static int m[]=new int [4];
	static String n[] = new String[4];
	//用來判斷是否有解
	static boolean flag = false;
	//存放操作符
	static char[] operator = { '+', '-', '*', '/' };
	private static Object key;
	
	public static void main(String[] args){
		Random rand = new Random();
		System.out.println("下列給出四個數字,使用+,-,*,/進行計算使最后計算結果為24");
		for(int i=0;i<4;i++){
			number[i]=rand.nextInt(13)+1;//隨機生成四個int型數
		
			if(number[i]==1){
				System.out.println("A");//如果隨機生成的數為1,則顯示為撲克牌牌面中的A
			}
			else if(number[i]==11){
				System.out.println("J");//如果隨機生成的數為11,則顯示為撲克牌牌面中的J
			}
			else if(number[i]==12){
				System.out.println("Q");//如果隨機生成的數為12,則顯示為撲克牌牌面中的Q
			}
			else if(number[i]==13){
				System.out.println("K");//如果隨機生成的數為13,則顯示為撲克牌牌面中的K
			}
			else
			System.out.println(number[i]);
			}
		System.out.println("可能的結果有:");
		calculate();
			 
	}
	
	
	//給定2個數和指定操作符的計算
	public static int calcute(int count1, int count2, char operator) {
		if (operator == '+') {
	    	return count1 + count2;
	    } 
	    else if (operator == '-') {
	    	return count1 - count2;
	    }
	    else if (operator == '*') {
	    	return count1 * count2;
	    }
	    else if ((operator == '/' )&& (count2 != 0) && (count1%count2==0)) {
	    	return count1 / count2;	
	   	}
	    else {
	    	return -1;	        
	    }
	}
	

	//計算生成24的函數
	public static void calculate(){
		
		Map<Integer, Integer> map = new HashMap<Integer, Integer>();
		//存放數字,用來判斷輸入的4個數字中有幾個重復的,和重復的情況
		for (int i = 0; i < number.length; i++) {			
			if(map.get(number[i]) == null){				
				map.put(number[i], 1);			
			} 
			else {				
				map.put(number[i], map.get(number[i]) + 1);			
			}		
		}
		if(map.size() == 1){
			//如果只有一種數字,此時只有一種排列組合,如5,5,5,5
			calculation(number[0], number[1],number[2],number[3]);
		}
		else if(map.size()==2){
			//如果只有2種數字,有2種情況,如1,1,2,2和1,1,1,2
			int index = 0;//用于數據處理
			int state = 0;//判斷是哪種情況
			for (Integer key : map.keySet()) {
				if(map.get(key) == 1){
					//如果是有1個數字和其他3個都不同,將number變為 number[0]=number[1]=number[2],
					//將不同的那個放到number[3],方便計算
					number[3] = key;
					state = 1;
				}
				else if(map.get(key)==2){
					//如果是兩兩相同的情況,將number變為number[0]=number[1],number[2]=number[3]的情況
					number[index++]=key;
					number[index++]=key;
				}
				else{
					number[index++]=key;
				}
			}
			//列出2種情況的所有排列組合,并分別計算
			if(state == 1){
				calculation(number[3],number[1],number[1],number[1]);
				calculation(number[1],number[3],number[1],number[1]);
				calculation(number[1],number[1],number[3],number[1]);
				calculation(number[1],number[1],number[1],number[3]);
			}
			if(state==0){
				calculation(number[1],number[1],number[3],number[3]);
				calculation(number[1],number[3],number[1],number[3]);
				calculation(number[1],number[3],number[3],number[1]);
				calculation(number[3],number[3],number[1],number[1]);
				calculation(number[3],number[1],number[3],number[1]);
				calculation(number[3],number[1],number[1],number[3]);
			}
		}
		else if(map.size()==3){
			//有3種數字的情況
			int index = 0;			
			for (Integer key : map.keySet()) {				
				if(map.get(key) == 2){					
					//將相同的2個數字放到number[2]=number[3]				
					number[2] = key;					
					number[3] = key;				
				} 
				else {					
					number[index++] = key;				
				}
			}
			//排列組合,所有情況
			calculation(number[0],number[1],number[3],number[3]);
			calculation(number[0],number[3],number[1],number[3]);
			calculation(number[0],number[3],number[3],number[1]);
			calculation(number[1],number[0],number[3],number[3]);
			calculation(number[1],number[3],number[0],number[3]);
			calculation(number[1],number[3],number[3],number[0]);
			calculation(number[3],number[3],number[0],number[1]);
			calculation(number[3],number[3],number[1],number[0]);
			calculation(number[3],number[1],number[3],number[0]);
			calculation(number[3],number[0],number[3],number[1]);
			calculation(number[3],number[0],number[1],number[3]);
			calculation(number[3],number[1],number[0],number[3]);
		}
		else if(map.size() == 4){
			//4個數都不同的情況
			calculation(number[0],number[1],number[2],number[3]);
			calculation(number[0],number[1],number[3],number[2]);
			calculation(number[0],number[2],number[1],number[3]);
			calculation(number[0],number[2],number[3],number[1]);
			calculation(number[0],number[3],number[1],number[2]);
			calculation(number[0],number[3],number[2],number[1]);
			calculation(number[1],number[0],number[2],number[3]);
			calculation(number[1],number[0],number[3],number[2]);
			calculation(number[1],number[2],number[3],number[0]);
			calculation(number[1],number[2],number[0],number[3]);
			calculation(number[1],number[3],number[0],number[2]);
			calculation(number[1],number[3],number[2],number[0]);
			calculation(number[2],number[0],number[1],number[3]);
			calculation(number[2],number[0],number[3],number[1]);
			calculation(number[2],number[1],number[0],number[3]);
			calculation(number[2],number[1],number[3],number[0]);
			calculation(number[2],number[3],number[0],number[1]);
			calculation(number[2],number[3],number[1],number[0]);
			calculation(number[3],number[0],number[1],number[2]);
			calculation(number[3],number[0],number[2],number[1]);
			calculation(number[3],number[1],number[0],number[2]);
			calculation(number[3],number[1],number[2],number[0]);
			calculation(number[3],number[2],number[0],number[1]);
			calculation(number[3],number[2],number[1],number[0]);
		}
		if(flag==false)
			System.out.println("這四張牌面數字無法經過運算得到24!");
	}
		
	
	public static void calculation(int num1, int num2, int num3, int num4){
		
		for (int i = 0; i < 4; i++){
			//第1次計算,先從四個數中任意選擇兩個進行計算
			char operator1 = operator[i];
			int firstResult = calcute(num1, num2, operator1);//先選第一,和第二個數進行計算
			int midResult = calcute(num2, num3, operator1);//先選第二和第三兩個數進行計算
			int tailResult = calcute(num3,num4, operator1);//先選第三和第四倆個數進行計算
			for (int j = 0; j < 4; j++){
				//第2次計算,從上次計算的結果繼續執行,這次從三個數中選擇兩個進行計算
				char operator2 = operator[j];
				int firstMidResult = calcute(firstResult, num3, operator2);
				int firstTailResult = calcute(num3,num4,operator2);
				int midFirstResult = calcute(num1, midResult, operator2);
				int midTailResult= calcute(midResult,num4,operator2);
				int tailMidResult = calcute(num2, tailResult, operator2);
				for (int k = 0; k < 4; k++){
					//第3次計算,也是最后1次計算,計算兩個數的結果,如果是24則輸出表達式
					char operator3 = operator[k];
					//在以上的計算中num1,num2,num3,num4都是整型數值,但若要輸出為帶有A,J,Q,K的表達式,則要將這四個數都變為String類型,下同
					if(calcute(firstMidResult, num4, operator3) == 24){
						m[0]=num1;
						m[1]=num2;
						m[2]=num3;
						m[3]=num4;
						for(int p=0;p<4;p++){
							if(m[p]==1){
								n[p]="A";}
							if(m[p]==2){
								n[p]="2";}
							if(m[p]==3){
								n[p]="3";}
							if(m[p]==4){
								n[p]="4";}
							if(m[p]==5){
								n[p]="5";}
							if(m[p]==6){
								n[p]="6";}
							if(m[p]==7){
								n[p]="7";}
							if(m[p]==8){
								n[p]="8";}
							if(m[p]==9){
								n[p]="9";}
							if(m[p]==10){
								n[p]="10";}
							if(m[p]==11){
								n[p]="J";}
							if(m[p]==12){
								n[p]="Q";}
							if(m[p]==13){
								n[p]="k";}
						}
						System.out.println("((" + n[0] + operator1 + n[1] + ")" + operator2 + n[2] + ")" + operator3 + n[3]);
						flag = true;//若有表達式輸出,則將說明有解,下同
					}
					if(calcute(firstResult, firstTailResult, operator3) == 24){
						System.out.println("(" + n[0] + operator1 + n[1] + ")" + operator3 + "(" + n[2] + operator2 + n[3] + ")");					
						flag = true;
					}
					if(calcute(midFirstResult, num4, operator3) == 24){
						m[0]=num1;
						m[1]=num2;
						m[2]=num3;
						m[3]=num4;						
						for(int p=0;p<4;p++){
							if(m[p]==1){
								n[p]="A";}
							if(m[p]==2){
								n[p]="2";}
							if(m[p]==3){
								n[p]="3";}
							if(m[p]==4){
								n[p]="4";}
							if(m[p]==5){
								n[p]="5";}
							if(m[p]==6){
								n[p]="6";}
							if(m[p]==7){
								n[p]="7";}
							if(m[p]==8){
								n[p]="8";}
							if(m[p]==9){
								n[p]="9";}
							if(m[p]==10){
								n[p]="10";}
							if(m[p]==11){
								n[p]="J";}
							if(m[p]==12){
								n[p]="Q";}
							if(m[p]==13){
								n[p]="k";}
						}
						System.out.println("(" + n[0] + operator2 + "(" + n[1] + operator1 + n[2] + "))" + operator3 + n[3]);
						flag = true;
					}
					if(calcute(num1,midTailResult, operator3) == 24){
						m[0]=num1;
						m[1]=num2;
						m[2]=num3;
						m[3]=num4;
						for(int p=0;p<4;p++){
							if(m[p]==1){
								n[p]="A";}
							if(m[p]==2){
								n[p]="2";}
							if(m[p]==3){
								n[p]="3";}
							if(m[p]==4){
								n[p]="4";}
							if(m[p]==5){
								n[p]="5";}
							if(m[p]==6){
								n[p]="6";}
							if(m[p]==7){
								n[p]="7";}
							if(m[p]==8){
								n[p]="8";}
							if(m[p]==9){
								n[p]="9";}
							if(m[p]==10){
								n[p]="10";}
							if(m[p]==11){
								n[p]="J";}
							if(m[p]==12){
								n[p]="Q";}
							if(m[p]==13){
								n[p]="k";}
						}
						System.out.println(" " + n[0] + operator3 + "((" + n[1] + operator1 + n[2] + ")" + operator2 + n[3] + ")");						
						flag = true;
					}
					if(calcute(num1,tailMidResult,operator3) == 24){
						m[0]=num1;
						m[1]=num2;
						m[2]=num3;
						m[3]=num4;
						for(int p=0;p<4;p++){
							if(m[p]==1){
								n[p]="A";}
							if(m[p]==2){
								n[p]="2";}
							if(m[p]==3){
								n[p]="3";}
							if(m[p]==4){
								n[p]="4";}
							if(m[p]==5){
								n[p]="5";}
							if(m[p]==6){
								n[p]="6";}
							if(m[p]==7){
								n[p]="7";}
							if(m[p]==8){
								n[p]="8";}
							if(m[p]==9){
								n[p]="9";}
							if(m[p]==10){
								n[p]="10";}
							if(m[p]==11){
								n[p]="J";}
							if(m[p]==12){
								n[p]="Q";}
							if(m[p]==13){
								n[p]="k";}
						}
						System.out.println(" " + n[0] + operator3 + "(" + n[1] + operator2 + "(" + n[2] + operator1 + n[3] + "))");						
						flag = true;
					}		
				}
			}	
		}
	}	
}

五、測試

測試用例:2 8 10 4

測試結果:

使用Java怎么制作一個24點游戲

可以看到,程序成功的生成了對應測試用例的結果,結果是正確的。

測試無法組成24點的數據:7 13 1 6

使用Java怎么制作一個24點游戲

經過多次運行, 7,13,1,6這四個數據,無法組成24點,程序輸出No answer運行正確。

Java的特點有哪些

Java的特點有哪些 1.Java語言作為靜態面向對象編程語言的代表,實現了面向對象理論,允許程序員以優雅的思維方式進行復雜的編程。 2.Java具有簡單性、面向對象、分布式、安全性、平臺獨立與可移植性、動態性等特點。 3.使用Java可以編寫桌面應用程序、Web應用程序、分布式系統和嵌入式系統應用程序等。

以上就是使用Java怎么制作一個24點游戲,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

德化县| 南郑县| 梁山县| 利川市| 天柱县| 遂昌县| 平定县| 泾源县| 许昌县| 时尚| 沅江市| 新巴尔虎左旗| 马龙县| 赞皇县| 浦北县| 闻喜县| 武汉市| 毕节市| 乌鲁木齐市| 连江县| 会宁县| 新绛县| 丰县| 太湖县| 宜昌市| 兴安县| 喀什市| 酒泉市| 茂名市| 增城市| 莱阳市| 酉阳| 南丹县| 全南县| 泾川县| 高州市| 句容市| 中阳县| 独山县| 读书| 湖口县|