Welcome, Guest. Please login or register.

Login with username, password and session length

 
Advanced search

1411196 Posts in 69314 Topics- by 58380 Members - Latest Member: feakk

March 18, 2024, 11:31:31 PM

Need hosting? Check out Digital Ocean
(more details in this thread)
TIGSource ForumsCommunityDevLogsASDF - A simple typing game
Pages: [1]
Print
Author Topic: ASDF - A simple typing game  (Read 5731 times)
vlaube
Level 0
**



View Profile
« on: February 10, 2013, 01:37:21 PM »

ASDF (Project Title)



Welcome to the devlog of my game ASDF. It is a mix of traditional Eat 'em Ups (like Snake or Pacman) and typing games.

The player controls the purple cross which resembles his location and movement options. In the screenshot above he could press 'k' to move up, 'f' to move right and so on. The goal is to collect a number of special characters to reach the next level which will introduce new keys/characters to make the game harder.

Check out the prototype!
« Last Edit: May 02, 2015, 03:42:55 AM by vlaube » Logged

Finished: Working on:
Pineapple
Level 10
*****

~♪


View Profile WWW
« Reply #1 on: February 10, 2013, 01:56:29 PM »

Sounds pretty interesting and like an effective teaching tool, actually.  Smiley
Logged
oodavid
Level 8
***


Discombobulate!


View Profile WWW
« Reply #2 on: February 10, 2013, 02:12:39 PM »

I love this! I can imagine it could teach people to type really fast. Will it progress to use, numbers, punctuation, capitals etc?
Logged


Button up! - Out on Android and iOS

latest release: 13th March 2015
vlaube
Level 0
**



View Profile
« Reply #3 on: February 11, 2013, 12:27:03 AM »

Sounds pretty interesting and like an effective teaching tool, actually.  Smiley

Thats what I'm hoping for. Maybe my girlfriend can learn touch typing this way. Smiley
I actually learned touch typing by playing The Typing of the Dead, but this isn't really something my girlfriend would play...


I love this! I can imagine it could teach people to type really fast. Will it progress to use, numbers, punctuation, capitals etc?

Absolutely! I also plan to keep track of the average time needed to find and press the keys. This way I can figure out the skill level for every key and gradually increase the difficulty.
Logged

Finished: Working on:
oodavid
Level 8
***


Discombobulate!


View Profile WWW
« Reply #4 on: February 11, 2013, 03:43:47 AM »

I learned to touch type using a racing game (cannot recall the name), basically, the faster you typed the faster your car went - the next player (my brother) would then have to race against my ghost. The competitive aspect really helped spur us on
Logged


Button up! - Out on Android and iOS

latest release: 13th March 2015
vlaube
Level 0
**



View Profile
« Reply #5 on: February 12, 2013, 09:35:06 AM »

I learned to touch type using a racing game (cannot recall the name), basically, the faster you typed the faster your car went - the next player (my brother) would then have to race against my ghost. The competitive aspect really helped spur us on

Wow, that sounds way more fun than learning typing on your own.
Logged

Finished: Working on:
vlaube
Level 0
**



View Profile
« Reply #6 on: February 13, 2013, 06:21:41 AM »

I actually implemented this over a week ago, but I think it's interesting enough to warrant a post. So lets go...


Map generation

I didn't think much about this beforehand and just created a grid of random characters, but it soon became apparent that this wasn't enough.

Character Selection

It's a bad idea to start with all available characters, so I decided to restrict the characters to the home position for now. For German keyboards this means I have to choose one of these "asdfjklö" for every cell of the grid. Eventually the game will support multiple keyboard layouts (probably the big three English, French and German), until then you will see a lot of umlauts. Smiley

The code looks something like this:

Code:
  for(var i=0; i<map.length; i++) {
    var availableChars = 'asdfjklö';
    var character = randomElement(availableChars);
    [add character to map]
  }

This approach is not very flexible, but good enough for now. When I will introduce additional characters or other keyboard layouts I will have to change it. I will probably store the characters and the probability they should appear in some kind of map.

Preventing duplicates

While testing often had the case that the same characters appeared multiple times in the cursor. Like this:



What should happen when the player presses 's', should the cursor move to the right or to the left? I planned to solve this problem by using some clever interface where the player would have to press the key multiple times to select the right one and then confirm using the space or enter key.

After thinking some more about it I decided to prevent this ambiguity from happening in the first place. At first I thought it would be really complicated and fantasized about backtracking and genetic algorithms, I also had a fever at the time which didn't really help...

Turns out the solution is pretty easy. I use the same algorithm as above but remove all characters from availableChars that would lead to ambiguities. Here is the source:

Code:
  for(var i=0; i<map.length; i++) {
    var availableChars = 'asdfjklö';

    // 1. get the illegal characters
    var illegalChars = [
      map.at(i).up().left().get('character'),
      map.at(i).up().right().get('character'),
      map.at(i).left().left().get('character'),
      map.at(i).up().up().get('character')
    ];

    // 2. remove them from the available characters
    availableChars = _.difference(availableChars, illegalChars);

    // 3. pick a random character
    var character = randomElement(availableChars);
    [add character to map]
  }

I'm especially proud of implementing chaining for the direction operations, it makes the code so much easier to understand.
Here is an image which visualizes the four illegal cases:



That's it for this time.

Next: Implementing goals and a scoring system.
Logged

Finished: Working on:
vlaube
Level 0
**



View Profile
« Reply #7 on: May 02, 2015, 04:38:35 AM »

Sorry, wall of text incoming!

tl;dr: got depressed and stopped working on the game, got better and made a prototype!



Hello guys and girls,

it's been quite a while since I last worked on this game - more than two years!
A lot has been happening in my life after starting this project.

About two years ago I had a bad cold and couldn't go to work, so I stayed in bed watching cat videos. Soon I got bored and started making some sounds with cfxr and later tweeted about that. Somehow a colleague misunderstood that tweet and thought that I wasn't really ill at all and only wanted to stay at home to work on my game.

When I got back to work, he and another colleague basically interrogated me about the tweet and threatened me, probably without our boss even knowing. I repeatedly told them that I was really ill and did nothing wrong but they refused to listen to me. A few days later I had a meeting with my boss and told him my story and he believed me, saying that I shouldn't worry about it anymore. I didn't tell him how much the two colleagues had threatened me because I feared repercussions.

It turns out my colleagues couldn't forget about it and talked shit about me behind my back. I ignored them as good as I could, still too afraid to talk about it with my boss. After a while it really got to me and I was trying to find another job, unfortunately I couldn't get any. Last year my girlfriend got a new job in another city and I finally had a good reason to quit, unfortunately still without another job.

Later that year I finally got a new job, but it soon turned out to be much worse than the first, something which I newer thought to be possible. The job was so bad that I got really depressed and had severe problems with anxiety.

Finally I admitted myself to a psychiatric day hospital. There is spent eight and a half weeks (seven days a week, eight hours a day) with other depressed people and learned about dealing with the illness with various types of therapy and medication. Doing this was probably the best thing I ever did, and I probably should have done it much sooner.

I still have a lot to deal with, but I'm much better now. So much in fact that I did some work on the game and finished a prototype for you to playSmiley

Thank you for reading and take care.
Logged

Finished: Working on:
vlaube
Level 0
**



View Profile
« Reply #8 on: May 05, 2015, 09:33:15 AM »

I got some feedback about the game, which led to another update of the prototype. Apparently the game got too hard too fast, which of course isn't what I want.

Problem
Previously every pickup (orange circle) would recreate the map with another character added to the set of available characters. I changed it so you have to get five pickups before a warp-pickup is generated which recreates the map as before.

The hardest part of implementing this feature was to place the five pickups. With only one of them, my approach was to create a diamond of tiles around the player, remove tiles outside of the map and pick a random tile from those left.



This approach allows me to place a pickup at a certain distance to the player, but makes no sense when placing multiple pickups. My goal was to distribute the pickups evenly on the whole map, which can be archived with a couple of different methods:

