Timer now in GameController and saves

This commit is contained in:
Gongxter 2015-11-20 14:42:14 +01:00
parent 87ec3902a0
commit b4fb350fa0
7 changed files with 106 additions and 65 deletions

View file

@ -5,6 +5,9 @@ import android.content.SharedPreferences;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Timer;
import java.util.TimerTask;
import java.util.logging.Handler;
import tu_darmstadt.sudoku.controller.generator.Generator; import tu_darmstadt.sudoku.controller.generator.Generator;
import tu_darmstadt.sudoku.game.CellConflict; import tu_darmstadt.sudoku.game.CellConflict;
@ -17,6 +20,7 @@ import tu_darmstadt.sudoku.game.GameType;
import tu_darmstadt.sudoku.game.ICellAction; import tu_darmstadt.sudoku.game.ICellAction;
import tu_darmstadt.sudoku.game.listeners.IGameSolvedListener; import tu_darmstadt.sudoku.game.listeners.IGameSolvedListener;
import tu_darmstadt.sudoku.game.listeners.IModelChangedListener; import tu_darmstadt.sudoku.game.listeners.IModelChangedListener;
import tu_darmstadt.sudoku.game.listeners.ITimerListener;
/** /**
* Created by Chris on 06.11.2015. * Created by Chris on 06.11.2015.
@ -38,6 +42,11 @@ public class GameController implements IModelChangedListener {
private CellConflictList errorList = new CellConflictList(); private CellConflictList errorList = new CellConflictList();
private int selectedValue; private int selectedValue;
private LinkedList<IGameSolvedListener> solvedListeners = new LinkedList<>(); private LinkedList<IGameSolvedListener> solvedListeners = new LinkedList<>();
private Timer timer;
private android.os.Handler handler = new android.os.Handler();
private TimerTask timerTask;
private int time = 0;
private LinkedList<ITimerListener> timerListeners = new LinkedList<>();
// private Solver solver; // private Solver solver;
// private SudokuGenerator generator; // private SudokuGenerator generator;
@ -54,6 +63,7 @@ public class GameController implements IModelChangedListener {
setGameType(type); setGameType(type);
setSettings(pref); setSettings(pref);
gameBoard = new GameBoard(type); gameBoard = new GameBoard(type);
initTimer();
} }
public int getGameID() { public int getGameID() {
@ -429,4 +439,42 @@ public class GameController implements IModelChangedListener {
l.onSolved(); l.onSolved();
} }
} }
public void notifyTimerListener(int time) {
for (ITimerListener listener : timerListeners){
listener.onTick(time);
}
}
public void registerTimerListener(ITimerListener listener){
if (!timerListeners.contains(listener)){
timerListeners.add(listener);
}
}
public void initTimer() {
timerTask = new TimerTask() {
@Override
public void run() {
handler.post(new Runnable() {
@Override
public void run() {
notifyTimerListener(time++);
}
});
}
};
timer = new Timer();
}
public void startTimer() {
timer.scheduleAtFixedRate(timerTask,0,1000);
}
public void pauseTimer(){
timer.cancel();
}
} }

View file

@ -0,0 +1,14 @@
package tu_darmstadt.sudoku.controller;
import tu_darmstadt.sudoku.controller.helper.TimeContainer;
import tu_darmstadt.sudoku.game.GameDifficulty;
/**
* Created by TMZ_LToP on 19.11.2015.
*/
public class SaveLoadStatistics {
//Difficulty, time, gamemode, #hints, AvTime, amountOf Games per Difficulty,
public SaveLoadStatistics(TimeContainer t,GameDifficulty difficulty,int hints){
}
}

View file

@ -0,0 +1,14 @@
package tu_darmstadt.sudoku.controller.helper;
/**
* Created by TMZ_LToP on 19.11.2015.
*/
public class TimeContainer {
int hours,minutes,seconds;
public TimeContainer(int hours, int minutes, int seconds){
this.hours=hours;
this.minutes=minutes;
this.seconds=seconds;
}
}

View file

@ -0,0 +1,8 @@
package tu_darmstadt.sudoku.game.listeners;
/**
* Created by TMZ_LToP on 20.11.2015.
*/
public interface ITimerListener {
public void onTick(int time);
}

View file

@ -17,7 +17,6 @@ import android.widget.TextView;
import java.util.List; import java.util.List;
import java.util.Timer; import java.util.Timer;
import java.util.TimerTask;
import tu_darmstadt.sudoku.controller.SaveLoadController; import tu_darmstadt.sudoku.controller.SaveLoadController;
import tu_darmstadt.sudoku.controller.GameController; import tu_darmstadt.sudoku.controller.GameController;
@ -25,20 +24,20 @@ import tu_darmstadt.sudoku.controller.helper.GameInfoContainer;
import tu_darmstadt.sudoku.game.GameDifficulty; import tu_darmstadt.sudoku.game.GameDifficulty;
import tu_darmstadt.sudoku.game.GameType; import tu_darmstadt.sudoku.game.GameType;
import tu_darmstadt.sudoku.game.listeners.IGameSolvedListener; import tu_darmstadt.sudoku.game.listeners.IGameSolvedListener;
import tu_darmstadt.sudoku.game.listeners.ITimerListener;
import tu_darmstadt.sudoku.ui.view.R; import tu_darmstadt.sudoku.ui.view.R;
import tu_darmstadt.sudoku.ui.view.SudokuFieldLayout; import tu_darmstadt.sudoku.ui.view.SudokuFieldLayout;
import tu_darmstadt.sudoku.ui.view.SudokuKeyboardLayout; import tu_darmstadt.sudoku.ui.view.SudokuKeyboardLayout;
import tu_darmstadt.sudoku.ui.view.SudokuSpecialButtonLayout; import tu_darmstadt.sudoku.ui.view.SudokuSpecialButtonLayout;
import tu_darmstadt.sudoku.ui.view.SudokuTimer;
public class GameActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener, IGameSolvedListener { public class GameActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener, IGameSolvedListener ,ITimerListener {
GameController gameController; GameController gameController;
SudokuFieldLayout layout; SudokuFieldLayout layout;
SudokuKeyboardLayout keyboard; SudokuKeyboardLayout keyboard;
SudokuSpecialButtonLayout specialButtonLayout; SudokuSpecialButtonLayout specialButtonLayout;
Timer t = new Timer(); Timer t = new Timer();
SudokuTimer timerView; TextView timerView;
boolean isActive = true; boolean isActive = true;
TextView viewName ; TextView viewName ;
RatingBar ratingBar; RatingBar ratingBar;
@ -76,6 +75,7 @@ public class GameActivity extends AppCompatActivity implements NavigationView.On
layout = (SudokuFieldLayout)findViewById(R.id.sudokuLayout); layout = (SudokuFieldLayout)findViewById(R.id.sudokuLayout);
gameController = new GameController(sharedPref); gameController = new GameController(sharedPref);
gameController.registerGameSolvedListener(this); gameController.registerGameSolvedListener(this);
gameController.registerTimerListener(this);
List<GameInfoContainer> loadableGames = SaveLoadController.getLoadableGameList(); List<GameInfoContainer> loadableGames = SaveLoadController.getLoadableGameList();
@ -107,20 +107,8 @@ public class GameActivity extends AppCompatActivity implements NavigationView.On
specialButtonLayout.setButtons(p.x, gameController, keyboard); specialButtonLayout.setButtons(p.x, gameController, keyboard);
//set TimerView //set TimerView
timerView = (SudokuTimer)findViewById(R.id.timerView); timerView = (TextView)findViewById(R.id.timerView);
t.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
// run every second / ever 1000 milsecs
runOnUiThread(new Runnable() {
@Override
public void run() {
if (isActive) timerView.increase();
}
});
}
}, 0, 1000);
//set GameName //set GameName
viewName = (TextView) findViewById(R.id.gameModeText); viewName = (TextView) findViewById(R.id.gameModeText);
@ -145,6 +133,9 @@ public class GameActivity extends AppCompatActivity implements NavigationView.On
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this); navigationView.setNavigationItemSelectedListener(this);
// start the game
gameController.startTimer();
} }
@Override @Override
@ -242,4 +233,17 @@ public class GameActivity extends AppCompatActivity implements NavigationView.On
public void onSolved() { public void onSolved() {
// TODO: WE WON.. do something awesome :) // TODO: WE WON.. do something awesome :)
} }
@Override
public void onTick(int time) {
//do something not so awesome
int seconds = time % 60;
int minutes = ((time -seconds)/60)%60 ;
int hours = (time - minutes - seconds)/(3600);
String h,m,s;
s = (seconds< 10)? "0"+String.valueOf(seconds):String.valueOf(seconds);
m = (minutes< 10)? "0"+String.valueOf(minutes):String.valueOf(minutes);
h = (hours< 10)? "0"+String.valueOf(hours):String.valueOf(hours);
timerView.setText(h+":"+m+":"+s);
}
} }

View file

@ -1,47 +0,0 @@
package tu_darmstadt.sudoku.ui.view;
import android.content.Context;
import android.util.AttributeSet;
import android.widget.TextView;
/**
* Created by TMZ_LToP on 19.11.2015.
*/
public class SudokuTimer extends TextView {
int seconds=0;
int mins=0;
long hours=0;
public SudokuTimer(Context context, AttributeSet attrs) {
super(context, attrs);
}
public int getSeconds(){
return seconds;
}
public int getMins(){
return mins;
}
public long getHours(){
return hours;
}
public void increase () {
seconds ++;
if(seconds+1 == 60){
seconds=0;
mins++;
}if (mins == 60) {
mins=0;
hours++;
}
String h,m,s;
s = (seconds<10)? "0"+String.valueOf(seconds) : String.valueOf(seconds);
m = (mins<10)? "0"+String.valueOf(mins) : String.valueOf(mins);
h = (hours<10)? "0"+String.valueOf(hours) : String.valueOf(hours);
StringBuilder sb = new StringBuilder();
setText(h+":"+m+":"+s);
}
}

View file

@ -53,7 +53,7 @@
style="?android:attr/ratingBarStyleSmall"/> style="?android:attr/ratingBarStyleSmall"/>
</RelativeLayout> </RelativeLayout>
<tu_darmstadt.sudoku.ui.view.SudokuTimer <TextView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="test" android:text="test"