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

📄 clcanvas.java

📁 用J2ME写的一种七彩连珠(五子连线)的手机游戏 通用程序
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
					+ (Cfg.BALL_DIM + 2) * i, tipY, 0);
		}
	}

	//显示分数(注意位置) 首行显示 (20,0)
	void drawScore(Graphics g) {
		g.setColor(Cfg.SCORE_COLOR);
		//g.drawString("Score:"+cx+":"+cy, Cfg.SCORE_POS_X, Cfg.SCORE_POS_Y, 0);
		g.drawString("Score:", Cfg.SCORE_POS_X, 0, 0);
		//int scoreY = Cfg.SCORE_POS_Y + Font.getDefaultFont().getHeight() + Cfg.LINE_GAP;
		int scoreY = Font.getDefaultFont().getHeight() + Cfg.LINE_GAP;
		g.drawString("" + score, Cfg.SCORE_POS_X, scoreY, 0);
		
		g.drawString("High:"+cx+":"+cy+":"+gridLength, Cfg.SCORE_POS_X+fWidth*4, 0, 0);
		g.drawString("" + maxScore, Cfg.SCORE_POS_X+fWidth*4, scoreY, 0);
		
		//debug
		//g.drawRect(0,0,176,208);
	}

	void drawPos(Graphics g) {
		/*
		int interval = stoneLength + 2 * Cfg.EDGE + 1;
		g.drawImage(curPos, Cfg.X0 + 1 + cx * interval, Cfg.Y0 + 1 + cy
				* interval, 0);
		if (!(mx == -1)) {
			g.drawImage(markPos, Cfg.X0 + 1 + mx * interval, Cfg.Y0 + 1 + my
					* interval, 0);
		}
		*/
        int x1 = borderX ;
        int y1 = borderY ;
		g.drawImage(curPos, x1 + 1 + cx * gridLength, y1 + 1 + cy
				* gridLength, 0);
		if (!(mx == -1)) {
			g.drawImage(markPos, x1 + 1 + mx * gridLength, y1 + 1 + my
					* gridLength, 0);
		}
	}

	void drawBalls(Graphics g) {
		for (int i = 0; i < balls.length; ++i) {
			for (int j = 0; j < balls.length; ++j) {
				if (balls[i][j] != null) {
					//balls[i][j].draw(g, i, j);
					drawBall(g,balls[i][j], i, j);
				}
			}
		}
	}
	void drawBall(Graphics g, Ball ball, int xPos, int yPos) {
		
		int x0=borderX + xPos * gridLength+1  ;
		int y0=borderY + yPos * gridLength+1 ;
        
		//int interval = Cfg.EDGE * 2 + ball_DIMSzie+ 1;
		//int x0 = Cfg.X0 + interval * xPos + 1 + Cfg.EDGE;
		//int y0 = Cfg.Y0 + interval * yPos + 1 + Cfg.EDGE;
		g.drawImage(ball.imgs[ball.id], x0, y0, Graphics.LEFT | Graphics.TOP);
	}
	
	void drawBoard(Graphics g) {

		g.setColor(Cfg.LINE_COLOR);
		int unit = stoneLength + 2 * Cfg.EDGE + 1;
/*
		// horizantal line
		for (int i = 0; i <= Cfg.SIZE; ++i) {
			//int y = Cfg.Y0 + i * unit;
			int y = borderX + i * unit;
			//g.drawLine(Cfg.X0, y, Cfg.X0 + Cfg.SIZE * unit, y);
			g.drawLine(borderX, y, borderY + Cfg.SIZE * unit, y);
		}

		// vertical line
		for (int i = 0; i <= Cfg.SIZE; ++i) {
			//int x = Cfg.X0 + i * unit;
			//g.drawLine(x, Cfg.Y0, x, Cfg.Y0 + Cfg.SIZE * unit);
			int x = borderX + i * unit;
			g.drawLine(x, borderY, x, borderY + Cfg.SIZE * unit);

		}
		*/
		
		//画棋盘 ( 
        int y;
        for(int r = 0; r <= Cfg.SIZE; r++)
        {
        	//以borderx为中心,上下半个框的高度
           int x1 = borderX ;
            int x2 = (x1 + borderLength) ;
            y = borderY + r * gridLength ;
            g.drawLine(x1, y, x2, y);
        }

        int x;
        for(int c = 0; c <= Cfg.SIZE; c++)
        {
            x = borderX + c * gridLength ;
            int y1 = borderY ;
            int y2 = (y1 + borderLength) ;
            g.drawLine(x, y1, x, y2);
        }

        for(int r = 0; r < Cfg.SIZE; r++)
        {
        	for(int c = 0; c < Cfg.SIZE; c++)
        	{
        		x = borderX + c * gridLength ;
        		y = borderY + r * gridLength ;
        		g.drawImage(imgBackGroundReal,x,y,Graphics.LEFT | Graphics.TOP);        		
        	}
        }

		
	}

	boolean isConnect(int x0, int y0, int x1, int y1) {
		Maze maze = new Maze(balls, x0, y0, x1, y1);
		return maze.isConnect(); // test!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1
	}

	protected void keyPressed(int key) {
		int gameKey = getGameAction(key);
		switch (gameKey) {

		case Canvas.FIRE:
			BallGo();
			break;

		case Canvas.UP:
			cy = (cy - 1 + Cfg.SIZE) % Cfg.SIZE;
			break;
		case Canvas.DOWN:
			cy = (cy + 1) % Cfg.SIZE;
			break;
		case Canvas.LEFT:
			cx = (cx - 1 + Cfg.SIZE) % Cfg.SIZE;
			break;
		case Canvas.RIGHT:
			cx = (cx + 1) % Cfg.SIZE;
			break;

		}
		repaint();
	}
	//触摸屏控制
	 protected void pointerPressed(int x, int y)
	    {
	        //if(!logic.gameEnd() && !logic.thinking())
	        {
	        	//计算出点击的位置
	            cy = (y - borderY) / gridLength;
	            cx = (x - borderX) / gridLength;
	            //执行移动
	            BallGo();
	            repaint();
	        }
	    }
	 public void BallGo(){
		 //cx, cy 为当前选中的位置
		 //mx,my 为上次选中的位置
		if (!(cx == mx && cy == my)) { //与上次不是同一个位置
			if (balls[cx][cy] != null) {//该处有球, 表示选中该球
				mx = cx;
				my = cy;
			} else { //该处无球,
				if (mx != -1 && isConnect(mx, my, cx, cy)) { //上次选中,且与此处连通,需要进行移动,然后进行消除。

					balls[cx][cy] = balls[mx][my]; //移动球
					balls[mx][my] = null;
					
					mx = -1; //当前未选中球
					my = -1;

					int exNum = expunge();//进行消除计算,并返回消除的数量
					score += Cfg.SCORE[exNum];//按数量统计分数。
					if (score>maxScore) {
						maxScore=score;
						recordsave();
					}
					//System.out.println("score += Cfg.SCORE[exNum]")		;			
					if (exNum == 0 && endOfGame(Cfg.RUNNING_BALL_NUM)==false) { //无分数,表示不能消除球
						//System.out.println("getRandomBalls(Cfg.RUNNING_BALL_NUM);");	
						getRandomBalls(Cfg.RUNNING_BALL_NUM);
						expunge();
						endOfGame(Cfg.RUNNING_BALL_NUM);
					}
				}
			}
		}
		
	 }
	public void commandAction(Command cmd, Displayable arg1) {
		// TODO Auto-generated method stub
        if(cmd == cmdStop)
        	midletColorlinez.backHome();
        else
        if(cmd == cmdNew)
            newStage();
	}
	   public boolean newStage()
	    {
		   //System.out.println("newStage");
	        //addCommand(cmdUndo);
	        addCommand(cmdStop);
	        removeCommand(cmdNew);
	        calcSize();
	        //System.out.println("first calcSize");
	        init();
	        //System.out.println("after initial");
	        repaint();
	        return true;
	    }	
	   private boolean endOfGame(int needball)
	    {
		    int avaliableBall=0;
	        endOfGame = true;
	        for(int r = 0; r < Cfg.SIZE; r++)
	        {
	            for(int c = 0; c < Cfg.SIZE; c++)
	            {
	                if(balls[r][c] == null ) {
	                	avaliableBall += 1;
	                	if (avaliableBall>=needball) { 
	                		endOfGame = false;
	                		break;
	                	}
	                }
	                
	            }

	            if(endOfGame==false)  break;
	        }

	        if(endOfGame) 
	            notifyGameEnd();
	        
	        return endOfGame;
	    }
	    public void notifyGameEnd()
	    {
	        addCommand(cmdNew);
	        addCommand(cmdStop);
//	        removeCommand(cmdUndo);
	    }
	    private void recordload()
	    {
	        try
	        {
	            RecordStore rs = RecordStore.openRecordStore("HRecords", false);
	            //maxScore=rs.getNumRecords() + 2000;
	            System.out.println("rs.getNumRecords()="+rs.getNumRecords());
	            if(rs.getNumRecords() > 0)
	            {
	                byte bs[] = rs.getRecord(1);
	            	//maxScore=bs.length + 1000;
	                System.out.println("bs.length="+bs.length);
	                if(bs.length >= 1)
	                {
	                	DataInputStream istream = new DataInputStream(new ByteArrayInputStream(bs,0,bs.length)); //注意DataInputStream的使用
	                	try {
							maxScore = istream.readInt();
							istream.close();
		                    //names[i] = istream.readUTF();

						} catch (IOException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						} 
						
	                	//maxScore = bs[0];
	                }
	            }
	            rs.closeRecordStore();
	        }
	        catch(RecordStoreException _ex) { }
	    }

	    private void recordsave()
	    {
	        try
	        {
	            RecordStore rs = RecordStore.openRecordStore("HRecords", true);
	            byte[] bs = null;
	            //bs[0] = (byte)maxScore;
	            //转换为byte
            	ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
            	DataOutputStream dos = new DataOutputStream(baos); 
            	try {
					dos.writeInt(maxScore);
            	//dos.writeLong(long1); 
            	//dos.writeUTF(str1); 
            	//dos.writeBoolean(WroteFlag); 
            	bs = baos.toByteArray(); 
            	baos.close(); 
            	dos.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} 

	            
	            if(rs.getNumRecords() > 0) {
	            	
	                rs.setRecord(1, bs, 0, bs.length);
	            }
	            else {

	            }
	                rs.addRecord(bs, 0, bs.length);
	            rs.closeRecordStore();
	        }
	        catch(RecordStoreException _ex) { }
	    }

}

⌨️ 快捷键说明

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