Here's DIAMOND GHOST!
A 64x64-game, quickly made to learn how to do smtng in lores.
Controls:
Arrow keys to control the ghost.
X to start game.
You only have three moves. Use them wisely!
You will gain a new life if you catch a diamond and have less than 3 lives...
Have fun! :)
/ Pingo
Thank you so much Felice and Vectorguy for the input!
I totally agree with both of you.
So... to fix the randomness, I added some MORE randomness! :)
So, NEW version below. Game now works like this:
- X to start at the title screen.
- Added last score at the title.
- Control the ghost with arrow keys.
- Catch diamonds before the disappear. Takes 2 sec.
- If you have less than 3 lives, you will gain one more when you get a diamond.
- Every 2 sec a GREEN HEART shows up. If you catch it, it resets ALL your life + energy.
Still - my highscore is 29! It's not easy... :)
/ Pingo
Hm, not sure the green heart is adding much. I can still get boned by three bad RNGs in a row.
Like, say I'm at the tile left or right of center. If the diamonds and hearts show up out of reach in one of the corners three times in a row, there's absolutely nothing I could have done to win. That's discouraging. There's no way to plan for it, guard against it, conserve moves, nothing.
I agree. Some rounds I end up with 3 points. Some rounds I go well over 20-30 points with not much effort at all.
Walking diagonally helps a lot, and aiming for the middle ground almost constantly when you have moves lefts, does too...
But I was thinking of adding moves-not-used to next round instead. Maybe that's a better idea.
Not sure on how to communicate the saved moves though and keep the design... :)
EDIT: Tried it again now and moved almost only diagonally. Then it becomes truly playable. 63 points. Still hard, but not impossible...
/ Pingo
@Felice
I've been thinking about a lot of different ways to improve this (like adding the Green Heart only to the close tiles etc), but not found any sollution that is really great.
Any ideas are welcome though! Especially code stuff to improve it... feels like there's some glitches left btw, but nothing I seem to be able to improve... :-/
/ Pingo
Oh, I was editing an idea into my comment while you responded. I'll just move it here:
Okay, yeah, that's much better, but it IS very hard to do. I have to be very precise pressing two keys at once. Can you think of any way to allow maybe a 1-frame slop on it? Like, remember the move made last frame, and if this frame there's a move on the adjacent direction (e.g. last frame west, this frame north), make that move free.
@Felice
Hmmm... that's an interesting idea.
I did think about "free" moves - but in other ways - like if you picked up an item your moves "froze" for X turns; every 10 points means a move-free-turn and so on...
How would you suggest the code would look like to implement your idea? Not sure if I understand exactly what you're getting at here... :)
/ Pingo
Okay, I came up with a semi-klunky timer method that seems to work really well in spite of being a (small) forkful of spaghetti. This'll give you four frames of slop between buttons for diagonals:
The logic you care about is in the block with the comment -- count the move, or combine?
.
Also, you could disable the timer countdown and just always allow combining with the last axis move:
Still bothers me that it's a bit spaghetti. I whittled it down a little, but meh. Anyway, assuming you've already calculated this frame's dx,dy for the player, and that you don't need the timer (which I think you don't) this is all you really need, self-contained:
-- count the move, or combine? if dx!=0 then if dy!=0 then -- true diagonal move _move_count-=1 _moved_x=false elseif not _moved_y then -- new x-only move _move_count-=1 _moved_x=true end _moved_y=false elseif dy!=0 then if not _moved_x then -- new y-only move _move_count-=1 _moved_y=true end _moved_x=false end |
[Please log in to post a comment]