Author Topic: Nspire Flow  (Read 9872 times)

0 Members and 1 Guest are viewing this topic.

semiprocoder

• Full User
• Join Date: May 2015
• Location:
• Posts: 282
• Post Rating Ratio: +2/-0
• Gender:
Nspire Flow
« on: September 16, 2015, 03:40:21 am »
TMP edit: Here is the code that draws the level menu. I also uploaded what it looks like:
Code: [Select]
`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.
Code: [Select]
`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;      }    }  }}`
« Last Edit: November 05, 2015, 05:38:42 pm by semiprocoder »

• Calculators owned: ti nspire, ti 84 plus se

Strontium

• Full User
• Join Date: Apr 2015
• Location: CA
• Posts: 244
• Post Rating Ratio: +3/-2
• hey
• Gender:
Re: Nspire Flow
« Reply #1 on: September 16, 2015, 06:16:00 am »
I love Flow. Once I have the chance, I'll definitely try out your version.
• Calculators owned: TI Nspire CX, HP Prime
• Consoles, mobile devices and vintage computers owned: NES

xlibman

• Omni founder & CW co-founder
• CodeWalrus Staff
• Super User
• Forum Maintenance
• Original 5
• CodeWalrus Supporter
• Join Date: Nov 2014
• Posts: 19004
• Post Rating Ratio: +100/-5
• Gender:
Re: Nspire Flow
« Reply #2 on: September 16, 2015, 07:40:57 am »
This looks very nice. I'll be sure to try it when I have a chance. Glad to see new games from you
• Calculators owned: TI-84 Plus C Silver Edition, TI-84 Plus CE, Casio fx-CG10
• Consoles, mobile devices and vintage computers owned: Samsung i5510, Nintendo Switch, Playstation TV

semiprocoder

• Full User
• Join Date: May 2015
• Location:
• Posts: 282
• Post Rating Ratio: +2/-0
• Gender:
Re: Nspire Flow
« Reply #3 on: September 17, 2015, 01:17:38 am »
Now there are ten levels, and you press enter to advance through the levels. They are copies of the first ten levels of flow for android. Once I get the level editor up and running, I shall probably make some of my own levels.

Flow should now work for any api level now, because I set the api level. I also fixed some annoying bugs that I had before(not all though).
« Last Edit: September 17, 2015, 01:33:02 am by semiprocoder »
• Calculators owned: ti nspire, ti 84 plus se

xlibman

• Omni founder & CW co-founder
• CodeWalrus Staff
• Super User
• Forum Maintenance
• Original 5
• CodeWalrus Supporter
• Join Date: Nov 2014
• Posts: 19004
• Post Rating Ratio: +100/-5
• Gender:
Re: Nspire Flow
« Reply #4 on: September 17, 2015, 01:37:27 am »
How many levels do you plan to have? And which bugs are still present?
• Calculators owned: TI-84 Plus C Silver Edition, TI-84 Plus CE, Casio fx-CG10
• Consoles, mobile devices and vintage computers owned: Samsung i5510, Nintendo Switch, Playstation TV

semiprocoder

• Full User
• Join Date: May 2015
• Location:
• Posts: 282
• Post Rating Ratio: +2/-0
• Gender:
Re: Nspire Flow
« Reply #5 on: September 17, 2015, 02:12:53 am »
I don't see any right now but I had some crash that I couldn't explain before, so there might still be some crashes still, but they are rare because I don't know how it happened and I could not reproduce it. Maybe it was a test before I finished and I didn't realize, bu I am pretty sure that it happened after I finished bugfixing. I might be wrong about the bugs though. I hope so, obviously. I plan to have around 50 5 by 5 levels, 50 8 by 8, and 50 10 by 10, with some random other levels in between and maybe some up to like 16 by 16(if the nspire has enough pixels for that).
• Calculators owned: ti nspire, ti 84 plus se

xlibman

• Omni founder & CW co-founder
• CodeWalrus Staff
• Super User
• Forum Maintenance
• Original 5
• CodeWalrus Supporter
• Join Date: Nov 2014
• Posts: 19004
• Post Rating Ratio: +100/-5
• Gender:
Re: Nspire Flow
« Reply #6 on: September 17, 2015, 02:53:17 am »
I guess in this case it will be better to wait to see if people reports the same issue and when. Perhaps if you know what they were doing before the crash it will make it easier to track down the bug. That kind of bug is the most annoying. >.<

And I see. That seems like a large amount of levels. Good luck finding ideas >.<
• Calculators owned: TI-84 Plus C Silver Edition, TI-84 Plus CE, Casio fx-CG10
• Consoles, mobile devices and vintage computers owned: Samsung i5510, Nintendo Switch, Playstation TV

semiprocoder

• Full User
• Join Date: May 2015
• Location:
• Posts: 282
• Post Rating Ratio: +2/-0
• Gender:
Re: Nspire Flow
« Reply #7 on: September 20, 2015, 03:35:05 am »
So I made all the code that I need to add levels. Now all I need it so add strings, so I wrote a small program in processing(which is pretty java without full classes, only subclasses and that has a simple graphic library built into it, unless run in eclipse) for that purpose

It just draws a board and when you click on a square the circle changes colors. It rotates colors, so you can go around. Every time you click the mouse to change a color it outputs the string to make that sequence of colors to the console. I know this is not the best way of output, but I just wanted to make the code short. This is source code, so to run it you need to download processing itself and then compile the code with processing(or you could do it in eclipse and include processing but for simple projects that is annoying). To change the board size, all you need to need is change the boardSize variable in the third line. It currently has 12 colors, so only up to 10x10 or maybe 11x11, but not much more.

If anyone reading this has any skill in making these kinds of puzzles, could you please make me some levels and reply with the strings for the levels. I plan to have 50 5x5, 50 8x8, 50 10x10, and random other sizes. I will mention you in the readme but I honestly don't think that really matters but still.

Anyways, here is the processing code:

Code: [Select]
`int board[][]=new int[8][8];int boardSize=8;//change this for different board sizesint X=0;int Y=0;int maxNum=12;import java.util.Arrays;void settings(){  size(800,800);}void setup(){  board=new int[boardSize][boardSize];  for(int i=0;i<boardSize;i++){    for(int j=0;j<boardSize;j++){      board[i][j]=0;    }  }}void mouseClicked(){  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();}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();      switch (board[i][j]) {        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;      }      ellipse((4*i+2)*width/boardSize/4, (4*j+2)*height/boardSize/4, width/boardSize/2, height/boardSize/2);     }  }}`
Also DJ omninaga I think I fixed the crashing bug, because I didn't check for a nil statement of one of my variables. But when you click an empty square your previous line draws erases.
• Calculators owned: ti nspire, ti 84 plus se

xlibman

• Omni founder & CW co-founder
• CodeWalrus Staff
• Super User
• Forum Maintenance
• Original 5
• CodeWalrus Supporter
• Join Date: Nov 2014
• Posts: 19004
• Post Rating Ratio: +100/-5
• Gender:
Re: Nspire Flow
« Reply #8 on: September 20, 2015, 06:08:12 am »
Maybe it would be better to create a separate thread for level requests? It would be seen easier.
• Calculators owned: TI-84 Plus C Silver Edition, TI-84 Plus CE, Casio fx-CG10
• Consoles, mobile devices and vintage computers owned: Samsung i5510, Nintendo Switch, Playstation TV

alexgt

• Just your friendly neighborhood Ninja Stach Fancy Iron Man
• Super User
• Join Date: Dec 2014
• Location: Behind you
• Posts: 2615
• Post Rating Ratio: +6/-1
• Something should go here...
• Gender:
Re: Nspire Flow
« Reply #9 on: September 20, 2015, 04:16:07 pm »
Looks cool, I will definitely try it out sometime .
• Calculators owned: Ti-84+, Ti-Nspire, Hp Prime, Broken HP Prime, HP 48SX

Snektron

• Lvl 69 Russian Snake
• Super User
• Join Date: Dec 2014
• Location: Netherlands
• Posts: 3165
• Post Rating Ratio: +32/-0
• SSSssssss.....
• Gender:
Re: Nspire Flow
« Reply #10 on: September 20, 2015, 08:50:33 pm »
So I made all the code that I need to add levels. Now all I need it so add strings, so I wrote a small program in processing(which is pretty java without full classes, only subclasses and that has a simple graphic library built into it, unless run in eclipse) for that purpose

