天天看點

java中編遊戲人物血量控制_java實作Bingo遊戲優化,可以控制次數期望

如本例實踐中;門檻值設定為0.3;

思路都在程式中。實作還是不難。

class Bingo2{

public static void main(String[] args){

int[][] arr = new int[5][];

initializeArray(arr);//初始化5*5的數組1-7*7

int[][] arr0 =new int[5][];//點亮數組

for(int i=0;i<5;i++){

arr0[i] = new int[5];

}//點亮數組全部預設為0

System.out.println("開始列印Bingo值");

print2Array(arr);

System.out.println("開始列印點亮數組");

print2Array(arr0);

int c = playGame(arr,arr0);

System.out.println("你本期完成Bingo使用的次數合計 "+c+"次");

System.out.println("列印完成遊戲後的情況----");

System.out.println("開始列印Bingo值");

print2Array(arr);

System.out.println("開始列印結束Bingo後的點亮數組");

print2Array(arr0);

}

//初始化二維數組5*5;輸入7*7範圍内的數值

public static void initializeArray(int[][] arr2){

for(int i=0;i<5;i++){

arr2[i] = new int[5];

for(int j=0;j<5;j++){

arr2[i][j] = (int) (49*Math.random()+1);

}

}

}

//列印二維數組

public static void print2Array(int[][] arr){

for(int i=0;i

for(int j=0;j

System.out.print(arr[i][j]+"\t");

}

System.out.println();

System.out.println();

}

}

//參與遊戲程式;

public static int playGame(int[][] arr,int[][] arr0){

int i=0;

double oc = 0.3;//設定門檻值

int [] arrc = new int[50];

while(true){

//給與機會參與遊戲

double occ = Math.random();

if(occ>oc){

int t = (int) (49*Math.random()+1);

boolean ol = AAE.xFind(arrc,t);

if(ol){

continue;

}else{

AAE.arrayAddElement(arrc,t);//數組末增加元素

increaseValue(arr,arr0,t);//兩數組的對應處理

i++;

boolean flag = judge(arr0); //滿足條件否

if(flag){

break;

}

}

}else{

int t = (int) (49*Math.random()+1);

AAE.arrayAddElement(arrc,t);

increaseValue(arr,arr0,t);

i++;

boolean flag = judge(arr0);

if(flag){

break;

}

}

}

return i;

}

public static boolean judge(int[][] arr3){

//判斷點亮數組中是否有滿足目标的對象;即周遊12條路

//周遊行

boolean judge = false;

int count=0;

for(int i=0;i

int obj1=0;int obj2=0;int obj3=0;int obj4=0;

obj3 += arr3[i][arr3.length-i-1];

obj4 += arr3[i][i];//obj3和obj4為對角兩條線

for(int j=0;j

obj1 += arr3[i][j];//行

obj2 += arr3[j][i]; //列

}

if(obj1==5){

count++;

}

if(obj2==5){

count++;

}

if(obj3==5){

count++;

}

if(obj4==5){

count++;}

}

if(count>=5){//點亮數組求和;12條線若存在有至少5個sum=5則結束;

judge = true;

}

return judge;

}

//周遊整個二維數組;傳回該元素在二維數組中的所有位置;并在點亮數組中标記++

public static void increaseValue(int[][] arr,int[][] arr0,int x){

int index = 0;

for(int i=0;i

for(int j=0;j

if(arr[i][j]==x){

arr0[i][j]=1;

}

}//int hang = (index/10)%hang;//int lie = index%lie;

}

}

}

class AAE{

public static void arrayAddElement(int[] arr,int x){

//對于一個長度固定且足夠大的數組增加新元素;這裡主要使用集合的功能

//補集運用,這裡會用到

int index = returnIndex(arr);//先通路到非0索引

boolean flag = xFind(arr,x);

if(flag==false){

arr[index+1] = x;//将x元素植入數組末尾

}

}

public static int returnIndex(int[] arr1){

int index = 0;

for(int i =0;i

if(i==0 && arr1[i]==0){

index = -1;

break;}else if(arr1[i]==0){

index = i-1;

break;

}

}

return index;

}

public static void printArray(int[] arr){

for(int i=0;i

System.out.print(arr[i]+"\t");

}

System.out.println();

}

//判斷元素是否在數組中;是傳回true

public static boolean xFind(int[] arr,int x){

boolean flag = false;

for(int i=0;i

if(arr[i]==x){

flag = true;

}

}

return flag;

}

}