플래 피 버드 클론 :)


24

모두가 그 바보 같은 "Flappy Bird"게임이 제거되는 것에 대해 깜짝 놀랐습니다. 그래서 당신의 임무는 Flappy Bird Clone 게임을 만드는 것입니다. 정말 간단합니다. 가이드 라인은 다음과 같습니다.

  • 아스키 아트 또는 실제 이미지를 사용할 수 있습니다
  • 클릭 또는 키 누름으로 "새"플랩을 만들 수 있습니다
  • 태그 는 가능한 짧아야합니다 .

예를 들면 다음과 같습니다. http://www.reddit.com/r/learnprogramming/comments/1xiimx/i_couldnt_sleep_so_i_cloned_your_flappy_bird/

"Flappy Bird Clone"이 되려면 게임에 다음이 있어야합니다.

  • 새 또는 다른 캐릭터
  • 키를 누르거나 클릭 / 탭하면 "새"가 약간 위로 움직입니다.
  • 클릭 / 탭핑 등이 없으면 "새"가 빠르게 아래로 이동해야합니다.
  • 파이프 나 다른 장애물은 화면에서 왼쪽으로 움직여서 새가 움직이는 환상을 만들어야합니다
  • 파이프는 새가 날아갈 수 있도록 작은 간격을 가져야합니다.
  • 파이프 사이의 틈새를 통과 할 때마다 점수가 1 씩 증가합니다.
  • 파이프 나지면을 치면 게임이 종료되고 점수가 표시됩니다.

실제로 "새"나 "파이프"일 필요는 없으며 모두 아스키 일 수 있습니다. 플래 피 버드 스크린의 아주 작은 예는 다음과 같습니다.

/ ----- [4] ----- \
| || || |
| || ¯¯ |
| || O> |
| ¯¯ __ |
| __ || |
| || || |
\ ------------- /

2
질문은 이상적으로 독립적이어야하며, 적어도 넓은 브러시 사양을 포함해야합니다.
피터 테일러

3
유효한 제출로 간주되는 것에 대해 너무 많은 주관성이있는 것으로 보입니다
Cruncher

2
그곳에. "
플래 피

나는 몇 주 전에 이것을했다. 어쩌면 내가 시간을 가졌을
Shmiddty

1
나는 정말 정말 아스키 아트 버전을보고 싶다!
로비 Wxyz

답변:


14

자바 스크립트 + jQuery (ASCII Art)- 571 524 491

Dev Tools (F12)를 열고이 페이지 에서 다음 코드를 실행하여 (지금 바로 진행하십시오!) 아래 데모를 작동 시키십시오.

l=$('#answer-23452 blockquote pre').click(function(){m=1}),o=[],d=0,e=4,m=1;setInterval(function(){t=Array(153);s=~~(d/10-0.99);d++;d%10?0:o[d+20]=~~(Math.random()*5)+1;for(i=-1;k=o[i+d],i<17;i++)if(k--)for(j=-1;c=j==k||j-k==4?'-':j-k>0&&j-k<4?0:'|',j<9;j++)i>-1?t[j*17+i]=c:0,i<16?t[j*17+i+1]=c:0;m-=.2;e-=m;if(e<0||e>10||t[~~e*17+8])e=4,m=1,d=0,o=[];t[~~e*17+8]='>';r='|-------['+s+']-------';for(i=0;z=t[i]||' ',i<153;i++)i%17?r+=z:r+='|\n|'+z;r+='|\n|-----------------|';l.html(r);},150)

데모 (작동하게) :

|-------[5]-------|
|    ||        -- |
|    ||           |
|    ||           |
|    --           |
|              -- |
|              || |
|              || |
|    --  >     || |
|    ||        || |
|-----------------|

알려진 사소한 버그 :

  • 두 자리 수의 점수를 받으면 레이아웃이 엉망이됩니다.

  • 쉽지 않다!!! (그러나 원본도 그렇지 않았습니다)

  • 효율성과 골프 사이에는 상충 관계가 있습니다

당신의 최고 점수로 의견을 주시기 바랍니다.

또한 이것은 나의 첫 번째 코드 골프 게시물이므로 압축 등에 대한 제안은 환영받을 것입니다.


1
var키워드 및 변수 선언을 제거 할 수 있습니다 . 또한 대체 할 수 있습니다 Array(153)에 의해 []아마 대체 할 수 있습니다 ~~(Math.random()*5)+1에 의해1+new Date%5
마이클 M.

레이아웃을 무시하고 jQuery를 건너 뛰고 HTML을 추가하면 416 바이트입니다. jsbin.com/flap/1/edit?html,output
aemkei

17 점. 나는 삶이 없다.
ibrahim mahrir

Known_minor_bugs += "irritating, unwanted and distracting text selections when double clicking";
ibrahim mahrir

22

자바 스크립트 + jQuery (997)

Chrome 32, Firefox 27, IE9에서 테스트되었습니다.

페이지 에서 콘솔 (F12)을 열고 다음 코드를 복사 / 붙여 넣기하십시오.

scroll(0,0);h=1/30;p=[];r=320;n=0;w=80;f=2.5;o=80;t=setInterval;$('#question').children().hide().end().append('<p id="m"></p>').append('<p id="s"></p>').click(function(){v=100});$('#s').css({position:'relative',margin:'auto',border:'2px solid',width:200,height:r}).append('<img id="b" src="//i.imgur.com/4w6Vgud.gif"/>');$('<style>.p{width:1px;border:1px solid;position:absolute}</style>').appendTo('head');function u(){$('#m').text('score '+m+' (max '+n+')')}function i(){x=r/2;v=0;m=0;p.length=0;u()}i();t("v-=h*100;x+=h*v;if(x<0||x>r)i();$('.p').remove();for(j=0;j<p.length;j++){p[j].r+=h*w;if(p[j].r>200){p.shift();j--;m++;if(m>n)n=m;u();}else if((p[j].r>165&&p[j].r<185)&&(x<p[j].h||x>p[j].h+o))i();else{$('<div class=p></div>').appendTo('#s').css({bottom:0,right:p[j].r,height:p[j].h});$('<div class=p></div>').appendTo('#s').css({bottom:p[j].h+o,right:p[j].r,height:320-p[j].h-o})}}$('#b').css({position:'absolute',left:0,bottom:x-25})",h*1e3);t("p.push({h:Math.random()*(r-o),r:0})",f*1e3)

여기에 이미지 설명을 입력하십시오
게임은이 페이지의 질문 블록을 대체합니다.
새를 날리려면 게임 프레임을 클릭해야합니다.

Ungolfed 및 댓글 버전 :

$('#question').children().hide();
$('#question').append('<div id="score"></div>');
$('#question').append('<div id="scene"></div>');
$('#scene').css({position:'relative',margin:'auto',border:'2px solid black',width:'200',height:'320'});
$('#scene').append('<img id="bird" src="http://fc01.deviantart.net/fs71/f/2014/037/d/0/pixel_art___flappy_bird_by_hipsterli-d75dkyr.gif"></img>');
$('#bird').css({display:'block',position:'absolute',left:0,'pointer-events':'none',margin:'0 auto'});
$(window).scrollTop(0);

//CONFIGURATION
var dt=1/30,      //delta timestep (typically 30Hz)
    pipevel=80,   //pipe velocity (in pixels per second)
    pipefreq=2.5, //pipe spawn frequency (in second)
    holesize=80,  //hole size (in pixels)
    gravity=-100, //gravity (in pixels per square second)
    punchvel=100; //velocity punch when clicked (in pixels per second)

var x, y, pipes=[], roof=$('#scene').height(), score, maxscore=0;

function updateScore() {
  $('#score').text('Score : '+score+' (max : '+maxscore+')');
}

function init() {
  x=roof/2; //position
  v=0; //velocity
  score=0;
  pipes.length=0;

  updateScore();
}

function step() {
  //euler integration
  v+=dt*gravity;
  x+=dt*v;

  if (x<0 || x>roof)  init();

  //pipes
  $('.pipe').remove();
  for (i=0; i<pipes.length; i++) {
    pipes[i].rightpos += dt*pipevel;
    if (pipes[i].rightpos > 200) {
      pipes.shift();
      i--;
      score++;
      if (score>maxscore) maxscore=score;
      updateScore();
    } else if ((pipes[i].rightpos > 165 && pipes[i].rightpos < 185) && (x < pipes[i].holepos || x > pipes[i].holepos+holesize)) {
      //collision
      init();
    } else {
      $('#scene').append('<div class="pipe" style="background-color:#000; width:1px;border:1px solid #000; position:absolute; bottom:0; right:'+Math.floor(pipes[i].rightpos)+'px; height:'+pipes[i].holepos+'px"></div>');
      $('#scene').append('<div class="pipe" style="background-color:#000; width:1px;border:1px solid #000; position:absolute; bottom:'+(pipes[i].holepos+holesize)+'; right:'+Math.floor(pipes[i].rightpos)+'px; height:'+(320-(pipes[i].holepos+holesize))+'px"></div>');
    }
  }

  $('#bird').css({bottom:Math.floor(x)-25});

  setTimeout(step, dt*1000);
}

$('#question').click(function() {
  v=punchvel;
});

function addPipe() {
  pipes.push({holepos:Math.random()*(roof-holesize),rightpos:0});
  setTimeout(addPipe, pipefreq*1000);
}

init();
setTimeout(step, dt*1000);
setTimeout(addPipe, pipefreq*1000);

구성 (중력, 파이프 속도 ...)을 쉽게 수정하고 주석이 달린 버전을 볼 수 있습니다.


1
Firefox 27에서도 잘 작동합니다.
Karl-Johan Sjögren

고마워, IE9에서도 작동하므로 괜찮은 브라우저에서 작동하는 것 같습니다 :)
Michael M.

P : :) 여기에 대상으로 질문을 악용하는 자바 스크립트 평소와 같은 좋은 작품
masterX244

1
현재 제어 방식을 사용하면 실수로 잘못 클릭하기가 너무 쉬워 다음 홀에 도달하기에 충분히 떨어질 수 없습니다 (그리고 그것에 대해 아무것도 할 수 없음).
Joe Z.

1
내가 말하는 것은 중간 어딘가에서 잘못 클릭 하기너무 쉽고 , 펀치가 이미 내려간 속도에 관계없이 항상 동일한 초기 속도로 설정하기 때문에 클릭하기가 너무 어렵다는 것입니다.
Joe Z.

5

플로피 드래곤, 자바 스크립트, 1024b

현재 js1k compo ( http://js1k.com )를 위해이 게임을 만들고 있습니다.

플레이 : http://js1k.com/2014-dragons/demo/1704

_='c.scale(,    ;ontouchH=onmousedown=onkeydowif(e){    }else h=45,d=1};(Eq";Rect(0,0,^,^9Q"-k,0Q+N),0()-k,2E3980-(+3)N(+3)),Y(p="fEFf&{{~_=,;=vviJ.jfVi/.OoyizyhkhEwf74)\\n$fwwuvtU`"+(10<h?"iZ[*)yj:*im**y|Ktdww54#5Dy\\iz[Kzi[Jiijk[e@1!":"zl]LfU{\\lKtBUh{zzU66iigig5\\n&iiyz{vfwwiyDfwiiE"0"v=i-e,w=(j-=h)-eG in p)y=8>>4),z=16&15),Iv+=e?y:z,w+=e?-z:y(dW(h-=6dW!eW(k+=Q,^<kW(k-=^)!dXeX(k+280)%8X(f++,Q<lWl--if(q>jX9q<jX!((k+3)%8)W(j<qXj>2q))e=40;fff";c.font="6em Arial";dWf1,5dX"#FloppyDragon"11,5eW"score"4,4e?"reH":d?"":"H"5,6setTimeout(n,l)})()I40*o-k,a.width/()/2-30*    d=e=f=h=0;g=[];G=0;Y>o;o++)=g[o+Y]=8*Math.random()|0;i=j=3;k=Q;l=qc.fill;c.beginPath(c.moveTo(Style="#G=2E3;o--;)o%Q?,a.height/Y1*g[Q*~~(k/8)+Q]+);g[o]-2*(p.charCodeAt(o)Text(00n=function(){4*):(,1*Gfor(oHstartIc.lineTo(N),-4,1*Q20W&&X||Y1E3^4E4q50';for(Y in $='q^YXWQNIHG    ')with(_.split($[Y]))_=join(pop());eval(_)

모든 의견과 새로운 아이디어를 환영합니다!


이것은 Flappy Bird보다 어렵습니다. 키를 눌러 플랩 동작을 실행하면 연주하기가 더 쉽지만, 이것이 코드 골프이고 더 많은 기능이 더 많은 코드를 의미한다는 것을 알고 있습니다.
danmcardle

괜찮습니다. 유용하다고 생각되면 keypress 지원을 추가 할 수 있습니다.
xem

@crazedgremlin keypress control이 최신 버전에 추가되었습니다;)
xem

시원한! 10을 넘을 수는 없지만 여전히 시원합니다.
danmcardle

2

목표 C-언 골프

아마도 내가 쓴 최악의 코드 일 것입니다.

해키 버드

바이너리를 여기에서 다운로드 할 수 있습니다 : AsciiBird 다운로드 바이너리

새를 공중에 유지하려면 컨트롤 키를 열렬히 누르십시오!

이것은 Xcode에 의해 컴파일되고 터미널에서 실행됩니다. 색상이 있습니다! 팁 : 화면 새로 고침의 백 로그가 표시되지 않도록 터미널 창의 크기를 조정하십시오.

main.m :

#import <Foundation/Foundation.h>
#import "ABManager.h"

void drawScreen(int counter)
{
    __block struct ABPoint thisPoint;
    thisPoint.x = 0;
    thisPoint.y = 0;

    __block ABManager *man = [ABManager sharedManager];
    [man.screen enumerateObjectsUsingBlock:^(NSString *c, NSUInteger idx, BOOL *stop)
     {
         NSString *c2 = c;
         NSMutableArray *newObstacles = [[NSMutableArray alloc] init];
         for (NSValue *s in man.obstacles)
         {
             struct ABPoint o;
             [s getValue:&o];

             if (thisPoint.x == o.x)
             {
                 if (thisPoint.y != o.y && thisPoint.y != (o.y + 1) && thisPoint.y != (o.y - 1))
                 {
                     c2 = @"\033[1;33m|\033[0m";
                 }
                 else
                 {
                     if (counter == 0 && thisPoint.y < o.y)
                     {
                         o.x = o.x - 1;

                         if (o.x < 0)
                         {
                             o.x = 49;
                             o.y = (arc4random() % 11) + 1;
                         }

                         if (man.charPos.x == o.x)
                         {
                             man.score = man.score + 1;
                         }
                     }
                 }
             }
             [newObstacles addObject:[NSValue valueWithBytes:&o objCType:@encode(struct ABPoint)]];
         }

         man.obstacles = [[NSMutableArray alloc] initWithArray: newObstacles];


         if (thisPoint.x == man.charPos.x && thisPoint.y == man.charPos.y)
         {
             printf("\033[1;35m>\033[0m");

             if ([c2 isEqualToString:@"\033[1;33m|\033[0m"])
             {
                 man.shouldExit = TRUE;
             }
         }
         else
         {
             printf("%s", [c2 UTF8String]);
         }

         if (idx % 50 == 49)
         {
             printf("\n");
             thisPoint.y = thisPoint.y + 1;
             thisPoint.x = 0;
         }
         else
         {
             thisPoint.x = thisPoint.x + 1;
         }
     }];
}

int main(int argc, const char * argv[])
{

    @autoreleasepool {

        ABManager *man = [ABManager sharedManager];
        int count = 0;
        BOOL ignoreKeypress = FALSE;
        while (TRUE)
        {
            if (CGEventSourceKeyState(kCGEventSourceStateCombinedSessionState,59) && !ignoreKeypress)
            {
                ignoreKeypress = TRUE;
                struct ABPoint p = man.charPos;
                p.y = p.y - 2;
                man.charPos = p;
            }
            else
            {
                ignoreKeypress = CGEventSourceKeyState(kCGEventSourceStateCombinedSessionState,59);

                if (count > 3)
                {
                    count = 0;
                    struct ABPoint p = man.charPos;
                    p.y = p.y + 1;
                    man.charPos = p;
                }
                else
                {
                    count = count + 1;
                }
            }

            if (man.charPos.y < -1 || man.charPos.y > 11 || man.shouldExit)
            {
                exit(1);
            }

            printf("\n\n\n\n\n");
            printf("\033[1;36m[\033[0m\033[1;30mHacky Bird\033[0m\033[1;36m]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\033[0m\n");
            drawScreen(count);
            printf("\033[1;32m[\033[0m\033[1;31mScore: %li\033[0m\033[1;32m]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\033[0m\n", (long)man.score);

            [NSThread sleepForTimeInterval:0.0157];
        }

    }
}

ABManager.h

#import <Foundation/Foundation.h>
#import <CoreGraphics/CoreGraphics.h>

struct ABPoint {
    NSInteger x;
    NSInteger y;
};

@interface ABManager : NSObject
{

}

@property (nonatomic, readwrite) NSMutableArray *screen;
@property (nonatomic, readwrite) NSMutableArray *obstacles;
@property (nonatomic, readwrite) struct ABPoint charPos;
@property (nonatomic, readwrite) NSInteger score;
@property (nonatomic, readwrite) BOOL shouldExit;;

+ (id)sharedManager;

@end

ABManager.m

#import "ABManager.h"

@implementation ABManager
+ (id)sharedManager {
    static ABManager *sharedMyManager = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        sharedMyManager = [[self alloc] init];
    });
    return sharedMyManager;
}

- (id)init
{
    if (self = [super init]) {

        self.screen = [[NSMutableArray alloc] init];
        for (NSUInteger i=0; i < 600; i++)
        {
            [self.screen addObject:@" "];
        }

        self.score = 0;

        self.shouldExit = FALSE;

        struct ABPoint p;
        p.x = 5;
        p.y = 0;

        self.charPos = p;

        struct ABPoint o;
        o.x = 10;
        o.y = 5;

        struct ABPoint o2;
        o2.x = 30;
        o2.y = 5;

        self.obstacles = [[NSMutableArray alloc] initWithArray:@[[NSValue valueWithBytes:&o objCType:@encode(struct ABPoint)],[NSValue valueWithBytes:&o2 objCType:@encode(struct ABPoint)]]];
    }

    return self;
}

@end

2

컬러 애니메이션과 물리학; 순수 JavaScript, 457 (335) 바이트

이 포럼의 첫 번째 게시물입니다. 이 코드를 만들고이 스레드를 소급하여 게시 할 것을 찾았습니다.
다음은 HTML로 캡슐화되어 html 파일로 복사 / 붙여 넣을 수있는 코드입니다.

<body><script>A=120;B=280;d=document;y=180;x=v=n=s=0;f=140;c=d.createElement('canvas');p=c.getContext('2d');c.width=B;c.height=400;c.onclick=()=>{v-=6};p.font='50px Arial';d.body.appendChild(c);r=(h,t,k=0,i='#0f0',w=40)=>{p.fillStyle=i;p.fillRect(h,k,w,t)};b=setInterval(()=>{if(x==0){n=f;f=Math.floor(B*Math.random());x=160}x--;v+=.1;y+=v;r(0,400,0,'#08f',B);r(20,40,y,'#fc0');r(x-40,n);r(x+A,f);r(x-40,B-n,n+A);r(x+A,B-f,f+A);if(x==60)s++;p.strokeText(s,A,80);if(x>20&&x<100&&(y<n||y>n+80)){clearInterval(b);location.reload()}},15)</script><br>Made by Thomas Kaldahl</body>

