A demake of my game Patrick's Cyberpunk Challenge for the TweetTweetJam.
The object of the game is to move Patrick the Leprechaun around the board and remove all 28 squares. Squares with special symbols will remove extra squares:
Move Patrick to a square using the arrow keys. Note that you can (and sometimes must) move diagonally by pressing two arrow keys simultaneously.
Puzzles might be impossible to solve, and the game doesn't recognize if you win or lose. If the screen is empty except for Patrick, you win! If you have no legal moves, you lose and must restart the game manually.
Source code:
poke(24364,3)x="웃"v="▥"h="▤"b={}for i=1,36 do b[i]=i%9<2 and""or"█"end for i in all{"⬆️","➡️",h,"⬅️","⬇️",v,x}do repeat f=1+flr(rnd(36))until b[f]!=""b[f]=i if(i==x)p=f end::_::t=btnp cls()for i=0,35 do k=b[i+1] ?k,i%9*8,6*flr(i/9)+20,k==x and 11 or 7 end b[p]=""q=p if(t(0))q-=1 if(t(1))q+=1 if(t(2))q-=9 if(t(3))q+=9 if(b[q]and#b[q]>0)p=q t=b[p] if(t=="⬆️"or t==v)b[p-10]=""b[p-9]=""b[p-8]="" if(t=="⬇️"or t==v)b[p+10]=""b[p+9]=""b[p+8]="" if(t=="⬅️"or t==h)b[p-10]=""b[p-1]=""b[p+8]="" if(t=="➡️"or t==h)b[p+10]=""b[p+1]=""b[p-8]="" b[p]=x flip()goto _ |
"Unminified" source code:
--patrick's picochallenge --by tobiasvl --use 64x64 resolution poke(0x5f2c,3) --generate a blank board of --empty █ tiles board={} --the board is 7x4, but we --represent it as a one- --dimensional table. we also --represent it as 36 tiles, ie --a 9x4 grid, with two columns --of "" on each end, so ⬅️➡️▤▥ --tiles don't wrap around when --they destroy adjacent tiles. for i=1,36 do if i%9<2 then --first and last column board[i]="" else board[i]="█" end end --populate the board with tiles --and the player's starting tile tiles={"⬆️","➡️","▤","⬅️","⬇️","▥","웃"} for i in all(tiles) do --find a random tile which is --not in the "invisible" outer --columns repeat position=1+flr(rnd(36)) until board[position]!="" board[position]=i --remember the player if (i=="웃") player=position end --game loop ::_:: cls() --print the board --here's the only obfuscation i --left in: here i loop from --0 to 35, instead of 1 to 36, --because then i only need to --do i+1 once instead of i-1 --twice. for i=0,35 do local tile=board[i+1] --the player is green if tile=="웃" then color(11) else color(7) end --properly centering the board --takes up too many characters --so just an approximation print(tile,i%9*8,6*flr(i/9)+20) end --erase the player character --and destroy the tile board[player]="" --remember the player's position new_player=player --move the player's position if --an arrow key is pressed if (btnp(⬅️)) new_player-=1 if (btnp(➡️)) new_player+=1 if (btnp(⬆️)) new_player-=9 if (btnp(⬇️)) new_player+=9 --if we're still inside the --board proper, ie the tile isn't --nil (outside the board) or "" --(the border columns), make --that the new position. if board[new_player] and board[new_player]!="" then player=new_player tile=board[player] end --if the player lands on one of --the special tiles, destroy --adjacent tiles if tile=="⬆️" or tile=="▥" then --destroy three tiles above board[player-10]="" board[player-9]="" board[player-8]="" end if tile=="⬇️" or tile=="▥" then --destroy three tiles below board[player+10]="" board[player+9]="" board[player+8]="" end if tile=="⬅️" or tile=="▤" then --destroy three tiles left board[player-10]="" board[player-1]="" board[player+8]="" end if tile=="➡️" or tile=="▤" then --destroy three tiles right board[player+10]="" board[player+1]="" board[player-8]="" end --put the player in the new --(or old!) position board[player]="웃" --loop flip() goto _ |
I beat it!
I like the visual simplicity of this variant compared to the original/your's
Nice "playable" tweetcart @tobiasvl! :D
Thanks for taking the time to document/de-obfuscate the code too! ;o)
(Let me know when you Tweet it, and I'll add it to the Twitter Moment of "playable" TweetCarts)
@Liquidream: Here you go ;) What is this "Twitter Moment"? Note that this isn't a regular tweetcart, it's a tweettweetcart, ie. it fits into TWO tweets. But if that actually does qualify, I also have this one.
@JeremyRedhead: Thanks!
@tobiasvl Ah, my apologies - missed that part!
No, I've been limiting my Twitter Moment to just those that fit within SINGLE tweets. Wouldn't be fair to the others to start including these TweetTweet games, I'm afraid.
Completely understandable :) There were for a double-tweet jam.
[Please log in to post a comment]