Gengo Girls #39: If You Know What I Mean

Gengo Girls #39: If You Know What I Mean

いい天気ですね is a lot like saying “It’s nice outside” and trusting in your listener to figure out that by “it” you mean “today’s weather”.

As a side note, it’s not that uncommon to hear someone say the full 今日はいい天気ですね. Just because you CAN leave out an obvious topic word doesn’t mean you HAVE to leave it out (although the Japanese usually do).

Vocabulary

今日 = きょう = today

Transcript

言語ガールズ #39

If You Know What I Mean

Yellow: If marks the main topic of a sentence, how come some sentences don’t have a ?

Yellow: Like いい天気ですね.

Blue: If your listener already knows what the main topic is going to be you don’t have to actually include it in the sentence.

Blue: So you could say 今日はいい天気ですね.

Blue: But you don’t have to include the 今日は because people know that you’re probably talking about today’s weather.

Yellow: So the better you are at guessing my topics the less 日本語 I have to actually use?

Blue: Don’t use this as an excuse to skip out on memorizing new vocabulary!

 

Gengo Girls #38: Ha Ha Ha

Gengo Girls #38: Ha Ha Ha

 

Japanese has a lot of spoken grammar markets. They use to mark sentences as questions. They use to mark topics. And they use things like and to mark various other important bits of information that we’ll talk about much later.

Which is good news for us because it can make analyzing complex sentences much simpler. Even in a sentence with dozens of adjectives and adverbs and prepositional phrases you can still depend on to point you to the main subject. Most of the time…

Transcript

言語ガールズ #38

Ha Ha Ha

Blue: Let’s talk about the reason that sometimes sounds like “wa” even though it’s usually pronounced “ha”.

Yellow: Is the reason: “Because 日本語 is confusing”?

Blue: In 日本語 every sentence has a main topic, subject or theme.

Blue: That theme is marked by putting a right after it, and it’s these topic marking that sound like “wa”.

Blue: So if you wanted to talk about cats your sentence would start off with “猫は”.

Yellow: Like in 猫は可愛いです.

Blue: Now you can figure out the topic of any sentence by just looking for whatever word comes before the .

Yellow: That’s almost useful enough to make up for one letter having two sounds.

 

Announcement: Immortals Should Try Harder Beta Release

As a child I promised myself I was going to program video games when I grew up. It’s actually why I got into computer science in the first place. And while I have since learned that games aren’t the only cool thing you can do with code I still have a soft spot in my heart for that childhood dream.

Which is why I’m happy to announce the test release of Immortals Should Try Harder, a comedy fantasy RPG that I’ve been slowly but steadily working on in my free time.

I think it turned out pretty decent for a hobby game with no actual budget, so if you have a few hours to burn why not give it a try? And please don’t hesitate to contact me with bug reports, game criticisms or any other sort of comment or concern.

Gengo Girls #37: Victor’s Humility

Gengo Girls #37: Victor's Humility

 

Using “suru” to turn a noun into a verb isn’t that different from how we use “to do” in English. For example, you would never say “That man can math”, you would say “That man can do math”.

The big difference here is that “to do” comes before the noun but “suru” and “shimasu” comes after.

Vocabulary

する = to do

来る = くる = to come

勉強 = べんきょう = study (noun)

勉強する = to study (verb)

Transcript

言語ガールズ #37

Victor’s Humility

Yellow: I found two verbs that don’t follow the normal polite conjugation rules.

Blue: You must be talking about する and 来る.

Blue: The polite form of する is します and the polite form of 来る is きます.

Yellow: Oh… I guess you already knew about them.

Blue: する is especially important because it can be used to turn certain nouns into verbs.

Blue: Like turning 勉強 into 勉強する.

Yellow: I was really hoping I had learned something before you this time.

Blue: It’s not a competition.

Yellow: You’re only saying that because you’re winning.

 

Gengo Girls #36: I Spy

Gengo Girls #36: I Spy

Take a few minutes to look at each of these three verbs and make sure you understand how to make them polite. Two of them use the “change the last sound to ‘i’ and add ‘masu’” rule and one uses the “replace final ‘ru’ with ‘masu’” rule.

Also we’re kind of cutting corners here. Very few people would actually say something like “That person walks”. They would be more likely to say “That person is walking”. But all we know for now are simple verbs so that’s what we’re going to practice.

Vocabulary

遊ぶ = あそぶ = to play

= ひと = person

歩く = あるく = to walk

寝る = ねる = to sleep

Transcript

言語ガールズ #36

I Spy

Blue: Let’s go to the park for some 日本語 practice.

Yellow: OK.

Blue: 犬は遊びます

Blue: あの人は歩きます

Blue: Aren’t you going to say anything?

Yellow: 私は寝ます 

Let’s Program A JavaScript Game 10: Letting The World Pass By

A World, Or The Illusion Of A World?

