Flappy Bird nhái :)


24

Mọi người đều phát cuồng về trò chơi "Flappy Bird" ngu ngốc đó đã bị gỡ bỏ. Vì vậy, nhiệm vụ của bạn là tạo ra một trò chơi Flappy Bird Clone. Nó thực sự đơn giản. Dưới đây là các dòng hướng dẫn:

  • Nó có thể sử dụng nghệ thuật ascii hoặc hình ảnh thực
  • Bạn có thể tạo vạt "chim" của mình bằng một cú nhấp hoặc nhấn phím
  • Nó nên cố gắng càng ngắn càng tốt, do đó thẻ .

Dưới đây là một ví dụ: http://www.reddit.com/r/learnprogramming/comments/1xiimx/i_couldnt_s ngủ_so_i_clenced_your_flappy_bird /

Để trở thành "Flappy Bird Clone", trò chơi của bạn cần có những điều sau đây:

  • Một con chim, hoặc nhân vật khác
  • "Chim" sẽ di chuyển lên một chút khi nhấn phím hoặc bạn bấm / chạm
  • Nếu không có tiếng click / tap / etc, "chú chim" sẽ nhanh chóng di chuyển xuống dưới
  • Ống hoặc các chướng ngại vật khác nên di chuyển sang trái trên màn hình, tạo ra ảo ảnh rằng con chim đang di chuyển
  • Các đường ống nên có một khoảng trống nhỏ để chim bay qua.
  • Mỗi khi bạn đi qua một khoảng cách giữa các đường ống, điểm của bạn sẽ tăng thêm 1.
  • Nếu bạn chạm vào một đường ống hoặc mặt đất, trò chơi kết thúc và điểm của bạn được hiển thị.

Nó không thực sự cần phải là "chim" hay "ống", tất cả đều có thể là ascii. Đây là một ví dụ rất nhỏ về màn hình chim flappy:

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

2
Một câu hỏi lý tưởng nên được khép kín và chắc chắn nên chứa ít nhất một thông số kỹ thuật rộng.
Peter Taylor

3
Như hiện tại, dường như có quá nhiều sự chủ quan trong những gì được coi là đệ trình hợp lệ
Cruncher

2
Đó Tôi đưa ra một số hướng dẫn để tạo nên một "bản sao chim flappy"
Tacovy

Tôi đã làm điều này một vài tuần trước. Có lẽ tôi sẽ chơi nó khi tôi có chút thời gian: cwhart.co/nyanpybird
Shmiddty

1
Tôi thực sự thực sự muốn xem một phiên bản nghệ thuật ASCII!
Robbie Wxyz

Câu trả lời:


14

Javascript + jQuery (Nghệ thuật ASCII) - 571 524 491

Mở Dev Tools (F12) và chạy mã sau trong trang này (ngay bây giờ, tiếp tục!) Để thực hiện chức năng demo bên dưới.

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)

Demo (làm cho nó hoạt động):

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

Các lỗi nhỏ đã biết:

  • Nếu bạn nhận được một số điểm hai chữ số, nó sẽ làm rối bố cục

  • Nó không phải là dễ dàng!!! (nhưng bản gốc cũng không)

  • Có sự đánh đổi giữa hiệu quả và tính golf

Hãy bình luận với điểm cao của bạn.

Ngoài ra, đây là bài viết Code Golf đầu tiên của tôi, vì vậy các đề xuất về nén, v.v. sẽ được hoan nghênh


1
Bạn có thể loại bỏ vartừ khóa và khai báo biến. Bạn cũng có thể thay thế Array(153)bằng []và có thể có thể thay thế ~~(Math.random()*5)+1bằng1+new Date%5
Michael M.

Nếu bạn bỏ qua bố cục, hãy bỏ qua jQuery và thêm HTML, đó là 416 byte: jsbin.com/flap/1/edit?html,output
aemkei

Ghi bàn 17. Tôi không có sự sống, tôi biết.
ibrahim mahrir

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

22

Javascript + jQuery (997)

Đã thử nghiệm trên Chrome 32, Firefox 27, IE9

Mở Console (F12) từ này trang và sao chép / dán đoạn mã sau.

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)

nhập mô tả hình ảnh ở đây
Trò chơi thay thế khối câu hỏi của trang này.
Bạn phải bấm vào khung trò chơi để làm cho con chim bay.

Phiên bản Ungolfed và bình luận:

$('#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);

Bạn có thể dễ dàng sửa đổi cấu hình (trọng lực, vận tốc ống ...), hãy xem phiên bản nhận xét.


1
Hoạt động tốt trong Firefox 27 là tốt. Hoàn thành tốt +1
Karl-Johan Sjögren

Cảm ơn, cũng hoạt động trên IE9, vì vậy tôi đoán nó hoạt động trên mọi trình duyệt phong nha :)
Michael M.

công việc tốt :) và như thường lệ trên javascript ở đây lạm dụng câu hỏi làm mục tiêu: P
masterX244

