Translate

Friday, 13 May 2016

dimens.xml

<resources>

    <!-- Default screen margins, per the Android Design guidelines. -->
    <dimen name="activity_horizontal_margin">16dp</dimen>
    <dimen name="activity_vertical_margin">16dp</dimen>

</resources>

strings.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello_world">Hello world!</string>
    <string name="action_settings">Settings</string>
    <string name="hello">Hello World, Sudoku!</string>
    <string name="app_name">Sudoku</string>
    <string name="main_title">Android Sudoku</string>
    <string name="continue_label">Continue</string>
    <string name="new_game_label">New Game</string>
    <string name="about_label">About</string>
    <string name="exit_label">Exit</string>
    <string name="about_title">About Android Sudoku</string>
    <string name="about_text">\
Sudoku is a logic-based number placement puzzle.
Starting with a partially completed 9x9 grid, the
objective is to fill the grid so that each
row, each column, and each of the 3x3 boxes
(also called <i>blocks</i>) contains the digits
1 to 9 exactly once.</string>
    <string name="settings_label">Settings…</string>
    <string name="settings_title">Sudoku settings</string>
    <string name="settings_shortcut">s</string>
    <string name="music_title">Music</string>
    <string name="music_summary">Play background music</string>
    <string name="hints_title">Hints</string>
    <string name="hints_summary">Show hints during play</string>
    <string name="new_game_title">Difficulty</string>
    <string name="easy_label">Easy</string>
    <string name="medium_label">Medium</string>
    <string name="hard_label">Hard</string>
    <string name="extreme_label">Extreme</string>
    <string name="game_title">Game</string>
    <string name="high_score_label">High Score</string>
    <string name="no_moves_label">No moves</string>
    <string name="keypad_title">Keypad</string>
    <string name="num_0">0</string>
    <string name="num_1">1</string>
    <string name="num_2">2</string>
    <string name="num_3">3</string>
    <string name="num_4">4</string>
    <string name="num_5">5</string>
    <string name="num_6">6</string>
    <string name="num_7">7</string>
    <string name="num_8">8</string>
    <string name="num_9">9</string>

</resources>


Thursday, 12 May 2016

Values Folder in Sudoku Game

arrays.xml
colors.xml
dimens.xml
strings.xml
styles.xml


arrays.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string-array name="difficulty">
        <item>@string/easy_label</item>
        <item>@string/medium_label</item>
        <item>@string/hard_label</item>
        <item>@string/extreme_label</item>
    </string-array>

</resources>

colors.xml

<?xml version="1.0" encoding="utf-8"?>
<!--
 ! Excerpted from "Hello, Android!",
 ! published by The Pragmatic Bookshelf.
 ! Copyrights apply to this code. It may not be used to create training material, 
 ! courses, books, articles, and the like. Contact us if you are in doubt.
 ! We make no guarantees that this code is fit for any purpose. 
 ! Visit http://www.pragmaticprogrammer.com/titles/eband for more book information.
-->
<resources>
   <color name="background">#3500ffff</color>
   
   <color name="puzzle_background">#ffe6f0ff</color>
   <color name="puzzle_hilite">#ffffffff</color>
   <color name="puzzle_light">#64c6d4ef</color>
   <color name="puzzle_dark">#6456648f</color>
   <color name="puzzle_foreground">#ff000000</color>
   <color name="puzzle_hint_0">#64ff0000</color>
   <color name="puzzle_hint_1">#6400ff80</color>
   <color name="puzzle_hint_2">#2000ff80</color>
   <color name="puzzle_selected">#64ff8000</color>
   
</resources>

Wednesday, 11 May 2016

Main.xml


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@color/background"
    android:gravity="center"
    android:orientation="vertical"
    android:padding="30dip" >





    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="25dip"
        android:text="@string/main_title"
        android:textSize="24.5sp" />




    <Button
        android:id="@+id/continue_button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/continue_label" />



    <Button
        android:id="@+id/new_button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/new_game_label" />


<Button
        android:id="@+id/high_score"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/high_score_label" />


    <Button
        android:id="@+id/about_button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/about_label" />



    <Button
        android:id="@+id/exit_button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/exit_label" />

</LinearLayout>

Tuesday, 10 May 2016

High Score Panel in Sudoku Game

high_score_panel.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@color/background"
    android:gravity="center"
    android:orientation="vertical"
    android:padding="30dip" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="25dip"
        android:text="High Score Panel"
        android:textSize="24.5sp" />
   
    <EditText
        android:id="@+id/name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ems="10"
        android:hint="Name"
        android:inputType="text"
        android:text="" />

    <TextView
        android:id="@+id/difficulty"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:textSize="20sp"
        android:text="" />

    <TextView
        android:id="@+id/timeElapsed"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:textSize="20sp"
        android:text="" />

    <Button
        android:id="@+id/scoreSave"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Save"
        android:onClick="onClickSave"
        android:layout_marginTop="20dp" />

</LinearLayout>

Monday, 9 May 2016

Button.xml

<?xml version="1.0" encoding="utf-8"?>
<com.vikesh.gamesudoku.view.buttonsgrid.NumberButton
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/button"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />


cell.xml

<?xml version="1.0" encoding="utf-8"?>
<com.vikesh.gamesudoku.view.sudokugrid.SudokuCell
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background ="@drawable/cell_shape" />

high_score.xml

<TableLayout
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:shrinkColumns="*"  android:stretchColumns="*" android:background="#ffffff">


                        <!-- Row 1 with single column -->
                        <TableRow
                            android:id="@+id/tableRow1"
                            android:layout_height="wrap_content"
                            android:layout_width="fill_parent"
                            android:gravity="center_horizontal">


                            <TextView
                                android:layout_width="match_parent" android:layout_height="wrap_content"
                                android:textSize="18dp" android:text="---------High Score-------"  android:layout_span="3"
                                android:padding="18dip" android:background="#b0b0b0"
                                android:textColor="#000"/>


                       </TableRow>
         
                        <!-- Row 2 with 3 columns -->


                        <TableRow
                            android:id="@+id/tableRow2"
                            android:layout_height="wrap_content"
                            android:layout_width="match_parent">

                            <TextView
                                android:id="@+id/TextView04" android:text=""
                                android:layout_weight="1" android:background="#dcdcdc"
                                android:textColor="#000000"
                                android:padding="20dip" android:gravity="center"/>

                            <TextView
                                android:id="@+id/TextView041" android:text="Row 2 column 2"
                                android:layout_weight="1" android:background="#d3d3d3"
                                android:textColor="#000000"
                                android:padding="20dip" android:gravity="center"/>

                            <TextView
                                android:id="@+id/TextView042" android:text="Row 2 column 3"
                                android:layout_weight="1" android:background="#cac9c9"
                                android:textColor="#000000"
                                android:padding="20dip" android:gravity="center"/>

                        </TableRow>
                         
                        <!-- Row 3 with 3 columns -->
                        <TableRow
                            android:id="@+id/tableRow3"
                            android:layout_height="wrap_content"
                            android:layout_width="fill_parent"
                            android:gravity="center_horizontal">

                            <TextView
                                android:id="@+id/TextView043" android:text="Row 3 column 1"
                                android:layout_weight="1"  android:background="#b0b0b0"
                                android:textColor="#000000"
                                android:padding="18dip" android:gravity="center"/>
                     
                            <TextView
                                android:id="@+id/TextView044" android:text="Row 3 column 2"
                                android:layout_weight="1" android:background="#a09f9f"
                                android:textColor="#000000"
                                android:padding="18dip" android:gravity="center"/>
                            <TextView
                                android:id="@+id/TextView045" android:text="Row 3 column 2"
                                android:layout_weight="1" android:background="#a09f9f"
                                android:textColor="#000000"
                                android:padding="18dip" android:gravity="center"/>
                        </TableRow>
                        
                        <TableRow
                            android:id="@+id/tableRow4"
                            android:layout_height="wrap_content"
                            android:layout_width="fill_parent"
                            android:gravity="center_horizontal">

                            <TextView
                                android:id="@+id/TextView046" android:text="Row 3 column 1"
                                android:layout_weight="1"  android:background="#b0b0b0"
                                android:textColor="#000000"
                                android:padding="18dip" android:gravity="center"/>
                     
                            <TextView
                                android:id="@+id/TextView047" android:text="Row 3 column 2"
                                android:layout_weight="1" android:background="#a09f9f"
                                android:textColor="#000000"
                                android:padding="18dip" android:gravity="center"/>
                            <TextView
                                android:id="@+id/TextView048" android:text="Row 3 column 2"
                                android:layout_weight="1" android:background="#a09f9f"
                                android:textColor="#000000"
                                android:padding="18dip" android:gravity="center"/>
                        </TableRow>
                         
      </TableLayout>


Saturday, 7 May 2016

Layout File in Sudoku

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="wrap_content"
    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.vikesh.gamesudoku.MainActivity">

     <Chronometer
        android:id="@+id/chronometer1"
        android:textColor="#4169E1"
        android:textSize="20dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/textView1"
        android:layout_centerHorizontal="true"
        android:text="Chronometer" />
   
    <com.vikesh.gamesudoku.view.sudokugrid.SudokuGridView
        android:id="@+id/sudokuGridView"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_below="@+id/chronometer1"
        android:numColumns="9"
        android:horizontalSpacing="0dp"
        android:verticalSpacing="0dp" />
    <com.vikesh.gamesudoku.view.buttonsgrid.ButtonsGridView
        android:id="@+id/buttonsGridView"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_below="@+id/sudokuGridView"
        android:numColumns="6" />
       
</RelativeLayout>

Friday, 6 May 2016

Layout File in Sudoku Project

Layout File

about.xml
activity_main.xml
button.xml
cell.xml
high_score.xml
high_score_panel.xml
main.xml

About.xml

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" 
    android:padding="10dip">
    <TextView
        android:id="@+id/about_content"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/about_text" />
</ScrollView>

Wednesday, 4 May 2016

Sudoku Communicator i.e Adapter

Sudoku Adapter

package com.vikesh.gamesudoku.view.sudokugrid;

import com.vikesh.gamesudoku.GameEngine;
import com.vikesh.gamesudoku.R;

import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;

public class SudokuGridViewAdapter extends BaseAdapter {

private Context context;

public SudokuGridViewAdapter(Context context){
this.context =context;
}
@Override
public int getCount() {
return 81;
}

@Override
public Object getItem(int arg0) {
return null;
}

@Override
public long getItemId(int arg0) {
return 0;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
/*View v = convertView;
if(v==null)
{
LayoutInflater inflatar = ((Activity)context).getLayoutInflater();
v = inflatar.inflate(R.layout.cell,parent,false);
}

int x = position%9;
int y = position/9;
SudokuCell cell = (SudokuCell)v;
cell.setNumber(GameEngine.getInstance().getSudoku()[x][y]);*/

return GameEngine.getInstance().getGrid().getItem(position);
}

}

Monday, 2 May 2016


SudokuGridView.java

package com.vikesh.gamesudoku.view.sudokugrid;

import com.vikesh.gamesudoku.GameEngine;

import android.R.color;
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.util.AttributeSet;
import android.view.View;
import android.widget.AdapterView;
import android.widget.GridView;
import android.widget.Toast;

public class SudokuGridView extends GridView {
private Context context;
Canvas canvas = new Canvas();
public SudokuGridView(final Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
this.context = context;
SudokuGridViewAdapter gridViewAdapter = new SudokuGridViewAdapter(context);
setAdapter(gridViewAdapter);

setOnItemClickListener(new OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> arg0, View view, int position,
long arg3) {


int x = position%9;
int y = position/9;
GameEngine.getInstance().setSelectedPosition(x, y);
//Toast.makeText(context,"Selected item x="+x+"y="+y,Toast.LENGTH_SHORT).show();

}

});
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec,widthMeasureSpec);
}
}

Friday, 29 April 2016

SudokuCell.java

package com.vikesh.gamesudoku.view.sudokugrid;

import com.vikesh.gamesudoku.R;
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.FontMetrics;
import android.graphics.Paint.Style;
import android.graphics.Rect;
import android.util.Log;
//import android.util.AttributeSet;
//import android.view.View;

