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

📄 twins.java

📁 这是一个连连看的JAVA代码
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/* * To change this template, choose Tools | Templates * and open the template in the editor. */package Twins;import javax.microedition.midlet.*;import javax.microedition.lcdui.*;import javax.microedition.*;import java.util.Random;import javax.microedition.lcdui.game.TiledLayer;/** * * @author Null */public class Twins implements Runnable{    private static Random Rnd =new Random(System.currentTimeMillis());//随机数生产成器    private Ant Map[][]=new Ant[8][8];    public TwinsCanvas Root;                            //父        private Thread thread = null;                       //用来更新地图数据的,制造动态效果。        private Image Background;                           //背景    private Image ShowScore;                            //显示成绩框    private Image Img[]=new Image[2];                                  //元素图    private TiledLayer TLImg[]=new TiledLayer[2];                           //元素图层    private Image BtnImg;                               //按钮图片    private TiledLayer TLImgBtn;                        //按钮图层    private int BtnID=-1;                               //被按下按钮的序号,-1 时没有按下    private boolean IF=true;                            //是否刷新屏幕。暂时被屏蔽了    private int Score;                                  //当前得分    public static int TotalTime=180;                    //比赛时间,秒    public static int GraphID;                          //元素类型    private long StartTime;                             //开始时间截    private int UseTime;                                //使用时间    private boolean IsFinish;                           //是否达到指定分数或时间已经结束    private boolean RunThread=false;                    //控制动作执行    private boolean IsLockInput;                        //等待的时候锁住用户输入    //初始化,用于图片载入    Twins()    {        Background=loadImage("/Images/Pool2.png");        ShowScore=loadImage("/Images/ShowScore.png");                Img[0]=loadImage("/Images/Graph-QQ.png");        Img[1]=loadImage("/Images/Graph-System.png");        TLImg[0]=new TiledLayer(10,10,Img[0],24,24);        TLImg[1]=new TiledLayer(10,10,Img[1],24,24);                BtnImg=loadImage("/Images/Button.png");        TLImgBtn=new TiledLayer(2,2,BtnImg,60,25);        TLImgBtn.setPosition(24, 240);        for (int i = 0; i < 8; i++)        {            for (int j = 0; j < 8; j++)            {                Map[i][j]=new Ant();            }        }                thread = new Thread(this);        thread.start();        NewGame();    }        //开始新游戏,用于初始化以及产生新的地图    public void NewGame()    {        IsFinish=true;        Score=0;        StartTime=System.currentTimeMillis();        UseTime=0;        NewMap();        IsFinish=false;        Ant.TipsTimes=4;        Score=0;    }        //产生新的地图,用于游戏开始以及无解的时候使用    private void NewMap()    {        for (int i = 0; i < 8; i++)        {            for (int j = 0; j < 8; j++)            {                Map[i][j].ID = (byte)Rnd.nextInt(6);            }        }        while(FindSeries())        {            MoveMap();            //System.out.println("发现先天连续,正在消去。");        }        if (FindWay()==false)        {            NewMap();        }      }    //初始化场景,用于绘制背景,分数,进度条等信息    private void InitCanvas(Graphics g)    {        g.drawImage(Background, 0, 0, 0);        g.setColor(255,255,255);        g.drawString("得分:" + Score + "   "+Clock(),25,220,0);        ShowTips(g);        g.setColor(255,255,255);        g.drawRect(8, 24, 8, 191);        g.drawRect(8+192+24, 24, 8, 191);        int k;        if(UseTime >=TotalTime)        {            k=190;        }else        {            k=UseTime * 190 /TotalTime;        }        k=190-k;                if(k<50 && Ant.IsShowBox<3)        {                    }else        {            if(k>50)            {                g.setColor(0,255,0);            }else            {                g.setColor(255,0,0);            }            g.fillRect(9, 25+190-k, 7, k);        }        //g.drawRect(OX-1,OY-1,192+1,192+1);        //g.drawRect(OX-2,OY-2,192+3,192+3);        ShowButton(g);    }        //显示按钮    private void ShowButton(Graphics g)    {        for (int i=0;i<2;i++)        {            for(int j=0;j<2;j++)            {                TLImgBtn.setCell(j, i, i*2+j+1);            }        }        switch(BtnID)                      {            case 0:                TLImgBtn.setCell(0, 0, 5);                break;            case 1:                TLImgBtn.setCell(1, 0, 6);                break;            case 2:                TLImgBtn.setCell(0, 1, 7);                break;            case 3:                TLImgBtn.setCell(1, 1, 8);                break;            default:        }        BtnID=-1;        TLImgBtn.paint(g);    }        //答应地图,将地图用图形化反映出来    private void PainMap(Graphics g)    {        for(int y=0;y<8;y++)        {            for(int x=0;x<8;x++)            {                if(Ant.SeriesMapShowd==false && Map[x][y].IsSerie)                {                    g.fillRect(Ant.OX + y * Ant.GW, Ant.OY + x * Ant.GH, Ant.OX - 1, Ant.OY - 1);                }                                if(Ant.IsMoving==true && Map[x][y].IsSerie==true)                {                    TLImg[GraphID].setCell(y+1, x+1, 0);                }else                {                    TLImg[GraphID].setCell(y+1, x+1, Map[x][y].ID+1);                }            }        }        TLImg[GraphID].paint(g);                Ant.SeriesMapShowd=true;                if(IsFinish==false && (Ant.IsShowBox<4  ||Ant.IsPressOKKey))        {            //显示当前位置            g.setColor(255, 0, 0);            g.drawRect(Ant.OX + Ant.CurX * Ant.GW, Ant.OY + Ant.CurY * Ant.GH, Ant.OX - 1, Ant.OY - 1);        }    }        //废弃的入口函数    public void Pain(Graphics g)    {        InitCanvas(g);        //NewMap();        PainMap(g);        //FindWay();        while(FindSeries())        {            MoveMap();            //System.out.println("发现先天连续,正在消去。");        }        PainMap(g);    }        //刷新函数,整个类的外部接口,只用来显示数据,不包含动作    public void Flush(Graphics g)    {        IF=true;        Ant.IsShowBox++;        Ant.IsShowBox=Ant.IsShowBox % 6;        if(IF==false)        {            return;        }                IF=false;        //开始更新。        InitCanvas(g);        //NewMap();                PainMap(g);        if(IsFinish)        {            g.setColor(255, 0, 0);            g.drawImage(ShowScore, 40, 40, 0);            g.drawString("得分: "+Score , 50, 140, 0);            if(TotalTime==180)            {                Record.Save(Score);            }        }        //System.out.println("更新屏幕完成。");    }        //手写笔按下的动作,在这里传入的是坐标,动作激发函数    public boolean Press(int x,int y)    {        Ant.IsShowTips=false;        BtnID=-1;        if(x>=24 && x<=144 && y>=240 && y<=290)//按钮入口        {            IF=true;            //RunThread=true;            if(x<=24+60)            {                if(y<=240+25)                {                    BtnID=0;                }else                {                    BtnID=2;                }            }else            {                if(y<=240+25)                {                    BtnID=1;                }else                {                    BtnID=3;                }            }                        if(BtnID!=-1)            {                DoCommand(BtnID);            }            return true;        }        x-=Ant.OX;        y-=Ant.OY;        if(x<0 || y<0)        {            return false;        }        x=x/Ant.GW;        y=y/Ant.GH;        if(x==Ant.AX && y==Ant.AY ||x>7 || y>7 ||x<0 || y<0)//过滤图片不在的位置        {            return false;        }        if(IsFinish || IsLockInput)        {            return false;        }        Ant.CurX=x;        Ant.CurY=y;        Ant.BX=x;        Ant.BY=y;        IF=true;        RunThread=true;        return true;    }        public void KeyPress(int KeyCode)    {        Ant.IsShowTips=false;        if(IsFinish && (KeyCode!=-5 ||KeyCode!=55))        {            NewGame();            return;        }                if(IsFinish || IsLockInput)        {            return;        }        boolean NoMoveBox=false;//检查是否碰壁移动,这种移动是无效的        switch (KeyCode)        {            case -1:case 50: //上                Ant.CurY--;                if (Ant.CurY<0)                {                    Ant.CurY=0;                    NoMoveBox=true;                }                break;            case -2:case 56 ://下                Ant.CurY++;                if (Ant.CurY>7)                {                    NoMoveBox=true;                    Ant.CurY=7;                }                break;              case -3:case 52://左                Ant.CurX--;                if (Ant.CurX<0)                {                    NoMoveBox=true;                    Ant.CurX=0;                }                break;              case -4:case 54://右                Ant.CurX++;                if (Ant.CurX>7)                {                    NoMoveBox=true;                    Ant.CurX=7;                }                break;              case -5:case 55://确定                NoMoveBox=true;                if(Ant.IsPressOKKey)                {                    Ant.IsPressOKKey=false;                    return;                }                break;              default:                return;        }        if(NoMoveBox==false)        {            Ant.AX=Ant.BX;            Ant.AY=Ant.BY;            Ant.BX=Ant.CurX;            Ant.BY=Ant.CurY;        }        if(Ant.IsPressOKKey)        {            IF=true;            RunThread=true;            Ant.IsPressOKKey=false;        }        if(KeyCode==-5 ||KeyCode==55)        {            Ant.IsPressOKKey=!Ant.IsPressOKKey;        }    }        //执行命令    public void DoCommand(int CmdID)    {        switch(CmdID)        {            case 0://NewGame                NewGame();                break;            case 1://Tips                Ant.TipsTimes--;                if(Ant.TipsTimes>0)                {                    Ant.IsShowTips=true;                }                break;            case 2://Return                //Root.Root.getForm().                Root.Root.getDisplay().setCurrent(Root.Root.getForm());                break;            case 3://Exit                Root.Root.exitMIDlet();                break;        }    }        //搜寻是否存在路径,当找到一个后,记录他的地图坐标    private boolean FindWay()    {        int i;        int j;        // :        // | 情况        for (i = 0; i <= 4; i++) {            for (j = 0; j <= 7; j++) {                if (Map[i][j].ID == Map[i + 2][j].ID && Map[i][j].ID == Map[i + 3][j].ID)                 {                    //[i][j];                    //[i+1][j];                    Ant.Tips[0][0]=(byte)i;                    Ant.Tips[0][1]=(byte)j;                    Ant.Tips[1][0]=(byte)(i+1);                    Ant.Tips[1][1]=(byte)j;                    //System.out.println("1");                    return true;                }            }        }        //_        // | 情况        for (i = 0; i <= 5; i++) {            for (j = 0; j <= 6; j++) {                if (Map[i][j].ID == Map[i + 2][j + 1].ID && Map[i][j].ID == Map[i + 1][j + 1].ID)                 {                    //[i][j];                    //[i][j + 1);                    Ant.Tips[0][0]=(byte)i;                    Ant.Tips[0][1]=(byte)j;                    Ant.Tips[1][0]=(byte)(i);                    Ant.Tips[1][1]=(byte)(j+1);                    //System.out.println("2");                    return true;                }            }        }        // _        //| 情况        for (i = 0; i <= 5; i++) {            for (j = 1; j <= 7; j++) {                if (Map[i][j].ID == Map[i + 2][j - 1].ID && Map[i][j].ID == Map[i + 1][j - 1].ID)                 {                    //[i][j];                    //[i][j - 1);                    Ant.Tips[0][0]=(byte)i;                    Ant.Tips[0][1]=(byte)j;                    Ant.Tips[1][0]=(byte)(i);                    Ant.Tips[1][1]=(byte)(j-1);                    //System.out.println("3");                    return true;                }            }        }        //|        //: 情况        for (i = 3; i <= 7; i++) {            for (j = 0; j <= 7; j++) {                if (Map[i][j].ID == Map[i - 2][j].ID && Map[i][j].ID == Map[i - 3][j].ID) 

⌨️ 快捷键说明

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