1
Với sơ đồ điều khiển hiện tại, quá dễ dàng để vô tình bấm nhầm và sau đó không thể rơi đủ xa để đến lỗ tiếp theo (và sau đó không thể làm gì về nó).
Joe Z.

1
Điều tôi đang nói là quá dễ để bấm nhầm ở đâu đó ở giữa và cũng quá khó để nhấp đúng vì cú đấm của bạn luôn khiến bạn có cùng vận tốc ban đầu bất kể bạn đã đi xuống nhanh như thế nào.
Joe Z.

5

Rồng mềm, JavaScript, 1024b

Tôi đang tạo trò chơi này cho compo js1k hiện tại ( http://js1k.com )

Chơi: 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(_)

Tất cả thông tin phản hồi và ý tưởng mới đều được chào đón!


Điều này thậm chí còn khó hơn Flappy Bird. Sẽ dễ chơi hơn nếu bạn tạo một phím bấm kích hoạt hành động vỗ, nhưng tôi nhận ra đây là mã golf và nhiều tính năng hơn có nghĩa là nhiều mã hơn.
danmcardle

không, không sao, tôi có thể thử thêm hỗ trợ bấm phím nếu bạn nghĩ nó hữu ích ...
xem

Điều khiển nhấn phím @craenedgremlin đã được thêm vào trong phiên bản mới nhất;)
xem

Mát mẻ! Tôi không thể vượt qua 10, nhưng nó vẫn rất tuyệt.
danmcardle

2

Mục tiêu C - vô danh

Có thể là mã tồi tệ nhất mà tôi từng viết.

Hacky Bird đang chạy

Bạn có thể tải xuống tệp nhị phân tại đây: AsciiBird Tải xuống nhị phân

Chạm vào phím điều khiển điên cuồng để giữ con chim trong không khí!

Điều này được biên dịch bởi Xcode và chạy trong Terminal. Nó có màu sắc! Protip: Thay đổi kích thước cửa sổ của thiết bị đầu cuối của bạn để bạn không thấy tồn đọng các lần làm mới màn hình.

chính

#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];
        }

    }
}

Người quản lý

#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

Hoạt hình màu và Vật lý; JavaScript thuần, 457 (335) byte

Đây là bài viết đầu tiên của tôi trong diễn đàn này; Tôi đã tạo mã này và tìm lại chủ đề này để đăng nó.
Đây là mã được gói gọn trong HTML, sẵn sàng để được sao chép / dán vào tệp 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>

Nó có các va chạm hoàn hảo pixel, vật lý bậc hai chính xác và hoạt ảnh màu mượt mà, tất cả trong 457 byte mã Javascript ngoại tuyến hoàn toàn độc lập, được hiển thị ở đây chi tiết hơn và giải thích:

<!--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>

Để giải trí, đây là phiên bản 1066 byte với đồ họa fancier:

<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>

Ngoài ra, có gian lận khi sử dụng một hệ thống nén như DEFLATE không?
Dưới đây là mã ASCII85 cho phiên bản mã DEFLATEd: Nhân tiện
, nén nó có tổng số 335 byte.

Gapon95_Wi'Kf'c (i ## 6'h, + cM \ JZeFO <h; $ W '# A1', RqNigBH02C '# R $ m] <i <X # 6GR`2pE <Ri5mu-n% cVPrs R ^ pnr9bI @ [DAZnPP02A ^ !. $ MN / @ `U7l5gm !! Vr4> A; P? U [Pk8] jCnOP% dIu?` FWql> "tuO4 / KbIWgK; 7 / i t \ * `, 3JBn6j (f`O #], M0; 5Sa35Zc @ * XaBs @ N%] k \ M76qa [.ie7n (^ * Z5G-lfhUZ3F # '%, X17Pj1u] L) mT; 90VMmnfBNKEY (^ 'UV4c? SW': X (! 4, * WCY + f; 19eQ? `FK0I" (uDe: f & XV & ^ Rc + 'SWRIbd8Lj9bG.l (MRUc1G ^ kATb (OreGfWH7u If


Điều này có vẻ tuyệt vời, nhưng thật không may cho các câu hỏi codr-golf, chúng tôi yêu cầu mã golf .
NoOneIsHere

3
@NoOneIs Xin vui lòng đọc bài đăng và xem mã đánh gôn cho chính bạn
ei2

Tôi xin lỗi, tôi thấy bây giờ. Đây là một câu trả lời tuyệt vời.
NoOneIsHere

2

C, 386 351 347 341 byte (Windows, MinGW), 332 với trình giả lập thiết bị đầu cuối

nhập mô tả hình ảnh ở đây

Chắc chắn không phải là mục đẹp nhất, nhưng nó nắm bắt được cơ chế cốt lõi của chim flappy: Con chim tăng tốc xuống dưới, nhấn một phím khiến nó nhảy lên, chạm vào các ống hoặc các cạnh của màn hình kết thúc trò chơi, điểm số là số lượng ống bị xóa.

#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);}}

Nó có thể được rút ngắn xuống còn 333 byte, nếu trình giả lập thiết bị đầu cuối POSIX được sử dụng (như Cmder):

#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);}}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.