Skip to content

Enemies User Testing and Test Plan 4

manavvbahl edited this page Oct 19, 2021 · 12 revisions

Purpose

The main purpose of this final user test is to find out how users feel about the game as a whole, whether they are satisfied and understand the design, movement, attack and other related content of the enemy, and what they like or dislike. And what users think or suggest about the final version of the game (or enemies).

Process

We conducted user tests following these steps

  • We wrote some interview questions based on the final version of the game we had already made
  • Show the final version of the game to our users and talk to them about the interview questions
  • Run the game and show what will they see and do for our game to the users
  • Introduce the concept of the game to the users
  • Introduce the users to how to play the game
  • Let the user experience
  • In the process of experience let the user say their real-time feelings about the game and enemies
  • Take notes of the user's thoughts and feedback during the conversation (e.g. In addition to recording the answers to the questions, we also need to observe the tone or expression of the users after seeing and playing the game)
  • Conduct interviews with users and get feedback
  • Collate and analyze users' feedback and iterate on our design The order and content of the questions may be changed and adjusted as appropriate depending on the course of the conversation.

Key questions we asked were

  • What do you think of the game? (Easy, interesting, boring…)
  • What do you think of the design of the enemies? (Do the enemies styles conflict with overall game styles?)
  • What do you think of the enemies animation? (Does the enemies animation make the game more interesting?)
  • How do you think the enemies performed in the game?
  • Do you think the enemies’ movements and attacks make sense?
  • For the Rainbow Bridge, we changed it from the centre to the left side covered, but it looks strange. After that, we changed it to the final left and right full-screen style. How do you think it looks now?
  • What do you like/dislike about them?
  • Is there anything confusing about the enemies or the game? (If so, in which section?)
  • Any thoughts or suggestions?

Result

User1

  • I think the game is very interesting. It's easy to understand and play, but it's difficult to win. At present, the space bar attack is not very sensitive. And sometimes it looks like the player will mistakenly touch the content on another runway, then lose HP.
  • I like the enemies’ design very much. The characteristics of each enemy are obvious, the differences are also large, and the colour matching is also interesting. It matches the overall style of the game.
  • Adding enemy animation will enrich the picture of the game and be more interesting than simple pictures. The design of the animation is also excellent, both enemies and players are good.
  • The enemy plays a key role in the game. However, it seems that there are other obstacles on the runway beside the enemy. They are too many so I cant actually see what are.
  • The enemy's actions and attacks are easy to understand, very good.
  • I think the current map is good, I also participated in the previous tests, before there would be enemies go over the map, now this problem has been solved. I think it's a good chance. Nice work!
  • I like the style of the whole game, and the playing method is easy to understand, but to tell the truth, it's a little difficult.
  • There are no questions and doubts.
  • Everything was very good. I hope you can add a brief introduction to the contents of the map except for the enemy. Add to the tutorial page or pop up at the beginning of the game.

User2

  • The game is very fun, the gameplay is relatively simple, the screen is also more harmonious.
  • The design of the enemies and the overall style are consistent, and adding animations can make the game look more vivid than static.
  • Enemies play a more obvious role in the game, the game is mainly to avoid or defeat the enemy.
  • It makes sense. The whole thing is easy to understand.
  • The Rainbow Bridge seems to be in good condition now, there is no problem.
  • Good, the number of enemies is a bit too high, which makes the game a bit difficult. But it's also more challenging, which is good.
  • There's nothing I don't understand.
  • Nothing for now. Good job.

User3

  • The game is fun, the gameplay is simple, but the real play is difficult. The timing of the attack is difficult to control and it is difficult to win.
  • The enemy design is very good, and the overall style is consistent, everyone is pixel wind.
  • The animation was added to make the game more lively, more dynamic.
  • The enemy's performance is good and the attack pattern is uniform and easy to understand. It would be interesting to add more attack modes. But it's good for now.
  • Enemy movements and attacks are well understood.
  • Rainbow bridge? Do you mean the runway? That's good. It would be weird if it were full screen on the left. It looks good now.
  • I like them all, but when the player touches some map contents on the runway, their health decreases, can’t remember what is, even see the tutorial. Maybe decrease the number of them a bit. Sometimes it's hard to think about what I should do, whether to attack, hide or how to respond.
  • So far there's no confusion.
  • Very good, the game is very competitive.

User4

  • It's interesting, exciting and challenging. It's hard to win.
  • The enemy's design is good, and the style is more consistent with the theme.
  • The enemy animation is very interesting and meaningful. Make the overall picture of the game more vivid and flexible.
  • The player's HP is consumed too fast and the game time is too short. But this is not entirely because of the enemy, but also because the number of map contents is a little large.
  • Easy to understand and meaningful. Relatively simple, but also good.
  • Very good, no problem.
  • The player's health is consuming too fast. It's over before I play them much. The other thing is, when I read the tutorial, I found that there are some contents that can increase player’s HP, but it did not work I guess.
  • No, overall they are easy to understand.
  • The protagonist is too small to see the action of the attack. I don't know whether the attack has been completed.

Conclusion

From user feedback, we can see that users are satisfied with our enemies' designs, actions, attack patterns and so on. The new left and right full-screen maps also received positive reviews. As for the game as a whole, users gave good reviews, but also made several suggestions. For example, it is difficult to win the game. There are too many challenges for the player to face, which makes the whole process tense and difficult. But it's also a good thing because it adds to the competitive feel of the game. For future work, this area may need to be considered and modified to achieve a better game effect.

Test Plan

Here are the details of the components to be tested for the enemy feature.

Testing Enemy movement:

The WanderTask() method takes two parameters (wanderRange and waitTime) for a particular movement. (MOVING TOWARDS THE LEFT SIDE IN THIS CASE).

/**
* @param wanderRange Distance in X and Y the entity can move from its position when start() is
*     called.
* @param waitTime How long in seconds to wait between wandering.
*/
public WanderTask(Vector2 wanderRange, float waitTime) {
 this.wanderRange = wanderRange;
 this.waitTime = waitTime;
}

Testing Enemy Animation:

The GhostAnimatorController class was already described in Sprint 3. We plan to test it again since we have modified the atlas file (source) responsible for generating the animations.

The GhostAnimationController class holds the AnimationRenderComponent which is ultimately responsible for the animation of different entities. As shown in the code “dragon” is nothing but the angry_float and float variable which initiates the animation inside animateWander() and animateChase() methods_. These finally reside into every individual enemy entity in NPC factory to be tested.

/**
* This class listens to events relevant to a ghost entity's state and plays the animation when one
* of the events is triggered.
*/
public class GhostAnimationController extends Component {
 AnimationRenderComponent animator;

 @Override
 public void create() {
   super.create();
   animator = this.entity.getComponent(AnimationRenderComponent.class);
   entity.getEvents().addListener("dragon", this::animateWander);
   entity.getEvents().addListener("dragon", this::animateChase);
 }

 void animateWander() {
   animator.startAnimation("dragon");
 }

 void animateChase() {
   animator.startAnimation("dragon");
 }
}

Testing Spawn Point:

The method spawnMonster is present in the RainbowBridge class responsible for spawning all enemy entities from the rightmost corner of the map. The x_random variable holds the value for origin initialized to the value - 30 as shown below, given to nextInt() method.

private void spawnMonster() {
   List<Lane> lanes = terrain.getRainbowBridge().getLanes();
   int a = 0;
       while (a < NUM_MONSTER) {
           for (int i = 0; i < lanes.size(); i++) {
               int y_coordinate = lanes.get(i).getMid();
               int x_random = ThreadLocalRandom.current().nextInt(30, this.MAX_CONTENT_POSITION);
               GridPoint2 Ghost = new GridPoint2(x_random, y_coordinate);
               GridPoint2 LittleGreen = new GridPoint2(x_random, y_coordinate);
               GridPoint2 Dragon = new GridPoint2(x_random, y_coordinate);
               GridPoint2 Demon = new GridPoint2(x_random, y_coordinate);
               int random_index = ThreadLocalRandom.current().nextInt(0, 4);
           switch(random_index) {
               case 0:
                   Entity littleGreen = NPCFactory.createLittleGreen(player);
                   spawnEntityAt(littleGreen, LittleGreen, true, true);
                   break;
               case 1:
                   Entity ghost = NPCFactory.createGhost(player);
                   spawnEntityAt(ghost, Ghost, true, true);
                   break;
               case 2:
                   Entity demon = NPCFactory.createDemon(player);
                   spawnEntityAt(demon,Demon, true, true);
                   break;
               case 3:
                   Entity dragon = NPCFactory.createGhostKing(player);
                   spawnEntityAt(dragon,Dragon, true, true);
                   break;
           }
           a++;
       }
   }
}

Table of Contents

Home

Game Design

Player Health System, Scoring System & Game Over
  • Enemies

Enemies
Enemies testing and testing plan
Player Interaction Sprint1 & Sprint2
Player Interaction Sprint3
Player Interaction Sprint4
Map contents Sprint1-3
Map contents Sprint4

Game Features

Game Engine

Getting Started

Entities and Components

Service Locator

Loading Resources

Logging

Unit Testing

Debug Terminal

Input Handling

UI

Animations

Audio

AI

Physics

Game Screens and Areas

Terrain

Concurrency & Threading

Settings

Troubleshooting

MacOS Setup Guide

Clone this wiki locally