Our end goal is to let the player spend two or three minutes jumping from platform to platform and avoiding viruses. But how do we go about accomplishing this?

My first instinct was to build a hundred or so platforms and position them around the game world. Then for each frame of the game we would check whether or not the player had hit any of the platforms and finish up by drawing any platforms that were currently on screen.

And this would work. Keeping track of a few hundred objects and possible object collisions is no sweat for a modern computer.

But there are a few reasons that keeping track of an entire world of platforms might not be such a great idea for this particular game:

  • We only have room for two or three platforms on the screen at one time. Keeping track of the extras is a waste (even if it is one we can afford)
  • The player can never move backwards so we don’t have to keep track of platforms we have already passed.
  • Building an entire world ahead of time would make it impossible to adjust the game for players who are doing well. Players who get a lot of graze points should start finding small platforms and big gaps much earlier than players who don’t. Otherwise they might win the game through graze points without ever hitting any difficult jumps.

So instead of creating an entire world of platforms I’m only going to create a list of 5 platforms. When a platform gets left behind by the player I will delete it and then generate a new platform to add to the end of the list.

To the player this will still look like a complete world with hundreds of platforms. There will always be two or three platforms on screen and there will always be a new platform waiting for them as they move to the right. The player will never know that platforms are disappearing behind them or that they are popping into existence mere seconds before they are needed.

All Motion Is Relative

Now that we’ve decided how to build the platforms we also have to decide how we’re going to scroll the screen. After all, the entire game is based around the player constantly moving to the right.

You might think that if the game is about the player moving to the right the only solution is to make the player actually move to the right, maybe by increasing their x position by a constant amount every turn. But if we do that the player would eventually drive right off the right side of the screen, which would be bad.

So instead of moving the player forwards we’re going to move the entire world backwards. It’s not even that hard to do. Every frame we just iterate through out list of five platforms and adjust their x position backwards.

Infinite Platforms Demo

To put this all into play we need to make the following changes to our code:

  • Create a list of platforms
  • Populate the list with five starter platforms
  • Move those platforms to the left during each frame
  • Check for player collision with all five platforms during each frame
  • Delete platforms that scroll entirely off the screen
  • Add a new platform to the end of the list every time one gets deleted from the front
  • Draw any platforms that happen to be on screen

Let’s start by creating and populating the platform list. This code goes before any function declarations and replaces our old testObject1 and testObject2 declarations:

var platforms = new Array();
var maxPlatformCount = 5;
var maxPlatformLength = 200;
var maxPlatformGap = 150;

//Generate starting platforms
for(i = 0; i < maxPlatformCount; i++){
   var newPlatform = new Object();
   newPlatform.x = i * (maxPlatformLength + maxPlatformGap);
   newPlatform.y = 350;
   newPlatform.width = maxPlatformLength;
   newPlatform.height = 20;
   platforms[i] = newPlatform;
}

Now we need to go down to our updateGame method and replace our testObject collission code with this:

var feetHitbox = getFeetHitbox(player.x, player.y);

//Platform logic
for( i = 0; i < platforms.length; i++){
   //Create illusion of player moving forward by scrolling all platforms backwards
   platforms[i].x-=5;

   //See if the player has landed on this platform
   if(intersectRect(platforms[i], feetHitbox)){
      feetCollision = true;
      player.yVel=0;
      player.y=platforms[i].y-48;
      player.onGround=true;
   }
}

Few things to notice: We now create one set of player hitboxes per frame and then use them multiple times inside the loop. This is slightly more efficient than creating the hitboxes multiple times inside the loop.

We are also using the loop to both update the position of each platform and check for platform collisions. This is slightly more efficient than having two seperate loops: one for updating position and one for checking for collisions.

Now we can draw the platforms by replacing the testObject related drawing code in drawScreen with this:

//Draw platforms
context.fillStyle = '#008800';
for(i = 0; i < platforms.length; i++){
   context.fillRect(platforms[i].x, platforms[i].y, platforms[i].width, platforms[i].height);
}

Now if you try to actually run the game at this point you should see five moving platforms… but as soon as they all scroll past the screen you get stuck in an endless loop of falling of the screen again and again and again. Let’s fix that by going back up to updateGame and adding in code to remove old platforms and add new ones in. This particular code should come right after the end of the foreach loop we used for updating the platforms:

//Remove platforms that have scrolled off screen and create new platforms to take their place
if(platforms[0].x + platforms[0].width < 0){
   //Drop first platform by shift entire list one space left
   for( i = 0; i < platforms.length-1; i++){
      platforms[i] = platforms[i+1];
   }

   //Add new platfrom to end of list by placing it a certain distance after second to last platform
   var newPlatform = new Object();
   newPlatform.x = platforms[platforms.length-2].x + maxPlatformLength + maxPlatformGap;
   newPlatform.y = 350;
   newPlatform.width = maxPlatformLength;
   newPlatform.height = 20;
   platforms[platforms.length-1] = newPlatform;
}

And that’s that. You now have an infinitely scrolling world of platforms and gaps. It’s a pretty boring world, to be honest, and we’ll definitely want to mix things up a little before giving this to an actual player. But as a piece of proof of concept code this all pretty good.

Jump. Jump. Jump. Forever.

Jump. Jump. Jump. Forever.

Feeling Lost? Here’s A Map

My last few posts have included a lot of instructions to “delete this” and “insert that” and I’ll admit that can be vague and confusing. So here’s a snapshot of my code right now. Follow the link to try it out or save it to your computer to read through my code. Just put it in the same folder as the cycle.png image and it should run just fine.

Things Are About To Get More Dangerous

With platforms live and moving the next major feature to work on are the deadly viruses that the player is supposed to avoid and graze. So tune in again next time to see how that works out.

Gengo Girls #35: The Future Is Now

Gengo Girls #35: The Future Is Now

At first the idea of not having a specific future tense might seem confusing, but look at it this way: That’s one less conjugation for you to learn.

And it’s not like it’s really that strange of an idea. In English both “I’m going to the store” and “I’m going to next week’s concert” have the same verb but I bet you didn’t have any trouble at all telling which one is happening now and which one is happening in the future.

Transcript

言語ガールズ #35

The Future Is Now

Blue: Did you know that 日本語 doesn’t have a future tense?

Yellow: Really?

Blue: 私は行きます can mean both “I go” and “I will go”.

Yellow: Then how do I tell the difference between present and future verbs?

Blue: From context.

Blue: If you say 行きます while walking out the door, that would mean “I go”.

Blue: But if we were talking about a concert happening next week and you said 行きます that would mean “I will go”.

Yellow: A concert? Of course I’m going!

Blue: There is no concert. It was just an example.

Yellow: Awww…

 

Gengo Girls #34: The Journey Is More Important Than The Destination

Gengo Girls #34: The Journey Is More Important Than The Destination

In the real world people almost never say boring things like “I go” or “The dog barks”. It’s always “I’m going to the library, be back in a minute” or “Why in the world is that dog barking so loud at 3 in the morning?”

But saying complex sentences require a lot of grammar we haven’t covered yet so for the next several strips you’re just going to have to deal with artificially boring sentences.

Vocabulary

= わたし = I; me

行く = いく = to go

Transcript

言語ガールズ #34

The Journey Is More Important

Than The Destination

Blue: Let’s try using the “Subject Verb” pattern to say “I go”.

Yellow: Let’s see… 行く doesn’t end in “iru” or “eru” so to make it polite I have to change the last syllable to and add ます.

Yellow: So “I go” must be…

Yellow: 私は行きます

Blue: Perfect!

Yellow: But where am I going?

Blue: We need to learn some new grammar before we can answer that question.

Yellow: In that case I’m going home.

Gengo Girls #33: Another Building Block

Gengo Girls #33: Another Building Block

It’s amazing how many different situations you can talk your way through using nothing but the “A is B” pattern, but eventually you’re going to need to use an actual verb. And now you can! Or at least, you can as soon as you learn some more verbs.

Transcript

言語ガールズ #33

Another Building Block

Blue: Now that you know how to make verbs polite we can learn a new sentence pattern!

Yellow: Hooray?

Blue: Our new pattern is the simple “Subject Verb” pattern.

Yellow: You mean things like “The dog barks” and “The bird sings”?

Blue: Exactly!

Blue: In 日本語 this pattern is “Subject Verb”.

Yellow: That’s almost the same as in 英語. This is easy!

Blue: One last thing: the sounds like “wa” instead of “ha”, just like in the “ABです” pattern.

Yellow: Come on , make up your mind already!

Gengo Girls #32: Fool Me Once…

Gengo Girls #32: Fool Me Once...

Wakaru is yet another super common Japanese word. It is usually used to mean that you literally do or don’t understand something, like when you want to say “I don’t understand Japanese” or “Thank you for explaining that. I understand now”.

But wakaru is also often used as a way of agreeing to requests. If your boss asked you to photocopy a document and deliver it to one of your coworkers you could say “wakarimasu” to mean “I understand your request (and will go do that now)”.

Vocabulary

分る = わかる = to understand

Transcript

言語ガールズ #32

Fool Me Once…

Blue: Verbs that don’t end in “iru” or “eru” will still end in some sort of “u” sound like or .

Yellow: That’s convenient.

Blue: To make these verbs polite you first change the final “u” sound to an “i” sound.

Blue: to , to , to and so on.

Blue: Then you add ます to the end.

Blue: Let’s look at わかる. It ends in “aru”, not “iru” or “eru”, so we can’t just replace the with ます.

Yellow: Instead we have to change the to and then add ます, right?

Blue: Exactly! So the polite form of わかる is わかります.

Yellow: I understand…

Blue: I’m not falling for that gag a second time.