Development of Othello Game as Application for Desktop and Android

9036 words (36 pages) Full Dissertation in Full Dissertations

06/06/19 Full Dissertations Reference this

Disclaimer: This work has been submitted by a student. This is not an example of the work produced by our Dissertation Writing Service. You can view samples of our professional work here.

Any opinions, findings, conclusions or recommendations expressed in this material are those of the authors and do not necessarily reflect the views of UK Essays.

Table of Contents

                                                                                   Pages

Title Page                                       I

Certificate                  II

Declaration                  III

Acknowledgement                 IV

Abstract                   V

Chapter I

  1. Introduction                   2
  2. Statement of the Problem               2
  3. Object and Significance of Application             2
  4. Naming Convention               3

Chapter II

2.1 Literature                 5

Chapter III

3.1 Technology Used in Development             6

3.2 Software Used                                                                                                  8

Chapter IV

          4.1 Coding of the game                                                                                           9

Chapter V

5.1 Working and Summary               55

5.2 Future Scope                                                                                                     55

Screenshots                56

References                60

CHAPTER I

  1. Introduction

Reversi now known as othello is basically a strategical  game for two players, which is generally played on played on an eight cross eight uncheckered board. There square measure sixty four game items referred to as disks that square measure completely identical for all the sixty four squares (sometimes spelled ‘discs’). These disks are light are light on one side and dark colored on the other. Players have turns placing disks on the board with the colors assigned to them by their color facing up. During the game, any disks of the opponent’s color that are in a straight line (in left, right, up, down, diagonally any direction) bounded by disks of presents player on both the opening and closing ends of the line are flipped back to the color of present players’ disk color.

The object of the sport is solely to own the main range of disks flipped to show your color once the last empty square is stuffed.

Reversi is last marketed by Mattel underneath the name  OTHELLO.

1.2 Statement of the Problem

The logically rich game of “reversi” now known as Othello has lost its popularity in this era of fun-loved games. I wanted to re-popularize this game both as a desktop application and an android application.  This is one of the few games that have the capability to check the presence of mind, logical ability and mental effectiveness of its players.  This is that one game that requires a minute to be learnt and a lifetime to master. Hence it to be played, popularized and publicized .Today’s youth is interested in fun-games which are just gum to hands and brain and do not let them fully utilize their brain potential while gaming. This approach should totally be avoided in order to develop good gaming habits.

1.3 Objective and Significance of Application

  • Objective

The main objective of making this game is to re-introduce a logical game in today’s era . As this is one of the few games that have the capability to check the presence of mind, logical ability and mental effectiveness of its players.  This is that one game that requires a minute to be learnt and a lifetime to master. Hence it to be played, popularized and publicized .Today’s youth is interested in fun-games which are just gum to hands and brain and do not let them fully utilize their brain potential while gaming. This approach should totally be avoided in order to develop good gaming habits.

  • Significance

Significance of this game game is that since its is a logical game playing such games will help shape you into a more organized and stategical gamer. As it will teach you patience and perseverance ,forward thinking and strategic planning,leadership and socialization.

1.4 Naming Convention

Original version

The game Othello originally known as Reversi was introduced in 1883 by two English  Lewis Waterman and John W. Mollett . At the end of nineteenth century it was considerably popular in England. The game was first relaiably mentioned  in the August twenty-first 1886 edition of The Saturday Rreview. Other mentions include an 1895 article inNewYork Times. In 1893, the well-known German games publisher started manufacturing the sport as Reversi . however it’s believed that the sport has even a lot of ancient origins

Modern version

The modern version of the sport is that the most often used rule-set, and therefore the same is employed in international tournaments. it’s marketed and recognized as fictional character. This version was proprietary in Japan in 1971by a 38-year-old salesperson Gorro Hasegawa.In this new  version of Othello game there are two major differences from the original game:

  • The starting four discs are placed in the center of the game board rather than being placed by the players ,in a standard diagonal pattern.
  • The board is a 8X8 uncheckered board allowing each user to use 64boxes each.

The who got this game patented establishes an association by the name of Japan Othello Association on March 1973.The first official othello championship was held on April 4,1973 in Japan.Othello was launched by Japanese game company Tsukuda in April last was an immediate commercialisd success.

The name othello was given by Hasegawa as a relevance the terribly celebrated play by Shakespear othello,THE MOOR OF venice.The game depicted the conflict between Moor Othello and Iago which resemble the two players. Moor Othello being the black one and Iago being the white one. The name and the description of the game gave it a very dramatic landing in the Japanese nad the world market. The green board resembles the battlefield of the two. It may be likened to a jealousy competition (jealousy being the central theme in Shakespeare’s play), because the players try and engulf the items of the opponent, attempting to show them into their possession.

Othello in the U.S. was also a commercial hit when it was launched there in 1975 by Gabriel Industries , Its sales exceeded $600 million and over 40 million classic games were sold in over 200  countries. more than 40 million classic games have been sold in over 100 different countries.

Hasegawa the one who got the game pateneted also wrote HowtoOthello (OseroNoUchikata) in Japan in 1974. The book was later translated into English and published in the U.S. in 1977 as How to Win at Othello.

Hasegawa owns Kabushiki Kaisha Othello, which is the  registered the trademark “OTHELLO” for board games in Japan and Tsukuda Original registered the mark in the world. MegaHouse now owns all the intellectual property of Othello in and outside Japan and hence is the successor to Tsukuda Original.

Late James R. Becker and Anjar Company were gratefully acknowledged by for their vital and much needed support in marketing, licensing, selling, promoting, distributing, and popularizing OTHELLO branded products in the U.S. and around the world outside Japan since 1975.

 

 

 

 

 

 

 

 

 

 

 

 

CHAPTER II

2.1 Literature

Rules

The two colored disks corresponds to one player each. The disks are referred to as light and dark or the the black and the white after the sides of Othello, but any colored distinct disks can be be used to make the game more interesting appealing in context to GUI. The game may for example be played with a chessboard and Scrabble pieces, with one player letters and the other backs.

Specifically for the game of Othello (as played in historical game of of Reversi),at the beginning of the game the game board has four disks two of each colour.The two same coloured disks are always palced diagonally opposite to each other on the game board. The restriction is that the first turn is always given to the player with the black disk.

Dark should place a piece with the dark aspect up on the board, in such an edge that there exists a minimum of one straight (horizontal, vertical, or diagonal) occupied line between the new piece and another dark piece, with one or additional contiguous light-weight items between them. within the below state of affairs, dark has the subsequent choices indicated by clear pieces:

After putting the piece, dark turns over (flips, captures) all light-weight items lying on a line between the new piece and any anchoring dark items. All reversed items currently show the dark aspect, and dark will use them in later moves—unless light-weight has reversed them back within the in the meantime. In alternative words, a legitimate move is one wherever a minimum of one piece is reversed.

If dark determined to place a chunk within the upmost location (all selections are strategically equivalent at this time), one piece gets turned over, in order that the board seems thus:Now light-weight plays. This player operates beneath an equivalent rules, with the roles reversed: light-weight lays down a light-weight piece, inflicting a dark piece to flip. prospects at now seem so (indicated by clear pieces):
Light takes the lowest left possibility and reverses one piece:

Players play in alternate turns. If one player cannot create a legitimate move, play passes back to the opposite player. once neither player will move, the sport ends. this happens once the grid has crammed up or once neither player will lawfully place a chunk in any of the remaining squares. this suggests the sport could finish before the grid is totally crammed. This chance could occur as a result of one player has no items remaining on the board therein player’s color. In over-the-board play this is often usually scored as if the board were full (64–0)

When the sport ends the player with the foremost disks on the sport board wins . But if the the number of the disks of both the players on the game board is same then there is a tie and it must be played once again for the final results to be stated.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

CHAPTER III

3.1 Technology Used in Development

Core java

   Swings

The swing packages are built on a large number of the built-in AWT classes and components (over 250 classes and 40 UI components).Generally,the UI components entice the the programmers. Each UI component begins with a J ; therefore, many programmers mistakenly use the terms JFC and swings interchangeably.Few Swing features are as follows:

Borders-You can draw borders in various different different styles and components by using the setBorder() method.

Graphics Debugging-You can use the setGraphicsdebuggingOptions() method for setting up graphics debugging,which means that you can watch each while drawing and flash it.

Easy Mouseless Operation-It easily allows key strokes to components

Tooltips-The tooltips are small windows that are visible whenever you move the mouse over a component.

Easy Scrolling-You can connect scrolling feature to different components ;this feature was not possible in AWT

Pluggable Look and Feel-With the help of this feature. The appearance of applets and applications can be set to any one of the three standard appearances such as Windows ,Motif(Unix),or Metal(the standard swing look).

New Layout Managers-The box Layout amd OverLayout are introduced in swings.

JDBC

JDBC is a specification from Oracle which provides standard abstraction (API/protocol) for java applications to communicate with different databases .It is used to write programs to access databases. JDBC along with JDBC drivers, is capable of accessing databases and spreadsheets. JDBC also can be outlined as a platform-independent interface between a relational database and also the java programming language.The enterprise data stored in a relational database can be accessed with the help of JDBC APIs. The JDBC APIs allows java programs to execute SQL statements amd retrieve results. The classes and interfaces of JDBC allow a java application to send requests made by users to specified Database Managaement Systems(DBMS) .Instead of allowing the drivers to target a specific database ,the users can specify the name of the database used to retrieve the data.

Android

Android is an open supply OS for mobile phones and tablets that was created by Google and its partners and contributors. robot combines the ubiquitousness of cell phones , the thrill of open supply softwares and also the company backing of Google. though a number of its options have appeared before,Android is the first environment that combines the following:

  • An open ,free development platform supported UNIX and open-source: telephone set user lie it as a result of they’ll use and customise the platform while not paying a royalty. Developers am fond of it as a result of they apprehend that the platform “has legs” and isn’t bolted into anyone seller that will go below or be noninheritable.
  • A component-based design impressed by web mashups: elements of 1 application is employed in ways that not originally pictured by the the developer. you’ll be able to even replace intrinsical elements together with your own improved versions. This has unleashed a replacement spherical of power within the mobile house.
  •  Heaps of services out of the box: Location –based services use GPS or cell tower triangulation to permit you to customise the user expertise looking on wherever you’re. A full-powered SQL info helps you to harness the facility of native storage for sometimes connected computing and synchronization. Browser and map views is embedded directly in your applications, All the capabilities facilitate raise the bar on practicality whereas lowering the event prices.
  • Automatic development of the applying life-cycle: Programs ar isolated from one another by multiple layers of security ,which provide a high level of system stability.The end user doesn’t ought to worry concerning what applications ar active or shut some programs so others will run. humanoid is optimized for low-power ,low memory-devices during a basic approach that no previous platform has tried.
  •  High quality graphics and sound: sleek 2nd and 3D-accelerated graphics have eneabled new varieties of games and business applications . Codes for many of the common trade – commonplace audio and video formats ar designed right in together with H.264(AVC), MP3,AAC

• Portability across a large vary of current and future hardware: all of your programs ar written in java and dead in Android’s Art previous time compiler or Dalvik virtual machine , thus your code are going to be transportable across ARM x86 , and alternative architectures . Support for a range of input strategies is enclosed, like keyboards ,game pads ,touch , TV remotes , mice , and trackballs. User interfaces is custom-made for any screen resolution and orientation.

Android offers a recent take on the manner mobile applications act with users ,along with the technical underpinnings to form it attainable .But the most effective a part of golem is that the code that you’re attending to write for it.

3.2 Softwares Used

  • Java Development Kit(JDK)1.8.0
  • Android studio
  • MyEclipse IDE
  • MySQL 5.2CE

 

CHAPTER IV

 

package packOthello;

import java.awt.Component;

import java.awt.Graphics;

import java.awt.GridLayout;

import java.awt.HeadlessException;

import java.awt.Insets;

import javax.sound.sampled.AudioInputStream;

import javax.sound.sampled.AudioSystem;

import javax.sound.sampled.LineUnavailableException;

import javax.sound.sampled.UnsupportedAudioFileException;

import javax.swing.ImageIcon;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

import java.awt.Color;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.util.ArrayList;

import javax.swing.JLabel;

import javax.swing.JTextField;

import javax.swing.border.Border;

import javax.swing.border.LineBorder;

import java.io.File;

import java.io.IOException;

import javax.sound.sampled.*;

public class DesignOthello  implements ActionListener

{

JButton btnNew,btnGame;

String pid1,pid2;

int counter_black = 0,counter_white = 0;

SignUp ob1,ob2;

private final int UPPER  = 0;

private final int LOWER  = 1;

private final int RIGHT  = 2;

private final int LEFT   = 3;

private final int UPPERLEFT  = 4;

private final int UPPERRIGHT = 5;

private final int LOWERRIGHT = 6;

private final int LOWERLEFT = 7;

boolean direction[] =

{false, false, false, false, false, false, false, false};

public Color cOpp;

JFrame f;

public JButton btn1,btn2,btn3,btn4,btn5,btn6,btn7,btn8,btn9,btn10,btn11,btn12,btn13,btn14,btn15,btn16,

btn17,btn18,btn19,btn20,btn21,btn22,btn23,btn24,btn25,btn26,btn27,btn28,btn29,btn30,btn31,btn32,

btn33,btn34,btn35,btn36,btn37,btn38,btn39,btn40,btn41,btn42,btn43,btn44,btn45,btn46,btn47,btn48,

btn49,btn50,btn51,btn52,btn53,btn54,btn55,btn56,btn57,btn58,btn59,btn60,btn61,btn62,btn63,btn64;

public int flag=1;

public Color c;

public JButton[][] al=new JButton[8][8];

private JLabel jlPlayer1;

private JTextField tfPScore1;

private JTextField tfPScore2;

private JTextField tfTurn;

String s1,s2;

public OthelloLogin object;

private JTextField tfHscore;

private JTextField tfP1Hscore;

private JTextField tfP2Hscore;

public int globalChoice;

private JLabel jlHscore1;

private JLabel jlHscore2;

private JButton btnAskLogin;

DesignOthello(int choice)

{

globalChoice=choice;

if(choice==1)

{

pid1=object.globalVariable1;

pid2=object.globalVariable2;

//  System.out.println(pid1);

//  System.out.println(pid2);

s1=”select UserName from players_database where LoginId=”+pid1;

s2=”select UserName from players_database where LoginId=”+pid2;

}

f= new JFrame(“Othello”);

f.getContentPane().setBackground(new Color(102, 153, 51));

f.getContentPane().setLayout(null);

JPanel p5 = new JPanel();

p5.setBackground(new Color(102, 153, 51));

p5.setLayout(new GridLayout(8, 8, 0,0 ));

btn1= new JButton();

btn1.setForeground(Color.WHITE);

btn1.setBackground(new Color(102, 153, 51));

p5.add(btn1);

btn2= new JButton();

btn2.setBackground(new Color(102, 153, 51));

p5.add(btn2);

btn3= new JButton();

btn3.setBackground(new Color(102, 153, 51));

p5.add(btn3);

btn4= new JButton();

btn4.setBackground(new Color(102, 153, 51));

p5.add(btn4);

btn5= new JButton();

btn5.setBackground(new Color(102, 153, 51));

p5.add(btn5);

btn6= new JButton();

btn6.setBackground(new Color(102, 153, 51));

p5.add(btn6);

btn7= new JButton();

btn7.setBackground(new Color(102, 153, 51));

p5.add(btn7);

btn8= new JButton();

btn8.setBackground(new Color(102, 153, 51));

p5.add(btn8);

btn9= new JButton();

btn9.setBackground(new Color(102, 153, 51));

p5.add(btn9);

btn10= new JButton();

btn10.setBackground(new Color(102, 153, 51));

p5.add(btn10);

btn11= new JButton();

btn11.setBackground(new Color(102, 153, 51));

p5.add(btn11);

btn12= new JButton();

btn12.setBackground(new Color(102, 153, 51));

p5.add(btn12);

btn13= new JButton();

btn13.setBackground(new Color(102, 153, 51));

p5.add(btn13);

btn14= new JButton();

btn14.setBackground(new Color(102, 153, 51));

p5.add(btn14);

btn15= new JButton();

btn15.setBackground(new Color(102, 153, 51));

p5.add(btn15);

btn16= new JButton();

btn16.setBackground(new Color(102, 153, 51));

p5.add(btn16);

btn17= new JButton();

btn17.setBackground(new Color(102, 153, 51));

p5.add(btn17);

btn18= new JButton();

btn18.setBackground(new Color(102, 153, 51));

p5.add(btn18);

btn19= new JButton();

btn19.setBackground(new Color(102, 153, 51));

p5.add(btn19);

btn20= new JButton();

btn20.setBackground(new Color(102, 153, 51));

p5.add(btn20);

btn21= new JButton();

btn21.setBackground(new Color(102, 153, 51));

p5.add(btn21);

btn22= new JButton();

btn22.setBackground(new Color(102, 153, 51));

p5.add(btn22);

btn23= new JButton();

btn23.setBackground(new Color(102, 153, 51));

p5.add(btn23);

btn24= new JButton();

btn24.setBackground(new Color(102, 153, 51));

p5.add(btn24);

btn25= new JButton();

btn25.setBackground(new Color(102, 153, 51));

p5.add(btn25);

btn26= new JButton();

btn26.setBackground(new Color(102, 153, 51));

p5.add(btn26);

btn27= new JButton();

btn27.setBackground(new Color(102, 153, 51));

p5.add(btn27);

btn28= new JButton();

btn28.setBackground(Color.BLACK);

p5.add(btn28);

btn29= new JButton();

btn29.setBackground(Color.WHITE);

p5.add(btn29);

btn30= new JButton();

btn30.setBackground(new Color(102, 153, 51));

p5.add(btn30);

btn31= new JButton();

btn31.setBackground(new Color(102, 153, 51));

p5.add(btn31);

btn32= new JButton();

btn32.setBackground(new Color(102, 153, 51));

p5.add(btn32);

btn33= new JButton();

btn33.setBackground(new Color(102, 153, 51));

p5.add(btn33);

btn34= new JButton();

btn34.setBackground(new Color(102, 153, 51));

p5.add(btn34);

btn35= new JButton();

btn35.setBackground(new Color(102, 153, 51));

p5.add(btn35);

btn36= new JButton();

btn36.setBackground(Color.WHITE);

p5.add(btn36);

btn37= new JButton();

btn37.setBackground(Color.BLACK);

p5.add(btn37);

btn38= new JButton();

btn38.setBackground(new Color(102, 153, 51));

p5.add(btn38);

btn39= new JButton();

btn39.setBackground(new Color(102, 153, 51));

p5.add(btn39);

btn40= new JButton();

btn40.setBackground(new Color(102, 153, 51));

p5.add(btn40);

btn41= new JButton();

btn41.setBackground(new Color(102, 153, 51));

p5.add(btn41);

btn42= new JButton();

btn42.setBackground(new Color(102, 153, 51));

p5.add(btn42);

btn43= new JButton();

btn43.setBackground(new Color(102, 153, 51));

p5.add(btn43);

btn44= new JButton();

btn44.setBackground(new Color(102, 153, 51));

p5.add(btn44);

btn45= new JButton();

btn45.setBackground(new Color(102, 153, 51));

p5.add(btn45);

btn46= new JButton();

btn46.setBackground(new Color(102, 153, 51));

p5.add(btn46);

btn47= new JButton();

btn47.setBackground(new Color(102, 153, 51));

p5.add(btn47);

btn48= new JButton();

btn48.setBackground(new Color(102, 153, 51));

p5.add(btn48);

btn49= new JButton();

btn49.setBackground(new Color(102, 153, 51));

p5.add(btn49);

btn50= new JButton();

btn50.setBackground(new Color(102, 153, 51));

p5.add(btn50);

btn51= new JButton();

btn51.setBackground(new Color(102, 153, 51));

p5.add(btn51);

btn52= new JButton();

btn52.setBackground(new Color(102, 153, 51));

p5.add(btn52);

btn53= new JButton();

btn53.setBackground(new Color(102, 153, 51));

p5.add(btn53);

btn54= new JButton();

btn54.setBackground(new Color(102, 153, 51));

p5.add(btn54);

btn55= new JButton();

btn55.setBackground(new Color(102, 153, 51));

p5.add(btn55);

btn56= new JButton();

btn56.setBackground(new Color(102, 153, 51));

p5.add(btn56);

btn57= new JButton();

btn57.setBackground(new Color(102, 153, 51));

p5.add(btn57);

btn58= new JButton();

btn58.setBackground(new Color(102, 153, 51));

p5.add(btn58);

btn59= new JButton();

btn59.setBackground(new Color(102, 153, 51));

p5.add(btn59);

btn60= new JButton();

btn60.setBackground(new Color(102, 153, 51));

p5.add(btn60);

btn61= new JButton();

btn61.setBackground(new Color(102, 153, 51));

p5.add(btn61);

btn62= new JButton();

btn62.setBackground(new Color(102, 153, 51));

p5.add(btn62);

btn63= new JButton();

btn63.setBackground(new Color(102, 153, 51));

p5.add(btn63);

btn64= new JButton();

btn64.setBackground(new Color(102, 153, 51));

p5.add(btn64);

//registering Listeners

btn1.addActionListener(this);

btn2.addActionListener(this);

btn3.addActionListener(this);

btn4.addActionListener(this);

btn5.addActionListener(this);

btn6.addActionListener(this);

btn7.addActionListener(this);

btn8.addActionListener(this);

btn9.addActionListener(this);

btn10.addActionListener(this);

btn11.addActionListener(this);

btn12.addActionListener(this);

btn13.addActionListener(this);

btn14.addActionListener(this);

btn15.addActionListener(this);

btn16.addActionListener(this);

btn17.addActionListener(this);

btn18.addActionListener(this);

btn19.addActionListener(this);

btn20.addActionListener(this);

btn21.addActionListener(this);

btn22.addActionListener(this);

btn23.addActionListener(this);

btn24.addActionListener(this);

btn25.addActionListener(this);

btn26.addActionListener(this);

btn27.addActionListener(this);

btn28.addActionListener(this);

btn29.addActionListener(this);

btn30.addActionListener(this);

btn31.addActionListener(this);

btn32.addActionListener(this);

btn33.addActionListener(this);

btn34.addActionListener(this);

btn35.addActionListener(this);

btn36.addActionListener(this);

btn37.addActionListener(this);

btn38.addActionListener(this);

btn39.addActionListener(this);

btn40.addActionListener(this);

btn41.addActionListener(this);

btn42.addActionListener(this);

btn43.addActionListener(this);

btn44.addActionListener(this);

btn45.addActionListener(this);

btn46.addActionListener(this);

btn47.addActionListener(this);

btn48.addActionListener(this);

btn49.addActionListener(this);

btn50.addActionListener(this);

btn51.addActionListener(this);

btn52.addActionListener(this);

btn53.addActionListener(this);

btn54.addActionListener(this);

btn55.addActionListener(this);

btn56.addActionListener(this);

btn57.addActionListener(this);

btn58.addActionListener(this);

btn59.addActionListener(this);

btn60.addActionListener(this);

btn61.addActionListener(this);

btn62.addActionListener(this);

btn63.addActionListener(this);

btn64.addActionListener(this);

btn1.setBorder(new LineBorder(Color.BLACK));

btn2.setBorder(new LineBorder(Color.BLACK));

btn3.setBorder(new LineBorder(Color.BLACK));

btn4.setBorder(new LineBorder(Color.BLACK));

btn5.setBorder(new LineBorder(Color.BLACK));

btn6.setBorder(new LineBorder(Color.BLACK));

btn7.setBorder(new LineBorder(Color.BLACK));

btn8.setBorder(new LineBorder(Color.BLACK));

btn9.setBorder(new LineBorder(Color.BLACK));

btn10.setBorder(new LineBorder(Color.BLACK));

btn11.setBorder(new LineBorder(Color.BLACK));

btn12.setBorder(new LineBorder(Color.BLACK));

btn13.setBorder(new LineBorder(Color.BLACK));

btn14.setBorder(new LineBorder(Color.BLACK));

btn15.setBorder(new LineBorder(Color.BLACK));

btn16.setBorder(new LineBorder(Color.BLACK));

btn17.setBorder(new LineBorder(Color.BLACK));

btn18.setBorder(new LineBorder(Color.BLACK));

btn19.setBorder(new LineBorder(Color.BLACK));

btn20.setBorder(new LineBorder(Color.BLACK));

btn21.setBorder(new LineBorder(Color.BLACK));

btn22.setBorder(new LineBorder(Color.BLACK));

btn23.setBorder(new LineBorder(Color.BLACK));

btn24.setBorder(new LineBorder(Color.BLACK));

btn25.setBorder(new LineBorder(Color.BLACK));

btn26.setBorder(new LineBorder(Color.BLACK));

btn27.setBorder(new LineBorder(Color.BLACK));

btn28.setBorder(new LineBorder(Color.BLACK));

btn29.setBorder(new LineBorder(Color.BLACK));

btn30.setBorder(new LineBorder(Color.BLACK));

btn31.setBorder(new LineBorder(Color.BLACK));

btn32.setBorder(new LineBorder(Color.BLACK));

btn33.setBorder(new LineBorder(Color.BLACK));

btn34.setBorder(new LineBorder(Color.BLACK));

btn35.setBorder(new LineBorder(Color.BLACK));

btn36.setBorder(new LineBorder(Color.BLACK));

btn37.setBorder(new LineBorder(Color.BLACK));

btn38.setBorder(new LineBorder(Color.BLACK));

btn39.setBorder(new LineBorder(Color.BLACK));

btn40.setBorder(new LineBorder(Color.BLACK));

btn41.setBorder(new LineBorder(Color.BLACK));

btn42.setBorder(new LineBorder(Color.BLACK));

btn43.setBorder(new LineBorder(Color.BLACK));

btn44.setBorder(new LineBorder(Color.BLACK));

btn45.setBorder(new LineBorder(Color.BLACK));

btn46.setBorder(new LineBorder(Color.BLACK));

btn47.setBorder(new LineBorder(Color.BLACK));

btn48.setBorder(new LineBorder(Color.BLACK));

btn49.setBorder(new LineBorder(Color.BLACK));

btn50.setBorder(new LineBorder(Color.BLACK));

btn51.setBorder(new LineBorder(Color.BLACK));

btn52.setBorder(new LineBorder(Color.BLACK));

btn53.setBorder(new LineBorder(Color.BLACK));

btn54.setBorder(new LineBorder(Color.BLACK));

btn55.setBorder(new LineBorder(Color.BLACK));

btn56.setBorder(new LineBorder(Color.BLACK));

btn57.setBorder(new LineBorder(Color.BLACK));

btn58.setBorder(new LineBorder(Color.BLACK));

btn59.setBorder(new LineBorder(Color.BLACK));

btn60.setBorder(new LineBorder(Color.BLACK));

btn61.setBorder(new LineBorder(Color.BLACK));

btn62.setBorder(new LineBorder(Color.BLACK));

btn63.setBorder(new LineBorder(Color.BLACK));

btn64.setBorder(new LineBorder(Color.BLACK));

al[0][0]=btn1;

al[0][1]=btn2;

al[0][2]=btn3;

al[0][3]=btn4;

al[0][4]=btn5;

al[0][5]=btn6;

al[0][6]=btn7;

al[0][7]=btn8;

al[1][0]=btn9;

al[1][1]=btn10;

al[1][2]=btn11;

al[1][3]=btn12;

al[1][4]=btn13;

al[1][5]=btn14;

al[1][6]=btn15;

al[1][7]=btn16;

al[2][0]=btn17;

al[2][1]=btn18;

al[2][2]=btn19;

al[2][3]=btn20;

al[2][4]=btn21;

al[2][5]=btn22;

al[2][6]=btn23;

al[2][7]=btn24;

al[3][0]=btn25;

al[3][1]=btn26;

al[3][2]=btn27;

al[3][3]=btn28;

al[3][4]=btn29;

al[3][5]=btn30;

al[3][6]=btn31;

al[3][7]=btn32;

al[4][0]=btn33;

al[4][1]=btn34;

al[4][2]=btn35;

al[4][3]=btn36;

al[4][4]=btn37;

al[4][5]=btn38;

al[4][6]=btn39;

al[4][7]=btn40;

al[5][0]=btn41;

al[5][1]=btn42;

al[5][2]=btn43;

al[5][3]=btn44;

al[5][4]=btn45;

al[5][5]=btn46;

al[5][6]=btn47;

al[5][7]=btn48;

al[6][0]=btn49;

al[6][1]=btn50;

al[6][2]=btn51;

al[6][3]=btn52;

al[6][4]=btn53;

al[6][5]=btn54;

al[6][6]=btn55;

al[6][7]=btn56;

al[7][0]=btn57;

al[7][1]=btn58;

al[7][2]=btn59;

al[7][3]=btn60;

al[7][4]=btn61;

al[7][5]=btn62;

al[7][6]=btn63;

al[7][7]=btn64;

p5.setBounds(124, 47, 210, 210);

f.getContentPane().add(p5);

JPanel p1 = new JPanel();

p1.setBackground(new Color(102, 153, 51));

p1.setBounds(0, 0, 460, 47);

f.getContentPane().add(p1);

p1.setLayout(null);

btnNew = new JButton(“New”);

btnNew.setForeground(Color.WHITE);

btnNew.setBackground(Color.BLACK);

btnNew.setBounds(159, 11, 74, 23);

p1.add(btnNew);

btnNew.addActionListener(this);

btnGame = new JButton(“Game”);

btnGame.setBackground(Color.WHITE);

btnGame.setBounds(230, 11, 74, 23);

p1.add(btnGame);

btnGame.addActionListener(this);

btnAskLogin = new JButton(“Log In?”);

btnAskLogin.setBounds(361, 10, 89, 26);

p1.add(btnAskLogin);

btnAskLogin.addActionListener(new ActionListener()

{

public void actionPerformed(ActionEvent ae)

{

new OthelloLogin();

f.setVisible(false);

}

});

if(choice==1) btnAskLogin.setEnabled(false);

JPanel p2 = new JPanel();

p2.setBackground(new Color(102, 153, 51));

p2.setBounds(0, 47, 127, 210);

f.getContentPane().add(p2);

p2.setLayout(null);

jlPlayer1 = new JLabel();

jlPlayer1.setForeground(Color.BLACK);

jlPlayer1.setBounds(0, 132, 82, 20);

p2.add(jlPlayer1);

tfPScore1 = new JTextField();

tfPScore1.setBackground(new Color(102, 153, 51));

tfPScore1.setForeground(new Color(0, 0, 0));

tfPScore1.setEditable(false);

tfPScore1.setBounds(82, 132, 35, 20);

p2.add(tfPScore1);

tfPScore1.setBorder(new LineBorder(Color.BLACK));

tfPScore1.setColumns(10);

tfPScore1.setOpaque(false);

JLabel jlPlayer2 = new JLabel();

jlPlayer2.setForeground(Color.WHITE);

jlPlayer2.setBounds(0, 157, 82, 20);

p2.add(jlPlayer2);

if(choice==0)

{

jlPlayer1.setText(“Player1”);

jlPlayer2.setText(“Player2″);

jlPlayer2.setForeground(Color.WHITE);

}

tfPScore2 = new JTextField();

tfPScore2.setForeground(Color.WHITE);

tfPScore2.setBackground(new Color(102, 153, 51));

tfPScore2.setEditable(false);

tfPScore2.setColumns(10);

tfPScore2.setBounds(82, 157, 35, 20);

p2.add(tfPScore2);

tfPScore2.setBorder(new LineBorder(Color.WHITE));

tfPScore2.setOpaque(false);

JPanel p4 = new JPanel();

p4.setForeground(Color.YELLOW);

p4.setBackground(new Color(102, 153, 51));

p4.setBounds(332, 47, 128, 210);

p4.setLayout(null);

f.getContentPane().add(p4);

tfTurn = new JTextField(”    BLACK’S TURN”);

tfTurn.setBounds(10, 26, 103, 20);

p4.add(tfTurn);

tfTurn.setForeground(Color.BLACK);

tfTurn.setEditable(false);

tfTurn.setBackground(new Color(102, 153, 51));

tfHscore = new JTextField();

tfHscore.setEditable(false);

tfHscore.setForeground(Color.YELLOW);

tfHscore.setBackground(Color.RED);

tfHscore.setText(“Highscores”);

tfHscore.setBounds(10, 83, 103, 20);

p4.add(tfHscore);

tfHscore.setColumns(10);

tfHscore.setOpaque(false);

tfHscore.setBorder(new LineBorder(Color.RED));

tfP1Hscore = new JTextField();

tfP1Hscore.setEditable(false);

tfP1Hscore.setBounds(84, 132, 29, 20);

p4.add(tfP1Hscore);

tfP1Hscore.setColumns(10);

tfP1Hscore.setOpaque(false);

tfP1Hscore.setBorder(new LineBorder(Color.BLACK));

tfP2Hscore = new JTextField();

tfP2Hscore.setEditable(false);

tfP2Hscore.setForeground(Color.WHITE);

tfP2Hscore.setColumns(10);

tfP2Hscore.setBounds(84, 163, 29, 20);

p4.add(tfP2Hscore);

tfP2Hscore.setOpaque(false);

tfP2Hscore.setBorder(new LineBorder(Color.WHITE));

jlHscore1 = new JLabel();

jlHscore1.setForeground(Color.BLACK);

jlHscore1.setBounds(10, 132, 72, 20);

p4.add(jlHscore1);

jlHscore2 = new JLabel();

jlHscore2.setForeground(Color.WHITE);

jlHscore2.setBounds(10, 163, 72, 20);

p4.add(jlHscore2);

f.setSize(466, 298);

if(choice==1)

{

Connection c=My_Connection.Connect();

try {

PreparedStatement ps=c.prepareStatement(s1);

ResultSet rs=ps.executeQuery();

rs.next();

jlPlayer1.setText(rs.getString(“Username”));

jlHscore1.setText(rs.getString(“Username”));

}

catch (SQLException e1) {

e1.printStackTrace();

}

Connection c1=My_Connection.Connect();

try {

PreparedStatement ps=c1.prepareStatement(s2);

ResultSet rs=ps.executeQuery();

rs.next();

jlPlayer2.setText(rs.getString(“Username”));

jlHscore2.setText(rs.getString(“Username”));

}

catch (SQLException e1) {

e1.printStackTrace();

}

}else

{

jlHscore1.setText(“Player1”);

jlHscore2.setText(“Player2”);

}

//*****************DISPLAYING LAST HIGHSCORES******************

if(choice==1)

{System.out.println(“inside displaying highscores”);

Connection c=My_Connection.Connect();

String hScoreQP1=”select max(Score) as maxscore from players_score where LoginId=”+pid1;

String hScoreQP2=”select max(Score) as maxscore from players_score where LoginId=”+pid2;

try {

PreparedStatement ps=c.prepareStatement(hScoreQP1);

ResultSet rs=ps.executeQuery();

rs.next();

tfP1Hscore.setText(String.valueOf(rs.getInt(“maxscore”)));

if(rs.getInt(“maxscore”)==0)

JOptionPane.showMessageDialog(null, jlPlayer1.getText()+” haven’t played or finished the full game yet.”);

}catch (SQLException e1) {

e1.printStackTrace();

}

try {

PreparedStatement ps=c.prepareStatement(hScoreQP2);

ResultSet rs=ps.executeQuery();

rs.next();

tfP2Hscore.setText(String.valueOf(rs.getInt(“maxscore”)));

if(rs.getInt(“maxscore”)==0)

JOptionPane.showMessageDialog(null,  jlPlayer2.getText()+” haven’t played or finished the full game yet.”);

}

catch (SQLException e1) {

e1.printStackTrace();

}  }

else

{

tfP1Hscore.setText(“0”);

tfP2Hscore.setText(“0”);

}

f.setLocation(400, 100);

f.setVisible(true);

f.setResizable(false);

}@Override

public void actionPerformed(ActionEvent e)

{

JButton temp=(JButton) e.getSource();

if(temp == btnNew || temp==btnGame)

{

if(globalChoice==1)

new DesignOthello(1);

else new DesignOthello(0);

f.setVisible(false);

}

else{

JButton ob=(JButton) e.getSource();

if(flag==1)

{System.out.println(“chance of black”);

flag=-1;

c=Color.BLACK;

}

else if(flag==-1)

{

System.out.println(“chance of WHITE”);

flag=1;

c=Color.WHITE;

}

int row=getRow(ob);

int column=getColumn(ob);

if(c==Color.BLACK)

{

if(doesValidMoveExist(c))

if(placeLegalCheck(row,column, c))

{System.out.println(“placelegalcheck true”);

System.out.println(“flipdisk Called”);

flipDisk(row,column,c);

tfTurn.setText(“WHITE’S TURN”);

tfTurn.setForeground(Color.WHITE);

diskCount();

showSuggestions(Color.WHITE);//SHOW SUGGESTIONS OF WHITE IF BLACK PLACED SUCCESSFULLY

}

else

{

System.out.println(“placelegalcheck false”);

flag=1;

JOptionPane.showMessageDialog(null, “Invalid Move”);

}

}

else

{

JOptionPane.showMessageDialog(null, “PASS SINCE THERE WAS NO MVE TO EXECUTE”);

flag=-1;

}

}

else if(c==Color.WHITE)

{

if(doesValidMoveExist(c))

{

if(placeLegalCheck(row,column, c))

{

System.out.println(“placelegalcheck true”);

flipDisk(row,column,c);

tfTurn.setText(“BLACK’S TURN”);

tfTurn.setForeground(Color.BLACK);

diskCount();

showSuggestions(Color.BLACK);//SHOW SUGGESTIONS OF BLACK IF BLACK PLACED SUCCESSFULLY

}

else

{

System.out.println(“placelegalcheck false”);

flag=-1;

JOptionPane.showMessageDialog(null, “Invalid Move”);

}

}

else

{

JOptionPane.showMessageDialog(null, “PASS SINCE THERE WAS NO MVE TO EXECUTE”);

flag=1;

}}}}

public boolean placeLegalCheck(int row,int column,Color c)

{

System.out.println(“inside placelegalCheck”);

int i, j;

for (i = 0; i < 8; i++)

{

direction[i] = false;

}

if(c==Color.BLACK)

cOpp=Color.WHITE;

else if(c==Color.WHITE)

cOpp=Color.BLACK;

if(al[row][column].getBackground()==Color.BLACK || al[row][column].getBackground()==Color.WHITE ) //condition for already filled

{

System.out.println(“inside default”);

return false;

}

else

{

if (column > 1 && al[row][column-1].getBackground() == cOpp)

{

for (i = column-2; i > 0 && al[row][i].getBackground() == cOpp; i–);

if (al[row][i].getBackground() ==  c)

{

direction[LEFT] = true;

System.out.println(“direc left true”);

}

else

System.out.println(“direc left false”);

}

if (column < 6 && al[row][column+1].getBackground()== cOpp)

{

for (i = column+2; i < 7 && al[row][i].getBackground() == cOpp; i++);

if (al[row][i].getBackground() == c)

{

direction[RIGHT] = true;

System.out.println(“direc right true”);

}

else

System.out.println(“direc right false”);

}

if (row > 1 && al[row-1][column].getBackground() == cOpp)

{

for (j = row-2; j > 0 && al[j][column].getBackground() == cOpp; j–);

if (al[j][column].getBackground() == c)

{

direction[UPPER] = true;

System.out.print(“direc Upper true”);

}

else

System.out.println(“direc upper false”);

}

if (row < 6 && al[row+1][column].getBackground() == cOpp)

{

for (j = row+2; j < 7 && al[j][column].getBackground() == cOpp; j++);

if (al[j][column].getBackground() == c)

{

direction[LOWER] = true;

System.out.print(“direc lower true”);

}

else

System.out.println(“direc lower false”);

}

if (column > 1 && row > 1 && al[row-1][column-1].getBackground() == cOpp)

{

for (i = row-2, j = column-2; i > 0 && j > 0

&& al[i][j].getBackground() == cOpp; i–, j–);

if (al[i][j].getBackground() == c)

{

System.out.print(“direc upperleft true”);

direction[UPPERLEFT] = true;

}

else

System.out.println(“direc upperleft false”);

}

if (column < 6 && row > 1 && al[row-1][column+1].getBackground() == cOpp)

{

for (i = row-2, j = column+2; j < 7 && i > 0

&& al[i][j].getBackground() == cOpp; i–, j++);

if (al[i][j].getBackground() == c)

{

System.out.print(“direc upperright true”);

direction[UPPERRIGHT] = true;

}

else

System.out.println(“direc upperright false”);

}

if (column < 6 && row < 6 && al[row+1][column+1].getBackground() == cOpp)

{

for (i = row+2, j = column+2; i < 7 && j < 7

&& al[i][j].getBackground() == cOpp; i++, j++);

if (al[i][j].getBackground() == c)

{

System.out.print(“direc lowerright true”);

direction[LOWERRIGHT] = true;

}

else

System.out.println(“direc lowerright false”);

}

if (column > 1 && row < 6 && al[row+1][column-1].getBackground() == cOpp)

{

for (i = row+2, j = column-2; j > 0 && i < 7

&& al[i][j].getBackground() == cOpp; i++, j–);

if (al[i][j].getBackground() == c)

{

System.out.print(“direc lowerleft true”);

direction[LOWERLEFT] = true;

System.out.println(“direc lowerleft true”);

}

else

System.out.println(“direc lowerleft false”);

}for (i = 0; i < 8; i++)

{

if (direction[i] == true)

{

System.out.println(“place legal returned true”);

return true;

}

}

System.out.println(“place legal returned false”);

return false;

}

}