여기에는 픽셀 완벽 충돌, 정확한 2 차 물리학 및 부드러운 색상 애니메이션이 있으며 457 바이트의 순수하게 독립된 오프라인 Javascript 코드가 있으며 여기에 자세히 설명되어 있습니다.

<!--entire HTML shell is omitted in golf-->
<body>
    <script>
        //common numbers and the document are assigned shortcut letters
        A = 120;
        B = 280;
        d = document;

        y = 180; //y position of the top of the bird
        x = //x position of scrolling for pipes
        v = //vertical velocity of bird
        n = //y position of the top of the nearest pipe opening
        s = 0; //score
        f = 140; //y position of the top of the farther pipe opening
        c = d.createElement('canvas'); //canvas
        p = c.getContext('2d'); //canvas context
        //set canvas dimensions
        c.width = B;
        c.height = 400;

        c.onclick = () => { v -= 6 }; //apply jump velocity to bird when clicked
        p.font = '50px Arial'; //font for scoring (omitted in golf)
        d.body.appendChild(c); //add canvas to html page
        //draw a rectangle on the canvas
        r = (h, t, k = 0, i = '#0f0', w = 40) => {
            p.fillStyle = i;
            p.fillRect(h, k, w, t)
        };
        //main loop (not assigned to b in golf)
        b = setInterval( () => {
            if (x == 0) { //the x position is a countdown. when it hits 0:
                n = f; //the far pipe is now the near pipe, overwriting the old near pipe
                f = B * Math.random() //assign the far pipe a new vertical location
                x = 160; //restart the countdown back at 160
                //(score increments here in golf)
            }
            x--; //count down
            v += .1; // apply gravity to velocity
            y += v; // apply velocity to bird
            r(0, 400, 0, '#08f', B); //draw background
            r(20, 40, y, '#fc0'); //draw bird (non-default color is omitted in golf)
            r(x - 40, n); //draw first pipe upper half
            r(x + A, f); //draw second pipe upper half
            r(x - 40, B - n, n + A); //draw first pipe lower half
            r(x + A, B - f, f + A); //draw second pipe lower half
            if (x == 60)
                s++; //(this is done earlier on golf)
            p.strokeText(s, A, 80); //draw score
            // if the bird is in range of the pipes horizontally,
            // and is not in between the pipes,
            if (x > 20 && x < 100 && (y < n || y > n + 80)) {
                clearInterval(b); location.reload() //omit interval clear in golf
            }
        }, 15) //(reduced the frame delay to 9, a 1 digit number, in golf)
    </script><br>
    Made by Thomas Kaldahl <!-- GG -->
</body>

재미있는 그래픽을위한 1066 바이트 버전이 있습니다.

<body style='margin:0'><script>var y=180,x=v=n=s=0,f=140,c=document.createElement('canvas'),p=c.getContext('2d');c.width=280;c.height=400;c.onclick=function(){v-=6};c.style='width:68vh;height:97vh';document.body.appendChild(c);p.font="50px Arial";p.shadowColor='#444';p.shadowBlur=9;p.shadowOffsetX=p.shadowOffsetY=5;function r(h,t,k=0,i='#0f0',j='#0a0',u=0,l=0,w=40){var g=p.createLinearGradient(h,l,h+40,u);g.addColorStop(0,i);g.addColorStop(1,j);p.fillStyle=g;p.fillRect(h,k,w,t);}b=setInterval(function(){if(x==0){n=f;f=Math.floor(280*Math.random());}x=x==0?159:x-1;v+=.1;y+=v;r(0,400,0,'#08c','#0cf',280,0,280);r(20,40,y,'#ff0','#fa0',y+40,y);r(x-40,n);r(x-50,20,n-20,'#0f0','#0a0',n+20,n,60);r(x+120,f);r(x+110,20,f-20,'#0f0','#0a0',f+20,f,60);r(x-40,280-n,n+120);r(x-50,20,n+120,'#0f0','#0a0',n+140,n+100,60);r(x+120,280-f,f+120);r(x+110,20,f+120,'#0f0','#0a0',f+140,f+100,60);if(x==60){s++;}p.fillStyle='#fff';p.fillText(s,120,80);if(x>20&&x<100&&(y<n||y>n+80)||y<0||y>360){clearInterval(b);location.reload();}},15);</script><br>Made by Thomas Kaldahl</body>

