এএসসিআইআই-আর্টে একটি তারাটির বিস্ফোরণটি প্রদর্শন করুন


12

লক্ষ্যটি হ'ল ASCII শিল্পে বিস্ফোরিত একটি তারাকে প্রাণবন্ত করা, একক তারা চরিত্র থেকে শুরু করে *সুপারনোভা এবং অবশেষে স্পেস শূন্যে।

বিধি:

  • আপনাকে 24 লাইনে প্রতি লাইনে কেবলমাত্র 80 টি অক্ষর প্রদর্শন করতে হবে (এটি লিনাক্সে ডিফল্ট টার্মিনাল আকার)
  • এএসসিআইআইয়ের কেবল এই 95 টি মুদ্রণযোগ্য অক্ষর অনুমোদিত
  • পদক্ষেপ:
    1. প্রাথমিক তারা অবশ্যই *অনুভূমিক এবং উল্লম্বভাবে কেন্দ্রিক হওয়া উচিত
    2. তারাটি বিস্ফোরিত হয় তা দেখানোর জন্য তারার বাড়তে হবে
    3. শেষে পর্দাটি খালি থাকতে হবে (তারাটি অদৃশ্য হয়ে গেছে)
  • কোড বা ভাষাগুলির দৈর্ঘ্য অপ্রাসঙ্গিক
  • ভোটগুলি সর্বাধিক সৃজনশীল এবং সুন্দর ফলাফলের সিদ্ধান্ত নেবে। আপনি কি কখনও বিস্ফোরিত তারা দেখেছেন? আসুন দেখুন আপনি কীভাবে এটি কল্পনা করেন।

আমি উদাহরণ হিসাবে পাইথন ব্যবহার করে একটি উত্তর যুক্ত করেছি, তবে আপনাকে আলাদা বা আরও ভাল কিছু তৈরি করতে উত্সাহ দেওয়া হয়েছে।

অংশ নিতে আপনার এক সপ্তাহ আছে, বিজয়ী 2014-04-01 এ নির্বাচিত হবে।

আউটপুট উদাহরণ (শুধুমাত্র কিছু ফ্রেম সহ):

# start





                                        *





# during explosion

                                    ****#****
                                 ***#@##*#@#****
                               *@**@@@*##**#*#**#*
                              **@@*#**#@*#@****#***
                              ****@*@***#****@**@@*
                             *******@***@@***#****#*
                              *#***#*##@****##@@@**
                              **#@###****@*********
                               *****@**@*@*****@**
                                 ************@**
                                    ****#****


# star is expanding

                                        *                                       
                               ********* **@******
                           ****   **#**@ #**#*#   ****
                         ***  **  **##** *@@*@*  **  ***
                       **  *  @@   *@*#* ***@*   *#  *  **
                     *** #  *  *#  *@#** ***@*  **  @  * *@*
                    ** *  * ** *@  ****@ @****  ** #* *  * **
                   ** * @* * ** *@  #### *#**  ** ** * @* * **
                  *# * # ** * #* *  **** ****  @ ** * ** * * #*
                 ** * *# * @ * #  @  @*@ *#*  *  @ # # * @* * **
                 *# * * * * # * @* * **# *#* * ** * * * * * # **
                 ** # * * @ * * # * # ** @* * * * * * # @ @ * **
                *# * * * * * * * * # * * * * * * @ @ * * * * * **
                 *# * @ * @ * @ * * * ** *@ * * # * * * * * @ @*
                 *# # @ * * # * *@ * *** @#@ @ ** * @ @ * * # **
                 *# * ** * * * @  @  **@ ***  *  @ * * * @* * #*
                  ** * * ** * #@ *  #*** **##  * #* * #@ * * @*
                   *# * *@ * @@ *#  **** @***  ** ** * #* * #*
                    *# *  * *@ **  @**@* *@#**  ** ** *  * @*
                     *#* @  *  @@  **##* ****@  **  #  * @**
                       **  @  #*   @*@#* @*@*#   @#  *  **
                         *#*  @*  @#*@*# **#*@#  **  ***
                           ****   *##**# #***@*   @***
                               ****@**@* *****@***

