0% found this document useful (0 votes)
20 views44 pages

Mad File

Uploaded by

Ashish Kulhari
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
20 views44 pages

Mad File

Uploaded by

Ashish Kulhari
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 44

GOVT.

ENGINEERING COLLEGE BIKANER


Department of Computer Science Engineering
(Cloud computing and Application Development)

PRACTICALS

Experiment
No.
1. To study Android Studio and android studio installation. Create
―Hello World application.
3. Design simple GUI application with activity and intents e.g.
calculator.
7. Write an application that draws basic graphical primitives on the
screen
5. Develop a native application that uses GPS location information
9. Design a gaming application

SUBMITTED TO :- ABHISHEK SINGH KILAK SIR

SUBMITTED BY :- AYUSH AJMERA


BRANCH :- CSE
ROLL NO. :- 18EEBCS013
EXPERIMENT-1

Create “Hello World” application.

AIM: Design an application of ―Hello World‖

PROCEDURE:
1. Open Eclipse IDE.
2. Create the project Ex_No_1.
3. Go to package explorer in the left hand side. Select the project Ex_No_1.
4. Go to res folder and select layout. Double click the activity_main.xml file.
5. Now you can see the Graphical layout window.
6. Drag and drop the Textview.
7. Again go to package explorer in the left hand side. Select the project Ex_No_1.
8. Go to src folder. Double click the MainActivity.java file.
9. In java file write the activities done by the application such as, actions of button.
10. Finally run the Android application

PROGRAM:
Acitivity_main.xml:
?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayou
t
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

MainActivity.java
package com.example.myapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState)
{ super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
EXPERIMENT-3

Design simple GUI application with activity and intents e.g. calculator

AIM: Design simple GUI application with activity and intents e.g. calculator

PROCEDURE:
1. Open Eclipse IDE.
2. Create the project Ex_No_3.
3. Go to package explorer in the left hand side. Select the project Ex_No_3.
4. Go to res folder and select layout. Double click the activity_main.xml file.
5. Now you can see the Graphical layout window.
6. Drag and drop the following components:
a. Two EditTexts with hints. Enter the first number and enter the second number
b. Four Buttons with labeled as ADD, SUB, MUL and DIV
7. Again go to package explorer in the left hand side. Select the project Ex_No_3.
8. Go to src folder. Double click the MainActivity.java file.
9. In java file write the activities done by the application such as, actions of button.
10. Finally run the Android application

PROGRAM:
activity_main.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.ex_no_3.MainActivity" >
<EditText
android:id="@+id/editText1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:ems="10"
android:hint="Enter the first number"
tools:ignore="TextFields,HardcodedText" >
<requestFocus />
</EditText>
<EditText
android:id="@+id/editText2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_below="@+id/editText1"
android:ems="10"
android:hint="Enter the second number"
tools:ignore="TextFields,HardcodedText" />
<Button
android:id="@+id/button4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_below="@+id/button3"
android:text="DIV"
tools:ignore="HardcodedText" />
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_below="@+id/editText2"
android:text="ADD"
tools:ignore="HardcodedText" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_below="@+id/button1"
android:text="SUB"
tools:ignore="HardcodedText" />
<Button
android:id="@+id/button3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_below="@+id/button2"
android:text="MUL"
tools:ignore="HardcodedText" />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/button4"
android:layout_centerHorizontal="true"
android:layout_marginTop="22dp"
android:text=""
android:textAppearance="?android:attr/textAppearanceLarge" />
</RelativeLayout>

MainActivity.java:

package com.example.ex_no_3;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle; import
android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends ActionBarActivity
{ int n1,n2;
float num1,num2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final EditText e1=(EditText)findViewById(R.id.editText1);
final EditText e2=(EditText)findViewById(R.id.editText2);
Button b1=(Button)findViewById(R.id.button1); Button
b2=(Button)findViewById(R.id.button2);
Button b3=(Button)findViewById(R.id.button3);
Button b4=(Button)findViewById(R.id.button4);
final TextView t=(TextView)findViewById(R.id.textView1);
b1.setOnClickListener(
new OnClickListener()
{
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
n1=Integer.parseInt(e1.getText().toString());
n2=Integer.parseInt(e2.getText().toString());
t.setText(e1.getText().toString()+"+"+e2.getText().toString()+" = "+(n1+n2));
}
});
b2.setOnClickListener(
new OnClickListener()
{
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
n1=Integer.parseInt(e1.getText().toString());
n2=Integer.parseInt(e2.getText().toString());
t.setText(e1.getText().toString()+"-"+e2.getText().toString()+"=
"+(n1-n2));
}
});
b3.setOnClickListener(
new OnClickListener()
{
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
n1=Integer.parseInt(e1.getText().toString());
n2=Integer.parseInt(e2.getText().toString());
t.setText(e1.getText().toString()+"*"+e2.getText().toString()+" =
"+(n1*n2));
}
});
b4.setOnClickListener(
new OnClickListener()
{
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
num1=Float.parseFloat(e1.getText().toString());
num2=Float.parseFloat(e2.getText().toString());
t.setText(e1.getText().toString()+"/"+e2.getText().toString()+" =
"+(num1/num2));
}
});
}
}

OUTPUT
EXPERIMENT-7

Write an application that draws basic graphical primitives on the screen

AIM: Write an application that draws basic graphical primitives on the screen

PROCEDURE:
1. Open Eclipse IDE.
2. Create the project Ex_no_5.
3. Go to package explorer in the left hand side. Select the project Ex_no_5.
4. Go to res folder and select layout. Double click the activity_main.xml file.
5. Now you can see the Graphical layout window.
6. Drag and drop only one ImageView
7. Again go to package explorer in the left hand side. Select the project Ex_No_5.
8. Go to src folder. Double click the MainActivity.java file.
9. In java file write the activities done by the application such as drawing the graphical primitives.
10. Finally run the android application.

PROGRAMS:

activity_main.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.ex_no_5.MainActivity" >
<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:src="@drawable/ic_launcher"
tools:ignore="ContentDescription" />
</RelativeLayout>

MainActivity.java:
package com.example.ex_no_5;

import android.support.v7.app.ActionBarActivity;
import android.annotation.SuppressLint;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.view.Display;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.ImageView;
@SuppressLint("ClickableViewAccessibility")
public class MainActivity extends ActionBarActivity implements OnTouchListener
{ ImageView iv;
Bitmap b;
Canvas c;
Paint p;
float dx=0,dy=0,ux=0,uy=0;
@SuppressWarnings("deprecation")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
iv=(ImageView)this.findViewById(R.id.imageView1);
Display d = getWindowManager().getDefaultDisplay();
float dw = d.getWidth();
float dh = d.getHeight();
b = Bitmap.createBitmap((int) dw, (int) dh,Bitmap.Config.ARGB_8888);
c = new Canvas(b);
p = new Paint();
p.setColor(Color.BLUE);
iv.setImageBitmap(b);
iv.setOnTouchListener(this);
}
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method
stub int action = event.getAction();
switch (action)
{
case MotionEvent.ACTION_DOWN:
dx = event.getX();
dy = event.getY();
break;
case MotionEvent.ACTION_MOVE:
break;
case MotionEvent.ACTION_UP:
ux = event.getX(); uy =
event.getY();
c.drawLine(dx, dy, ux, uy, p);
iv.invalidate();
break;
case MotionEvent.ACTION_CANCEL:
break;
default:
break;
}
return true;
}
}
OUTPUT:
EXPERIMENT-5

Develop a native application that uses GPS location information

AIM: Develop a native application that uses GPS location information

PROCEDURE:
1. Open Eclipse IDE.
2. Create the project Ex_No_7.
3. Go to package explorer in the left hand side. Select the project Ex_No_7.
4. Go to res folder and select layout. Double click the activity_main.xml file.
5. Now you can see the Graphical layout window.
6. Drag and drop the following components:
a. One TextView with text as Current Location
b. Two TextViews without any texts.
7. Again go to package explorer in the left hand side. Select the project Ex_No_7.
8. Go to src folder. Double click the MainActivity.java file.
9. In java file write the activities done by the application such as finding current location and print them.
10. Get the following permission in AndroidManifest.xml file:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
11. Finally run the android application.

PROGRAMS:
activity_main.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.ex_no_7.MainActivity" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_marginTop="114dp"
android:text=""
android:textAppearance="?android:attr/textAppearanceMedium"
tools:ignore="HardcodedText" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView1"
android:layout_alignParentRight="true"
android:layout_below="@+id/textView1"
android:layout_marginTop="51dp"
android:text=""
android:textAppearance="?android:attr/textAppearanceMedium"
tools:ignore="HardcodedText" />
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="47dp"
android:text="Current Location"
android:textAppearance="?android:attr/textAppearanceLarge"
tools:ignore="HardcodedText" />
</RelativeLayout>

MainActivity.java:
package com.example.ex_no_7;
import android.support.v7.app.ActionBarActivity;
import android.content.Context;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends ActionBarActivity implements
LocationListener{ @Override
protected void onCreate(Bundle savedInstanceState)
{ super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LocationManager lm=(LocationManager)getSystemService(Context.LOCATION_SERVICE);
Criteria c=new Criteria();
String s=lm.getBestProvider(c, false);
if(s!=null && !s.equals(""))
{
Location l=lm.getLastKnownLocation(s);
lm.requestLocationUpdates(s, 20000, 1, this);
if(l!=null)
onLocationChanged(l);
else
Toast.makeText(getApplicationContext(), "Location can't be
retrieved !!!", Toast.LENGTH_LONG).show();
}
else
Toast.makeText(getApplicationContext(), "Provider not found
!!!", Toast.LENGTH_LONG).show();
}
@Override
public void onLocationChanged(Location arg0) {
// TODO Auto-generated method stub
TextView t1=(TextView)findViewById(R.id.textView1);
t1.setText("Latitude : \n"+arg0.getLatitude());
TextView t2=(TextView)findViewById(R.id.textView2);
t2.setText("Longitude : \n"+arg0.getLongitude());
}
@Override
public void onProviderDisabled(String arg0) {
// TODO Auto-generated method stub
}
@Override
public void onProviderEnabled(String arg0) {
// TODO Auto-generated method stub
}
@Override
public void onStatusChanged(String arg0, int arg1, Bundle arg2)
{ // TODO Auto-generated method stub
}
}

OUTPUT
EXPERIMENT-9

Design a gaming application

Styles.xml

<resources>

<!-- Base application theme. -->


<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="windowNoTitle">true</item>
<item name="windowActionBar">false</item>
<item name="android:windowFullscreen">true</item>
<item name="android:windowContentOverlay">@null</item>
</style>

</resources>

activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:background="@drawable/splash"
tools:context="net.simplifiedcoding.simplegame.MainActivity">

<ImageButton
android:id="@+id/buttonPlay"
android:background="@drawable/playnow"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/buttonScore"
android:layout_centerHorizontal="true" />

<ImageButton
android:id="@+id/buttonScore"
android:background="@drawable/highscore"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true" />

</RelativeLayout>

  When we tap the Play Now button our Game Activity will start.
 Now come inside MainActivity.java and write the following code.

MainActivity.java
package net.simplifiedcoding.simplegame;

import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.media.Image;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageButton;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

//image button
private ImageButton buttonPlay;

@Override
protected void onCreate(Bundle savedInstanceState)
{ super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

//setting the orientation to landscape


setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

//getting the button


buttonPlay = (ImageButton) findViewById(R.id.buttonPlay);

//adding a click listener


buttonPlay.setOnClickListener(this);
}

@Override
public void onClick(View v) {

//starting game activity


startActivity(new Intent(this, GameActivity.class));
}
}

GameView.java

public class GameView extends SurfaceView implements Runnable {

//boolean variable to track if the game is playing or not


volatile boolean playing;

//the game thread


private Thread gameThread = null;

//Class constructor
public GameView(Context context) {
super(context);

@Override
public void run() {
while (playing) {
//to update the frame
update();

//to draw the frame


draw();

//to control
control();
}
}

private void update() {

private void draw() {

private void control() {


try {
gameThread.sleep(17);
} catch (InterruptedException e) {
e.printStackTrace();
}
}

public void pause() {


//when the game is paused
//setting the variable to false
playing = false;
try {
//stopping the thread
gameThread.join();
} catch (InterruptedException e) {
}
}

public void resume() {


//when the game is resumed
//starting the thread again
playing = true;
gameThread = new Thread(this);
gameThread.start();
}
}

 The above class is our GameView class. It is the actual game panel where we will play the game.
The class is implementing Runnable interface. We have a volatile boolean type variable running
that will track whether the game is running or not. After that we have our gameThread, it is the
main game loop. Then we have the constructor to the class. We are not doing anything inside the
constructor right now. Then we have the overriden method run(), here we are running a loop
 until the playing variable running is true. Inside the loop we are calling the following methods.
  update() -> Here we will update the coordinate of our characters.
  draw() -> Here we will draw the characters to the canvas.
 control() -> This method will control the frames per seconds drawn. Here we are calling the delay
 method of Thread. And this is actually making our frame rate to aroud 60fps.
  After these we have two more methods.
  pause() -> To pause the game, we are stopping the gameThread here.
 resume() -> To resume the game, here we are starting the gameThread.
GameActivity.java
package net.simplifiedcoding.spacefighter;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class GameActivity extends AppCompatActivity {

//declaring gameview
private GameView gameView;

@Override
protected void onCreate(Bundle savedInstanceState)
{ super.onCreate(savedInstanceState);

//Initializing game view object


gameView = new GameView(this);

//adding it to contentview
setContentView(gameView);
}

//pausing the game when activity is paused


@Override
protected void onPause() {
super.onPause();
gameView.pause();
}

//running the game when activity is resumed


@Override
protected void onResume() {
super.onResume();
gameView.resume();
}
}

Player.java

package net.simplifiedcoding.spacefighter;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
public class Player {
//Bitmap to get character from image
private Bitmap bitmap;

//coordinates
private int x;
private int y;

//motion speed of the character


private int speed = 0;

//constructor
public Player(Context context) {
x = 75;
y = 50;
speed = 1;

//Getting bitmap from drawable resource


bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.player);
}

//Method to update coordinate of character


public void update(){
//updating x coordinate
x++;
}

/*
* These are getters you can generate it autmaticallyl
* right click on editor -> generate -> getters
* */
public Bitmap getBitmap() {
return bitmap;
}

public int getX() {


return x;
}

public int getY() {


return y;
}

public int getSpeed() {


return speed;
}
}

Drawing Player to GameView: To draw the player to our GameView you need to come back to
the GameView.java class and modify it as below.

GameView.java

public class GameView extends SurfaceView implements Runnable {

volatile boolean playing;


private Thread gameThread = null;

//adding the player to this class


private Player player;

//These objects will be used for drawing


private Paint paint;
private Canvas canvas;
private SurfaceHolder surfaceHolder;

public GameView(Context context) {


super(context);

//initializing player object


player = new Player(context);

//initializing drawing objects


surfaceHolder = getHolder();
paint = new Paint();
}

@Override
public void run() {
while (playing) {
update();
draw();
control();
}
}

private void update() {


//updating player position
player.update();
}
private void draw() {
//checking if surface is valid
if (surfaceHolder.getSurface().isValid()) {
//locking the canvas
canvas = surfaceHolder.lockCanvas();
//drawing a background color for canvas
canvas.drawColor(Color.BLACK);
//Drawing the player
canvas.drawBitmap(
player.getBitmap(),
player.getX(),
player.getY(),
paint);
//Unlocking the canvas
surfaceHolder.unlockCanvasAndPost(canvas);
}
}

private void control() {


try {
gameThread.sleep(17);
} catch (InterruptedException e)
{ e.printStackTrace();
}
}

public void pause() {


playing = false;
try {
gameThread.join();
} catch (InterruptedException e) {
}
}

public void resume() {


playing = true;
gameThread = new Thread(this);
gameThread.start();
}
}

Output without Control:


Adding Controls:
@Override
public boolean onTouchEvent(MotionEvent motionEvent) {
switch (motionEvent.getAction() & MotionEvent.ACTION_MASK)
{ case MotionEvent.ACTION_UP:
//When the user presses on the screen
//we will do something here
break;
case MotionEvent.ACTION_DOWN:
//When the user releases the screen
//do something here
break;
}
return true;
}

Player.java

public class Player {


private Bitmap bitmap;
private int x;
private int y;
private int speed = 0;

//boolean variable to track the ship is boosting or not


private boolean boosting;

//Gravity Value to add gravity effect on the ship


private final int GRAVITY = -10;

//Controlling Y coordinate so that ship won't go outside the screen


private int maxY;
private int minY;

//Limit the bounds of the ship's speed


private final int MIN_SPEED = 1;
private final int MAX_SPEED = 20;

public Player(Context context) {


x = 75;
y = 50;
speed = 1;
bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.player);

//setting the boosting value to false initially


boosting = false;
}

//setting boosting true


public void setBoosting() {
boosting = true;
}

//setting boosting false


public void stopBoosting() {
boosting = false;
}

public void update() {


//if the ship is boosting
if (boosting) {
//speeding up the ship
speed += 2;
} else {
//slowing down if not boosting
speed -= 5;
}
//controlling the top speed
if (speed > MAX_SPEED) {
speed = MAX_SPEED;
}
//if the speed is less than min speed
//controlling it so that it won't stop completely
if (speed < MIN_SPEED) {
speed = MIN_SPEED;
}

//moving the ship down


y -= speed + GRAVITY;

//but controlling it also so that it won't go off the


screen if (y < minY) {
y = minY;
}
if (y > maxY) {
y = maxY;
}
}

public Bitmap getBitmap() {


return bitmap;
}

public int getX() {


return x;
}

public int getY() {


return y;
}

public int getSpeed() {


return speed;
}
}

GameActivity.java

@Override
protected void onCreate(Bundle savedInstanceState)
{ super.onCreate(savedInstanceState);

//Getting display object


Display display = getWindowManager().getDefaultDisplay();

//Getting the screen resolution into point object


Point size = new Point();
display.getSize(size);

//Initializing game view object


//this time we are also passing the screen size to the GameView constructor
gameView = new GameView(this, size.x, size.y);

//adding it to contentview
setContentView(gameView);
}

Now to complete adding the boosters come inside GameView.java file and modify the onTouchEvent()
as follows.

@Override
public boolean onTouchEvent(MotionEvent motionEvent) {
switch (motionEvent.getAction() & MotionEvent.ACTION_MASK)
{ case MotionEvent.ACTION_UP:
//stopping the boosting when screen is released
player.stopBoosting();
break;
case MotionEvent.ACTION_DOWN:
//boosting the space jet when screen is pressed
player.setBoosting();
break;
}
return true;
}

Now we will add background stars to make the background looks animating.

package net.simplifiedcoding.spacefighter;

import java.util.Random;

public class Star {


private int x;
private int y;
private int speed;

private int maxX;


private int maxY;
private int minX;
private int minY;

public Star(int screenX, int screenY) {


maxX = screenX;
maxY = screenY;
minX = 0;
minY = 0;
Random generator = new Random();
speed = generator.nextInt(10);

//generating a random coordinate


//but keeping the coordinate inside the screen size
x = generator.nextInt(maxX); y =
generator.nextInt(maxY);
}

public void update(int playerSpeed) {


//animating the star horizontally left side
//by decreasing x coordinate with player speed
x -= playerSpeed;
x -= speed;
//if the star reached the left edge of the screen
if (x < 0) {
//again starting the star from right edge
//this will give a infinite scrolling background
effect x = maxX;
Random generator = new Random();
y = generator.nextInt(maxY);
speed = generator.nextInt(15);
}
}

public float getStarWidth() {


//Making the star width random so that
//it will give a real look
float minX = 1.0f;
float maxX = 4.0f;
Random rand = new Random();
float finalX = rand.nextFloat() * (maxX - minX) +
minX; return finalX;
}

public int getX() {


return x;
}

public int getY() {


return y;
}
}

GameView.java

public class GameView extends SurfaceView implements Runnable {

volatile boolean playing;


private Thread gameThread = null;
private Player player;

private Paint paint;


private Canvas canvas;
private SurfaceHolder surfaceHolder;

//Adding an stars list


private ArrayList<Star> stars = new
ArrayList<Star>();

public GameView(Context context, int screenX, int screenY) {


super(context);
player = new Player(context, screenX, screenY);

surfaceHolder = getHolder();
paint = new Paint();

//adding 100 stars you may increase the number


int starNums = 100;
for (int i = 0; i < starNums; i++) {
Star s = new Star(screenX, screenY);
stars.add(s);
}
}

@Override
public void run() {
while (playing) {
update();
draw();
control();
}
}

private void update() {


player.update();

//Updating the stars with player speed


for (Star s : stars) {
s.update(player.getSpeed());
}
}

private void draw() {


if (surfaceHolder.getSurface().isValid()) {
canvas = surfaceHolder.lockCanvas();
canvas.drawColor(Color.BLACK);

//setting the paint color to white to draw the stars


paint.setColor(Color.WHITE);

//drawing all stars


for (Star s : stars) {
paint.setStrokeWidth(s.getStarWidth());
canvas.drawPoint(s.getX(), s.getY(), paint);
}
canvas.drawBitmap(
player.getBitmap(),
player.getX(),
player.getY(),
paint);
surfaceHolder.unlockCanvasAndPost(canvas);
}
}

private void control() {


try {
gameThread.sleep(17);
} catch (InterruptedException e) {
e.printStackTrace();
}
}

public void pause() {


playing = false;
try {
gameThread.join();
} catch (InterruptedException e) {
}
}

public void resume() {


playing = true;
gameThread = new Thread(this);
gameThread.start();
}

@Override
public boolean onTouchEvent(MotionEvent motionEvent) {
switch (motionEvent.getAction() & MotionEvent.ACTION_MASK)
{ case MotionEvent.ACTION_UP:
player.stopBoosting();
break;
case MotionEvent.ACTION_DOWN:
player.setBoosting();
break;
}
return true;
}
}
Create a new java class named Enemy and write the following code.

package net.simplifiedcoding.spacefighter;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Rect;

import java.util.Random;

public class Enemy {

//bitmap for the enemy


//we have already pasted the bitmap in the drawable folder
private Bitmap bitmap;

//x and y coordinates


private int x;
private int y;
//enemy speed
private int speed = 1;

//min and max coordinates to keep the enemy inside the screen
private int maxX;
private int minX;

private int maxY;


private int minY;

public Enemy(Context context, int screenX, int screenY)


{ //getting bitmap from drawable resource
bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.enemy);

//initializing min and max coordinates


maxX = screenX;
maxY = screenY;
minX = 0;
minY = 0;

//generating a random coordinate to add enemy


Random generator = new Random();
speed = generator.nextInt(6) + 10;
x = screenX;
y = generator.nextInt(maxY) - bitmap.getHeight();

public void update(int playerSpeed) {


//decreasing x coordinate so that enemy will move right to left
x -= playerSpeed;
x -= speed;
//if the enemy reaches the left edge
if (x < minX - bitmap.getWidth()) {
//adding the enemy again to the right edge
Random generator = new Random();
speed = generator.nextInt(10) + 10;
x = maxX;
y = generator.nextInt(maxY) - bitmap.getHeight();
}
}
//getters
public Bitmap getBitmap() {
return bitmap;
}

public int getX() {


return x;
}

public int getY() {


return y;
}

public int getSpeed() {


return speed;
}

We need to add the enemies in the GameView now. So come inside GameView.java and modify the
code as follows.

public class GameView extends SurfaceView implements Runnable {

volatile boolean playing;


private Thread gameThread = null;
private Player player;

private Paint paint;


private Canvas canvas;
private SurfaceHolder surfaceHolder;

//Adding enemies object array


private Enemy[] enemies;

//Adding 3 enemies you may increase the size


private int enemyCount = 3;

private ArrayList<Star> stars = new


ArrayList<Star>();

public GameView(Context context, int screenX, int screenY) {


super(context);
player = new Player(context, screenX, screenY);
surfaceHolder = getHolder();
paint = new Paint();

int starNums = 100;


for (int i = 0; i < starNums; i++) {
Star s = new Star(screenX, screenY);
stars.add(s);
}

//initializing enemy object array


enemies = new Enemy[enemyCount];
for(int i=0; i<enemyCount; i++){
enemies[i] = new Enemy(context, screenX, screenY);
}
}

@Override
public void run() {
while (playing) {
update();
draw();
control();
}
}

private void update() {


player.update();
for (Star s : stars) {
s.update(player.getSpeed());
}

//updating the enemy coordinate with respect to player speed


for(int i=0; i<enemyCount; i++){
enemies[i].update(player.getSpeed());
}
}

private void draw() {


if (surfaceHolder.getSurface().isValid()) {
canvas = surfaceHolder.lockCanvas();
canvas.drawColor(Color.BLACK);

paint.setColor(Color.WHITE);

for (Star s : stars) {


paint.setStrokeWidth(s.getStarWidth());
canvas.drawPoint(s.getX(), s.getY(), paint);
}

canvas.drawBitmap(
player.getBitmap(),
player.getX(),
player.getY(),
paint);

//drawing the enemies


for (int i = 0; i < enemyCount; i++) {
canvas.drawBitmap(
enemies[i].getBitmap(),
enemies[i].getX(),
enemies[i].getY(),
paint
);
}

surfaceHolder.unlockCanvasAndPost(canvas);

}
}

private void control() {


try {
gameThread.sleep(17);
} catch (InterruptedException e)
{ e.printStackTrace();
}
}

public void pause() {


playing = false;
try {
gameThread.join();
} catch (InterruptedException e) {
}
}

public void resume() {


playing = true;
gameThread = new Thread(this);
gameThread.start();
}

@Override
public boolean onTouchEvent(MotionEvent motionEvent) {
switch (motionEvent.getAction() & MotionEvent.ACTION_MASK)
{ case MotionEvent.ACTION_UP:
player.stopBoosting();
break;
case MotionEvent.ACTION_DOWN:
player.setBoosting();
break;
}
return true;
}
}

Detecting Collision
public class Enemy {
private Bitmap bitmap;
private int x;
private int y;
private int speed = 1;
private int maxX;
private int minX;

private int maxY;


private int minY;

//creating a rect object


private Rect detectCollision;

public Enemy(Context context, int screenX, int screenY) {


bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.enemy);
maxX = screenX;
maxY = screenY;
minX = 0;
minY = 0;
Random generator = new Random();
speed = generator.nextInt(6) + 10;
x = screenX;
y = generator.nextInt(maxY) - bitmap.getHeight();

//initializing rect object


detectCollision = new Rect(x, y, bitmap.getWidth(), bitmap.getHeight());
}

public void update(int playerSpeed) {


x -= playerSpeed;
x -= speed;
if (x < minX - bitmap.getWidth()) {
Random generator = new Random();
speed = generator.nextInt(10) + 10;
x = maxX;
y = generator.nextInt(maxY) - bitmap.getHeight();
}

//Adding the top, left, bottom and right to the rect object
detectCollision.left = x;
detectCollision.top = y;
detectCollision.right = x + bitmap.getWidth();
detectCollision.bottom = y + bitmap.getHeight();
}

//adding a setter to x coordinate so that we can change it after collision


public void setX(int x){
this.x = x;
}

//one more getter for getting the rect object


public Rect getDetectCollision() {
return detectCollision;
}

//getters
public Bitmap getBitmap() {
return bitmap;
}

public int getX() {


return x;
}

public int getY() {


return y;
}

public int getSpeed() {


return speed;
}

Player.java

public class Player {


private Bitmap bitmap;
private int x;
private int y;
private int speed = 0;
private boolean boosting;
private final int GRAVITY = -10;
private int maxY;
private int minY;

private final int MIN_SPEED = 1;


private final int MAX_SPEED = 20;

private Rect detectCollision;

public Player(Context context, int screenX, int screenY)


{ x = 75;
y = 50;
speed = 1;
bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.player);
maxY = screenY - bitmap.getHeight();
minY = 0;
boosting = false;

//initializing rect object


detectCollision = new Rect(x, y, bitmap.getWidth(), bitmap.getHeight());
}

public void setBoosting() {


boosting = true;
}

public void stopBoosting() {


boosting = false;
}

public void update() {


if (boosting) {
speed += 2;
} else { speed
-= 5;
}

if (speed > MAX_SPEED) {


speed = MAX_SPEED;
}

if (speed < MIN_SPEED) {


speed = MIN_SPEED;
}

y -= speed + GRAVITY;

if (y < minY) {
y = minY;
}
if (y > maxY) {
y = maxY;
}

//adding top, left, bottom and right to the rect object


detectCollision.left = x;
detectCollision.top = y;
detectCollision.right = x + bitmap.getWidth();
detectCollision.bottom = y + bitmap.getHeight();

//one more getter for getting the rect object


public Rect getDetectCollision() {
return detectCollision;
}

public Bitmap getBitmap() {


return bitmap;
}

public int getX() {


return x;
}

public int getY() {


return y;
}

public int getSpeed() {


return speed;
}
}

Now to complete the collision detection, again to inside GameView.java file and modify the update()
method as follows.
private void update() {
player.update();
for (Star s : stars) {
s.update(player.getSpeed());
}

for(int i=0; i<enemyCount; i++){


enemies[i].update(player.getSpeed());

//if collision occurrs with player


if (Rect.intersects(player.getDetectCollision(), enemies[i].getDetectCollision()))
{ //moving enemy outside the left edge
enemies[i].setX(-200);
}
}
}

Adding Blast Effect

Boom.java

package net.simplifiedcoding.spacefighter;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;

public class Boom {

//bitmap object
private Bitmap bitmap;

//coordinate variables
private int x;
private int y;

//constructor
public Boom(Context context) {
//getting boom image from drawable resource
bitmap = BitmapFactory.decodeResource
(context.getResources(), R.drawable.boom);

//setting the coordinate outside the screen


//so that it won't shown up in the screen
//it will be only visible for a fraction of second
//after collission
x = -250;
y = -250;
}

//setters for x and y to make it visible at the place of collision


public void setX(int x) {
this.x = x;
}

public void setY(int y) {


this.y = y;
}

//getters
public Bitmap getBitmap() {
return bitmap;
}

public void setBitmap(Bitmap bitmap) {


this.bitmap = bitmap;
}

public int getX() {


return x;
}

public int getY() {


return y;
}

Now again come inside GameView.java file and modify the code as follow.

public class GameView extends SurfaceView implements Runnable {

volatile boolean playing;


private Thread gameThread = null;
private Player player;

private Paint paint;


private Canvas canvas;
private SurfaceHolder surfaceHolder;

private Enemy[] enemies;

private int enemyCount = 3;

private ArrayList<Star> stars = new


ArrayList<Star>();

//defining a boom object to display blast


private Boom boom;

public GameView(Context context, int screenX, int screenY) {


super(context);
player = new Player(context, screenX, screenY);

surfaceHolder = getHolder();
paint = new Paint();

int starNums = 100;


for (int i = 0; i < starNums; i++) {
Star s = new Star(screenX, screenY);
stars.add(s);
}

enemies = new Enemy[enemyCount];


for (int i = 0; i < enemyCount; i++) {
enemies[i] = new Enemy(context, screenX, screenY);
}

//initializing boom object


boom = new Boom(context);
}

@Override
public void run() {
while (playing) {
update();
draw();
control();
}
}

private void update() {


player.update();

//setting boom outside the screen


boom.setX(-250);
boom.setY(-250);

for (Star s : stars) {


s.update(player.getSpeed());
}

for (int i = 0; i < enemyCount; i++) {


enemies[i].update(player.getSpeed());

//if collision occurrs with player


if (Rect.intersects(player.getDetectCollision(), enemies[i].getDetectCollision())) {

//displaying boom at that location


boom.setX(enemies[i].getX());
boom.setY(enemies[i].getY());

enemies[i].setX(-200);

}
}
}

private void draw() {


if (surfaceHolder.getSurface().isValid()) {
canvas = surfaceHolder.lockCanvas();
canvas.drawColor(Color.BLACK);

paint.setColor(Color.WHITE);

for (Star s : stars) {


paint.setStrokeWidth(s.getStarWidth());
canvas.drawPoint(s.getX(), s.getY(), paint);
}

canvas.drawBitmap(
player.getBitmap(),
player.getX(),
player.getY(),
paint);

for (int i = 0; i < enemyCount; i++) {


canvas.drawBitmap(
enemies[i].getBitmap(),
enemies[i].getX(),
enemies[i].getY(),
paint
);
}

//drawing boom image


canvas.drawBitmap(
boom.getBitmap(),
boom.getX(),
boom.getY(),
paint
);

surfaceHolder.unlockCanvasAndPost(canvas);
}
}

private void control() {


try {
gameThread.sleep(17);
} catch (InterruptedException e) {
e.printStackTrace();
}
}

public void pause() {


playing = false;
try {
gameThread.join();
} catch (InterruptedException e) {
}
}

public void resume() {


playing = true;
gameThread = new Thread(this);
gameThread.start();
}

@Override
public boolean onTouchEvent(MotionEvent motionEvent) {
switch (motionEvent.getAction() & MotionEvent.ACTION_MASK)
{ case MotionEvent.ACTION_UP:
player.stopBoosting();
break;
case MotionEvent.ACTION_DOWN:
player.setBoosting();
break;
}
return true;
}
}

Now again execute the application and you will see a blast effect on collision.

You might also like