Programming C, C++, Java, PHP, Ruby, Turing, VB
Computer Science Canada 
Programming C, C++, Java, PHP, Ruby, Turing, VB  

Username:   Password: 
 RegisterRegister   
 Shortest Tetris Challenge
Index -> Contests
Goto page Previous  1, 2, 3
View previous topic Printable versionDownload TopicSubscribe to this topicPrivate MessagesRefresh page View next topic
Author Message
zylum




PostPosted: Mon Feb 11, 2008 7:04 pm   Post subject: Re: Shortest Tetris Challenge

Alright, here's my code.. Only marginally better than fishtastic's at 73 lines Cool I used a lot of bit manipulation to make it short. I think my main game loop can be shortened a bit but I'm too lazy now Laughing

Turing:
View.Set ("graphics:220;220,nobuttonbar,offscreenonly")
color (0)
colorback (7)
var p : array 1 .. 7, 1 .. 4 of int := init (1632, 1632, 1632, 1632, 3840, 17476, 3840, 17476, 3168, 19584, 3168,
    19584, 1728, 35904, 1728, 35904, 3616, 17600, 36352, 25664, 3712, 50240, 11776, 17504, 3648, 19520, 19968, 17984)
var b : array 0 .. 24 of int := init (0, 0, 0, 32760, 16392, 16392, 16392, 16392, 16392, 16392, 16392, 16392, 16392, 16392, 16392, 16392, 16392, 16392, 16392, 16392, 16392, 16392, 16392, 16392, 32760)
var pnn := Rand.Int (1, 7)
var pn, pr, px, py, t : int
var lines := 0
var down := false
var k : array char of boolean
proc xorp
    for i : 0 .. 3
        b (py - i + 1) xor= ((p (pn, pr) & (15 shl (4 * (3 - i)))) shr (4 * (3 - i))) shl (px + 1)
    end for
end xorp
fcn overlap (i : int) : boolean
    result i <= 3 & ((b (py - i + 1) & (((p (pn, pr) & (15 shl (4 * (3 - i)))) shr (4 * (3 - i))) shl (px + 1))) > 0| overlap (i + 1))
end overlap
fcn makeMove (var v : int, vo, d, m : int) : boolean
    v := v mod m + d
    if overlap (0) then
        v := vo
    end if
    result false
end makeMove
loop
    pn := pnn
    pnn := Rand.Int (1, 7)
    pr := 1
    py := 23
    px := 6
    cls
    exit when overlap (0)
    put "\n\n\n\n\n\n\n\n\n\t\tLINES:\n\t\t======\n\t\t", lines : 6
    Draw.FillBox (130, 150, 190, 190, 0)
    for i : 0 .. 11
        Draw.FillBox ((i div 3) * 10 + 140, (i mod 3) * 10 + 150, (i div 3) * 10 + 150, (i mod 3) * 10 + 160, sign (p (pnn, 1) & (1 shl ((i mod 3) * 4 + (i div 3)))) * 7)
    end for
    loop
        py -= 1
        exit when overlap (0)
        t := Time.Elapsed
        loop
            exit when Time.Elapsed - t >= 500 - min (450, (lines div 10) * 50)
            Input.KeyDown (k)
            if ~down & (k (KEY_DOWN_ARROW)| ((k (KEY_UP_ARROW) & makeMove (pr, pr, 1, 4)| k (KEY_LEFT_ARROW) & makeMove (px, px, -1, 99)| k (KEY_RIGHT_ARROW) & makeMove (px, px, 1, 99)) & false)) then
                loop
                    py -= 1
                    exit when overlap (0)
                    t := Time.Elapsed
                end loop
                py += 1
            end if
            down := k (KEY_DOWN_ARROW)| k (KEY_UP_ARROW)| k (KEY_LEFT_ARROW)| k (KEY_RIGHT_ARROW)
            xorp
            for i : 0 .. 231
                Draw.FillBox ((i mod 11) * 10, (i div 11) * 10, (i mod 11) * 10 + 10, (i div 11) * 10 + 10, sign (b (i div 11 + 3) & (1 shl (i mod 11 + 3))) * 7)
            end for
            View.Update
            xorp
        end loop
    end loop
    py += 1
    xorp
    for decreasing i : 23 .. 4
        lines += b (i) div 32760
        for j : i .. (b (i) div 32760) * 20
            b (j) := b (j + 1)
        end for
    end for
end loop
put "\n\n\n\n\n\n\tGAME OVER"

I wonder if it's possible to make it <= 50 lines Question

fishtastic> You have been awarded 283 bits
Sponsor
Sponsor
Sponsor
sponsor
Display posts from previous:   
   Index -> Contests
View previous topic Tell A FriendPrintable versionDownload TopicSubscribe to this topicPrivate MessagesRefresh page View next topic

Page 3 of 3  [ 31 Posts ]
Goto page Previous  1, 2, 3
Jump to:   


Style:  
Search: