Creating a Running Game in VueJS - Part 3 - Component Files and Installing Vue

February 06, 2021

This is the third part in a series on replicating a game similar (in some respects) to the ZX Spectrum game “Daley Thompson’s Decathlon”.

To start from the beginning of the series, go here.

In this particular post, we’ll be continuing our refactor by moving out components into their own files.

If you’d like to see the code from this post then it’s on GitHub here.

Install Vue and Create a New App

The first thing you’ll need to do here is to install Vue:

npm install vue

Once this is done, we’ll just create a brand new templated Vue project:

vue create vue-app

What we’re essentially going to do here is to copy our existing program from part 2 into the new application, but using separate files for components. All we actually have now is a single file (index.html).

Copying Code

Your new app should look broadly like this:

dt 3 1

Let’s start by creating a new component called Timer, this will be the successor for our seconds-remaining component:

dt 3 2

Now, let’s take the code from our component and paste it in. We’ll start with the template; the current template is:

template: \`
    <p>Seconds remaining: {{ seconds }}</p>

And that will become:

[code lang=“html”]

Next we need the props; so the following:

props: [‘seconds’],

Will become:

[code lang="html"]
export default {
  name: 'Timer',
  props: {
    seconds: Number

Since we have no style, that’s done:

dt 3 3

Next, we’ll bring across the player component in the same way:

dt 3 4

The next stage is to update App.vue component. The template will now look like this:

[code lang=“html”]

Inside the script tag, we'll bring in the **Player** and **Timer** components:

[code lang="html"]
    import Player from './components/Player.vue'
    import Timer from './components/Timer.vue'

Next, we need to define which components we’re using:

export default {
  name: 'App',
  components: {    

We then need our data tag, which now needs to be a function:

  data: function() {                    
    return {
      playerX: 100,
      playerY: 100,
      speed: 0,
      toggleSpeed: 1,                    
      startTime: 0,
      timeNow: 0

The rest can come across as is (please see the GitHub repo for these).

Finally, you can remove HelloWorld.vue.

Now that we have the code inside components, in the next part, we’ll add a finish line, and a way for the player to win or lose.

Profile picture

A blog about one man's journey through code… and some pictures of the Peak District

© Paul Michaels 2024