Flappy Bird Clones :)


24

Tout le monde panique à propos de la suppression de ce stupide jeu "Flappy Bird". Donc, votre tâche est de créer un jeu Flappy Bird Clone. C'est vraiment simple. Voici les lignes directrices:

  • Il peut utiliser de l'art ascii ou des images réelles
  • Vous pouvez faire votre volet "oiseau" avec un clic ou une touche
  • Il devrait essayer d'être aussi court que possible, d'où la balise .

Voici un exemple: http://www.reddit.com/r/learnprogramming/comments/1xiimx/i_couldnt_sleep_so_i_cloned_your_flappy_bird/

Pour être un "Flappy Bird Clone", votre jeu doit avoir les éléments suivants:

  • Un oiseau ou un autre personnage
  • L '"oiseau" doit se déplacer légèrement vers le haut lorsqu'une touche est enfoncée ou lorsque vous cliquez / appuyez sur
  • S'il n'y a pas de clic / tapotement / etc, "l'oiseau" devrait se déplacer rapidement vers le bas
  • Les tuyaux ou autres obstacles doivent se déplacer vers la gauche sur l'écran, créant l'illusion que l'oiseau se déplace
  • Les tuyaux doivent avoir un petit espace pour que l'oiseau puisse voler.
  • Chaque fois que vous passez à travers un espace entre les tuyaux, votre score augmente de 1.
  • Si vous frappez un tuyau ou le sol, le jeu se termine et votre score s'affiche.

Il n'a pas vraiment besoin d'être un "oiseau" ou un "tuyau", il peut tout être ascii. Voici un exemple très minimal d'un écran d'oiseau flappy:

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

2
Une question devrait idéalement être autonome et contenir certainement au moins une spécification large.
Peter Taylor

3
Dans l'état actuel des choses, il semble y avoir un peu trop de subjectivité dans ce qui est considéré comme une soumission valide
Cruncher

2
Là. J'ai mis quelques lignes directrices pour constituer un "clone d'oiseau flappy"
Taconut

Je l'ai fait il y a quelques semaines. Je vais peut-être jouer au golf quand j'aurai du temps: cwhart.co/nyanpybird
Shmiddty

1
Je veux vraiment vraiment voir une version d'art ASCII!
Robbie Wxyz

Réponses:


14

Javascript + jQuery (ASCII Art) - 571 524 491

Ouvrez Dev Tools (F12) et exécutez le code suivant dans cette page (maintenant, allez-y!) Pour rendre la démo ci-dessous fonctionnelle.

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)

Démo (pour que ça marche):

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

Bugs mineurs connus:

  • Si vous obtenez un score à deux chiffres, cela gâche la disposition

  • Ce n'est pas facile!!! (mais l'original ne l'était pas non plus)

  • Il y a un compromis entre l'efficacité et le golf

N'hésitez pas à commenter avec votre meilleur score.

Aussi, c'est mon premier article sur Code Golf, donc les suggestions sur la compression, etc. seront les bienvenues


1
Vous pouvez supprimer le varmot clé et la déclaration de variable. Vous pouvez également remplacer Array(153)par []et probablement remplacer ~~(Math.random()*5)+1par1+new Date%5
Michael M.

Si vous ignorez la mise en page, sautez jQuery et ajoutez le code HTML, c'est 416 octets: jsbin.com/flap/1/edit?html,output
aemkei

Marqué 17. Je n'ai pas de vie, je sais.
ibrahim mahrir

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

22

Javascript + jQuery (997)

Testé sur Chrome 32, Firefox 27, IE9

Ouvrez la console (F12) à partir de cette page et copiez / collez le code suivant.

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)

entrez la description de l'image ici
Le jeu remplace le bloc de questions de cette page.
Vous devez cliquer sur le cadre du jeu pour faire voler l'oiseau.

Version non golfée et commentée:

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

Vous pouvez facilement modifier la configuration (gravité, vitesse du tuyau ...), voir la version commentée.


1
Fonctionne également très bien dans Firefox 27. Bien joué +1
Karl-Johan Sjögren

Merci, fonctionne également sur IE9, donc je suppose que cela fonctionne sur n'importe quel navigateur décent :)
Michael M.

bon travail :) et comme d'habitude sur javascript ici abusant de la question comme cible: P
masterX244

1
Avec le système de contrôle actuel, il est trop facile de mal cliquer accidentellement et de ne pas pouvoir tomber suffisamment loin pour atteindre le trou suivant (et être incapable de faire quoi que ce soit).
Joe Z.

1
Ce que je dis, c'est qu'il est trop facile de mal cliquer quelque part au milieu, et il est également trop difficile de cliquer correctement parce que votre punch vous règle toujours à la même vitesse initiale, quelle que soit la vitesse à laquelle vous avez déjà baissé.
Joe Z.14

5

Floppy Dragon, JavaScript, 1024b

Je fais ce jeu pour la compo js1k actuelle ( http://js1k.com )

Jouer: 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(_)

Tous les retours et nouvelles idées sont les bienvenus!


C'est encore plus difficile que Flappy Bird. Il serait plus facile de jouer si vous appuyiez sur une touche pour déclencher l'action du volet, mais je me rends compte que c'est du golf de code et plus de fonctionnalités signifie plus de code.
danmcardle

non ça va, je peux essayer d'ajouter le support de la touche si vous pensez que c'est utile ...
xem

@crazedgremlin keypress control a été ajouté dans la dernière version;)
xem

Cool! Je ne peux pas dépasser 10, mais c'est quand même cool.
danmcardle

2

Objectif C - non golfé

Peut-être le pire code que j'aie jamais écrit.

Hacky Bird Running

Vous pouvez télécharger le binaire ici: AsciiBird Download Binary

Appuyez frénétiquement sur la touche de contrôle pour garder l'oiseau en l'air!

Cela a été compilé par Xcode et exécuté dans Terminal. Il a des couleurs! Protip: redimensionnez la fenêtre de votre terminal afin de ne pas voir un arriéré de rafraîchissements d'écran.

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

Animation couleur et physique; JavaScript pur, 457 (335) octets

Ceci est mon premier message dans ce forum; J'ai créé ce code et trouvé rétrospectivement ce fil pour le publier.
Voici le code encapsulé en HTML, prêt à être copié / collé dans un fichier 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>

Il a des collisions de pixels parfaits, une physique quadratique précise et des animations de couleurs fluides, le tout en 457 octets de code Javascript hors ligne purement indépendant, montré ici sans plus de détails et d'explication:

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

Pour le plaisir, voici une version 1066 octets avec des graphismes plus sophistiqués:

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

Est-ce aussi de la triche d'utiliser un système de compression comme DEFLATE?
Ci-dessous se trouve le code ASCII85 pour une version DEFLATEd du code:
Soit dit en passant, il est compressé au total à 335 octets.

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% N3tJhTsab8oVT?? mT; 90VMmnfBNKEY (^ 'UV4c? SW': X (! 4, * WCY + f; 19eQ? `FK0I" (uDe: f & XV & ^ Rc + 'SWRIbd8Lj9bG.l (MRUc1G8HoUsn # H \ V (8 "Y $ / TT ( ^ kATb (OreGfWH7uIf


Cela a l'air génial, mais malheureusement pour les questions de codr-golf, nous avons besoin d'un code golfé .
NoOneIsHere

3
@NoOneIsHere s'il vous plaît lire le post et voir le code
golfé

Je suis désolé, je vois maintenant. C'est une excellente réponse.
NoOneIsHere

2

C, 386 351 347 341 octets (Windows, MinGW), 332 avec un émulateur de terminal

entrez la description de l'image ici

Ce n'est certainement pas la plus jolie entrée, mais il capture le mécanisme de base de l'oiseau flappy: l'oiseau accélère vers le bas, en appuyant sur une touche, il le fait sauter, toucher les tuyaux ou les bords de l'écran met fin au jeu, le score est le nombre de tuyaux effacés.

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

Il peut être raccourci à 333 octets, si un émulateur de terminal POSIX est utilisé (comme 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);}}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.