public class SudokuCell extends BaseSudokuCell {

private Paint mPaint;
public int i=0;
//private int number;
public SudokuCell(Context context) {
super(context);
mPaint = new Paint();
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
mPaint.setColor(Color.RED);
mPaint.setStrokeWidth(1);
mPaint.setStyle(Style.STROKE);
Paint background = new Paint();
   background.setColor(getResources().getColor(
           R.color.puzzle_background));
   canvas.drawRect(0, 0, getWidth(), getHeight(), background);
   drawNumbers(canvas);
   drawLines(canvas);
}

private void drawNumbers(Canvas canvas)
{
mPaint.setColor(getResources().getColor(
          R.color.puzzle_foreground));
mPaint.setTextSize(20);

mPaint.setStyle(Style.FILL);
Rect bounds = new Rect();
mPaint.getTextBounds(String.valueOf(getValue()),0,String.valueOf(getValue()).length(), bounds);
if(getValue()!=0)
{
canvas.drawText(String.valueOf(getValue()),(getWidth()-bounds.width())/2,(getWidth()+bounds.width())/2, mPaint);

}
else
{
canvas.drawColor(Color.LTGRAY);
}

}

private void drawLines(Canvas canvas)
{
mPaint.setColor(Color.RED);
mPaint.setStrokeWidth(1);
mPaint.setStyle(Style.STROKE);
Paint hilite = new Paint();
   hilite.setColor(getResources().getColor(R.color.puzzle_hilite));
Paint dark = new Paint();
   dark.setColor(getResources().getColor(R.color.puzzle_dark));
   for(i=0;i<9;i++)
     {
     if(i%3!=0)
     continue;
     canvas.drawLine(0,i*getHeight(), getWidth(), i*getHeight(),dark);
     canvas.drawLine(0,i*getHeight()+1, getWidth(), i*getHeight()+1, hilite);
     canvas.drawLine(i*getWidth(),0,i* getWidth(), getHeight(),dark);
     canvas.drawLine(i*getWidth()+1,0, i*getWidth()+1, getHeight(),hilite);
     }
}

}

Wednesday, 27 April 2016

Sudoku Grid Development

GameGrid.java

package com.vikesh.gamesudoku.view.sudokugrid;

import com.vikesh.gamesudoku.Game;
import com.vikesh.gamesudoku.Naming;
import com.vikesh.gamesudoku.SudokuChecker;

import android.content.Context;
import android.content.Intent;
import android.os.SystemClock;
import android.widget.Chronometer;
import android.widget.Toast;

public class GameGrid extends Game {

private Context context;
public static Chronometer focus;
public static String level=null;
public static String time;
private SudokuCell[][] sudoku = new SudokuCell[9][9];
public GameGrid(Context context)
{
this.context = context;
for(int x=0;x<9;x++)
{
for(int y=0;y<9;y++)
{
sudoku[x][y] = new SudokuCell(context);
}
}
}

public void setGrid(int[][] grid)
{
for(int x=0;x<9;x++)
{
for(int y=0;y<9;y++)
{
sudoku[x][y].setInitValue(grid[x][y]);
if(grid[x][y] != 0)
{
sudoku[x][y].setNotModifiable();
}
}
}
}

public SudokuCell[][] getGrid()
{
return sudoku;
}

public SudokuCell getItem(int x,int y)
{
return sudoku[x][y];
}

public SudokuCell getItem(int position)
{
int x = position%9;
int y = position/9;

return sudoku[x][y];
}

public void setItem(int x,int y,int number)
{
sudoku[x][y].setValue(number);
}

public void checkGame()
{
int[][] sudGrid = new int[9][9];
for(int x = 0;x<9;x++)
{
for(int y=0;y<9;y++)
{
sudGrid[x][y]=getItem(x, y).getValue();
}
if(SudokuChecker.getInstance().checkSudoku(sudGrid))
{
level = Game.DIFFICULTY_LEVEL;
focus = Game.focus;
focus.stop();
long timeElapsed = SystemClock.elapsedRealtime()-focus.getBase();
int hours = (int) (timeElapsed / 3600000);
int minutes = (int) (timeElapsed - hours * 3600000) / 60000;
int seconds = (int) (timeElapsed - hours * 3600000 - minutes * 60000) / 1000;
   time = minutes+":"+seconds;
   Intent i = new Intent(context,Naming.class);
   context.startActivity(i);
Toast.makeText(context,"Congratulations!!!You Solved The Sudoku in!!"+time,Toast.LENGTH_LONG).show();
}
}
}
}

Monday, 25 April 2016

SudokuCell Developing


BaseSudokuCell.java

package com.vikesh.gamesudoku.view.sudokugrid;

import android.content.Context;
import android.view.View;

public class BaseSudokuCell extends View {

private int value;
private boolean modifiable=true;
public BaseSudokuCell(Context context) {
super(context);
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec,widthMeasureSpec);
}

public void setNotModifiable()
{
modifiable = false;
}

public void setInitValue(int value)
{
this.value = value;
invalidate();
}
public void setValue(int value)
{
if(modifiable)
{
this.value = value;
}
invalidate();
}
public int getValue()
{
return value;
}
}

Friday, 22 April 2016

NumberButton.java

package com.vikesh.gamesudoku.view.buttonsgrid;

import com.vikesh.gamesudoku.GameEngine;

import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class NumberButton extends Button implements OnClickListener {

private int number;
public NumberButton(Context context, AttributeSet attrs) {
super(context, attrs);
setOnClickListener(this);
}

@Override
public void onClick(View v) {
GameEngine.getInstance().setNumber(number);
}

public void setNumber(int number)
{
this.number = number;
}

}

Wednesday, 20 April 2016

ButtonsGridView.java

package com.vikesh.gamesudoku.view.buttonsgrid;

import com.vikesh.gamesudoku.R;

import android.app.Activity;
import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;

public class ButtonsGridView extends GridView {

public ButtonsGridView(Context context,AttributeSet attrs)
{
super(context,attrs);
ButtonsGridViewAdapter gridViewAdapter = new ButtonsGridViewAdapter(context);
setAdapter(gridViewAdapter);
}

class ButtonsGridViewAdapter extends BaseAdapter
{

  private Context context;
  public ButtonsGridViewAdapter(Context context) {
  this.context = context;
}
@Override
public int getCount() {
return 10;
}

@Override
public Object getItem(int position) {
return null;
}

@Override
public long getItemId(int position) {
return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if(v==null)
{
LayoutInflater inflater = ((Activity)context).getLayoutInflater();
v = inflater.inflate(R.layout.button,parent,false);

NumberButton btn;
btn = (NumberButton)v;
btn.setId(position);

if(position!=9)
{
btn.setText(String.valueOf(position+1));
btn.setNumber(position+1);
}
else
{
btn.setText("DEL");
btn.setNumber(0);
}
return btn;
}
return v;
}

}
}

Monday, 18 April 2016

Naming.java


package com.vikesh.gamesudoku;

import com.vikesh.gamesudoku.view.sudokugrid.GameGrid;

import android.app.Activity;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class Naming extends Activity {
 
EditText et;
TextView t1,t2;
Button b1;
String level=null;
String time = null;
String name=null;
SQLiteDatabase db=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.high_score_panel);
et =(EditText)findViewById(R.id.name);
t1 =(TextView)findViewById(R.id.difficulty);
t2 =(TextView)findViewById(R.id.timeElapsed);
b1 = (Button)findViewById(R.id.scoreSave);
level = GameGrid.level;
time = GameGrid.time;
t1.setText(level);
t2.setText(time);
}
public void onClickSave(View view)
{
db = Game.db;
name = et.getText().toString();
level = t1.getText().toString();
time = t2.getText().toString();
db.execSQL("insert into highscore values('"+name+"','"+level+"','"+time+"')");
Toast.makeText(this,"Your Score is Successfully Saved!!!",Toast.LENGTH_SHORT).show();
Intent i= new Intent(this,MainActivity.class);
startActivity(i);
}
}

Friday, 15 April 2016


MainActivity.java


package com.vikesh.gamesudoku;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;

public class MainActivity extends Activity implements OnClickListener {

private static final String TAG = "Sudoku";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Set up click listeners for all the buttons
View continueButton = findViewById(R.id.continue_button);
continueButton.setOnClickListener(this);
View newButton = findViewById(R.id.new_button);
newButton.setOnClickListener(this);
View highScoreButton = findViewById(R.id.high_score);
highScoreButton.setOnClickListener(this);
View aboutButton = findViewById(R.id.about_button);
aboutButton.setOnClickListener(this);
View exitButton = findViewById(R.id.exit_button);
exitButton.setOnClickListener(this);

/*setContentView(R.layout.activity_main);
//int[][] sudoku = SudokuGenerator.getInstance().generateGrid();
//GameEngine.getInstance().setSudoku(sudoku);
GameEngine.getInstance().createGrid(this);
//printSudoku(sudoku);*/
}

