Join us on Discord!
You can help CodeWalrus stay online by donating here.

[TI-Nspire] Nspire Flow

Started by semiprocoder, September 16, 2015, 03:40:21 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

semiprocoder

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;
      }
    }
  }
}
  • Calculators owned: ti nspire, ti 84 plus se
My cemetech username is awesommee333.

Strontium

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

Dream of Omnimaga

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-82 Advanced Edition Python TI-84+ TI-84+CSE TI-84+CE TI-84+CEP TI-86 TI-89T cfx-9940GT fx-7400G+ fx 1.0+ fx-9750G+ fx-9860G fx-CG10 HP 49g+ HP 39g+ HP 39gs (bricked) HP 39gII HP Prime G1 HP Prime G2 Sharp EL-9600C
  • Consoles, mobile devices and vintage computers owned: Huawei P30 Lite, Moto G 5G, Nintendo 64 (broken), Playstation, Wii U

semiprocoder

#3
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).
  • Calculators owned: ti nspire, ti 84 plus se
My cemetech username is awesommee333.

Dream of Omnimaga

How many levels do you plan to have? And which bugs are still present?
  • Calculators owned: TI-82 Advanced Edition Python TI-84+ TI-84+CSE TI-84+CE TI-84+CEP TI-86 TI-89T cfx-9940GT fx-7400G+ fx 1.0+ fx-9750G+ fx-9860G fx-CG10 HP 49g+ HP 39g+ HP 39gs (bricked) HP 39gII HP Prime G1 HP Prime G2 Sharp EL-9600C
  • Consoles, mobile devices and vintage computers owned: Huawei P30 Lite, Moto G 5G, Nintendo 64 (broken), Playstation, Wii U

semiprocoder

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
My cemetech username is awesommee333.

Dream of Omnimaga

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-82 Advanced Edition Python TI-84+ TI-84+CSE TI-84+CE TI-84+CEP TI-86 TI-89T cfx-9940GT fx-7400G+ fx 1.0+ fx-9750G+ fx-9860G fx-CG10 HP 49g+ HP 39g+ HP 39gs (bricked) HP 39gII HP Prime G1 HP Prime G2 Sharp EL-9600C
  • Consoles, mobile devices and vintage computers owned: Huawei P30 Lite, Moto G 5G, Nintendo 64 (broken), Playstation, Wii U

semiprocoder

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:


int board[][]=new int[8][8];
int boardSize=8;//change this for different board sizes
int 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
My cemetech username is awesommee333.

Dream of Omnimaga

Maybe it would be better to create a separate thread for level requests? It would be seen easier.
  • Calculators owned: TI-82 Advanced Edition Python TI-84+ TI-84+CSE TI-84+CE TI-84+CEP TI-86 TI-89T cfx-9940GT fx-7400G+ fx 1.0+ fx-9750G+ fx-9860G fx-CG10 HP 49g+ HP 39g+ HP 39gs (bricked) HP 39gII HP Prime G1 HP Prime G2 Sharp EL-9600C
  • Consoles, mobile devices and vintage computers owned: Huawei P30 Lite, Moto G 5G, Nintendo 64 (broken), Playstation, Wii U

alexgt

Looks cool, I will definitely try it out sometime :).
  • Calculators owned: Ti-84+, Ti-Nspire, Hp Prime, Broken HP Prime, HP 48SX

Snektron

Quote from: semiprocoder 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

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

#11
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:


int board[][]=new int[8][8];
int playBoard[][]=new int[8][8];
int boardSize=8;//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;
  }
}
  • Calculators owned: ti nspire, ti 84 plus se
My cemetech username is awesommee333.

Dream of Omnimaga

Quote from: Cumred_Snektron on September 20, 2015, 08:50:33 PM
Quote from: semiprocoder 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

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-82 Advanced Edition Python TI-84+ TI-84+CSE TI-84+CE TI-84+CEP TI-86 TI-89T cfx-9940GT fx-7400G+ fx 1.0+ fx-9750G+ fx-9860G fx-CG10 HP 49g+ HP 39g+ HP 39gs (bricked) HP 39gII HP Prime G1 HP Prime G2 Sharp EL-9600C
  • Consoles, mobile devices and vintage computers owned: Huawei P30 Lite, Moto G 5G, Nintendo 64 (broken), Playstation, Wii U

semiprocoder

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
My cemetech username is awesommee333.

Dream of Omnimaga

Isn't it the opposite? Because TI-Smartview actually runs much faster in a browser than standalone O.O

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-82 Advanced Edition Python TI-84+ TI-84+CSE TI-84+CE TI-84+CEP TI-86 TI-89T cfx-9940GT fx-7400G+ fx 1.0+ fx-9750G+ fx-9860G fx-CG10 HP 49g+ HP 39g+ HP 39gs (bricked) HP 39gII HP Prime G1 HP Prime G2 Sharp EL-9600C
  • Consoles, mobile devices and vintage computers owned: Huawei P30 Lite, Moto G 5G, Nintendo 64 (broken), Playstation, Wii U

Powered by EzPortal