Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Leave it to Zavada to go overboard on ;
- // writing a graphics program for an esolang ;
- // with an extremely small standard library! ;
- // Gif of output at: https://gfycat.com/RigidSelfreliantCottonmouth ;
- //Storage of each row's ASCII char;
- var road = ['=',' ','+','@','+',' ','='];
- //Maximum X/Y Values;
- const MAX_X = 48;
- const MAX_Y = road.len;
- //4th quadrant coordinates of [car symbol];
- // n > MAX_X/Y or n < 0 = inverse wrapped number;
- var xPos = [2,30,1];
- var yPos = [5, 1,1];
- //Controls for integer X/Y direction and speed;
- // >=1 : move >=1 characters up/right per tick respectively;
- // <=1 : move <=1 characters down/left per tick respectively;
- // ==0 : cease movement on that axis;
- var dirX = [0,-1,1];
- var dirY = [1, 0,1];
- //ASCII representation of each "car";
- var carSymbol=['y','x','#'];
- //Set window title;
- IO.exec("TITLE Zavada\'s Graphic Drawing Algorithm");
- //Returns time as an array in HH:MM:SS format;
- func getTime(filename?){
- var file = (filename is (what is nil)?"a.time":filename+".time");
- IO.exec("echo %time%>"+file);
- var time = (String::IO.read(file)).split(":");
- time[2] = time[2].sub('\n', "");
- time = toNumbers(time);
- return time;
- };
- //Returns date as an array in MM/DD/YYYY format;
- func getDate(filename?){
- var file = (filename is (what is nil)?"a.date":filename+".date");
- IO.exec("echo %date%>"+file);
- var dayDate = (String::IO.read(file)).split(" ");
- var date = dayDate[1].split("/");
- date[2] = date[2].head(4);
- date = toNumbers(date);
- return date;
- };
- //Converts an array of Strings to an array of Numbers;
- func toNumbers(arr){
- for(var i = 0; i < arr.len; i+=1){
- arr[i] = Number::arr[i];
- }
- };
- //Calculates seconds since January 1st, 1970;
- func timeSinceEpoch(){
- var time = getTime();
- var date = getDate();
- return (date[0]-1) * 2629800 + date[1] * 86400 + (date[2] - 1970) * 31557600
- + time[0] * 3600 + time[1] * 60 + time[2];
- };
- //Prints out a frame of animation;
- func drawRoad(){
- var str = "\n"*256;
- for(var i = 0; i < MAX_Y; i += 1){
- for(var j = 0; j < MAX_X; j += 1){
- for(var k = 0; k < xPos.len; k+=1){
- if(xPos[k] == j && yPos[k] == i){
- str += carSymbol[k];
- }else{
- str += road[i];
- }
- }
- }
- str += "\n";
- }
- print str;
- };
- var lastTimeMoved = 0; //Last time an update on movement occurred;
- var lastTimeUp = 0; //Last time an update on frames occurred;
- var frequency = 1; //Update rate of the program;
- var hertz = 1/frequency; //Never used, but may be referenced later;
- //Start of infinite rendering/movement loop;
- for(;1;){
- var currentTime = timeSinceEpoch();
- if(currentTime - lastTimeMoved >= 1){
- for(var i = 0; i < xPos.len; i+=1){
- if(dirX[i] > 0){
- xPos[i] = (xPos[i]+dirX[i] > MAX_X-1 ? 1 : xPos[i] + dirX[i]);
- } else if(dirX[i] < 0){
- xPos[i] = (xPos[i]+dirX[i] < 0 ? MAX_X-1 : xPos[i] + dirX[i]);
- };
- if(dirY[i] > 0){
- yPos[i] = (yPos[i]+dirY[i] > MAX_Y-1 ? 0 : yPos[i] + dirY[i]);
- }else if(dirY[i] < 0){
- yPos[i] = (yPos[i]+dirY[i] < 0 ? MAX_Y-1 : yPos[i] + dirY[i]);
- }
- }
- drawRoad();
- lastTimeMoved = currentTime;
- };
- }
- print "Infinite loop terminated somehow";
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement