Skip to main content

NanoSnake - 364 B

A snake game written to be as small as possible.


ffao
(ffao)
The original NanoSnake file had 1147 B. In the process of shortening it, I've had to make several bytes/usability tradeoffs. Also, I've incorporated suggestions from several people (Vitor Bosshard, Jordan Trudgett, Uli Eggermann, roebros, Jackson Gatenby). The updated code is below, enjoy!
import pygame as p,random
q=p.display
T=16
b=q.set_mode([256]*2).fill
l=[]
d=a=x=1
c=p.event.get
while not(x&528or x in l):
 l=l[a!=x:]+[x]
 while a&528or a in l:a=random.randrange(512)
 b(0);[b(99,(o%T*T,o/32*T,T,T))for o in l+[a]];q.flip();p.time.wait(99);D=d
 for e in c(2):
  v=e.key-272;n=((v&2)-1)*[1,32][v<3]
  if-n-D and 0<v<5:d=n
 c();x+=d

Changes

- Replaced "x=l[-1]+d" with "x+=d".
- Removed definition of variable D outside the loop.

NanoSnake is finally becoming stable, it's getting harder and harder to squeeze it further!

Links

Home Page
http://www.pygame.org
Source
http://stuffr.net/d/18yjm6h

Releases

NanoSnake 522 B — 30 Jul, 2008

NanoSnake 429 B — 31 Jul, 2008

NanoSnake 502 B -- The Show Must Go On — 31 Jul, 2008

NanoSnake 364 B — 12 Aug, 2008

NanoSnake 554 B — 30 Jul, 2008

NanoSnake 478 B -- The Harder They Fall — 31 Jul, 2008

NanoSnake 371 B — 2 Aug, 2008

NanoSnake 348 B — 16 Aug, 2008

Pygame.org account Comments

  • Guest 2014-02-28 02:15

    308 bytes:
    from pygame import*;q=display;T=16;f=q.set_mode([256]*2).fill;l=[];d=a=x=n=1;E=event.get
    while not(x&528 or x in l):
    while a&528or a in l:a=a*9%512
    l=l[a!=x:]+[x];f(0);[f(-1,(o%T*T,o/32*T,T,T))for o in l+[a]];q.flip();time.wait(99);x+=d
    for e in E(2):
    v=e.key&7;n=((v&2)-1)*[1,32][v<3]
    if d+n:d=n
    E()

  • Guest 2014-02-28 02:16

    308 bytes (replace underscore "_" with space " "):
    from pygame import*;q=display;T=16;f=q.set_mode([256]*2).fill;l=[];d=a=x=n=1;E=event.get
    while not(x&528 or x in l):
    _while a&528or a in l:a=a*9%512
    _l=l[a!=x:]+[x];f(0);[f(-1,(o%T*T,o/32*T,T,T))for o in l+[a]];q.flip();time.wait(99);x+=d
    _for e in E(2):
    __v=e.key&7;n=((v&2)-1)*[1,32][v<3]
    __if d+n:d=n
    _E()