图层的构建
学习于bilibili 春娇与志明
1. 图层数据的构建
创建一个Layer对象,内部有一个二维数组来存放牌
创建一个数组,存放所有牌的名称,每次随机从中抽取一个牌的名字
2. 测试Layer类
在test包中创建一个测试类
package com.zy.test;
/*
测试图层数据构建
*/
import com.sun.jdi.event.StepEvent;
import com.sun.jdi.request.StepRequest;
import com.zy.model.Layer;
import java.util.Random;
public class TestBuildLayer {
public static Random random = new Random();
//存储所有牌的名称
public static String [] brandNames = {
"刷子","剪刀","叉子","手套","水桶","火",
"玉米","球","瓶子","白菜","稻草","肉腿",
"胡萝卜","苹果","铃铛","青草"
};
//每次调用都随机获取一个牌的名称
public static String getBrandName(){
int randomIndex = random.nextInt(brandNames.length);
return brandNames[randomIndex];
}
public static void main(String[] args) {
Layer layer = new Layer(6,6);//容量为36的二维数组图层
System.out.println(getBrandName());
}
}
3. 创建数组
创建一个Brand数组,容量大小等于图层容量大小
注意:三张牌消除,故容量为三的倍数
故在创建容量的时候判断是否是3的倍数
Layer.java
public Layer(Integer rowNum, Integer colNum) throws Exception {
this.rowNum = rowNum;
this.colNum = colNum;
this.capacity = this.rowNum * this.colNum;
if(this.capacity % 3 != 0 ){
throw new Exception("容量不是3的倍数!!!");
}
this.cells = new Cell[this.rowNum][this.colNum];
this.size = 0;
}
TestBuildLayer.java
public static void main(String[] args){
Layer layer = null;//容量为36的二维数组图层
try {
layer = new Layer(3,5);
} catch (Exception e) {
throw new RuntimeException(e);
}
// System.out.println(getBrandName());
Brand[] brands = new Brand[layer.getCapacity()];//数组容量等于图层容量
//遍历循环
//每次产生3张,保证可以消除
//容量为3的倍数
for (int i = 0; i < brands.length; i = i + 3) {
String randonBrandName = getBrandName();//每次循环获取牌的名称
Brand brand1 = new Brand(randonBrandName);
Brand brand2 = new Brand(randonBrandName);
Brand brand3 = new Brand(randonBrandName);
brands[i] = brand1;
brands[i+1] = brand2;
brands[i+2] = brand3;
}
System.out.println("-------");
for (int j = 0; j < brands.length; j++) {
System.out.print(brands[j].getName()+"-");
}
}
但此时牌是顺序存放,太过于简单
接下来随机打散数组
4. 随机交换位置
在TestBuildLayer.java中
System.out.println("-------");
for (int i = 0; i < brands.length; i++) {
//当前位置A的变量拿到
Brand brandA = brands[i];
//交换位置B
int randomIndex = random.nextInt(brands.length);//获得0到长度大小的随机整数
Brand brandB = brands[randomIndex];
//交换
Brand temp = brandA;
brands[i] = brandB;
brands[randomIndex] = temp;
}
System.out.println("---打乱----");
for (int j = 0; j < brands.length; j++) {
System.out.print(brands[j].getName()+"-");
}
5. 把牌填充到图层
在TestBuildLayer.java中
int flag = 0;
Cell[][] cells = layer.getCells();
for (int row = 0; row < cells.length; row++) {
for (int col = 0; col < cells[row].length; col++) {
// System.out.println(row + "-" + col);
Cell cell = new Cell();
cell.setState(1);
cell.setBrand(brands[flag++]);
cells[row][col] = cell;//把之前空的图层设置了值
}
}
System.out.println("----layer图层-----");
for (int row = 0; row < cells.length; row++) {
for (int col = 0; col < cells[row].length; col++) {
Brand brands1 = cells[row][col].getBrand();
System.out.print(brands1.getName() + " ");
}
System.out.println();
}
6. 代码
TestBuildLayer.java
package com.zy.test;
/*
测试图层数据构建
*/
import com.sun.jdi.event.StepEvent;
import com.sun.jdi.request.StepRequest;
import com.zy.model.Brand;
import com.zy.model.Cell;
import com.zy.model.Layer;
import java.util.Random;
public class TestBuildLayer {
public static Random random = new Random();
//存储所有牌的名称
public static String [] brandNames = {
"刷子","剪刀","叉子","手套","水桶","火",
"玉米","球","瓶子","白菜","稻草","肉腿",
"胡萝卜","苹果","铃铛","青草"
};
//每次调用都随机获取一个牌的名称
public static String getBrandName(){
int randomIndex = random.nextInt(brandNames.length);
return brandNames[randomIndex];
}
public static void main(String[] args){
Layer layer = null;//容量为36的二维数组图层
try {
layer = new Layer(3,5);
} catch (Exception e) {
throw new RuntimeException(e);
}
// System.out.println(getBrandName());
Brand[] brands = new Brand[layer.getCapacity()];//数组容量等于图层容量
//遍历循环
//每次产生3张,保证可以消除
//容量为3的倍数
for (int i = 0; i < brands.length; i = i + 3) {
String randonBrandName = getBrandName();//每次循环获取牌的名称
Brand brand1 = new Brand(randonBrandName);
Brand brand2 = new Brand(randonBrandName);
Brand brand3 = new Brand(randonBrandName);
brands[i] = brand1;
brands[i+1] = brand2;
brands[i+2] = brand3;
}
System.out.println("-------");
for (int j = 0; j < brands.length; j++) {
System.out.print(brands[j].getName()+"-");
}
System.out.println("-------");
for (int i = 0; i < brands.length; i++) {
//当前位置A的变量拿到
Brand brandA = brands[i];
//交换位置B
int randomIndex = random.nextInt(brands.length);//获得0到长度大小的随机整数
Brand brandB = brands[randomIndex];
//交换
Brand temp = brandA;
brands[i] = brandB;
brands[randomIndex] = temp;
}
System.out.println("---打乱----");
for (int j = 0; j < brands.length; j++) {
System.out.print(brands[j].getName()+"-");
}
int flag = 0;
Cell[][] cells = layer.getCells();
for (int row = 0; row < cells.length; row++) {
for (int col = 0; col < cells[row].length; col++) {
// System.out.println(row + "-" + col);
Cell cell = new Cell();
cell.setState(1);
cell.setBrand(brands[flag++]);
cells[row][col] = cell;//把之前空的图层设置了值
}
}
System.out.println("----layer图层-----");
for (int row = 0; row < cells.length; row++) {
for (int col = 0; col < cells[row].length; col++) {
Brand brands1 = cells[row][col].getBrand();
System.out.print(brands1.getName() + " ");
}
System.out.println();
}
}
}