TMP edit: Here is the code that draws the level menu. I also uploaded what it looks like:
function drawNumsBoard(gc, sBX, sBY, sX, sY, bW, bH)--sB-sizeBoard, sX-startX, sY-startY, bW-boardWidth, bH-boardHeight
local sizeRectX=bW/sBX
local sizeRectY=bH/sBY
gc:setColorRGB(Colors[boardColor][2])
for i=0, sBY do
gc:drawLine(sX, sY+sizeRectY*i, sX+bW, sY+sizeRectY*i)
end
for i=0, sBX do
gc:drawLine(sX+sizeRectX*i, sY, sX+sizeRectX*i, sY+bH)
end
gc:setColorRGB(Colors[numColor][2])
for i=1, sBY do
for j=1, sBX do
centerText(gc, tostring((i-1)*sBX+j), sX+sizeRectX*(j-1/2), sY+squareSize*(i-1/2))
end
end
gc:setColorRGB(Colors[cursorColor][2])
gc:drawRect(sX+X*sizeRectX, sY+Y*sizeRectY, sizeRectX, sizeRectY)
gc:setColorRGB(0x000000)
end
Here is the line of code that runs it: drawNumsBoard(gc, 10, 5, 0, 0, dispX-1, dispY-1)--dispX and dispY are the screen sizes
EDIT: As of now I have 300 levels! And there is an updated menu!
There is an attached source this time because I am no longer coding in the actuall student software because it keeps crashing on me, so I now code in notepad++.
As for the controls, you move the rectangle with the arrow keys and click on a circle to select it's color. Then you aim it to the other color circle. The aim is to fill the board and connect all the circles. When you win the board you can press enter to advance to the next level by pressing enter. Hope that made sense. Btw I am still new to this forum how do you add images to the middle of the post instead of only the end. I don't really need to know that much but it would be nice.
The controls are also in the readme and in the help menu.
If you want to make levels use this code in processing. To add a new flow dot, just click on the square you want and it will go through all the colors currently available. If you want to change the size of the level then just change the boardSize variable to whatever you want. To actually play your level(sort of it is not as polished as flow) you press the right arrow key(and to go back to editing you press the left arrow key). Then while playing you click on a square with a full flow thingy, which selects the color, and then you click anywhere you want to create a smaller circle on the square you clicked on, which represents the path. To reset the board, simply press R. Then, to actually submit what you created to me, just reply with the latest string that was printed to the console. Here is the code to put in processing to make the levels.
int board[][]=new int[8][8];
int playBoard[][]=new int[8][8];
int boardSize=5;//change this for different board sizes-----------------------------
int X=0;
int Y=0;
int maxNum=12;
boolean play=false;
int prevX=-1;
int prevY=-1;
import java.util.Arrays;
void settings(){
size(800,800);
}
void setup(){
board=new int[boardSize][boardSize];
playBoard=new int[boardSize][boardSize];
for(int i=0;i<boardSize;i++){
for(int j=0;j<boardSize;j++){
board[i][j]=0;
}
}
}
void fillColor(int i, int j){
int temp;
if(!play)
temp=board[i][j];
else
temp=playBoard[i][j];
if(temp>maxNum)
temp-=maxNum;
switch (temp) {
case 1: fill(255, 0, 0);
break;
case 2: fill(0, 0, 255);
break;
case 3: fill(0, 255, 0);
break;
case 4: fill(255, 255, 0);
break;
case 5: fill(255, 128, 0);
break;
case 6: fill(0, 255, 255);
break;
case 7: fill(128, 0, 0);
break;
case 8: fill(0, 128, 0);
break;
case 9: fill(255, 30, 128);
break;
case 10: fill(128, 15, 128);
break;
case 11: fill(128, 128, 128);
break;
case 12: fill(255, 255, 255);
break;
default: fill(0, 0, 0);
break;
}
}
void mouseClicked(){
if( !play){
if(board[X][Y]<maxNum)
board[X][Y]+=1;
else
board[X][Y]=0;
for(int i=0;i<boardSize;i++){
for(int j=0;j<boardSize;j++){
if(board[i][j]>0)
print(Integer.toString(board[i][j]*2-1));
else
print(Integer.toString(0));
if(j<boardSize-1)
print(",");
}
print(" ");
}
println();
}
else{
if(playBoard[X][Y]==0 || playBoard[X][Y]>maxNum){
if(X>=0 && X<boardSize && Y>=0 && Y<boardSize){
if(playBoard[X][Y]==0 && prevX>-1 && prevY>-1)
playBoard[X][Y]=board[prevX][prevY]+maxNum;
}
}
else{
prevX=X;
prevY=Y;
}
}
}
void draw(){
fill(0,0,0);
rect(0,0,width,height);
stroke(250,255,255);
for(int i=0;i<=boardSize;i++){
line(0, i*height/boardSize, width, i*height/boardSize);
line(i*width/boardSize, 0, i*width/boardSize, height);
}
X=mouseX*boardSize/width;
Y=mouseY*boardSize/height;
for(int i=0;i<boardSize;i++){
for(int j=0;j<boardSize;j++){
noStroke();
if(!play){
fillColor(i,j);
ellipse((4*i+2)*width/boardSize/4, (4*j+2)*height/boardSize/4, width/boardSize/2, height/boardSize/2);
}
else{
if(playBoard[i][j]>0 && playBoard[i][j]<=maxNum){
fillColor(i,j);
ellipse((4*i+2)*width/boardSize/4, (4*j+2)*height/boardSize/4, width/boardSize/2, height/boardSize/2);
}
else{
fillColor(i,j);
ellipse((4*i+2)*width/boardSize/4, (4*j+2)*height/boardSize/4, width/boardSize/4, height/boardSize/4);
}
}
}
}
}
void keyPressed(){
if(keyCode==RIGHT){
play=true;
for(int i=0;i<boardSize;i++){
for(int j=0;j<boardSize;j++){
playBoard[i][j]=board[i][j];
}
}
}
if(keyCode==LEFT){
play=false;
}
if(key=='r'){
for(int i=0;i<boardSize;i++){
for(int j=0;j<boardSize;j++){
board[i][j]=0;
play=false;
}
}
}
}