npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

snakey-mp

v0.7.0

Published

A multiplayer typing game for learning written languages.

Downloads

7

Readme

⌨🐍 SnaKey

Try it! 👈

TODO.doc: insert a gif of the gameplay here.

SnaKey is a typing game where you move around by typing keyboard sequences corresponding to characters from written languages. For example, playing with English, if there was a tile adjacent to your player character marked by the written character "a", to move on it, you would type the keyboard sequence "a". If you were playing with Japanese Hiragana, you would type the keyboard sequence "no" to move onto an adjacent tile marked by the written character "の". It's easier done than said.

SnaKey drew some initial inspiration from the well-known Snake Game, hence its name, which is a pun on the words "snake" and "keyboard".

Contents

What Makes this Project Meaningful

  1. To me, it is my baby. I'm so happy that I can call this idea my own, and I find a lot of fulfilment in working toward an image of its completion. Through it, I've continually been pushing myself to learn new things and to do things better.
  2. To anyone who plays it, I hope it can be three things:
    • Something fun to play with friends 🙂
    • A way to practice typing, and to practice recognizing characters from various supported languages.
    • A reminder of how learning is difficult, and yet that you and I have proven that we can overcome that difficulty. Yes, I said that working on this project is immensely fulfilling, but the sheer amount of learning it entails also brings me a proportional helping of frustration. I have to keep reminding myself to be patient with the process and to be kind to myself. I want you to remember to do that too!

🚋 Looking Back and Looking Forward

This is a non-technical section to reflect on my previous work on this project.

🐍 Version #1 - Born on a Python

I wrote version one of this game in one week of the February of 2019 using Python. I had just finished learning it, and I wanted to use it for something original.

I designed the game by asking myself the question "How can I make it fun for a single player to keep moving around?". As the main objective, I randomly spawned apples to collect for score points. To add a sense of ramping pressure, I made an enemy chaser, for competition, an enemy apple collector, and for an extra challenge and reward, an avoider that grants a bonus whenever caught.

The inspiration to add different languages came by taking a beginners' class in Japanese. I really enjoyed it- for interest in the content, and because the professor was a kind person, and a good teacher. That positive learning experience has continued to guide my vision for this game.

🕸 Version #2 - Slithering to the Web

I excitedly showed version one to my friends and Japanese prof, who responded with enthusiasm and encouragement, and confirmed my fears of poor accessibility. For that reason, over the next month, I learned how to build simple web-pages to port the game to version two.

I wrote everything (with hands tied behind my back on NotePad++) in vanilla HTML, Javascript, and CSS. This helped me to build a strong foundation and appreciate the value of a good IDE, strong typing, and style conventions (which pushed me to VsCode, TypeScript, and EsLint in version 3).

The game's objectives, mechanics, and representation went largely unchanged. Being back at square one, most of my efforts went to searching through and exploring documentation on javascript's basic data structures, the browser DOM, and CSS. I found w3c schools and the MDN web docs to be great learning resources.

🌐 Version #3 - Snakes With Wings (You are Here)

This brings us to where we are now: November of 2019 and onward. The goal for this version is to implement internet-enabled multiplayer. Although I had recently gotten comfortable working in a terminal environment, I decided to try VSCode for the first time, and have absolutely not regretted it.

You might think that after making this game twice I'd be tired of it... but that couldn't be further from the truth! I see so many opportunities to improve on my previous work- to make it more accessible, organized, and more fun. I can't wait for the day when I can sit down and play it with a group of friends, or perhaps even with complete strangers.


🛩 Design Challenges

See dedicated readme.

Language Representation

See dedicated readme