public Color getOppColor(JButton b)

{

if(b.getBackground()==Color.BLACK)

return Color.WHITE;

else return Color.BLACK;

}

public void flipDisk(int row, int column,Color c) {

System.out.print(“inside flipdisk”);

al[row][column].setBackground(c);

System.out.print(“background set”);

int i,j;

if (direction[LEFT] == true){

//System.out.println(“inside directionleft==true”);

for (i = column-1; al[row][i].getBackground() != c; i–)

{

al[row][i].setBackground(getOppColor(al[row][i]));

playSound();

}

}

if (direction[RIGHT] == true){

for (i = column + 1; al[row][i].getBackground() != c; i++){

al[row][i].setBackground(getOppColor(al[row][i])) ;

playSound();

}

}

if (direction[UPPER] == true){

for (j = row – 1; al[j][column].getBackground() != c; j–){

al[j][column].setBackground(getOppColor(al[j][column]));

playSound();

}

}

if (direction[LOWER] == true){

for (j = row + 1; al[j][column].getBackground() != c; j++){

al[j][column].setBackground(getOppColor(al[j][column]));

playSound();

}

}

if (direction[UPPERLEFT] == true){

for (i = row-1, j = column-1; al[i][j].getBackground() != c; i–, j–){

al[i][j].setBackground(getOppColor(al[i][j]));

playSound();

}

}        if (direction[UPPERRIGHT] == true){

for (i = row-1, j = column+1; al[i][j].getBackground() != c; i–, j++){

al[i][j].setBackground(getOppColor(al[i][j]));

playSound();

}

}        if (direction[LOWERRIGHT] == true){

for (i = row+1, j = column+1; al[i][j].getBackground() != c; i++, j++){

al[i][j].setBackground(getOppColor(al[i][j]));

playSound();

}

}}

if(direction[LOWERLEFT] == true){

for (i = row+1, j = column-1; al[i][j].getBackground() != c; i++, j–){

al[i][j].setBackground(getOppColor(al[i][j]));

playSound();

}

}}

public int getRow(JButton ob)

{boolean b=false;

for(int i=0;i<8;i++)

{

for(int j=0;j<8;j++)

{

if(al[i][j]==ob)

{

b=true;

}

}

if(b==true) return i;

}

return 999;

}

public int getColumn(JButton ob)

{

boolean b=false;

for(int i=0;i<8;i++)

{

for(int j=0;j<8;j++)

{

if(al[j][i]==ob)

{

b=true;

}

}

if(b==true) return i;

}

return 999;

}

void diskCount() {

counter_black = 0;

counter_white = 0;

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

for(int j = 0; j < 8; j++){

if(al[i][j].getBackground() == Color.BLACK) counter_black++;

if(al[i][j].getBackground() == Color.WHITE) counter_white++;

}

}

tfPScore1.setText(String.valueOf(counter_black));

tfPScore2.setText(String.valueOf(counter_white));

if (counter_black + counter_white == 64) {

terminateGame();

}

}

public void terminateGame()

{

int winnerScore = 0;

if (counter_black > counter_white)

{

winnerScore = counter_black;

JOptionPane.showMessageDialog(null, “Player1 has won with score “+  winnerScore);

}

else if (counter_black < counter_white)

{

winnerScore = counter_white;

JOptionPane.showMessageDialog(null, “Player2 has won with score “+  winnerScore);

}

if(globalChoice ==1)

{int Scores1=Integer.parseInt(tfPScore1.getText());

int Scores2=Integer.parseInt(tfPScore2.getText());

String s1=”insert into players_Score(LoginId,Score) “+” values(?,?)”;

String s2=”insert into players_Score(LoginId,Score) “+” values(?,?)”;

Connection c=My_Connection.Connect();

//*********************QUERY 1**********************

try {

PreparedStatement ps=c.prepareStatement(s1);

ps.setString(1, pid1);

ps.setInt(2, Scores1);

ps.executeUpdate();

}

catch (SQLException e1) {

e1.printStackTrace();

}

catch(HeadlessException e2)

{

e2.printStackTrace();

}

//*************************QUERY 2***************************

try {

PreparedStatement ps=c.prepareStatement(s2);

ps.setString(1, pid2);

ps.setInt(2, Scores2);

ps.executeUpdate();

}

catch (SQLException e1) {

e1.printStackTrace();

}

catch(HeadlessException e2)

{

e2.printStackTrace();

}

}

}

public boolean doesValidMoveExist(Color c)

{

boolean isValid;

for(int i=0;i<=7;i++)

{

for(int j=0;j<=7;j++)

{

if(al[i][j].getBackground()!=Color.WHITE && al[i][j].getBackground()!=Color.BLACK)

{

isValid=placeLegalCheck(i,j,c);

if(isValid==true)

{

return true;}}}}

return false;

}public void playSound()

{

for(int i=0;i<1000000000;i++);

AudioInputStream audioInputStream=null;

String soundName=”btnSound.wav”;

try

{

audioInputStream= AudioSystem.getAudioInputStream(new File(soundName).getAbsoluteFile());

}

catch (UnsupportedAudioFileException e)

{

e.printStackTrace();

}

catch (IOException e)

{e.printStackTrace();}

try

{Clip clip= AudioSystem.getClip();

try

{

clip.open(audioInputStream);

}

catch (IOException e) {e.printStackTrace();

}

clip.start();

}

catch (LineUnavailableException e)

{e.printStackTrace();

}}public void showSuggestions(Color c)

{System.out.println(“reached suggestion”);

boolean isLegalPlace=false;

for(int i=0;i<8;i++)

{for(int j=0;j<8;j++)

{isLegalPlace=placeLegalCheck(i,j,c);

if(isLegalPlace==true)

al[i][j].setBackground(Color.LIGHT_GRAY);

else

{

if(al[i][j].getBackground()!=Color.BLACK && al[i][j].getBackground()!=Color.WHITE )

al[i][j].setBackground(new Color(102, 153, 51));

}}

}

for(int i=0;i<8;i++)

{

direction[i]=false;

}}}

CHAPTER V

5.1 Working and Summary

The game begins with the home page which asks the players whether they wnt to login or continue to play without logging-in.If the chooses to log in the loggin-in window pops-up asking which asks for provided ID and password . If the user does not have an ID he/she could go to create an account option and create the account. After logging-in the previous high scores of the logged-in players appear on the right hand side of the game window otherwise it remains inactive.Now the players can start playing the game as per the specified rules and their scores will be contiuously displayed on the game window itself.

5.2 Future Scope

The game of Othello could be taken into various levels by applying artificial intelligence in planning the orientation and moves. More advancements could be done by revising the coding part. Revised versions could have computer vs human games and could also have better GUI and sound effects.

 

 

 

 

 

 

 

 

 

 

 

 

  Screenshots

 

Home PageC:\Users\Arpita\Desktop\scrnshots\Capture.1PNG.PNG

 

 

 

 

Login Page

C:\Users\Arpita\Desktop\scrnshots\Capture4.PNG

 

C:\Users\Arpita\Desktop\scrnshots\Capture5.PNG

 

 

 

 

 

Sign Up Page

 

C:\Users\Arpita\Desktop\scrnshots\Capture7.PNG

 

 

Game Page

 

C:\Users\Arpita\Desktop\scrnshots\Capture2.PNG

C:\Users\Arpita\Desktop\scrnshots\Capture3.PNG

 

 

 

 

REFERENCES

[1] http://stackoverflow.com/company/about

[2] https://en.wikipedia.org/wiki/Quora

[3] https://en.wikipedia.org/wiki/Android Studio_history

[4] https://en.wikipedia.org/wiki/SQL_Database_Management_Studio

 

Cite This Work

To export a reference to this article please select a referencing stye below:

Reference Copied to Clipboard.
Reference Copied to Clipboard.
Reference Copied to Clipboard.
Reference Copied to Clipboard.
Reference Copied to Clipboard.
Reference Copied to Clipboard.
Reference Copied to Clipboard.

Related Services

View all

DMCA / Removal Request

If you are the original writer of this essay and no longer wish to have the essay published on the UK Essays website then please:

McAfee SECURE sites help keep you safe from identity theft, credit card fraud, spyware, spam, viruses and online scams Prices from
£29

Undergraduate 2:2 • 250 words • 7 day delivery

Order now

Delivered on-time or your money back

Rated 4.0 out of 5 by
Reviews.co.uk Logo (23 Reviews)

Get help with your dissertation