Android Quiz game -


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); 

also see this , doc


Comments