# star is disappearing

               *  -  -  --  --   ------- -------   --  --  -  -  *
             ** -  -  -  --  --   ------ ------   --  --  -  -  - **
            * -- - -- -- --  --   ------ ------   --  -- -- -- - -- *
          ** - -  - -- -- --  --  ------ ------  --  -- -- -- -  - - **
         *  - - -- - -- -  -  --   ----- -----   --  -  - -- - -- - -  *
        ** - - - -- - -- -  -  --  ----- -----  --  -  - -- - -- - - - **
        * - - - -  - - -  - -- --  ----- -----  -- -- -  - - -  - - - - *
       * - - - -  - - - -- - -- --  ---- ----  -- -- - -- - - -  - - - - *
      * -- - - - - - - - -- - -- -  ---- ----  - -- - -- - - - - - - - -- *
      * - - - - - - - -- - - - -  -  --- ---  -  - - - - -- - - - - - - - *
      * - - - - - - - - - - - - -- - --- --- - -- - - - - - - - - - - - - *
      * - - - - - - - - - - - - - - - -- -- - - - - - - - - - - - - - - - *
     * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *
      * - - - - - - - - - - - - - - - -- -- - - - - - - - - - - - - - - - *
      * - - - - - - - - - - - - -- - --- --- - -- - - - - - - - - - - - - *
      * - - - - - - - -- - - - -  -  --- ---  -  - - - - -- - - - - - - - *
      * -- - - - - - - - -- - -- -  ---- ----  - -- - -- - - - - - - - -- *
       * - - - -  - - - -- - -- --  ---- ----  -- -- - -- - - -  - - - - *
        * - - - -  - - -  - -- --  ----- -----  -- -- -  - - -  - - - - *
        ** - - - -- - -- -  -  --  ----- -----  --  -  - -- - -- - - - **
         *  - - -- - -- -  -  --   ----- -----   --  -  - -- - -- - -  *
          ** - -  - -- -- --  --  ------ ------  --  -- -- -- -  - - **
            * -- - -- -- --  --   ------ ------   --  -- -- -- - -- *
             ** -  -  -  --  --   ------ ------   --  --  -  -  - **

# the star is gone
















(there is nothing)

আউটপুট এর অ্যানিমেটেড উদাহরণ:

বিস্ফোরিত তারা

আপনি যদি কিছু অনুপ্রেরণা চান তবে আপনি 1988 সালের ক্যাপ্টেন ব্লাডের একটি বিস্ফোরণ দেখতে পারেন at


1
উত্তরটি " সঠিক " কিনা তা নির্ধারণ করার জন্য এখানে আসলেই কোনও অনুমান নেই ।
পিটার টেলর

আমি শব্দ সরানোর করছি সঠিক প্রশ্ন থেকে। সর্বাধিক জনপ্রিয় উত্তরটি বিজয়ী হিসাবে ঘোষণা করা হবে।
এএল

1
শব্দটি প্রশ্নে রয়েছে বা না, সমস্ত প্রশ্নের একটি স্পষ্ট স্পেস থাকা উচিত যার বিরুদ্ধে উত্তরগুলি পরিমাপ করা যায়।
পিটার টেলর

1
"আউটপুট উদাহরণগুলির মতো দেখতে এমন কিছু প্রদর্শন করা, তবে যথেষ্ট সৃজনশীল এবং শৈল্পিক হতে অনুভব করুন"? আমি আরও নিয়ম যুক্ত করতে পারি (সময়, ফ্রেমের সংখ্যা, আকার, ইত্যাদি) তবে আমি নিশ্চিত যে এটি এটিকে কম আকর্ষণীয় করে তুলবে।
এএল