Processing is cool Such a shame openprocessing is dying because of java web dying (Was it ever really born though?).
• Calculators owned: TI-84+
Legends say if you spam more than DJ Omnimaga, you will become a walrus...

semiprocoder

• Full User
• Join Date: May 2015
• Location:
• Posts: 282
• Post Rating Ratio: +2/-0
• Gender:
Re: Nspire Flow
« Reply #11 on: September 21, 2015, 01:31:00 am »
Well there's always processing.js but its impossible to implement and its in JavaScript, which I don't know yet, but it works for simple programs pretty well. And since its JavaScript all browsers pretty much support it.

EDIT: I now have a main menu where you select the level pack. Only 5 by 5 and 8 by 8 do anything though. 5 by 5 still has 10 levels but 8 by 8 has 5 levels now, but I apologize if the levels are too easy; I am not that good at making levels.

Also I updated my level making program so that you can kind of play it. You press the right arrow to go into play mode and then click on one of the circles and click anywhere where there is nothing. It will place a smaller circle representing path of the same color on that square. When you press left arrow it resets back to level editing:

Code: [Select]
`int board[][]=new int[8][8];int playBoard[][]=new int[8][8];int boardSize=8;//change this for different board sizesint 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;  }}`
« Last Edit: September 21, 2015, 04:00:16 am by semiprocoder »
• Calculators owned: ti nspire, ti 84 plus se

xlibman

• Omni founder & CW co-founder
• CodeWalrus Staff
• Super User
• Forum Maintenance
• Original 5
• CodeWalrus Supporter
• Join Date: Nov 2014
• Posts: 19004
• Post Rating Ratio: +100/-5
• Gender:
Re: Nspire Flow
« Reply #12 on: September 21, 2015, 03:14:33 am »
So I made all the code that I need to add levels. Now all I need it so add strings, so I wrote a small program in processing(which is pretty java without full classes, only subclasses and that has a simple graphic library built into it, unless run in eclipse) for that purpose

Processing is cool Such a shame openprocessing is dying because of java web dying (Was it ever really born though?).
I blame Oracle for ruining web Java with their security crap. Nowadays it's almost impossible to run any third-party web applet. >.< Standalone java programs seems better, though.
• Calculators owned: TI-84 Plus C Silver Edition, TI-84 Plus CE, Casio fx-CG10
• Consoles, mobile devices and vintage computers owned: Samsung i5510, Nintendo Switch, Playstation TV

semiprocoder

• Full User
• Join Date: May 2015
• Location:
• Posts: 282
• Post Rating Ratio: +2/-0
• Gender:
Re: Nspire Flow
« Reply #13 on: September 23, 2015, 02:29:33 am »
Nah, I think java is just too slow to be put into a web browser. It takes too long too load and its not that easy to load in huge libraries because you would have to load it in every time you visit the browser. But yeah, standalone java programs are pretty good.

Also should I just copy the levels from the original flow in android, because I am having too much of a hard time coming up with levels.
• Calculators owned: ti nspire, ti 84 plus se

xlibman

• Omni founder & CW co-founder
• CodeWalrus Staff
• Super User
• Forum Maintenance
• Original 5
• CodeWalrus Supporter
• Join Date: Nov 2014
• Posts: 19004
• Post Rating Ratio: +100/-5
• Gender:
Re: Nspire Flow
« Reply #14 on: September 23, 2015, 02:53:17 am »
Isn't it the opposite? Because TI-Smartview actually runs much faster in a browser than standalone

And yeah it would be fine if the license allows it. After all, if that game is popular, then people might want to play the original levels anyway
• Calculators owned: TI-84 Plus C Silver Edition, TI-84 Plus CE, Casio fx-CG10
• Consoles, mobile devices and vintage computers owned: Samsung i5510, Nintendo Switch, Playstation TV