Advertisement
Zavada

Zavada's Graphics Algorithm

Dec 27th, 2016
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.35 KB | None | 0 0
  1. // Leave it to Zavada to go overboard on ;
  2. // writing a graphics program for an esolang ;
  3. // with an extremely small standard library! ;
  4. // Gif of output at: https://gfycat.com/RigidSelfreliantCottonmouth ;
  5.  
  6. //Storage of each row's ASCII char;
  7. var road = ['=',' ','+','@','+',' ','='];
  8.  
  9. //Maximum X/Y Values;
  10. const MAX_X = 48;
  11. const MAX_Y = road.len;
  12.  
  13. //4th quadrant coordinates of [car symbol];
  14. // n > MAX_X/Y or n < 0 = inverse wrapped number;
  15. var xPos = [2,30,1];
  16. var yPos = [5, 1,1];
  17.  
  18. //Controls for integer X/Y direction and speed;
  19. // >=1 : move >=1 characters up/right per tick respectively;
  20. // <=1 : move <=1 characters down/left per tick respectively;
  21. // ==0 : cease movement on that axis;
  22.  
  23. var dirX = [0,-1,1];
  24. var dirY = [1, 0,1];
  25.  
  26. //ASCII representation of each "car";
  27. var carSymbol=['y','x','#'];
  28.  
  29. //Set window title;
  30. IO.exec("TITLE Zavada\'s Graphic Drawing Algorithm");
  31.  
  32.  
  33. //Returns time as an array in HH:MM:SS format;
  34. func getTime(filename?){
  35.  
  36. var file = (filename is (what is nil)?"a.time":filename+".time");
  37.  
  38. IO.exec("echo %time%>"+file);
  39.  
  40. var time = (String::IO.read(file)).split(":");
  41. time[2] = time[2].sub('\n', "");
  42. time = toNumbers(time);
  43.  
  44. return time;
  45.  
  46. };
  47.  
  48. //Returns date as an array in MM/DD/YYYY format;
  49. func getDate(filename?){
  50.  
  51. var file = (filename is (what is nil)?"a.date":filename+".date");
  52. IO.exec("echo %date%>"+file);
  53.  
  54. var dayDate = (String::IO.read(file)).split(" ");
  55.  
  56. var date = dayDate[1].split("/");
  57.  
  58. date[2] = date[2].head(4);
  59. date = toNumbers(date);
  60.  
  61. return date;
  62.  
  63. };
  64.  
  65. //Converts an array of Strings to an array of Numbers;
  66. func toNumbers(arr){
  67.  
  68. for(var i = 0; i < arr.len; i+=1){
  69.  
  70. arr[i] = Number::arr[i];
  71.  
  72. }
  73.  
  74. };
  75.  
  76. //Calculates seconds since January 1st, 1970;
  77. func timeSinceEpoch(){
  78.  
  79. var time = getTime();
  80.  
  81. var date = getDate();
  82.  
  83. return (date[0]-1) * 2629800 + date[1] * 86400 + (date[2] - 1970) * 31557600
  84. + time[0] * 3600 + time[1] * 60 + time[2];
  85.  
  86. };
  87.  
  88. //Prints out a frame of animation;
  89. func drawRoad(){
  90.  
  91. var str = "\n"*256;
  92. for(var i = 0; i < MAX_Y; i += 1){
  93.  
  94. for(var j = 0; j < MAX_X; j += 1){
  95.  
  96. for(var k = 0; k < xPos.len; k+=1){
  97.  
  98. if(xPos[k] == j && yPos[k] == i){
  99. str += carSymbol[k];
  100. }else{
  101. str += road[i];
  102. }
  103.  
  104. }
  105.  
  106. }
  107. str += "\n";
  108.  
  109. }
  110. print str;
  111.  
  112. };
  113.  
  114.  
  115. var lastTimeMoved = 0; //Last time an update on movement occurred;
  116. var lastTimeUp = 0; //Last time an update on frames occurred;
  117.  
  118. var frequency = 1; //Update rate of the program;
  119. var hertz = 1/frequency; //Never used, but may be referenced later;
  120.  
  121. //Start of infinite rendering/movement loop;
  122. for(;1;){
  123.  
  124. var currentTime = timeSinceEpoch();
  125.  
  126. if(currentTime - lastTimeMoved >= 1){
  127.  
  128. for(var i = 0; i < xPos.len; i+=1){
  129.  
  130. if(dirX[i] > 0){
  131.  
  132. xPos[i] = (xPos[i]+dirX[i] > MAX_X-1 ? 1 : xPos[i] + dirX[i]);
  133.  
  134. } else if(dirX[i] < 0){
  135.  
  136. xPos[i] = (xPos[i]+dirX[i] < 0 ? MAX_X-1 : xPos[i] + dirX[i]);
  137.  
  138. };
  139.  
  140. if(dirY[i] > 0){
  141.  
  142. yPos[i] = (yPos[i]+dirY[i] > MAX_Y-1 ? 0 : yPos[i] + dirY[i]);
  143.  
  144. }else if(dirY[i] < 0){
  145.  
  146. yPos[i] = (yPos[i]+dirY[i] < 0 ? MAX_Y-1 : yPos[i] + dirY[i]);
  147.  
  148. }
  149.  
  150. }
  151.  
  152. drawRoad();
  153.  
  154. lastTimeMoved = currentTime;
  155.  
  156. };
  157.  
  158. }
  159.  
  160. print "Infinite loop terminated somehow";
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement