Just so you know, someone made a 256-bytes Snake on Cemetech using z80 ASM, and it does all you said (although it uses a 16*16 grid).
Notify that someone! He can change it, and submit it!
And this challenge is more oriented towards computer languages and stuff, as a quick Google search will bring up an already made answer for TI-BASIC (which I will not allow anyone to submit but the author, whom I do not know).
Problem You must make a game of Snake (or Nibbles, if you know it as that). It must follow all of these guidelines:
It must be played on an square "grid" (each space being the width of one snake segment) as large as possible
The graphics for the food and the snake segments must each be different
The border must be clearly defined, and have different graphics from the food or the snake
The food must spawn on a random EMPTY square, Adriweb
The snake is moved with interactive input (such as a getKey-like command) if possible; if not supported, you may enter a direction each frame
Your snake must wrap around the sides of the board
At game's end, the program must display however many pieces of food were eaten in some way
Your game, above all, must be playable
Deadline August 18, 2014, 1:00 AM EST
As there is random chance involved, and it is interactive input, no sample input shall be given.
If any further clarification is needed, contact me or Runer112. We will try to guide your heads in the right direction. (Get it? Like, you're guiding the snake's head in a certain dire...ah, just forget it.)
Nspire Lua
Rank
User
Size
Board Size
Date
Code
1
Adriweb
548
23*23
8/16/2014 4:57:21 PM
Spoiler For Spoiler:
a,b=5,2 x,y=0,1 g,h={5},{2}c=0 f=0 m=math.random r=table.remove timer.start(.1)on={charIn=function(n)x=({x=-1,z=1})[n]or 0 y=({r=-1,y=1})[n]or 0 end,paint=function(n)z=n.drawString z(n,f,14*a,9*b)for e=1,#g do z(n,8,14*g[e],9*h[e])end end,timer=function()g[#g+1]=(g[#g]+x)%23 h[#h+1]=(h[#h]+y)%23 for n=1,#g-1 do if g[n]==g[#g]and h[n]==h[#h]then error(c)end end if a==g[#g]and b==h[#h]then repeat a=m(22)b=m(21)for n=1,#g do if a==g[n]and b==h[n]then d=0 break else d=1 end end until d>0 c=c+1 else r(g,1)r(h,1)end platform.window:invalidate()end}
TI-83+ BASIC
Rank
User
Size
Board Size
Date
Code
1
JWinslow23
301
21*21
8/11/2014 9:55:09 AM
Spoiler For Spoiler:
26->K 1.01->B {4Ans->A "300fPart(Ans)-2->u "2-3int(Ans->v ClrDraw AxesOff ZStandard 104->Xmax ~72->Ymin ZInteger Vertical 63 For(A,1,440 Repeat not(sum(⌊A=Ans randInt(1,21)+.01randInt(1,21->C End Repeat sum(Ans=C A->dim(⌊A ⌊A(1 Pt-On(u,v,2 B Pt-Off(u,v,2 C Pt-On(u,v,3 Pt-Off(u,v getKey->L If Ans=34 or 2>abs(Ans-25 Ans->K ⌊A(A->B ⌊A(1)+(K=34)-(K=25)+.01((K=26)-(K=24 Ans+21(not(int(Ans))-(22=int(Ans))+.01(not(fPart(Ans))-(.22=fPart(Ans If L=45 or sum(⌊A=Ans Goto 0 augment({Ans},⌊A->A End augment(Ans,{Ans(A->A End Lbl 0 ClrHome A
TI-84+CSE BASIC
Rank
User
Size
Board Size
Date
Code
1
JWinslow23
336
165*165
8/12/2014 4:02:45 PM
Spoiler For Spoiler:
26->K:1.001->B:{4Ans->A ClrDraw:AxesOff BorderColor 3 BackgroundOff:ZStandard Vertical 2.5,12 For(A,1,600 Repeat not(sum(⌊A=Ans randInt(1,165)+.001randInt(1,165->C End Repeat sum(Ans=C A->dim(⌊A ⌊A(1 Pxl-On(fPart(Ans)E3-1,int(Ans-1),14 Pxl-Off(fPart(B)E3-1,1-int(B-1 Pxl-On(fPart(C)E3-1,1-int(C-1),11 getKey->L If Ans=34 or 2>abs(Ans-25 Ans->K ⌊A(A->B ⌊A(1)+(K=34)-(K=25)+.001((K=26)-(K=24 Ans+165(not(int(Ans))-(166=int(Ans)))+.165(not(fPart(Ans))-(.166=fPart(Ans If L=45 or sum(⌊A=Ans Goto 0 augment({Ans},⌊A->A End augment(Ans,{Ans(A->A End Lbl 0 ClrHome A
Java
Rank
User
Size
Board Size
Date
Code
1
ben_g
1610
(screen_height-20)*(screen_height-20)
8/12/2014 1:16:46 PM
Spoiler For Spoiler:
import java.awt.*;import java.awt.event.*;import java.util.*;import java.util.List;import javax.swing.*;class S{static List<N> s;static int x=20,y=20,d=0,h,i=x,j=y,o=0;static Graphics g;public static void main(String[]a){s=new ArrayList<N>();for(int i=0;i<60;i++)s.add(new N(19,20));final JFrame f = new JFrame();f.setUndecorated(true);h=Toolkit.getDefaultToolkit().getScreenSize().height-20;f.setBounds(0,20,h,h);f.addKeyListener(new KeyListener(){@Override public void keyPressed(KeyEvent k){if(k.getKeyCode()==k.VK_ESCAPE)System.exit(0);if(k.getKeyCode()==k.VK_RIGHT)d=0;if(k.getKeyCode()==k.VK_DOWN)d=1;if(k.getKeyCode()==k.VK_LEFT)d=2;if(k.getKeyCode()==k.VK_UP)d=3;}@Override public void keyReleased(KeyEvent k){}@Override public void keyTyped(KeyEvent k){}});JPanel p=new JPanel();f.setContentPane(p);f.setVisible(true);g=f.getGraphics();while(!c(x,y)){x%=h;y%=h;if(x<0)x=h-1;if(y<0)y=h-1;g.setColor(Color.green);g.fillRect(x,y,1,1);g.setColor(Color.red);g.fillRect(i,j,1,1);g.setColor(Color.white);g.fillRect(s.get(0).x,s.get(0).y,1,1);s.add(new N(x,y));if(i==x&&j==y){o=0;for(int i=0;i<30;i++)s.add(new N(x,y));if(s.size()>=h*h)System.exit(0);}else{s.remove(0);}if(o==0){o=1;f();}long m=System.currentTimeMillis();while(System.currentTimeMillis()-m<20){}if(d==0)x++;if(d==1)y++;if(d==2)x--;if(d==3)y--;}System.out.print(s.size()/10-7);System.exit(0);}static void f(){while(c(i,j)){i=(int)(Math.random()*h);j=(int)(Math.random()*h);}}static boolean c(int x,int y){for(int i=0;i<s.size();i++){if(s.get(i).x==x&&s.get(i).y==y){return true;}}return false;}}class N{int x,y;public N(int v,int w){x=v;y=w;}}
f=[7,7] s=[[4,4]] t=0 z=true d=:r l,r=`stty size`.split l=l.to_i-1 while z do print"\x1b[2J\x1b["+f[1].to_s+";"+f[0].to_s+"H*" s.each{|a|print"\x1b["+a[1].to_s+";"+a[0].to_s+"H#"} print"\x1b["+(l+1).to_s+";1H"+t.to_s `stty raw -echo` c=STDIN.read_nonblock(1)rescue nil `stty -raw echo` case c when'a' d=:l when's' d=:d when'w' d=:u when'd' d=:r end x,y=s[-1] case d when:l x-=1 when:d y+=1 when:u y-=1 when:r x+=1 end x=1 if x>l x=l if x<1 y=1 if y>l y=l if y<1 n=[x,y] if s.index(n)!=nil z=false else s.push(n) if n==f t+=1 while(f=[1+rand(l),1+rand(l)]).index(n)!=nil do end else s.shift end end sleep 0.1 end
OK, so unless we have any objections, the next challenge is to make a game of Snake. If anyone objects to this challenge, speak now or forever hold your peace.
Well, I could remove the _ in mapM_ if some garbage looking like [(),(),(),()] below the output is okay. But other than that, I ran out of ideas. In other news, I reduced my Java program size by 4 bytes, so I claim the first place in that category again. The XTend entry is also reduced by 7 bytes. And finally there is a new C entry with 154 bytes.
That should be fine; I did so. That last byte is a killer, though.
* bb010g pokes JWinlow23 to remove the underscore from 3298's answer
Another coding contest...wow, it's becoming a trend.
I'll start writing in Batch, and I have a bunch of tricks up my sleeve. Just, is there any rules on what the code can do? Like, is this a Hello World, a Truth Machine, or whatever we want it to be?
How the heck did you compress the Haskell code like that ... nevermind, got 71 bytes now, assuming Unix-style line endings (with DOS-style 2-byte line endings it's 72). Take that! Edit: Also cut down the SysRPL program size to 63.5. I don't expect to be able to compete with CJam and Golfscript, but at least SysRPL is useful for real problems. By the way, the compactness of that language comes from the fact that programs are usually stored in compiled form. Judging from the prime tester example in the post from the first round, TI-Basic does something similar, though (it seems commands take 1 byte each, instead of 1 byte per character in their names), so I don't feel bad for telling you the compiled size instead of the much larger source size. I know Casio-Basic does those 1-byte commands as well, but because string manipulation is not present in the Casio-Basic version on my calcs, I cannot submit a Casio-Basic entry. (String manipulation was introduced in OS 2.00 for the 9860 series.)
Actually, there are 2-byte tokens in TI-BASIC, and lots of them. That is part of the reason why we don't like lowercase letters.
Looks like things are getting pretty heated in the Haskell category! 3298 and bb010g are slashing bytes like crazy! Only thing to wonder now is, when will they stop? (And will it be before the competition's over?)