যদি বিধিগুলি যথেষ্ট পরিষ্কার না হয় এবং আমি কীভাবে সেগুলি উন্নত করতে পারি তা দয়া করে ব্যাখ্যা করুন।
AL

উত্তর:


27

সি + অভিশাপ

এএসসিআইআই বিস্ফোরণ

উত্স কোডটি পরিপাটি করার জন্য আমি খুব একটা চেষ্টা করি নি। মূলত এটি একটি প্রসারিত শক ওয়েভ গণনা করে, শক্তিশালী ব্যাকগ্রাউন্ডের সাথে প্রথম কয়েকটি ফ্রেমে এক ধরণের ফ্ল্যাশ এফেক্ট দেয়। [[সম্পাদনা করুন: বিস্ফোরণটি একটি একক নক্ষত্র থেকে দেখাতে কিছুটা অদ্ভুত লাগছিল, তাই আমি অ্যানিমেশনের শুরুতে কয়েকটি ফ্রেমের সম্প্রসারণ যুক্ত করেছি]]

এলোমেলো কণাগুলি এগুলির উপরে সুপারম্পোজ করা হয়, এটির সাথে সামান্য 3 ডি অনুভূতি দেওয়ার জন্য একটি মৌলিক দৃষ্টিকোণ গণনা অনুযায়ী অবস্থানগুলি নির্ধারিত হয়। (ওয়েল, এটি যাইহোক, ধারণা ছিল।)

#include <curses.h>
#include <stdlib.h>
#include <math.h>

#define NUM_FRAMES 150
#define NUM_BLOBS 800
#define PERSPECTIVE 50.0

typedef struct {
  double x,y,z;
} spaceblob;

double prng() {
  static long long s=1;
  s = s * 1488248101 + 981577151;
  return ((s % 65536) - 32768) / 32768.0;
}

int main() {
  char *frames[NUM_FRAMES], *p;
  int i,j,x,y,z,v,rows,cols,ith,i0;
  int maxx,minx,maxy,miny,delay=1E6;
  double bx,by,bz,br,r,th,t;
  spaceblob *blobs;

  /* Initialize ncurses and get window dimensions */
  initscr();
  getmaxyx(stdscr,rows,cols);
  minx = -cols / 2;
  maxx = cols+minx-1;
  miny = -rows / 2;
  maxy = rows+miny-1;

  /* Generate random blob coordinates */
  blobs = malloc(NUM_BLOBS * sizeof(spaceblob));
  for (i=0; i<NUM_BLOBS; i++) {
    bx = prng();
    by = prng();
    bz = prng();
    br = sqrt(bx*bx + by*by + bz*bz);
    blobs[i].x = (bx / br) * (1.3 + 0.2 * prng());
    blobs[i].y = (0.5 * by / br) * (1.3 + 0.2 * prng());;
    blobs[i].z = (bz / br) * (1.3 + 0.2 * prng());;
  }

  /* Generate animation frames */
  for (i=0; i<NUM_FRAMES; i++) {
    t = (1. * i) / NUM_FRAMES;
    p = frames[i] = malloc(cols * rows + 1);
    for (y=miny; y<=maxy; y++) {
      for (x=minx; x<=maxx; x++) {

        /* Show a single '*' in first frame */
        if (i==0) {
          *p++ = (x==0 && y==0) ? '*' : ' ';
          continue;
        }

        /* Show expanding star in next 7 frames */
        if (i<8) {
          r = sqrt(x*x + 4*y*y);
          *p++ = (r < i*2) ? '@' : ' ';
          continue;
        }

        /* Otherwise show blast wave */
        r = sqrt(x*x + 4*y*y) * (0.5 + (prng()/3.0)*cos(16.*atan2(y*2.+0.01,x+0.01))*.3);
        ith = 32 + th * 32. * M_1_PI;
        v = i - r - 7;
        if (v<0) *p++ = (i<19)?"%@W#H=+~-:."[i-8]:' '; /* initial flash */
        else if (v<20) *p++ = " .:!HIOMW#%$&@08O=+-"[v];
        else *p++=' ';
      }
    }

    /* Add blobs with perspective effect */
    if (i>6) {
      i0 = i-6;
      for (j=0; j<NUM_BLOBS; j++) {
        bx = blobs[j].x * i0;
        by = blobs[j].y * i0;
        bz = blobs[j].z * i0;
        if (bz<5-PERSPECTIVE || bz>PERSPECTIVE) continue;
        x = cols / 2 + bx * PERSPECTIVE / (bz+PERSPECTIVE);
        y = rows / 2 + by * PERSPECTIVE / (bz+PERSPECTIVE);
        if (x>=0 && x<cols && y>=0 && y<rows)
          frames[i][x+y*cols] = (bz>40) ? '.' : (bz>-20) ? 'o' : '@';
      }
    }

    /* Terminate the text string for this frame */
    *p = '\0';
  }

  /* Now play back the frames in sequence */
  curs_set(0); /* hide text cursor (supposedly) */
  for (i=0; i<NUM_FRAMES; i++) {
    erase();
    mvaddstr(0,0,frames[i]);
    refresh();
    usleep(delay);
    delay=33333; /* Change to 30fps after first frame */
  }
  curs_set(1); /* unhide cursor */
  endwin(); /* Exit ncurses */
  return 0;
}