또한 DEFLATE와 같은 압축 시스템을 사용하는 것이 바람을 피우고 있습니까?
아래는 DEFLATEd 버전의 ASCII85 코드입니다. 압축 된 코드의 총 개수
는 335 바이트입니다.

Gapon95_Wi'Kf'c (i ## 6'h, + cM \ JZeFO <h; $ W '# A1', RqNigBH02C '# R $ m] <i <X # 6GR`2pE <Ri5mu-n % cVPrsJe : * R ^ pnr9bI @ [DAZnPP02A ^! .. $ MN / @`U7l5gm !! Vr4> A; P? u [Pk8] jCnOP % dIu?`fWql> "tuO4 / KbIWgK; 7 / iJN'f2, hnFg8e. ^ SO * t \ *`, 3JBn6j (f`O #], M0; 5Sa35Zc @ * XaBs @ N %] k \ M76qa [.ie7n (^ * Z5G-lfhUZ3F # '%, X17Pj1u] L) LjpO6XbIl % N3tJhTsab8oV1T (? MC $ mT; 90VMmnfBNKEY (^ 'UV4c? SW': X (! 4, * WCY + f; 19eQ?`FK0I "(uDe : f & XV & ^ Rc + 'SWRIbd8Lj9bG.l (MRUc1G8HoUsn # H \ V (8"Y $ / TT ( ^ kATb (OreGfWH7uIf


이것은 훌륭하지만, 불행히도에 대한 codr 골프의 질문에 우리는 필요 golfed 코드를.
NoOneIsHere6

3
@NoOneIs 여기 에서 게시물을 읽고 골프 코드를 확인하십시오
ei2

죄송합니다. 지금 봅니다. 이것은 좋은 대답입니다.
NoOneIsHere6

2

C, 386 351 347 터미널 에뮬레이터 341 바이트 (윈도우,는 MinGW), (332)

여기에 이미지 설명을 입력하십시오

확실히 가장 예쁘지 않은 엔트리는 아니지만 플래 피 버드의 핵심 역학을 포착합니다. 새가 아래쪽으로 가속하고 키를 누르면 점프하거나 파이프 또는 화면 가장자리를 만지고 게임이 끝납니다. 점수는 클리어 파이프 수입니다.

#import<windows.h>
#define T(x)P[v*10+x]=
char P[71];X,Y,W,s;main(v){srand(time(0));for(float y=1,t=0;!(v<0|v>6|(v<Y|v>=Y+W)&X>0&X<3);Sleep(99)){y+=t=kbhit()?getch(),-.9:t+.3;--X<0?X=8,Y=rand()%3+1,W=rand()%2+2:X-1||++s;memset(P,32,70);for(v=0;v<7;T(9)10,T(X)v<Y|v++>=Y+W?35:32);v=y;T(1)79;T(2)62;system("cls");printf("%s\nSCORE: %d",P,s);}}

POSIX 터미널 에뮬레이터를 사용하는 경우 (Cmder와 같이) 333 바이트로 단축 할 수 있습니다.

#import<windows.h>
#define T(x)P[v*10+x]=
char P[71];X,Y,W,s;main(v){srand(time(0));for(float y=1,t=0;!(v<0|v>6|(v<Y|v>=Y+W)&X>0&X<3);Sleep(99)){y+=t=kbhit()?getch(),-.9:t+.3;--X<0?X=8,Y=rand()%3+1,W=rand()%2+2:X-1||++s;memset(P,32,70);for(v=0;v<7;T(9)10,T(X)v<Y|v++>=Y+W?35:32);v=y;T(1)79;T(2)62;printf("\033c%s\nSCORE: %d",P,s);}}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.