亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? gamecanvas.java

?? 《MIDP手機游戲設計》是一本運用MIDP進行J2ME手機游戲編程的JAVA書籍
?? JAVA
?? 第 1 頁 / 共 3 頁
字號:
						//再描繪
						repaint();
						//等待描繪的間隔
						Thread.sleep(DRAW_INTERVAL);
					}// end while

					if(isGameOver) {
					//當游戲結束的標志建立時
						//刪除指令
						removeCommand(pauseCmd);
						removeCommand(resumeCmd);
						removeCommand(quitCmd);

						//進行再描繪后等待一下
						repaint();
						Thread.sleep(1000);

						//顯示游戲結束,在等待一定時間后顯示標題
						gameState = GAME_END;
						repaint();
						Thread.sleep(5000);
						doTitle();
					}
				break;
			}
		}catch(Exception e) {}
	}

	/** 結束游戲的方法 */
	private void doGameStop() {
		//停止游戲循環
		isStopped = true;
		//設定最高分數
		setHighScore(score);
	}

	/** 設定最高分數的方法 */
	private void setHighScore(long score) {
		if(score > highScore) {
			highScore = score;
		}
	}

	/**
	 * 向下落下來結合的方法
	 * @return	boolean   當可以向下落下結合的時候就會傳回true、
         * 若不能結合的話就傳回false。
	 */
	private boolean doDropDown() {
		//顯示是否可以落下的標志
		boolean isFallOK = false;
		//顯示是否有放置的標志
		boolean isDropDown = false;
		//儲存可以落下數的變量
		int fallOKCount = 0;

		int loopCount = (COLUMN_LENGTH -1) * ROW_LENGTH -1;
		for(int i=COLUMN_LENGTH * ROW_LENGTH-1; i > loopCount; i--) {//從右端來向左邊
			isFallOK = false;
			fallOKCount = 0;
			for(int j=i; j > -1; j=j-ROW_LENGTH) {//當現在的Index是最上面
				if(pieces[j] != null) {
					//當現在的Index不是null時
					if(isFallOK) {
						//當可以落下時
						isDropDown = true;

						//尋找到成為null為止
						int jj = 0;
						for(jj=j-ROW_LENGTH; jj > -1; jj=jj-ROW_LENGTH) {
							if(pieces[jj] == null) {
								break;
							}
						}

						//落下可以落下的部分
						for(int f=j; f > jj; f=f-ROW_LENGTH) {
							pieces[f +(fallOKCount *ROW_LENGTH)] = pieces[f];
							pieces[f] = null;
						}
						//再度調查相同的縱列
						i++;
					}
				}else {
				//沒有方塊時
					isFallOK = true;
					fallOKCount++;
				}
			}
		}
		return isDropDown;
	}

	/**
	 * 傳回儲存了放入湊成同色地方的ndex值的Vector對象的Vector的方法
	 * @return	Vector	放入湊成同色地方的Index值的Vector對象的Vector
	 */
	private Vector doMatchCheck() {
		//準備用來檢查用的Vector與Hashtable
		Vector matchVec = new Vector();
		Hashtable matchHash = new Hashtable();

		//用來調查該行是否為null的標志
		boolean isNullHorizon = false;

		//從Piece數組的右下順序來看
		//為了不要浪費功夫只看上與左
		for(int i=COLUMN_LENGTH * ROW_LENGTH -1; i > -1; i=i-ROW_LENGTH) {//左邊則向上檢查
			if(isNullHorizon) {
			//橫向一行為null時因為上面沒有任何東西,因此結束for語法的處理
				break;
			}

			//清除用來調查該行是否為null的標志
			isNullHorizon = true;
			int endInx = i -ROW_LENGTH;
			for(int j=i; j > endInx; j--) {//從右邊開始橫向查看該行
				if(pieces[j] != null) {
				//現在位置的方塊不是null的場合
					//將用來調查該列是否為null的標志設為false
					isNullHorizon = false;

					//上方的檢查
					if(i > ROW_LENGTH -1 && pieces[j -ROW_LENGTH] != null) {
						//不是最上方、上方不是null時
						if(pieces[j -ROW_LENGTH].currentColor == pieces[j].currentColor) {
							//目前的方塊與上面的方塊為同Color時
							pieces[j].isMatchUp = true;
							pieces[j -ROW_LENGTH].isMatchDown = true;

							if(matchHash.get(String.valueOf(j)) == null) {
							//為沒有處理的坐標時
							//當儲存了湊在一起的Index的Hashtable沒有任何值時
								if(matchHash.get(String.valueOf(j -ROW_LENGTH)) == null) {
								//當也沒有處理上方的方塊時
									//新產生Vector
									Vector tmpVect = new Vector();
									//在所產生的Vector中新增現在坐標、上方坐標
									tmpVect.addElement(new Integer(j));
									tmpVect.addElement(new Integer(j -ROW_LENGTH));
									matchHash.put(String.valueOf(j), tmpVect);
									matchHash.put(String.valueOf(j -ROW_LENGTH), tmpVect);
									//將產生的Vector上新增到Hashtable與Vector
									matchVec.addElement(tmpVect);
								}
							}else {
							//為已經處理過的坐標時
							//上方為未處理時
								Vector tmpVect = (Vector)matchHash.get(String.valueOf(j));
								tmpVect.addElement(new Integer(j -ROW_LENGTH));
								matchHash.put(String.valueOf(j -ROW_LENGTH), tmpVect);
							}
						}else {
						//現在的方塊與上方的方塊為不同Color時
							pieces[j].isMatchUp = false;
							pieces[j -ROW_LENGTH].isMatchDown = false;
						}
					}else {
					//上方為null時
						pieces[j].isMatchUp = false;
					}

					//左邊的檢查
					if(j % ROW_LENGTH != 0 && pieces[j -1] != null) {
					//當不是最左邊的時候、或左邊不是null的時候
						if(pieces[j -1].currentColor == pieces[j].currentColor) {
						//目前的方塊與上面的方塊為同Color時
							pieces[j].isMatchLeft = true;
							pieces[j -1].isMatchRight = true;

							if(matchHash.get(String.valueOf(j)) == null) {
							//為沒有處理過的坐標時
								if(matchHash.get(String.valueOf(j -1)) == null) {
								//左方也為沒有處理過時
									//新增Vector
									Vector tmpVect = new Vector();
									//在所產生的Vector中新增現在坐標、上方坐標
									tmpVect.addElement(new Integer(j));
									tmpVect.addElement(new Integer(j -1));
									matchHash.put(String.valueOf(j), tmpVect);
									matchHash.put(String.valueOf(j -1), tmpVect);
									matchVec.addElement(tmpVect);
								}else {
								//左方為處理過時
									Vector tmpVect = (Vector)matchHash.get(String.valueOf(j -1));
									tmpVect.addElement(new Integer(j));
									matchHash.put(String.valueOf(j), tmpVect);
								}
							}else {
							//為已經處理過的坐標時
								if(matchHash.get(String.valueOf(j -1)) == null) {
								//左方為沒處理過時
									Vector tmpVect = (Vector)matchHash.get(String.valueOf(j));
									tmpVect.addElement(new Integer(j -1));
									matchHash.put(String.valueOf(j -1), tmpVect);
								}else {
								//當左方為處理過時就結合
									Vector curVect = (Vector)matchHash.get(String.valueOf(j));
									Vector leftVect = (Vector)matchHash.get(String.valueOf(j -1));
									if(! curVect.equals(leftVect)) {
										int curVectSize = curVect.size();
										for(int k=0; k < curVectSize; k++) {
											Integer intge = (Integer)curVect.elementAt(k);
											leftVect.addElement(intge);
											matchHash.put(intge.toString(), leftVect);
										}
										matchVec.removeElement(curVect);
									}
								}
							}
						}else {
						//目前的方塊與左方的方塊為不同Color時
							pieces[j].isMatchLeft = false;
							pieces[j -1].isMatchRight = false;
						}
					}else {
					//左方為null時
						pieces[j].isMatchLeft = false;
					}
				}else {
				//現在的坐標為null時
					if(i > ROW_LENGTH -1 && pieces[j -ROW_LENGTH] != null) {
					//當不是在最上面時就將上面方塊的下方設為false
						pieces[j -ROW_LENGTH].isMatchDown = false;
					}
					if(j % ROW_LENGTH != 0 && pieces[j -1] != null) {
					//當不是在最左邊時就將左邊方塊的右邊設為false
						pieces[j -1].isMatchRight = false;
					}
				}
			}
		}
		return matchVec;
	}

	/** 進行暫?;蚴侵匦麻_始的方法 */
	private void doPauseOrResume() {
		if(isPaused) {
		//暫停時
			//重新開始
			isPaused = false;
			isStopped = false;
			doThreadStart();
		}else {
		//不是暫停時
			//暫停
			isPaused = true;
			doGameStop();
		}
		repaint();
	}

	/**
	 * 進行描繪的方法,通常不會從本身類直接調用
	 * @param	g	Graphics對象
	 */
	protected void paint(Graphics g) {
		//將背景以白色清除
		g.setColor(0x00FFFFFF);
		g.fillRect(0, 0, screenWidth, screenHeight);

		String drawSt;
		int drawX, drawY, stWidth;
		int stHeight = defFont.getHeight();

		g.setFont(defFont);

		//根據游戲狀態來改變描繪內容
		switch(gameState) {
			case TITLE:			//顯示標題時
				//描繪標題圖像
				drawX = (screenWidth - titleImg.getWidth()) /2;
				g.drawImage(titleImg, drawX, 0, Graphics.TOP|Graphics.LEFT);

				//顯示最高分數
				g.setColor(0x00000000);
				drawSt = "High Score";
				drawX = (screenWidth - defFont.stringWidth(drawSt)) / 2;
				drawY = titleImg.getHeight();
				g.drawString(drawSt, drawX, drawY, Graphics.TOP|Graphics.LEFT);
				drawX = drawX + defFont.stringWidth(drawSt) - defFont.stringWidth(String.valueOf(highScore));
				drawY = drawY + stHeight;
				g.drawString(String.valueOf(highScore), drawX, drawY, Graphics.TOP|Graphics.LEFT);

				//顯示著作權
				drawSt = "Copyright 2001";
				drawX = (screenWidth - defFont.stringWidth(drawSt)) / 2;
				drawY = getHeight() - stHeight *2;
				g.drawString(drawSt, drawX, drawY, Graphics.TOP|Graphics.LEFT);
				drawSt = "SkyArts.com";
				drawX = (screenWidth - defFont.stringWidth(drawSt)) / 2;
				drawY = drawY + stHeight;
				g.drawString(drawSt, drawX, drawY, Graphics.TOP|Graphics.LEFT);
			return;

			case GAME_START:	//游戲開始時
				//描繪游戲開始畫面
				g.setColor(0x00000000);
				drawSt = "Ready go !";
				stWidth = defFont.stringWidth(drawSt);
				drawX = (screenWidth - stWidth) / 2;
				drawY = (screenHeight - stHeight) / 2;
				g.drawString(drawSt, drawX, drawY, Graphics.TOP|Graphics.LEFT);
			return;

			case GAME_PLAYING:	//游戲中
			case GAME_END:		//游戲結束時
				Piece[] pieces = new Piece[COLUMN_LENGTH * ROW_LENGTH];
				System.arraycopy(this.pieces, 0, pieces, 0, pieces.length);

				g.setColor(0x00000000);
				//將分數描繪在畫面左邊
				drawSt = "S:" + String.valueOf(score);
				g.drawString(drawSt, 0, 0, Graphics.TOP|Graphics.LEFT);

				//顯示邊框榞傪昞帵
				int widSize = ROW_LENGTH * Piece.WIDTH;
				int heiSize = COLUMN_LENGTH * Piece.HEIGHT;
				g.setColor(0x000000FF);
				g.fillRect(0, screenHeight -heiSize -3, 3, heiSize +3);				//左
				g.fillRect(0, screenHeight -3, widSize +4, 3);					//下
				g.fillRect(widSize+4, screenHeight -heiSize -3, 3, heiSize +3);			//右
				g.setColor(0x0000FFFF);
				g.drawLine(1, screenHeight -heiSize -3+1, 1, screenHeight -2);			//左 
				g.drawLine(1, screenHeight -2, widSize+4, screenHeight -2);			//下
				g.drawLine(widSize +5, screenHeight -heiSize -3+1, widSize +5, screenHeight -2);//右

				//Next piece
				g.setColor(0x00000000);
				drawSt = "Next";
				stWidth = defFont.stringWidth(drawSt);
				g.drawString(drawSt, widSize + 12, screenHeight -heiSize -3, Graphics.TOP|Graphics.LEFT);

				if(! isPaused) {
				//暫停時不描繪方塊
					//描繪方塊部分
					int loopCount = COLUMN_LENGTH * ROW_LENGTH;
					for(int i=loopCount-1; i > -1; i=i-ROW_LENGTH) {
					//由右下往上增加列
						drawY = (Piece.HEIGHT * (i / ROW_LENGTH)) + screenHeight -heiSize -3;
						for(int j=i; j > i -ROW_LENGTH; j--) {
						//從右邊橫對該行橫向前進
							if(pieces[j] != null) {
							//不是null時進行描繪
								drawX = (Piece.WIDTH * (j % ROW_LENGTH)) + 3;
								pieces[j].doDraw(g, drawX, drawY);
							}
						}
					}
					//描繪下一個方塊
					nextPieces[0].doDraw(g, widSize + Piece.WIDTH, screenHeight -heiSize -3 + stHeight);
					nextPieces[1].doDraw(g, widSize + Piece.WIDTH *2 , screenHeight -heiSize -3 + stHeight);
				}

				//在暫停等畫面中顯示文字
				switch(gameState) {
					case GAME_PLAYING://游戲中
						if(isPaused) {
						//顯示代表游戲暫停的文字
							drawSt = "Pause";
						}else {
							return;
						}
					break;

					case GAME_END://游戲結束時
						//顯示代表游戲結束的文字
						drawSt = "Game over";
					break;

					default://在上述以外的狀況時為return
					return;
				}

				//設定粗體文字
				stWidth = defFont.stringWidth(drawSt);
				drawX = (screenWidth-stWidth) / 2;
				drawY = (screenHeight - (stHeight)) / 2;

				//描繪文本框
				g.setColor(0x00BBBBBB);
				g.fillRoundRect(drawX-2, drawY+2, stWidth+9, stHeight+2, 5, 5);
				g.setColor(0x00000000);
				g.fillRoundRect(drawX-6, drawY-2, stWidth+11, stHeight+4, 5, 5);
				g.setColor(0x00FFFFFF);
				g.fillRoundRect(drawX-4, drawY, stWidth+7, stHeight, 5, 5);

				//顯示消息
				g.setColor(0x00000000);
				g.drawString(drawSt, drawX, drawY, Graphics.TOP|Graphics.LEFT);
			break;
		}
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩精品是欧美日韩精品| 国产亚洲欧洲一区高清在线观看| 日韩欧美一级精品久久| 国产午夜精品久久| 午夜精品久久久久久| 国产成人99久久亚洲综合精品| 欧美精品v日韩精品v韩国精品v| 国产农村妇女毛片精品久久麻豆 | 欧美在线播放高清精品| 欧美成人激情免费网| 亚洲一区在线观看免费| 国产a久久麻豆| 日韩亚洲欧美成人一区| 亚洲国产视频直播| 91同城在线观看| 国产清纯美女被跳蛋高潮一区二区久久w | av激情亚洲男人天堂| 欧美成人高清电影在线| 日本在线观看不卡视频| 欧美亚洲综合一区| 伊人性伊人情综合网| 成人黄页毛片网站| 国产欧美日韩视频一区二区| 美女国产一区二区三区| 欧美一区二区视频网站| 午夜视频在线观看一区二区 | 在线亚洲高清视频| 亚洲欧美日韩系列| 91蜜桃婷婷狠狠久久综合9色| 国产精品丝袜黑色高跟| 国产成人午夜精品5599| 久久综合九色综合欧美亚洲| 麻豆91精品91久久久的内涵| 日韩欧美在线123| 久久精品72免费观看| 欧美电影免费观看完整版| 美女www一区二区| 日韩欧美国产成人一区二区| 久久av老司机精品网站导航| 精品乱码亚洲一区二区不卡| 国产一区二区日韩精品| 最新中文字幕一区二区三区| 97精品超碰一区二区三区| 亚洲日本乱码在线观看| 欧美日韩中字一区| 日韩电影在线一区| 精品理论电影在线| 风间由美一区二区三区在线观看| 欧美国产日韩在线观看| 91免费视频网| 日韩精品一二区| 国产亚洲一区字幕| 99国产精品国产精品毛片| 亚洲一区二区精品久久av| 欧美一区二区视频观看视频| 国产在线日韩欧美| 亚洲欧美日韩系列| 日韩一区二区三区精品视频| 国产精品一区二区视频| 亚洲柠檬福利资源导航| 777午夜精品免费视频| 激情六月婷婷综合| 亚洲欧美另类在线| 欧美一区二区三区免费视频| 成人网在线播放| 午夜精品aaa| 国产精品全国免费观看高清| 欧美丝袜丝交足nylons| 国产最新精品免费| 一区二区三区欧美激情| 日韩精品专区在线影院观看| www.亚洲激情.com| 日本欧美一区二区三区乱码| 国产精品免费视频网站| 欧美日韩国产欧美日美国产精品| 国产麻豆精品在线| 亚洲sss视频在线视频| 国产亚洲短视频| 678五月天丁香亚洲综合网| 国产ts人妖一区二区| 成av人片一区二区| 日本成人在线网站| 亚洲免费av高清| 久久久精品综合| 制服丝袜一区二区三区| 91丨九色丨蝌蚪丨老版| 国产高清在线精品| 日本va欧美va欧美va精品| 一区二区三区蜜桃| 国产精品久久久久影视| 欧美电影免费观看高清完整版在| 在线精品视频小说1| 成人性生交大片免费看中文网站 | 国产精品三级av| 日韩精品中文字幕一区二区三区| 在线观看亚洲精品视频| 成人一区二区在线观看| 加勒比av一区二区| 日韩福利视频网| 亚洲高清三级视频| 一区二区三区精品久久久| 国产精品传媒在线| 久久久久久久久久久久久女国产乱 | 久久久www成人免费毛片麻豆| 91精品国产全国免费观看| 欧美日韩中文字幕一区| 色av成人天堂桃色av| 97se亚洲国产综合自在线不卡| 国产一区二区视频在线| 国产最新精品精品你懂的| 老司机精品视频一区二区三区| 五月激情综合色| 日本aⅴ精品一区二区三区 | 中文字幕综合网| 国产精品网友自拍| 中文字幕的久久| 国产日韩欧美麻豆| 国产喷白浆一区二区三区| 久久精品一区四区| 国产日韩欧美在线一区| 国产天堂亚洲国产碰碰| 中文字幕的久久| 亚洲视频在线一区二区| 亚洲三级久久久| 一区二区三区国产精品| 亚洲成年人影院| 麻豆精品新av中文字幕| 激情小说亚洲一区| 国产91精品一区二区麻豆亚洲| 懂色av一区二区三区免费观看| 国产99久久精品| 一本大道久久a久久精二百| 欧美吞精做爰啪啪高潮| 91精品国产aⅴ一区二区| 日韩欧美综合一区| 国产农村妇女精品| 一区二区三区欧美视频| 国产成人在线免费观看| www.欧美.com| 欧美日韩一区二区三区不卡 | 日本黄色一区二区| 欧美精品在线一区二区三区| 精品久久久影院| 国产精品久久99| 天天综合网 天天综合色| 国产在线不卡一区| 色婷婷av一区二区三区gif| 欧美年轻男男videosbes| 久久亚洲欧美国产精品乐播| 亚洲图片你懂的| 久久精品国产久精国产| 99久久婷婷国产| 欧美一区二区观看视频| 中文字幕高清一区| 日韩电影在线一区二区| 成人高清免费在线播放| 欧美一区二区国产| 亚洲激情图片一区| 精品在线播放免费| 在线观看日韩高清av| 久久先锋资源网| 日日骚欧美日韩| 99re66热这里只有精品3直播| 日韩一区二区在线看片| 亚洲精品一二三| 国产传媒久久文化传媒| 欧美另类久久久品| 国产精品五月天| 久久精品国产77777蜜臀| 一本色道综合亚洲| 欧美国产一区在线| 久久成人18免费观看| 欧美日韩免费一区二区三区| 日本一区二区免费在线观看视频 | 亚洲欧洲精品一区二区三区| 日韩电影在线观看电影| 色综合久久88色综合天天| 国产日韩欧美麻豆| 麻豆国产精品官网| 欧美日韩你懂得| 亚洲人成网站色在线观看| 国产成人在线视频网址| 精品国产区一区| 日韩电影一二三区| 欧美日韩1区2区| 六月丁香婷婷久久| 3atv在线一区二区三区| 亚洲综合成人在线| 色综合久久久久综合99| 国产精品传媒在线| 本田岬高潮一区二区三区| 国产日韩欧美高清| 国产成人亚洲综合色影视| 久久这里只有精品视频网| 精品制服美女丁香| 亚洲精品一区二区三区精华液| 久久精品99国产精品日本| 日韩欧美一区在线观看| 狠狠狠色丁香婷婷综合久久五月| 日韩欧美二区三区|