1
ওটা সুন্দর! আপনি দয়া করে ব্যাখ্যা করতে পারেন আপনি কীভাবে টার্মিনাল চিত্রগুলি ক্যাপচার করেছিলেন? আমি মনে করি আপনি যখন টাইপ করছেন তখন অংশটি হ্রাস করা উচিত, যদি আপনি দর্শককে জ্বালাতন করার জন্য এটি যোগ না করেন।
AL

1
@ n.1 আপনি ঠিক বলেছেন - এটি কিছুটা টানছিল। আমি স্ক্রিনটি ক্যাপচার করতে IShowU ব্যবহার করি এবং একটি অ্যানিমেটেড জিআইএফ তৈরি করতে কুইটটাইম থেকে ইমেজম্যাগিকের ফ্রেমগুলি রফতানি করি এবং তারপরে জিআইএফ অ্যানিমেশনটিকে অনুকূলিত করতে জিফসিকল ব্যবহার করি। সত্যিই এটি কিছুটা প্যালাভার। আপনি যদি আরও ভাল পদ্ধতি খুঁজে পান তবে আমাকে জানান।
r3mainer

7

জাভাস্ক্রিপ্ট

ভেবেছিলাম এটি জেএসে শট করার উপযুক্ত। সংরক্ষণ এবং চলমান পরামর্শ; আপনি কনসোলে পেস্ট করলে খুব খুব ধীর হয়।