@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.continue_button:
startGame(Game.DIFFICULTY_CONTINUE);
break;
case R.id.about_button:
Intent i = new Intent(this, About.class);
startActivity(i);
break;
case R.id.new_button:
openNewGameDialog();
break;
case R.id.high_score:
Intent i1 = new Intent(this,HighScore.class);
startActivity(i1);
break;
case R.id.exit_button:
finish();
break;
}
}
private void openNewGameDialog() {
new AlertDialog.Builder(this)
.setTitle(R.string.new_game_title)
.setItems(R.array.difficulty,
new DialogInterface.OnClickListener() {
public void onClick(
DialogInterface dialoginterface, int i) {
startGame(i);
}
}).show();
}

private void startGame(int i) {
Log.d(TAG, "clicked on " + i);
Intent intent = new Intent(this, Game.class);
intent.putExtra(Game.KEY_DIFFICULTY, i);
startActivity(intent);
}

/*private void printSudoku(int[][] sudoku)
{
for(int y =0;y<9;y++)
{
for(int x =0;x<9;x++)
{
System.out.print(sudoku[x][y]+"|");
}
System.out.println();
}
}*/
}

Wednesday, 13 April 2016

HighScore.java

package com.vikesh.gamesudoku;

import android.app.Activity;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.widget.TextView;

public class HighScore extends Activity {

SQLiteDatabase db=null;
String TABLE ="highscore";
String NAME[]= new String[100];
String LEVEL[] = new String[100];
String TIME[]=new String[100];
TextView t[] = new TextView[3];
TextView t2[] = new TextView[3];
TextView t3[] = new TextView[3];
int i=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
db=openOrCreateDatabase("sudoku",MODE_PRIVATE, null);
Cursor c=db.rawQuery("select * from "+TABLE,null);
c.moveToFirst();
do
{
NAME[i]=c.getString(0);
LEVEL[i]=c.getString(1);
TIME[i]=c.getString(2);
i++;
}while(c.moveToNext());
setContentView(R.layout.high_score);
t[0] =(TextView)findViewById(R.id.TextView04);
t2[0] =(TextView)findViewById(R.id.TextView041);
t3[0] =(TextView)findViewById(R.id.TextView042);
t[1] =(TextView)findViewById(R.id.TextView043);
t2[1] =(TextView)findViewById(R.id.TextView044);
t3[1] =(TextView)findViewById(R.id.TextView045);
t[2]=(TextView)findViewById(R.id.TextView046);
t2[2]=(TextView)findViewById(R.id.TextView047);
t3[2]=(TextView)findViewById(R.id.TextView048);
for(int i=0;i<3;i++)
{
t[i].setText(NAME[i]);
t2[i].setText(LEVEL[i]);
t3[i].setText(TIME[i]);
}
}
}

Tuesday, 12 April 2016

GameEngine.java

package com.vikesh.gamesudoku;

import android.content.Context;

import com.vikesh.gamesudoku.view.sudokugrid.GameGrid;

public class GameEngine {

private static GameEngine instance;

//private int[][] sudoku;

private GameGrid grid = null;

private int selectedPosX=-1,selectedPosY=-1;
private GameEngine(){}

public static GameEngine getInstance()
{
if(instance == null)
{
instance = new GameEngine();
}
return instance;
}

public void createGrid(Context context)
{
int[][] sudoku = SudokuGenerator.getInstance().generateGrid();
sudoku = SudokuGenerator.getInstance().removeElements(sudoku);
grid = new GameGrid(context);
grid.setGrid(sudoku);
}

public GameGrid getGrid()
{
return grid;
}
/*public int[][] getSudoku() {
return sudoku;
}

public void setSudoku(int[][] sudoku) {
this.sudoku = sudoku;
}*/

public void setSelectedPosition(int x,int y)
{
selectedPosX = x;
selectedPosY = y;
}

public void setNumber(int number)
{
if(selectedPosX!=-1 && selectedPosY!=-1)
{
grid.setItem(selectedPosX,selectedPosY,number);
}
grid.checkGame();
}
}

Monday, 11 April 2016


Game.java

package com.vikesh.gamesudoku;

import android.app.Activity;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.widget.Button;
import android.widget.Chronometer;
import android.widget.Toolbar;

public class Game extends Activity {

public static final String TAG="Selected";
public static int Difficulty_Level =0;
public static final String KEY_DIFFICULTY = "org.example.sudoku.difficulty";
public static final int DIFFICULTY_EASY = 0;
public static final int DIFFICULTY_MEDIUM = 1;
public static final int DIFFICULTY_HARD = 2;
protected static final int DIFFICULTY_CONTINUE = -1;
public static Chronometer focus;
public static SQLiteDatabase db=null;
public static String DIFFICULTY_LEVEL=null;
Button start;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
focus = (Chronometer) findViewById(R.id.chronometer1);
int diff = getIntent().getIntExtra(KEY_DIFFICULTY, DIFFICULTY_EASY);
db=openOrCreateDatabase("sudoku", MODE_PRIVATE, null);
db.execSQL("create table if not exists highscore(name varchar,level varchar,score varchar)");
if(diff==3)
{
Difficulty_Level =65;
DIFFICULTY_LEVEL = "Extremly Hard";
GameEngine.getInstance().createGrid(this);
setContentView(R.layout.activity_main);
focus = (Chronometer) findViewById(R.id.chronometer1);
focus.start();
}
else if(diff==2)
{
Difficulty_Level =55;
DIFFICULTY_LEVEL = "Hard";
GameEngine.getInstance().createGrid(this);
setContentView(R.layout.activity_main);
focus = (Chronometer) findViewById(R.id.chronometer1);
focus.start();
}
else if(diff ==1)
{

Difficulty_Level =50;
DIFFICULTY_LEVEL = "Medium";
GameEngine.getInstance().createGrid(this);
setContentView(R.layout.activity_main);
focus = (Chronometer) findViewById(R.id.chronometer1);
focus.start();
}
else
{

Difficulty_Level =3;
DIFFICULTY_LEVEL = "Easy";
GameEngine.getInstance().createGrid(this);
setContentView(R.layout.activity_main);
focus = (Chronometer) findViewById(R.id.chronometer1);
focus.start();
}
}
}

Friday, 8 April 2016

Sudoku Project Structure

i) .settings
ii) assets
iii) bin
iv) gen
      R.java
v) libs
vi) res
vii) src
       com
          vikesh
               gamesudoku
                   view
                         buttonsgrid
                               ButtonsGridView.java
                               NumberButton.java
                         sudokugrid
                                BaseSudokuCell.java
                                GameGrid.java
                                SudokuCell.java
                                SudokuGridView.java
                                SudokuGridViewAdapter.java                            
               About.java
               Game,java
               GameEngine.java
               HighScore.java
               MainActivity.java
               Naming.java
               SudokuChecker.java
               SudokuGenerator.java
,AndroidManifest

               

Thursday, 7 April 2016

Sudoku Checker

package com.vikesh.gamesudoku;

public class SudokuChecker {

private static SudokuChecker instance;
private SudokuChecker(){}
public static SudokuChecker getInstance()
{
if(instance==null)
{
instance = new SudokuChecker();
}
return instance;
}
public boolean checkSudoku(int[][] sudoku)
{
return (checkHorizontal(sudoku)|| checkVertical(sudoku) || checkRegions(sudoku));
}

private boolean checkHorizontal(int[][] sudoku) {
for(int y=0;y<9;y++)
{
for(int xpos=0;xpos<9;xpos++)
{
if(sudoku[xpos][y]==0)
{
return false;
}
for(int x = xpos+1;x<9;x++)
{
if(sudoku[xpos][y]==sudoku[x][y] || sudoku[x][y]==0)
{
return false;
}
}
}
}
return true;
}
private boolean checkVertical(int [][] sudoku) {
for(int x=0;x<9;x++)
{
for(int ypos=0;ypos<9;ypos++)
{
if(sudoku[x][ypos]==0)
{
return false;
}
for(int y = ypos+1;y<9;y++)
{
if(sudoku[x][ypos]==sudoku[x][y] || sudoku[x][y]==0)
{
return false;
}
}
}
}
return true;
}

private boolean checkRegions(int[][] sudoku) {
for(int xRegion=0;xRegion<3;xRegion++)
{
for(int yRegion=0;yRegion<3;yRegion++)
{
if(!checkRegion(sudoku, xRegion, yRegion))
{
return false;
}
}
}
return true;
}
private boolean checkRegion(int[][] sudoku,int xRegion,int yRegion)
{
for(int xpos = xRegion*3;xpos<xRegion*3+3;xpos++)
{
for(int ypos = yRegion*3;ypos<yRegion*3+3;ypos++)
{
for(int x = xpos;x<xRegion*3+3;x++)
{
for(int y = ypos;y<yRegion*3+3;y++)
{
if((x!=xpos || y!=ypos) && (sudoku[xpos][ypos]==sudoku[x][y] || sudoku[x][y]==0))
{
return false;
}
}
}
}
}
return true;
}

}

