## Tuesday, 14 November 2017

Previous: Marketing tips

As final step in our basic game development, we will add code to move the box right and left , add lose or win for better game play and generate box from random points. this clearly marks our levels but you can also do level based on another criteria say for every 100 boxes collected increase speed.

Add  variable to store how fast we move the box
public float MovementSpeed = 1; //speed in meter per second

``Vector3 moveDir = Vector3.zero;``
`` ``

moveDir.x = Input.GetAxis("Horizontal"); // get result of AD keys in X
This get the horizontal x distance to move based on key pressed.
` `
then move our box
transform.position += moveDir * MovementSpeed * Time.deltaTime;

`` ``
`` ``
``You can test py pressing play button and use arrow keys``
`` ``
``To support touch screen on android ,add` the following variables`
```
private Vector3 fp;

private Vector3 lp;

private float dragDistance=0.2f;

`transform.position += moveDir * MovementSpeed * Time.deltaTime; `
` code`
` `
```See in the code below section for complete code
#if UNITY_ANDROID || UNITY_IPHONE  // Cap letters

#endif ` `` ````
`` ``
`` ``
``To check lose and win,  add a box below our catchup, enlarge to ``
``fill screen width and reduce height and call it loss ``and give it a ``
``tag loss``
``````
``````
`int boxeslost =0;` ``
`` ``
``add the following in the update below``

if (collid) {
if (boxdropped <= totalboxes) {
Instantiate(dropbox, new Vector2(0,2), Quaternion.identity);
}
collid = false;
}

if (GameObject.FindGameObjectWithTag ("box").transform.position.y < transform.position.y + 0.1) {
Destroy (GameObject.FindGameObjectWithTag ("box"));
collid = true;
boxeslost += 1;
}
``` ```

``````
```You will be getting position of box and compare with catch up. ```
```If below, destroy and add boxes lost

```
``Add this in GUI function``
``````

```GUI.Label (new Rect (10,30, 300, 50), "Boxes lost: " + boxeslost);```

```` ````
We now generate from random places
add new variable at start of update
int rand = Random.Range (-5,5);
change our x value in
Instantiate(dropbox, new Vector2(rand,2), Quaternion.identity);

This is just a basic game. You can advance it further like adding
1. random movement downwards by changing x value
2. introduce obstacles and more

The complete code

using UnityEngine;
using System.Collections;

public class CatchBox : MonoBehaviour {
int boxescollected =0;
int boxeslost =0;
int totalboxes =40,boxdropped=0;
public GameObject dropbox;
bool collid = false;

private Vector3 fp;
private Vector3 lp;
private float dragDistance=0.2f;
public float MovementSpeed = 1;
Vector3 moveDir = Vector3.zero;

// Use this for initialization
void Start () {
collid = true;

}

// Update is called once per frame
void Update () {

int rand = Random.Range (-5,5);
if (collid) {
if (boxdropped <= totalboxes) {
Instantiate(dropbox, new Vector2(rand,2), Quaternion.identity);
}
collid = false;
}

if (GameObject.FindGameObjectWithTag ("box").transform.position.y < transform.position.y + 0.1) {
Destroy (GameObject.FindGameObjectWithTag ("box"));
collid = true;
boxeslost += 1;
}

moveDir.x = Input.GetAxis("Horizontal"); // get result of AD keys in X

#if UNITY_ANDROID || UNITY_IPHONE  // Cap letters

if (Input.touchCount>0) // user is touching the screen with a single touch
{
Touch touch = Input.GetTouch(0); // get the touch
if (touch.phase == TouchPhase.Began) //check for the first touch
{
fp = touch.position;
lp = touch.position;
}
else if (touch.phase == TouchPhase.Moved) // update the last position based on where they moved
{
lp = touch.position;
}
else if (touch.phase == TouchPhase.Ended) //check if the finger is removed from the screen
{
lp = touch.position;  //last touch position. Ommitted if you use list

//Check if drag distance is greater than 20% of the screen height
if (Mathf.Abs(lp.x - fp.x) > dragDistance || Mathf.Abs(lp.y - fp.y) > dragDistance)
{//It's a drag
//check if the drag is vertical or horizontal

if (Mathf.Abs(lp.x - fp.x) > Mathf.Abs(lp.y - fp.y))
{   //If the horizontal movement is greater than the vertical movement...
if ((lp.x > fp.x))  //If the movement was to the right)
{
//Right swipe
// move box right
MovementSpeed = MovementSpeed;
}
else
{   //Left swipe
// move box left
MovementSpeed = MovementSpeed * -1;
}

}
else
{   //the vertical movement is greater than the horizontal movement
if (lp.y > fp.y)  //If the movement was up
{   //Up swipe
}
else
{
// you can increase speed to advance levels
}

}
}
}
else
{   //It's a tap as the drag distance is less than 20% of the screen height

//you can tap code to attack obstacle and clear way on advance levels
}
}

#endif

transform.position += moveDir * MovementSpeed * Time.deltaTime;
}

void OnCollisionEnter(Collision other)
{
if (other.gameObject.tag == "box") {
boxescollected += 1;
Destroy (other.gameObject);
collid = true;
}

}
void OnGUI()
{
GUI.Label (new Rect (10,10, 300, 50), "Boxes collected: " + boxescollected);
GUI.Label (new Rect (10,30, 300, 50), "Boxes lost: " + boxeslost);
}

}