var boomboom = (function() {
    //Clear any existing page
    document.getElementsByTagName("body")[0].innerHTML="";

    var space=document.createElement("div");
    var iterator=0;
    var stars = 50;
    var timer=100;

    //Set container
    space.setAttribute("id","space");
    space.setAttribute("style","width:1000px;height:600px;margin:auto;border:solid 1px #000;position:relative;overflow:hidden;background:#000;color:#fff");
    document.getElementsByTagName("body")[0].appendChild(space);

    //Set interval and draw...
    var interval = setInterval(function(){ drawStars(iterator,stars); }, timer);
    drawStars(iterator, stars);

    function drawStars(r,c) {
        clearInterval(interval);

        //a container for this set of stars
        var starContainer=document.createElement("div");

        //don't draw more if there are too many, it's got to go
        if(iterator < 1000) {
            for(var i = 0; i < c; i++) {
                var x,y;

                if(iterator < 100) {
                    x=500 + r * Math.cos(2 * Math.PI * i / c) * 0.7;
                    y=300 + r * Math.sin(2 * Math.PI * i / c) * 0.7;
                }

                //add some randomness for the boom boom
                if(iterator > 100) { 
                    x=500 + r * Math.cos(2 * Math.PI * i / c) * 0.7*Math.random();
                    y=300 + r * Math.sin(2 * Math.PI * i / c) * 0.7*Math.random();
                }

                //Make a star
                var star=document.createElement("div");
                star.setAttribute("class","star");

                //Exploding stars are red, I hope
                var color = iterator < 100 ? "color:#fff" : "color:rgb("+parseInt(255*Math.random())+",0,0)";
                star.setAttribute("style","position:absolute; left:"+ x +"px;top:"+ y +"px;"+color);

                //Change the star character as boom boom gets bigger
                if(iterator <= 200) {
                    star.innerText="*";
                }
                else if(iterator >=200 & iterator <= 400) {
                    star.innerText="O";
                }
                else  {
                    star.innerText="-";
                }
                //Add the star to its container
                starContainer.appendChild(star);
            }
        }
        //draw the container
        space.appendChild(starContainer);

        //increment the iterator.  It's an iterator because we're using intervals and it's late.
        iterator+=5;

        //remove stars when we get too many
        if(iterator > 200) {
            space.removeChild(space.firstChild);
        }
        if(iterator < 1500) { //do it all again
            timer = timer > 10 ? timer-10 : timer;
            interval=setInterval(function(){ drawStars(iterator,stars); }, timer);
        }

        //make sure it's actually empty
        else {
            space.innerHTML="";
        }
    }
}());

জেএসবিনে সম্পাদনাগুলি : http://jsbin.com/worofeqi/5/watch?js, আউটপুট

জেএসবিনের চেয়ে স্থানীয় ফাইল সিস্টেম থেকে সম্পন্ন করার সময় অদ্ভুতভাবে অনেক সহজেই চলে। সত্য কেন নিশ্চিত নয়; এই সন্ধ্যায় তাকান পারে।


আপনি কি দয়া করে এটি jsfiddle, jsbin বা অন্য কোনও ওয়েবসাইটে রেখে দিতে পারেন যেখানে আমরা সহজেই দেখতে পাই? প্রশ্ন যুক্ত করার সময় আমি কেবলমাত্র টার্মিনালে ফলাফল প্রদর্শন করার কথা ভেবেছিলাম কিন্তু এখনই আপনি নিজের উত্তরটি যুক্ত করেছেন এমন নিয়মগুলি আপডেট করব না, আমার আগে এই নিয়মটি যুক্ত করা উচিত ছিল।
AL

উত্তর আপডেট হয়েছে (দ্রষ্টব্য (খুব অদ্ভুত) ক্যাভিয়েট)
ডেভ ফোবার

1

পাইথন

#!/usr/bin/python

import sys, math, time, random

def distance(x, y):
    # ((y - y_center) * 2) -> correct ratio for a true circle
    return math.ceil(math.sqrt(((x - 40) ** 2) + (((y - 12) * 2) ** 2)))

def star(radiuses):
    for r in radiuses:
        #~ clear screen: http://stackoverflow.com/a/2084521/2257664
        print chr(27) + "[2J"

        # width
        for y in range(24):
            # height
            for x in range(80):
                d = distance(x, y)

                #~ border
                if (d == r):
                    sys.stdout.write('*')
                #~ inside the star
                elif (d < r):
                    if (r > 35):
                        sys.stdout.write(' ')
                    elif (r > 25) and ((d % 2) != 0):
                        sys.stdout.write('-')
                    elif (r > 15) and ((d % 2) == 0):
                        sys.stdout.write(' ')
                    else :
                        sys.stdout.write(random.choice('****#@'))
                #~ space outside the star
                else:
                    sys.stdout.write(' ')
            print
        time.sleep(0.1)

star(range(0, 12) + range(10, 0, -1) + range(0, 50))

উদাহরণ আউটপুট (কম পদক্ষেপ ব্যবহার করে এবং স্ক্রিন সাফ না করে)।

ফলাফলের অংশগুলিও প্রশ্নটিতে প্রদর্শিত হয়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.