Monday, 4 April 2016

Sudoku-The Number Logic Puzzle 

Sudoku Generator

This class will generate the sudoku puzzle.

package com.vikesh.gamesudoku;

import java.util.ArrayList;
import java.util.Random;

import android.graphics.Color;

public class SudokuGenerator {

private ArrayList<ArrayList<Integer>> Available = new ArrayList<ArrayList<Integer>>();
private static SudokuGenerator instance;
private Random rand = new Random();
private SudokuGenerator()
{
}
public static SudokuGenerator getInstance()
{
if(instance==null)
{
instance = new SudokuGenerator();
}
return instance;
}
public int[][] generateGrid()
{
int[][] sudoku = new int[9][9];
int currentPos = 0;
while(currentPos < 81)
{
if( currentPos == 0 ){
clearGrid(sudoku);
}
if(Available.get(currentPos).size()!=0)
{
int i = rand.nextInt(Available.get(currentPos).size());
int number = Available.get(currentPos).get(i);
if(!checkConflict(sudoku, currentPos,number))
{
int xpos = currentPos%9;
int ypos = currentPos/9;
sudoku[xpos][ypos] = number;
Available.get(currentPos).remove(i);
currentPos++;
}
else
{
Available.get(currentPos).remove(i);
}
}
else
{
for(int i = 1; i<=9; i++)
{
Available.get(currentPos).add(i);
}
currentPos--;
}
}
return sudoku;
}
public int[][] removeElements(int[][] sudoku)
{
int i=0;
while(i<Game.Difficulty_Level)
{
int x = rand.nextInt(9);
int y = rand.nextInt(9);
if(sudoku[x][y]!=0)
{
sudoku[x][y] = 0;
}
i++;
}
return sudoku;
}
private void clearGrid(int[][] sudoku)
{
Available.clear();
for(int y =0; y<9; y++)
{
for(int x = 0; x<9; x++)
{
sudoku[x][y] = -1;
}
}
for(int x=0;x<81;x++)
{
Available.add(new ArrayList<Integer>());
for(int i=1;i<=9;i++)
{
Available.get(x).add(i);
}
}
}
private boolean checkConflict(int[][] sudoku,int currentPos,final int number)
{
int xpos = currentPos%9;
int ypos = currentPos/9;
if(checkHorizontalConflict(sudoku, xpos, ypos, number)||checkVerticalConflict(sudoku, xpos, ypos, number)||checkRegionConflict(sudoku, xpos, ypos, number))
{
return true;
}
return false;
}
private boolean checkHorizontalConflict(final int[][] sudoku,final int xpos,final int ypos,final int number)
{
for(int x = xpos-1;x>=0;x--)
{
if(number == sudoku[x][ypos])
{
return true;
}
}
return false;
}
private boolean checkVerticalConflict(final int[][] sudoku,final int xpos,final int ypos,final int number)
{
for(int y=ypos;y>=0;y--)
{
if(number==sudoku[xpos][y])
{
return true;
}
}
return false;
}
private boolean checkRegionConflict(final int[][] sudoku,final int xpos,final int ypos,final int number)
{
int xRegion = xpos/3;
int yRegion = ypos/3;
for(int x = xRegion*3;x<xRegion*3+3;x++)
{
for(int y = yRegion*3;y<yRegion*3+3;y++)
{
if((x!=xpos || y!=ypos) && number==sudoku[x][y])
{
return true;
}
}
}
return false;
}
}