




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、ChessActivity.javapackage wyf.ytl;import android.app.Activity;/引入相關的包import android.media.MediaPlayer;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.view.Window;import android.view.WindowManager;public class ChessActivity extends Activity boolean isSound
2、= true;/是否播放聲音MediaPlayer startSound;/開始和菜單時的音樂MediaPlayer gamesound;/游戲聲音Handler myHandler = new Handler()/用來更新UI線程中的控件 public void handleMessage(Message msg) if(msg.what = 1)/WelcomeView或HelpView或GameView傳來的消息,切換到MenuView initMenuView();/初始化并切換到菜單界面 else if(msg.what = 2)/MenuView傳來的消息,切換到GameView
3、initGameView();/初始化并切換到游戲界面 else if(msg.what = 3)/MenuView傳來的消息,切換到HelpView initHelpView();/初始化并切換到幫助界面 ; public void onCreate(Bundle savedInstanceState) /重寫的onCreate super.onCreate(savedInstanceState);/全屏requestWindowFeature(Window.FEATURE_NO_TITLE);getWindow().setFlags(WindowManager.LayoutParams.F
4、LAG_FULLSCREEN , WindowManager.LayoutParams.FLAG_FULLSCREEN);startSound = MediaPlayer.create(this, R.raw.startsound);/加載歡迎聲音startSound.setLooping(true);/設置游戲聲音循環播放 gamesound = MediaPlayer.create(this, R.raw.gamesound);/游戲過程的背景聲音gamesound.setLooping(true);/設置游戲聲音循環播放 this.initWelcomeView();/初始化歡迎界面 p
5、ublic void initWelcomeView()/初始化歡迎界面 this.setContentView(new WelcomeView(this,this);/切換到歡迎界面 if(isSound)/需要播放聲音時 startSound.start();/播放聲音 public void initGameView()/初始化游戲界面 this.setContentView(new GameView(this,this); /切換到游戲界面 public void initMenuView()/初始化菜單界面 if(startSound != null)/停止 startSound.s
6、top();/停止播放聲音 startSound = null; if(this.isSound)/是否播放聲音 gamesound.start();/播放聲音 this.setContentView(new MenuView(this,this);/切換View public void initHelpView()/初始化幫助界面 this.setContentView(new HelpView(this,this);/切換到幫助界面 222222222222222222222222222222222222222222222222222222222222222222222222222222C
7、hessMove.javapackage wyf.ytl;/* * 該類為棋子的一個走法 * 包含是什么棋子 * 起始點的位置 * 目標點的位置 * 以及估值時所用到的score */public class ChessMove int ChessID;/表明是什么棋子int fromX;/起始的坐標int fromY;int toX;/目的地的坐標int toY;int score;/值,估值時會用到public ChessMove(int ChessID, int fromX,int fromY,int toX,int toY,int score)/構造器this.ChessID = Ch
8、essID;/棋子的類型this.fromX = fromX;/棋子的起始坐標this.fromY = fromY;this.toX = toX;/棋子的目標點x坐標this.toY = toY;/棋子的目標點y坐標this.score = score;33333333333333333333333333333333333333333333333333333333333333333333333GameView.javapackage wyf.ytl;import android.content.Context;import android.graphics.Bitmap;import andr
9、oid.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.media.MediaPlayer;import android.view.MotionEvent;import android.view.SurfaceHolder;import android.view.SurfaceView;/* * 該類是整個程序最主要的類,是主游戲的界面 * 該界面繼承自SurfaceView并實現了Su
10、rfaceHolder.Callback接口 * 其中包含了一個刷幀的線程類 * */public class GameView extends SurfaceView implements SurfaceHolder.Callbackprivate TutorialThread thread;/刷幀的線程TimeThread timeThread ;ChessActivity activity;/聲明Activity的引用Bitmap qiPan;/棋盤Bitmap qizibackground;/棋子的背景圖片Bitmap win;/勝利的圖片Bitmap lost;/失敗的圖片Bitma
11、p ok;/確定按鈕Bitmap vs;/黑方紅方VS的圖片Bitmap right;/向右的指針Bitmap left;/向左的指針 Bitmap current;/“當前”文字Bitmap exit2;/退出按鈕圖片Bitmap sound2;/聲音按鈕圖片Bitmap sound3;/當前是否播放了聲音Bitmap time;/冒號Bitmap redtime;/紅色冒號Bitmap background;/背景圖片MediaPlayer go;/下棋聲音Paint paint;/畫筆boolean caiPan = true;/是否為玩家走棋boolean focus = false;
12、/當前是否有選中的棋子int selectqizi = 0; /當然選中的棋子int startI, startJ;/記錄當前棋子的開始位置int endI, endJ;/記錄當前棋子的目標位置Bitmap heiZi = new Bitmap7;/黑子的圖片數組Bitmap hongZi = new Bitmap7;/紅子的圖片數組Bitmap number = new Bitmap10;/數字的圖片數組,用于顯示時間 Bitmap redNumber = new Bitmap10;/紅色數字的圖片,用于顯示時間 GuiZe guiZe;/規則類int status = 0;/游戲狀態。0游
13、戲中,1勝利, 2失敗int heiTime = 0;/黑方總共思考時間int hongTime = 0;/紅方總共思考時間 int qizi = new int/棋盤2,3,6,5,1,5,6,3,2,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,4,0,7,0,7,0,7,0,7,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,14,0,14,0,14,0,14,0,11,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,9,10,13,12,8,12,13,10,9,;public GameView(Contex
14、t context,ChessActivity activity) /構造器super(context);this.activity = activity;/得到Activity的引用getHolder().addCallback(this);go = MediaPlayer.create(this.getContext(), R.raw.go);/加載下棋的聲音this.thread = new TutorialThread(getHolder(), this);/初始化刷幀線程this.timeThread = new TimeThread(this);/初始化思考時間的線程init();
15、/初始化所需資源guiZe = new GuiZe();/初始化規則類public void init()/初始化方法 paint = new Paint();/初始化畫筆qiPan = BitmapFactory.decodeResource(getResources(), R.drawable.qipan);/棋盤圖片qizibackground = BitmapFactory.decodeResource(getResources(), R.drawable.qizi);/棋子的背景win = BitmapFactory.decodeResource(getResources(), R.
16、drawable.win);/勝利的圖片lost = BitmapFactory.decodeResource(getResources(), R.drawable.lost);/失敗的圖片ok = BitmapFactory.decodeResource(getResources(), R.drawable.ok);/確定按鈕圖片vs = BitmapFactory.decodeResource(getResources(), R.drawable.vs);/vs字樣的圖片right = BitmapFactory.decodeResource(getResources(), R.drawa
17、ble.right);/向右的指針left = BitmapFactory.decodeResource(getResources(), R.drawable.left);/向左的指針current = BitmapFactory.decodeResource(getResources(), R.drawable.current);/文字“當前”exit2 = BitmapFactory.decodeResource(getResources(), R.drawable.exit2);/退出按鈕圖片sound2 = BitmapFactory.decodeResource(getResourc
18、es(), R.drawable.sound2);/聲音按鈕圖片time = BitmapFactory.decodeResource(getResources(), R.drawable.time);/黑色冒號redtime = BitmapFactory.decodeResource(getResources(), R.drawable.redtime);/紅色冒號sound3 = BitmapFactory.decodeResource(getResources(), R.drawable.sound3);heiZi0 = BitmapFactory.decodeResource(get
19、Resources(), R.drawable.heishuai);/黑帥heiZi1 = BitmapFactory.decodeResource(getResources(), R.drawable.heiju);/黑車heiZi2 = BitmapFactory.decodeResource(getResources(), R.drawable.heima);/黑馬heiZi3 = BitmapFactory.decodeResource(getResources(), R.drawable.heipao);/黑炮heiZi4 = BitmapFactory.decodeResource
20、(getResources(), R.drawable.heishi);/黑士heiZi5 = BitmapFactory.decodeResource(getResources(), R.drawable.heixiang);/黑象heiZi6 = BitmapFactory.decodeResource(getResources(), R.drawable.heibing);/黑兵hongZi0 = BitmapFactory.decodeResource(getResources(), R.drawable.hongjiang);/紅將hongZi1 = BitmapFactory.de
21、codeResource(getResources(), R.drawable.hongju);/紅車hongZi2 = BitmapFactory.decodeResource(getResources(), R.drawable.hongma);/紅馬hongZi3 = BitmapFactory.decodeResource(getResources(), R.drawable.hongpao);/紅砲hongZi4 = BitmapFactory.decodeResource(getResources(), R.drawable.hongshi);/紅仕hongZi5 = Bitmap
22、Factory.decodeResource(getResources(), R.drawable.hongxiang);/紅相hongZi6 = BitmapFactory.decodeResource(getResources(), R.drawable.hongzu);/紅卒number0 = BitmapFactory.decodeResource(getResources(), R.drawable.number0);/黑色數字0number1 = BitmapFactory.decodeResource(getResources(), R.drawable.number1);/黑色
23、數字1number2 = BitmapFactory.decodeResource(getResources(), R.drawable.number2);/黑色數字2number3 = BitmapFactory.decodeResource(getResources(), R.drawable.number3);/黑色數字3number4 = BitmapFactory.decodeResource(getResources(), R.drawable.number4);/黑色數字4number5 = BitmapFactory.decodeResource(getResources(),
24、 R.drawable.number5);/黑色數字5number6 = BitmapFactory.decodeResource(getResources(), R.drawable.number6);/黑色數字6number7 = BitmapFactory.decodeResource(getResources(), R.drawable.number7);/黑色數字7number8 = BitmapFactory.decodeResource(getResources(), R.drawable.number8);/黑色數字8number9 = BitmapFactory.decode
25、Resource(getResources(), R.drawable.number9);/黑色數字9redNumber0 = BitmapFactory.decodeResource(getResources(), R.drawable.rednumber0);/紅色數字0redNumber1 = BitmapFactory.decodeResource(getResources(), R.drawable.rednumber1);/紅色數字1redNumber2 = BitmapFactory.decodeResource(getResources(), R.drawable.rednum
26、ber2);/紅色數字2redNumber3 = BitmapFactory.decodeResource(getResources(), R.drawable.rednumber3);/紅色數字3redNumber4 = BitmapFactory.decodeResource(getResources(), R.drawable.rednumber4);/紅色數字4redNumber5 = BitmapFactory.decodeResource(getResources(), R.drawable.rednumber5);/紅色數字5redNumber6 = BitmapFactory.
27、decodeResource(getResources(), R.drawable.rednumber6);/紅色數字6redNumber7 = BitmapFactory.decodeResource(getResources(), R.drawable.rednumber7);/紅色數字7redNumber8 = BitmapFactory.decodeResource(getResources(), R.drawable.rednumber8);/紅色數字8redNumber9 = BitmapFactory.decodeResource(getResources(), R.drawab
28、le.rednumber9);/紅色數字9background = BitmapFactory.decodeResource(getResources(), R.drawable.bacnground);/* * 該方法是自己定義的并非重寫的 * 該方法是死的,只根據數據繪制屏幕 */public void onDraw(Canvas canvas)/自己寫的繪制方法canvas.drawColor(Color.WHITE);canvas.drawBitmap(background, 0,0, null);/清背景canvas.drawBitmap(qiPan, 10, 10, null);/
29、繪制棋盤for(int i=0; i<qizi.length; i+)for(int j=0; j<qizii.length; j+)/繪制棋子if(qiziij != 0)canvas.drawBitmap(qizibackground, 9+j*34, 10+i*35, null);/繪制棋子的背景if(qiziij = 1)/為黑帥時canvas.drawBitmap(heiZi0, 12+j*34, 13+i*35, paint);else if(qiziij = 2)/為黑車時canvas.drawBitmap(heiZi1, 12+j*34, 13+i*35, pain
30、t);else if(qiziij = 3)/為黑馬時canvas.drawBitmap(heiZi2, 12+j*34, 13+i*35, paint);else if(qiziij = 4)/為黑炮時canvas.drawBitmap(heiZi3, 12+j*34, 13+i*35, paint);else if(qiziij = 5)/為黑士時canvas.drawBitmap(heiZi4, 12+j*34, 13+i*35, paint);else if(qiziij = 6)/為黑象時canvas.drawBitmap(heiZi5, 12+j*34, 13+i*35, pain
31、t);else if(qiziij = 7)/為黑兵時canvas.drawBitmap(heiZi6, 12+j*34, 13+i*35, paint);else if(qiziij = 8)/為紅將時canvas.drawBitmap(hongZi0, 12+j*34, 13+i*35, paint);else if(qiziij = 9)/為紅車時canvas.drawBitmap(hongZi1, 12+j*34, 13+i*35, paint);else if(qiziij = 10)/為紅馬時canvas.drawBitmap(hongZi2, 12+j*34, 13+i*35,
32、paint);else if(qiziij = 11)/為紅砲時canvas.drawBitmap(hongZi3, 12+j*34, 13+i*35, paint);else if(qiziij = 12)/為紅仕時canvas.drawBitmap(hongZi4, 12+j*34, 13+i*35, paint);else if(qiziij = 13)/為紅相時canvas.drawBitmap(hongZi5, 12+j*34, 13+i*35, paint);else if(qiziij = 14)/為紅卒時canvas.drawBitmap(hongZi6, 12+j*34, 1
33、3+i*35, paint);canvas.drawBitmap(vs, 10, 360, paint);/繪制VS背景圖/繪制黑方的時間canvas.drawBitmap(time, 81, 411, paint);/繪制冒號int temp = this.heiTime/60;/換算時間String timeStr = temp+""/轉換成字符串if(timeStr.length()<2)/當不足兩位時前面填0timeStr = "0" + timeStr; for(int i=0;i<2;i+)/循環繪制時間 int tempScor
34、e=timeStr.charAt(i)-'0' canvas.drawBitmap(numbertempScore, 65+i*7, 412, paint); /畫分鐘 temp = this.heiTime%60;timeStr = temp+""/轉換成字符串if(timeStr.length()<2) timeStr = "0" + timeStr;/當長度小于2時在前面添加一個0 for(int i=0;i<2;i+)/循環 int tempScore=timeStr.charAt(i)-'0' can
35、vas.drawBitmap(numbertempScore, 85+i*7, 412, paint);/繪制 /開始繪制紅方時間canvas.drawBitmap(this.redtime, 262, 410, paint);/紅方的冒號int temp2 = this.hongTime/60;/換算時間String timeStr2 = temp2+""/轉換成字符串if(timeStr2.length()<2)/當不足兩位時前面填0timeStr2 = "0" + timeStr2; for(int i=0;i<2;i+)/循環繪制時間
36、 int tempScore=timeStr2.charAt(i)-'0' canvas.drawBitmap(redNumbertempScore, 247+i*7, 411, paint);/繪制 /畫分鐘 temp2 = this.hongTime%60;/求出當前的秒數timeStr2 = temp2+""/轉換成字符串if(timeStr2.length()<2)/不足兩位時前面用0補timeStr2 = "0" + timeStr2; for(int i=0;i<2;i+)/循環繪制 int tempScore=t
37、imeStr2.charAt(i)-'0' canvas.drawBitmap(redNumbertempScore, 267+i*7, 411, paint);/繪制時間數字 if(caiPan = true)/當該玩家走棋時,即紅方走棋canvas.drawBitmap(right, 155, 420, paint);/繪制向右的指針else/黑方走棋,即電腦走棋時canvas.drawBitmap(left, 120, 420, paint);/繪制向左的指針canvas.drawBitmap(current, 138, 445, paint);/繪制當前文字canvas
38、.drawBitmap(sound2, 10, 440, paint);/繪制聲音if(activity.isSound)/如果正在播放聲音canvas.drawBitmap(sound3, 80, 452, paint);/繪制canvas.drawBitmap(exit2, 250, 440, paint);/繪制退出按鈕if(status = 1)/當勝利時canvas.drawBitmap(win, 85, 150, paint);/繪制勝利圖片canvas.drawBitmap(ok, 113, 240, paint);if(status = 2)/失敗后canvas.drawBit
39、map(lost, 85, 150, paint);/繪制失敗界面canvas.drawBitmap(ok, 113, 236, paint);/* * 該方法是游戲主要邏輯接口 * 接受玩家輸入 * 根據點擊的位置和當前的游戲狀態做出相應的處理 * 而當需要切換View時,通過給Activity發送Handler消息來處理 * 注意的是只取屏幕被按下的事件 */Overridepublic boolean onTouchEvent(MotionEvent event) /重寫的屏幕監聽if(event.getAction() = MotionEvent.ACTION_DOWN)/只取鼠標按下
40、的事件if(event.getX()>10&&event.getX()<10+sound2.getWidth()&& event.getY()>440 && event.getY()<440+sound2.getHeight()/按下了聲音按鈕activity.isSound = !activity.isSound;/聲音取反if(activity.isSound)/當需要放聲音時if(activity.gamesound != null)/gamesound不為空時if(!activity.gamesound.isPla
41、ying()/當前沒有音樂時 activity.gamesound.start();/播放音樂 elseif(activity.gamesound != null)/gamesound不為空時if(activity.gamesound.isPlaying()/當前有音樂時activity.gamesound.pause();/停止音樂 /end 按下了聲音按鈕 if(event.getX()>250&&event.getX()<250+exit2.getWidth()&& event.getY()>440 && event.ge
42、tY()<440+exit2.getHeight()/按下了退出按鈕activity.myHandler.sendEmptyMessage(1);/發送消息,切換到MenuViewif(status = 1)/勝利后 if(event.getX()>135&&event.getX()<190&& event.getY()>249 && event.getY()<269)/點擊了確定按鈕activity.myHandler.sendEmptyMessage(1);/發送消息,切換到MenuViewelse if(sta
43、tus = 2)/失敗后if(event.getX()>135&&event.getX()<190&& event.getY()>245 && event.getY()<265)/點擊了確定按鈕activity.myHandler.sendEmptyMessage(1);/發送消息,切換到MenuView/* * 游戲過程中的邏輯處理 * 當點擊棋盤時,先判斷當前是否為玩家走棋, * 然后再判斷當然玩家是否已經有選中的棋子,如果沒有則選中 * 如果之前有選中的棋子,再判斷點擊的位置是空地、對方棋子還是自己的棋子 * 是空地
44、判斷是否可走 * 是對方棋子同樣判斷是否可以走,能走自然吃子 * 是自己的棋子則選中該棋子 */else if(status = 0)/游戲中時 if(event.getX()>10&&event.getX()<310&& event.getY()>10 && event.getY()<360)/點擊的位置在棋盤內時if(caiPan = true)/如果是該玩家走棋int i = -1, j = -1;int pos = getPos(event);/根據坐標換算成所在的行和列i = pos0;j = pos1;if(f
45、ocus = false)/之前沒有選中的棋子if(qiziij != 0)/點擊的位置有棋子if(qiziij > 7)/點擊的是自己的棋子。即下面的黑色棋子selectqizi = qiziij;/將該棋子設為選中的棋子focus = true;/標記當前有選中的棋子startI = i;startJ = j;else/之前選中過棋子if(qiziij != 0)/點擊的位置有棋子if(qiziij > 7)/如果是自己的棋子.selectqizi = qiziij;/將該棋子設為選中的棋子startI = i;startJ = j;else/如果是對方的棋子endI = i;
46、endJ = j;/保存該點boolean canMove = guiZe.canMove(qizi, startI, startJ, endI, endJ);if(canMove)/如果可以移動過去caiPan = false;/不讓玩家走了if(qiziendIendJ = 1 | qiziendIendJ = 8)/如果是“帥”或“將”this.success();/勝利了 elseif(activity.isSound)go.start();/播放下棋聲音qiziendIendJ = qizistartIstartJ;/移動棋子qizistartIstartJ = 0;/將原來處設空s
47、tartI = -1;startJ = -1;endI = -1;endJ = -1;/還原保存點focus = false;/標記當前沒有選中棋子ChessMove cm = guiZe.searchAGoodMove(qizi);/根據當前局勢查詢一個最好的走法if(activity.isSound)go.start();/播放下棋聲音qizicm.toXcm.toY = qizicm.fromXcm.fromY;/移動棋子qizicm.fromXcm.fromY = 0;caiPan = true;/恢復玩家響應/end點擊的位置有棋子else/如果點擊的位置沒有棋子endI = i;e
48、ndJ = j;boolean canMove = guiZe.canMove(qizi, startI, startJ, endI, endJ);/查看是否可走if(canMove)/如果可以移動caiPan = false;/不讓玩家走了if(activity.isSound)go.start();/播放下棋聲音qiziendIendJ = qizistartIstartJ;/移動棋子qizistartIstartJ = 0;/將原來處置空startI = -1;startJ = -1;endI = -1;endJ = -1;/還原保存點focus = false;/標志位設falseChessMove cm = guiZe.searchAGoodMove(qizi);/得到一步走法 if(qizicm.toXcm.toY = 8)/電腦吃了您的將status = 2;/切換游戲狀態為失敗if(ac
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 校園無線接入管理制度
- 校園物業安全管理制度
- 校園綠化施工管理制度
- 校園象棋活動管理制度
- 校外上課防疫管理制度
- 【醫德醫風】《醫德醫風九項倡議》
- 代謝通路分析-洞察及研究
- 讀鋼鐵是怎樣煉成的有感堅強的意志力讀后感(12篇)
- 個人借款與擔保業務合作協議
- 以夢想為主題的演講演講稿作文8篇
- 馬詩聽評課記錄范文
- 國家開放大學法律事務專科《民法學(2)》期末紙質考試總題庫2025春期考試版
- 定額〔2025〕3號文-關于發布2023版西藏地區電網工程概預算定額價格水平調整的通知
- 《現場改善案例集》課件
- 醫院結核感染培訓
- 大學生應急救護知到智慧樹章節測試課后答案2024年秋西安歐亞學院
- 臨床心內科主任競聘稿
- 電動工器具安全使用培訓
- 防水工程專項施工方案
- 日本建設項目可視化、安全文明、工藝管理總結
- 【MOOC】思想道德與法治-南開大學 中國大學慕課MOOC答案
評論
0/150
提交評論