Random

This is probably the easiest way to place the pickups, just place each of them at a random location. Unfortunately there are a few problems: you have to make sure that you don't pick the same random spot multiple times or accidentally place a pickup on the player. Also the random locations could clump together, leaving some parts of the map with multiple pickups while others were empty.

Grid

The map is overlayed with a raster and the pickups are placed on the intersections. It's pretty obvious why this is a bad idea, it's just too regular and boring.

Poisson Disk

This approach also places each pickup randomly, but never puts them too close to each other. The *ideal* algorithm is pretty complicated, fortunately there is the best-candidate sampling (http://bl.ocks.org/mbostock/1893974) algorithm by Don Mitchell, which is a good approximation. You basically create a number of random positions and only accept the candidate that is furthest from the previously ones. The number of candidates generated has to increase with each iteration, because there is fewer and fewer space left and you need more tries to get a good location.

Jittered

This algorithm combines random and grid placement, you separate the map into a number of sectors and pick one random point per sectors until you have enough.

Solution
I decided to go with this last approach, it seems the easiest with the best results. The map was divided into nine different sectors and the player was placed into the middle one. Then I randomly picked five of the ones left and placed a pickup inside each one.

And there we have it, an easy way to evenly space pickups on a map.



Do not forget to check out the new version of the prototype.
Logged

Finished: Working on:
vlaube
Level 0
**



View Profile
« Reply #9 on: June 02, 2015, 11:53:38 AM »

Testing Art Styles

I made some mockups of different art styles.
The realism style uses Kenneys Roguelike Pack and Roguelike Characters tilesets, while the abstract style uses various stuff snatched off Google Images.
Keep in mind that the characters for navigation are missing.


Realistic Style – Island


Collect all the coins to get to the next island. The style is so simple that it allows for easy random generation of new levels.

Realistic Style – Indoor


With a bit more work nice indoor scenes can be realized.

Realistic Style – Story Mode


Going down the "realism" route things got more involved and I ended up with the concept of an RPG-like story mode.

Abstract Style


When I finished the mockups above I was pretty happy but forced myself to also try an abstract style for the game.
Although it is not as polished and needs some more work, I quite like it.
The simple symbolic style makes it clear that the game is not an RPG, but more of a puzzle game.
Logged

Finished: Working on:
valrus
Level 3
***


View Profile
« Reply #10 on: June 02, 2015, 01:51:10 PM »

Your RPG world with the bridge got me thinking: crumbling bridges (of the sort you get in platform games, where a tile crumbles into the void after you stand on it for a few moments) could be used to implement time-trial challenges.

So you might have a big island to wander around in and practice, but then to get across to another island you have a bit of time pressure.

The bridges could even spell words, made up of the letters of that island.  (So maybe the island is just home-row keys, then the bridge could be FALLS.  So getting off the island is spelling a real word fast.)
Logged
vlaube
Level 0
**



View Profile
« Reply #11 on: June 03, 2015, 11:41:53 AM »

Your RPG world with the bridge got me thinking: crumbling bridges (of the sort you get in platform games, where a tile crumbles into the void after you stand on it for a few moments) could be used to implement time-trial challenges.

Thank you for the suggestion, crumbling bridges are a great idea.
For timing challenges I was also thinking about having some auto-scroller style levels, like conveyor belts or fast flowing streams you cross with a boat.
I will do some experiments on how to approach this.

The bridges could even spell words, made up of the letters of that island.  (So maybe the island is just home-row keys, then the bridge could be FALLS.  So getting off the island is spelling a real word fast.)
Adding words to the map is one of the problems I was thinking about the other day. I was planning to hide them inside of a block with random letters, giving out bonus points for finding and spelling them. Unfortunately the implementation is not so straight forward.
Just putting the words on bridges between blocks is so much simpler, thanks. Smiley
Logged

Finished: Working on:
Pages: [1]
Print
Jump to:  

Theme orange-lt created by panic