⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 algo.java

📁 一个小巧但非常有趣的游戏
💻 JAVA
字号:
package sudoku;import java.util.ArrayList;import java.util.Iterator;import java.util.HashMap;public class Algo {  public class Tentative  {    public Case _carreau;    public ArrayList _values;    public int _value;    public Tentative(Case carreau,int value)    {      _carreau = carreau;      _values = new ArrayList();      _values.add(new Integer(value));      _value = value;    }    public String toString()    {      return new String("Tentative carreau : "+_carreau.getRow()+" "+_carreau.getColumn()+" valeur = "+_value);    }  }  ArrayList _listeTentative;  int isAuHasard;  static Algo _algo = null;  private Algo()  {    _listeTentative = new ArrayList();  }  public void init()  {    isAuHasard = 0;    _listeTentative.clear();  }  static public Algo getInstance()  {    if(_algo == null)      _algo = new Algo();    return _algo;  }  int tryAlgoOtherCase(ArrayList tableau, int niveau, int sizeLine, int sizeColumn)  {    int result = 0;    ArrayList choix = new ArrayList();    for(int k=0;k<sizeLine*sizeColumn;k++)    {      Integer valeur = new Integer(k);      choix.add(valeur);    }    // boucle sur les tableaux    while(choix.size() > 0)    {      double random = Math.random();      random*=choix.size();      int index = (int)Math.floor(random);      Integer newValue = (Integer)choix.remove(index);      Tableau tab = (Tableau)tableau.get(newValue.intValue());      // boucle sur les cases      for(int j=0;j<sizeLine*sizeColumn*sizeLine*sizeColumn;j++)      {        Case carreau = (Case) tab.getCase(j);        if(carreau.testOtherCase(niveau))          result++;      }    }    return result;  }  int tryAlgoDeBase(ArrayList tableau, int sizeLine, int sizeColumn)  {    boolean result = true;    int boucle = 0;    ArrayList choix = new ArrayList();    while(result)    {      boucle++;      result = false;      for(int k=0;k<sizeLine*sizeColumn;k++)      {        Integer valeur = new Integer(k);        choix.add(valeur);      }      // boucle sur les tableaux      while(choix.size() > 0)      {        double random = Math.random();        random*=choix.size();        int index = (int)Math.floor(random);        Integer newValue = (Integer)choix.remove(index);        Tableau tab = (Tableau)tableau.get(newValue.intValue());        // boucle sur les cases        for(int j=0;j<sizeLine*sizeColumn*sizeLine*sizeColumn;j++)        {          Case carreau = (Case) tab.getCase(j);          result = carreau.update() || result;        }      }      result = verifGlobale(tableau,sizeLine,sizeColumn) || result;    }    return boucle;  }  private boolean verifGlobale(ArrayList tableau, int sizeLine, int sizeColumn)  {    boolean result = false;    // boucle sur les tableaux    for(int i=0;i<sizeLine*sizeColumn;i++)    {      Tableau tab = (Tableau)tableau.get(i);      // boucle sur les cases      for(int j=0;j<sizeLine*sizeColumn*sizeLine*sizeColumn;j++)      {        Case carreau = (Case) tab.getCase(j);        if(! carreau.isLock())          result = carreau.tryLock() || result;      }    }    return result;  }  int tryAlgoMiniRangees(ArrayList tableau, int sizeLine, int sizeColumn)  {    int result = 0;    // boucle sur les tableaux    ArrayList choix = new ArrayList();    for(int k=0;k<sizeLine*sizeColumn;k++)    {      Integer valeur = new Integer(k);      choix.add(valeur);    }    // boucle sur les tableaux    while(choix.size() > 0)    {      double random = Math.random();      random*=choix.size();      int index = (int)Math.floor(random);      Integer newValue = (Integer)choix.remove(index);      Tableau tab = (Tableau)tableau.get(newValue.intValue());      // boucle sur les lignes      for(int j=0;j<tab.getNbLignes();j++)      {        Rangee ligne = (Rangee) tab.getLigne(j);        if(ligne.verifMiniRangees())          result++;      }      // boucle sur les colonnes      for(int j=0;j<tab.getNbColonnes();j++)      {        Rangee colonne = (Rangee) tab.getColonne(j);        if(colonne.verifMiniRangees())          result++;      }      // boucle sur les carres      for(int j=0;j<tab.getNbCarres();j++)      {        Carre carre = (Carre) tab.getCarre(j);        if(carre.verifMiniLignes())          result++;        if(carre.verifMiniColonnes())          result++;      }    }    return result;  }  int tryAlgoNUplesVisibles(int uples, ArrayList tableau)  {    int result = 0;    // r閏up閞ation du 1er tableau    Tableau tab = (Tableau)tableau.get(0);    // boucle sur les lignes    for(int j=0;j<tab.getNbLignes();j++)    {      Rangee ligne = tab.getLigne(j);      if(verifNUplesVisibles(ligne.getCases(),uples))        result++;    }    // boucle sur les colonnes    for(int j=0;j<tab.getNbColonnes();j++)    {      Rangee colonne = tab.getColonne(j);      if(verifNUplesVisibles(colonne.getCases(),uples))        result++;    }    // boucle sur les carres    for(int j=0;j<tab.getNbCarres();j++)    {      Carre carre = tab.getCarre(j);      if(verifNUplesVisibles(carre.getCases(),uples))        result++;    }    // boucle sur les diagonales    for(int j=0;j<tab.getNbDiagonales();j++)    {      Diagonale diagonale = tab.getDiagonale(j);      if(verifNUplesVisibles(diagonale.getCases(),uples))        result++;    }    return result;  }  int tryAlgoNUplesCaches(int uples, ArrayList tableau, int sizeLine, int sizeColumn)  {    int result = 0;    // r閏up閞ation du 1er tableau    Tableau tab = (Tableau)tableau.get(0);    // boucle sur les lignes    for(int j=0;j<tab.getNbLignes();j++)    {      Rangee ligne = tab.getLigne(j);      if(verifNUplesCaches(ligne.getCases(),uples,sizeLine,sizeColumn))        result++;    }    // boucle sur les colonnes    for(int j=0;j<tab.getNbColonnes();j++)    {      Rangee colonne = tab.getColonne(j);      if(verifNUplesCaches(colonne.getCases(),uples,sizeLine,sizeColumn))        result++;    }    // boucle sur les carres    for(int j=0;j<tab.getNbCarres();j++)    {      Carre carre = tab.getCarre(j);      if(verifNUplesCaches(carre.getCases(),uples,sizeLine,sizeColumn))        result++;    }    // boucle sur les diagonales    for(int j=0;j<tab.getNbDiagonales();j++)    {      Diagonale diagonale = tab.getDiagonale(j);      if(verifNUplesCaches(diagonale.getCases(),uples,sizeLine,sizeColumn))        result++;    }    return result;  }  private boolean verifNUplesVisibles(ArrayList cases, int uples)  {    boolean result = false;    // map stocke pour chaque case la liste des chiffres qu'il poss鑔e    HashMap map = new HashMap();    // map qui dit pour un Integer donn

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -