Fixed reset bug for block clearing.

concurrentModificationException1
sigonasr2, Sig, Sigo 3 years ago
parent 889e31a2b6
commit 4298dfceb2
  1. BIN
      Meteo_Engine.jar
  2. 2
      src/sig/Block.java
  3. 3
      src/sig/BlockClump.java
  4. 43
      src/sig/Board.java
  5. 3
      src/sig/Meteo.java

Binary file not shown.

@ -16,7 +16,7 @@ public class Block{
public Block(int x,int y) {
this.x=x;
this.y=y;
state = STARTINGSTATES[(int)(Math.random()*1)];
state = STARTINGSTATES[(int)(Meteo.r.nextInt(1))];
}
@Override
public String toString() {

@ -43,8 +43,9 @@ public class BlockClump {
public void addBlock(Block...blocks) {
//Adds the block to the strucutre. Update collision column ranges to reflect the new bounds.
for (Block b : blocks)
{updateBlockCollisionRangeWithBlock(b);
{
this.blocks.add(b);
updateBlockCollisionRangeWithBlock(b);
}
}
public void removeBlock(Block...blocks) {

@ -38,9 +38,9 @@ public class Board {
this.combo_power_bonus = combo_power_bonus;
this.blockData = new ArrayList<BlockClump>();
List<Block> initialBlocks = new ArrayList<Block>();
/*List<Block> initialBlocks = new ArrayList<Block>();
for (int x=0;x<boardWidth;x++) {
for (int y=0;y<(int)(Math.random()*12);y++) {
for (int y=0;y<(int)(Meteo.r.nextInt(12));y++) {
initialBlocks.add(new Block(x,y));
}
}
@ -49,18 +49,18 @@ public class Board {
List<Block> initialBlocks2 = new ArrayList<Block>();
for (int x=0;x<boardWidth;x++) {
for (int y=0;y<(int)(Math.random()*12);y++) {
for (int y=0;y<(int)(Meteo.r.nextInt(12));y++) {
initialBlocks2.add(new Block(x,y));
}
}
BlockClump defaultClump2 = new BlockClump(initialBlocks2,0,540,0,width,120);
blockData.add(defaultClump);
blockData.add(defaultClump2);
blockData.add(defaultClump2);*/
}
public void run(long frames) {
if (frames%40==0) {
blockData.add(new BlockClump(Arrays.asList(new Block((int)(Math.random()*width),0)),0,590,0,width,-1));
if (frames%20==0) {
blockData.add(new BlockClump(Arrays.asList(new Block((int)(Meteo.r.nextInt(width)),0)),0,590,0,width,-1));
}
outerloop:
@ -127,11 +127,12 @@ public class Board {
//System.out.println(blocks.getSortedBlocksOnRow(y));
//System.out.println(blocks.getSortedBlocksOnRow(y));
List<Block> blockList = blocks.getSortedBlocksOnRow(y);
markedBlocks.addAll(FindMatches(blockList,width,true));
System.out.println(" "+blockList);
markedBlocks.addAll(FindMatches(blockList));
}
for (int x=0;x<width;x++) {
List<Block> blockList = blocks.getSortedBlocksOnCol(x);
markedBlocks.addAll(FindMatches(blockList,blocks.maxBlockHeight,false));
markedBlocks.addAll(FindMatches(blockList));
}
if (markedBlocks.size()>0) {
List<Block> newClumpBlocks = new ArrayList<Block>();
@ -146,22 +147,23 @@ public class Board {
}
return false;
}
private List<Block> FindMatches(List<Block> blockList, int maxSearch, boolean searchingRows) {
BlockState col = BlockState.IGNITED;
int matches=0;
private List<Block> FindMatches(List<Block> blockList) {
List<Block> markedBlocks = new ArrayList<Block>();
List<Block> tempMarkedBlocks = new ArrayList<Block>();
for (int i=0;i<maxSearch;i++) {
if (blockList.isEmpty()) {break;}
if (blockList.size()==0) {return markedBlocks;}
BlockState col = blockList.get(0).state;
int matches= 1;
int prevX = blockList.get(0).x;
int prevY = blockList.get(0).y;
while (blockList.size()>0) {
Block currentBlock = blockList.get(0);
if (searchingRows&&currentBlock.x==i||(!searchingRows&&currentBlock.y==i)) {
if (Math.abs(currentBlock.x-prevX)==1||Math.abs(currentBlock.y-prevY)==1) {
if (col!=BlockState.IGNITED&&currentBlock.state==col) {
matches++;
tempMarkedBlocks.add(blockList.remove(0));
} else {
if (matches>=3) {
markedBlocks.addAll(tempMarkedBlocks);
System.out.println(" Added to Marked blocks: "+tempMarkedBlocks);
}
matches=1;
col=currentBlock.state;
@ -169,14 +171,19 @@ public class Board {
tempMarkedBlocks.add(blockList.remove(0));
}
} else {
col = BlockState.IGNITED;
matches=0;
if (matches>=3) {
markedBlocks.addAll(tempMarkedBlocks);
}
matches=1;
col=currentBlock.state;
tempMarkedBlocks.clear();
tempMarkedBlocks.add(blockList.remove(0));
}
prevX=currentBlock.x;
prevY=currentBlock.y;
}
if (matches>=3) {
markedBlocks.addAll(tempMarkedBlocks);
System.out.println(" Added to Marked blocks: "+tempMarkedBlocks);
}
return markedBlocks;
}

@ -2,6 +2,7 @@ package sig;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import javax.swing.JFrame;
@ -13,6 +14,7 @@ public class Meteo {
public static double GAMELOOPTIME=0;
public static JFrame f;
public static Board b;
public static Random r;
public final static long TIMEPERTICK = 16666667l;
public static DebugMode DEBUG_DRAWING = DebugMode.MODE2;
@ -23,6 +25,7 @@ public class Meteo {
}
public static void main(String[] args) {
r = new Random(437210983125739812l);
double[] val = {0,0,};
b = new Board(SCREEN_WIDTH/2,SCREEN_HEIGHT/2,24,24,8,14,-0.065,1,4,-2,val);

Loading…
Cancel
Save