i have created simple android game. if player fails answer 10 question in 3 mins. alertdialog totalguesses popup , game terminated. problem how add timer, modification code appreciated :) here code in:
newgameactivity.class
public class newgameactivity extends activity{ private static final string tag = "newgameactivity activity"; private list<string> filenamelist; //game file name private list<string> quizanswerlist; //answer private map<string, boolean> gamesmap; //which game enable private string correctanswer; //correct answer private int totalguesses; //no of guesses made private int correctanswers; //no of correct guesses private random random; //random no generator private handler handler; //used delay loading next image private animation shakeanimation; //for incorrect guesses private int guessrows; private textview answertextview; //display correct , incorrect private textview questionnumbertextview; private imageview imageimageview; //display image private tablelayout buttontablelayout; //table answer button @override protected void oncreate(bundle savedinstancestate) { // todo auto-generated method stub super.oncreate(savedinstancestate); setcontentview(r.layout.newgame); filenamelist = new arraylist<string>(); //list of image quizanswerlist = new arraylist<string>(); gamesmap = new hashmap<string, boolean>(); guessrows=2; random = new random(); //random number generator handler = new handler(); //load shake animation incorrect answer shakeanimation = animationutils.loadanimation(this, r.anim.incorrect_shake); shakeanimation.setrepeatcount(3);//animation repeat 3x //array of games string.xml string[] gamenames = getresources().getstringarray(r.array.gamelist); //by default, answer chosen games (string game : gamenames) gamesmap.put(game, true); //get references gui components questionnumbertextview = (textview) findviewbyid(r.id.questionnumbertextview); imageimageview = (imageview) findviewbyid(r.id.imageimageview); buttontablelayout = (tablelayout) findviewbyid(r.id.buttontablelayout); answertextview = (textview) findviewbyid(r.id.answertextview); //set questionnumbertextview's text questionnumbertextview.settext(getresources().getstring(r.string.question) + " 1 " + getresources().getstring(r.string.of) + " 10"); resetquiz(); //start new game } //set , start next game private void resetquiz(){ //use assetmanager image game //file name enable game assetmanager assets = getassets(); filenamelist.clear();//empty list try { set<string> games = gamesmap.keyset(); //get set of games //loop through each game (string game : games) { if (gamesmap.get(game)) { string[] paths = assets.list(game); (string path : paths) filenamelist.add(path.replace(".png", "")); } } } catch (ioexception e) { log.e(tag, "error loading image file names", e); } correctanswers = 0; //reset correct answer made totalguesses = 0; //reset total quizanswerlist.clear(); //add 10 random file name quizanswerlist int imagecounter = 1; int numberofimages = filenamelist.size(); while (imagecounter <= 10) { int randomindex = random.nextint(numberofimages); string filename = filenamelist.get(randomindex); if (!quizanswerlist.contains(filename)) { quizanswerlist.add(filename); ++imagecounter; } } loadnextimage(); } //after guesses correct answer private void loadnextimage() { //get file name of next flag , remove list string nextimagename = quizanswerlist.remove(0); correctanswer = nextimagename; //update correct answer answertextview.settext(""); //clear answertextview //display number of current question in game questionnumbertextview.settext( getresources().getstring(r.string.question) + " " + (correctanswers + 1) + " " + getresources().getstring(r.string.of) + " 10"); //extract region next image's name string game = nextimagename.substring(0, nextimagename.indexof('-')); //use assetmanager load next image assets folder assetmanager assets = getassets(); inputstream stream; //utk bace image try { //get inputstream asset representing next image stream = assets.open(game + "/" + nextimagename + ".png"); //load asset drawable , display on imageimageview drawable image = drawable.createfromstream(stream, nextimagename); imageimageview.setimagedrawable(image); } catch (ioexception e) { log.e(tag, "error loading " + nextimagename, e); } (int row = 0; row < buttontablelayout.getchildcount(); ++row) ((tablerow) buttontablelayout.getchildat(row)).removeallviews(); collections.shuffle(filenamelist); int correct = filenamelist.indexof(correctanswer); filenamelist.add(filenamelist.remove(correct)); layoutinflater inflater = (layoutinflater) getsystemservice( context.layout_inflater_service); (int row = 0; row < guessrows; row++) { tablerow currenttablerow = gettablerow(row); (int column = 0; column < 3; column++) { button newguessbutton = (button) inflater.inflate(r.layout.guess_button, null); string filename = filenamelist.get((row * 3) + column); newguessbutton.settext(getanswername(filename)); newguessbutton.setonclicklistener(guessbuttonlistener); currenttablerow.addview(newguessbutton); } } int row = random.nextint(guessrows); int column = random.nextint(3); tablerow randomtablerow = gettablerow(row); string answername = getanswername(correctanswer); ((button)randomtablerow.getchildat(column)).settext(answername); } private tablerow gettablerow(int row) { return (tablerow) buttontablelayout.getchildat(row); } private string getanswername(string name) { return name.substring(name.indexof('-') + 1).replace('_', ' '); } //called when user selects answer private void submitguess(button guessbutton) { string guess = guessbutton.gettext().tostring(); string answer = getanswername(correctanswer); ++totalguesses;//total guesses user made increment //if guess correct if (guess.equals(answer)) { ++correctanswers; //view jawapan dalam tulisan warna hijau answertextview.settext(answer + "!"); answertextview.settextcolor(getresources().getcolor(r.color.correct_answer)); disablebuttons();// disable answer buttons // if user has correctly identified 10 image if (correctanswers == 10) { //create new alerdialog builder alertdialog.builder builder = new alertdialog.builder(this); builder.settitle(r.string.taniah); //set alertdialog's message display game results // %d means integer , not double, %s tuh dia ganti string, builder.setmessage(string.format("%d %s", totalguesses, getresources().getstring(r.string.guesses) )); builder.setcancelable(false); //add reset quiz builder.setpositivebutton(r.string.reset_quiz, new dialoginterface.onclicklistener() { public void onclick(dialoginterface dialog, int id) { resetquiz(); } } ); alertdialog resetdialog = builder.create(); resetdialog.show(); } else { handler.postdelayed( new runnable() { @override public void run() { loadnextimage(); } }, 1000); } } else { //play animation imageimageview.startanimation(shakeanimation); //display "incorrect!" in red answertextview.settext(r.string.incorrect_answer); answertextview.settextcolor(getresources().getcolor(r.color.incorrect_answer)); guessbutton.setenabled(false);//disable incorrect answer } } private void disablebuttons() { (int row = 0; row < buttontablelayout.getchildcount(); ++row) { tablerow tablerow = (tablerow) buttontablelayout.getchildat(row); (int = 0; < tablerow.getchildcount(); ++i) tablerow.getchildat(i).setenabled(false); } } //create constant each menu id private final int choices_menu_id = menu.first; private final int games_menu_id = menu.first + 1; @override public boolean oncreateoptionsmenu(menu menu) { // todo auto-generated method stub super.oncreateoptionsmenu(menu); menu.add(menu.none, choices_menu_id, menu.none, r.string.choices); menu.add(menu.none, games_menu_id, menu.none, r.string.game); return true; } @override public boolean onoptionsitemselected(menuitem item) { // todo auto-generated method stub switch(item.getitemid()) { case choices_menu_id: final string[] possiblechoices = getresources().getstringarray(r.array.choiceslist); alertdialog.builder choicesbuilder = new alertdialog.builder(this); choicesbuilder.settitle(r.string.choices); choicesbuilder.setitems(r.array.choiceslist,new dialoginterface.onclicklistener() { public void onclick(dialoginterface dialog, int item) { // todo auto-generated method stub guessrows = integer.parseint(possiblechoices[item].tostring()) /3; resetquiz(); } } ); alertdialog choicesdialog = choicesbuilder.create(); choicesdialog.show(); return true; case games_menu_id: //get array of game final string[] gamenames = gamesmap.keyset().toarray(new string[gamesmap.size()]); //boolean array representing whether image game enabled boolean[] gamesenabled = new boolean[gamesmap.size()]; (int i= 0 ; < gamesenabled.length; ++i) gamesenabled[i] = gamesmap.get(gamenames[i]); alertdialog.builder gamesbuilder = new alertdialog.builder(this); gamesbuilder.settitle(r.string.game); string[] displaynames = new string[gamenames.length]; (int = 0; < gamenames.length; ++i) displaynames[i] = gamenames[i].replace('_', ' '); gamesbuilder.setmultichoiceitems( displaynames, gamesenabled, new dialoginterface.onmultichoiceclicklistener() { @override public void onclick(dialoginterface dialog, int which, boolean ischecked) { gamesmap.put( gamenames[which].tostring(), ischecked); } } ); gamesbuilder.setpositivebutton(r.string.reset_quiz, new dialoginterface.onclicklistener() { @override public void onclick(dialoginterface dialog, int button) { resetquiz(); } } ); alertdialog regionsdialog = gamesbuilder.create(); regionsdialog.show(); return true; } return super.onoptionsitemselected(item); } private onclicklistener guessbuttonlistener = new onclicklistener() { @override public void onclick(view v) { submitguess((button) v); } }; }
simple timer example
new timer().schedule(new timertask() { @override public void run() { // work here } }, 0, 10000);
Comments
Post a Comment