From fae760aec237f1f90ff1a2d0a04a6f5d3e417149 Mon Sep 17 00:00:00 2001 From: mcmlxxix <> Date: Thu, 16 Jul 2009 20:46:47 +0000 Subject: [PATCH] Added pattern editor, set color as random, updated "gliders"example --- xtrn/life/gliders.bin | 2 +- xtrn/life/life.js | 123 ++++++++++++++++++++++++++++++++++++------ 2 files changed, 108 insertions(+), 17 deletions(-) diff --git a/xtrn/life/gliders.bin b/xtrn/life/gliders.bin index fff06415a2..b867cb3488 100644 --- a/xtrn/life/gliders.bin +++ b/xtrn/life/gliders.bin @@ -1 +1 @@ - 1 1 1 1 111 1 1 1 1 1 1 1 1 1 1111 1 1 1 1 1 1 1 1 1 1 1 1 \ No newline at end of file + 111 111 1 1 1 1 1 1 1 1 1 1 1 1 1111 1111 1 1 1 1 111 111 \ No newline at end of file diff --git a/xtrn/life/life.js b/xtrn/life/life.js index 816f03a0c1..8623d693cc 100644 --- a/xtrn/life/life.js +++ b/xtrn/life/life.js @@ -30,28 +30,38 @@ function Cells() var board; var clear=[]; var generation=0; + var colors=["\1r","\1c","\1y","\1b","\1m","\1g","\1w"]; + var highlight=["\1n","\1h"]; + var col=colors[random(7)]; function Main() { - var list=ListConfigs(); - var config=ChooseConfig(list); - if(!config) exit(0); - - Run(); + while(1) + { + if(ChooseConfig()) Run(); + else break; + } } - function ChooseConfig(list) + function ChooseConfig() { - console.putmsg("\r\n\1nChoose a pattern: "); while(1) { - var pattern=console.inkey(); + console.clear(); + var list=ListConfigs(); + console.putmsg("\r\n\r\n\1nR: Random Pattern"); + console.putmsg("\r\n\1nE: Edit Pattern"); + console.putmsg("\r\n\1nESC: Exit Program"); + console.putmsg("\r\n\r\n\1nChoose a pattern: "); + var pattern=console.getkey(); switch(pattern.toUpperCase()) { case "\x1b": return false; case "R": - RandomStart(); - return true; + if(RandomStart()) return true; + break; + case "E": + if(CustomStart()) return true; break; default: if(list[pattern]) @@ -68,9 +78,9 @@ function Cells() var list=directory(gameroot+"*.bin"); for(var f in list) { - console.putmsg("\r\n\1n" + f + ":" + list[f]); + var name=file_getname(list[f]); + console.putmsg("\r\n\1n" + f + ": " + name.substring(0,name.indexOf(".")).toUpperCase()); } - console.crlf(); return list; } function LoadPattern(filename) @@ -94,15 +104,18 @@ function Cells() Display(); while(1) { - var k=console.inkey(); + var k=console.inkey(K_NOECHO|K_NOSPIN); switch(k) { case "\x1b": return; + case " ": + console.getkey(); + break; default: break; } - mswait(25); + mswait(5); board=Evolve(); Display(); } @@ -120,6 +133,80 @@ function Cells() if(!board[randx][randy]) board[randx][randy]=1; else n--; } + return true; + } + function CustomStart() + { + console.clear(); + DrawLine(1,23,80); + var cells=["\xDF","\xDC","\xDB"]; + var current=2; + var grid=WipeBoard(); + StatusLine(); + + console.gotoxy(40,11); + while(1) + { + var k=console.inkey(K_NOECHO|K_NOSPIN); + if(k) + { + var position=console.getxy(); + switch(k.toUpperCase()) + { + case "\x1b": + return false; + case " ": + Toggle(); + console.pushxy(); + StatusLine(); + console.popxy(); + break; + case "Q": + return true; + case ctrl("M"): + LoadCell(position.x,position.y); + console.putmsg(cells[current]); + break; + case KEY_DOWN: + if(position.y<22) console.down(); + else console.gotoxy(position.x,1); + break; + case KEY_UP: + if(position.y>1) console.up(); + else console.gotoxy(position.x,22); + break; + case KEY_LEFT: + if(position.x>1) console.left(); + else console.gotoxy(80,position.y); + break; + case KEY_RIGHT: + if(position.x<80) console.right(); + else console.gotoxy(1,position.y); + break; + default: + break; + } + board=grid; + } + } + function StatusLine() + { + console.gotoxy(1,24); + console.putmsg("\1c\1h[\1n\1cArrows\1h]\1n\1c Move \1h[\1n\1cEnter\1h]\1n\1c Place \1h[\1n\1cSpace\1h] \1h[\1n\1cQ\1h] Save \1h[\1n\1cEscape\1h]\1n\1c Exit \1n\1cToggle cell: \1h" + cells[current]); + } + function Toggle() + { + current++; + if(current>2) current=0; + } + function LoadCell(x,y) + { + var t=(current==0 || current==2)?true:false; + var b=(current==1 || current==2)?true:false; + y=(y-1)*2; + if(t) grid[x-1][y]=1; + if(b) grid[x-1][y+1]=1; + } } function WipeBoard() { @@ -167,13 +254,16 @@ function Cells() c=bottom; } else c=whole; - console.putmsg(c); + + //var color=highlight[random(2)] + colors[random(8)]; + var hl=highlight[random(2)]; + console.putmsg(hl + col + c); } line++; } } console.gotoxy(1,24); - console.putmsg("\1nTotal: " + totalcount + " Generation: " + generation); + console.putmsg("\1y\1h[\1n\1ySpace\1h]\1n\1y Toggle Pause \1h[\1n\1yEscape\1h]\1n\1y Quit \1h--- \1n\1yTotal Live Cells: " + totalcount + " Generation: " + generation); } function Evolve() { @@ -247,6 +337,7 @@ function Cells() } SplashStart(); Main(); + SplashExit(); } function Log(txt) { -- GitLab