数独游戏--初始化表中数据

来源:互联网 发布:淘宝修改差评步骤 编辑:程序博客网 时间:2024/06/14 05:23

这时候需要一些逻辑类来进行一些计算了,新建Game.java:

public class Game {    //字符串中的0,就代表什么都没有    public static final String table1=""            +"360000000"            +"004230800"            +"000004200"            +"070460003"            +"820000014"            +"500013020"            +"001900000"            +"007048300"            +"000000045";}

接着需要判断table1的里面‘0’,然后返回相应的字符串,这里就出事了,我写的函数是这样的:

public String getTileString(int x,int y){        char s=table1.charAt(x+y*9);        if(s=='0')return "";        return String.valueOf(s);    }

但是!老师教的是先转换成int型数组,然后再判断int型的0,然后再返回String类型:

public Game(){        getPuzzleString(table1);}private int[] shudu=new int[9*9];public int getTile(int x,int y){        return shudu[x+9*y];}public String getTileString(int x,int y){        int c=getTile(x,y);        if(c==0)return "";        else return String.valueOf(c);}public void getPuzzleString(String str){        for(int i=0;i<str.length();i++){            shudu[i]=str.charAt(i)-'0';        }}

这种跳去的好烦,就把我的当做简化版吧,毕竟老师这样写肯定有他的道理。
然后就是在onDraw方法里面画字符了:

//region 初始化表格内的数据numPaint.setColor(Color.BLACK);numPaint.setStyle(Paint.Style.STROKE);numPaint.setTextSize((float) (0.75*height));numPaint.setTextAlign(Paint.Align.CENTER);Paint.FontMetrics fm=numPaint.getFontMetrics();float x=width/2f;float y=height/2+(-(fm.ascent+fm.descent))/2;for(int i=0;i<9;i++){    for(int j=0;j<9;j++){    canvas.drawText(game.getTileString(i,j),i*width+x,j*height+y,numPaint);    }}//endregion

这里的Paint.FontMetrices是不是看不大懂呢,这个类是专门对字体进行设置的,这里写图片描述
图片引用自
值得注意的是,baseline是基准线,而他的y轴正方向是向下的,所以ascent的值一般都是负值

0 0