


版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、package resource;/ 整個窗口/ 菜單欄菜單項數(shù)組模式項數(shù)組/ 菜單/ 是否為黑方下子狀態(tài)/ 棋盤數(shù)組/ 當前行/ 當前列public class PlayerVsPC private JFrame frame; private JMenuBar bar; private JMenuItem jit;/ private JMenuItem mode;/ private JMenu jm; public boolean isBlack; private int qipan; private int row; private int col; private int prow; p
2、rivate int pcol;/ 棋盤背景顏色private Color c=new Color(145,125,62);private DrawPanel panel; private JLabel label;private JPanel panel0; private boolean isEnd;private int qixingPC; private int qixingPlayer;private boolean isPC = true; / private boolean cMode = true;/ 棋盤面板/ 棋盤上方的標簽/ 棋盤上方條形面板記錄當前下棋模式/ 記錄選擇的
3、對弈模式public PlayerVsPC() frame=new JFrame(" 五子棋游戲 "); bar=new JMenuBar();jm=new JMenu2;jit=new JMenuItem2; qipan=new int1919; qixingPC = new int1717; qixingPlayer = new int1717;for(int i=0;i<19;i+)for(int j=0;j<19;j+) qipanij=0;for(int i=0;i<17;i+)for(int j=0;j<17;j+) qixingPCij
4、=0; qixingPlayerij=0;label = new JLabel(" 人"+(isPC?"機":"人")+"對弈模式,請按開局開始游戲! "); panel0=new JPanel();addItems();addEventAction(); printqipan(0,0);public void addItems()jm0=new JMenu(" 游戲");jm1=new JMenu(" 選項 ");jit0=new JMenuItem3;jit00=new
5、JMenuItem("開局");jit01=new JMenuItem("重新開始");jit02=new JMenuItem("結(jié)束游戲");jit1=new JMenuItem3;jit10=new JMenu(" 對弈模式 "); mode=new JMenuItem2;mode0 = new JMenuItem(" 人人對弈 "); mode1 = new JMenuItem(" 人機對弈 "); jit10.add(mode0);jit10.add(mode1);j
6、it11=new JMenuItem("悔棋 ");jit12=new JMenuItem("背景顏色 ");for(int i=0;i<jm.length;i+)for(int j=0;j<jiti.length;j+)jmi.add(jitij);panel0.add(label);bar.add(jm0);bar.add(jm1);frame.setJMenuBar(bar);frame.add(panel0,"North");/ 給菜單項設(shè)定事件public void addEventAction()jit00.a
7、ddActionListener(new ActionListener() / 開局public void actionPerformed(ActionEvent e) row=prow=0;col=pcol=0; isPC=cMode; isBlack = true; isEnd = false;for(int i=0;i<19;i+)for(int j=0;j<19;j+)if(i=0|j=0|i=(qipan.length-1)|j=(qipan.length-1)qipanij = -1;elseqipanij=0;if(isPC)/ 人機對弈模式label.setText
8、(" 游戲開始,請玩家先下棋! ");else/ 人人對弈模式label.setText(" 游戲開始,請 "+(isBlack?" 黑":" 白 ")+" 方先下棋! ");printqipan(row,col);addEventHandler(););jit01.addActionListener(new ActionListener() / 重新開始public void actionPerformed(ActionEvent e) row=prow=0;col=pcol=0;isBlac
9、k = true;isEnd = false;for(int i=0;i<19;i+)for(int j=0;j<19;j+)if(i=0|j=0|i=(qipan.length-1)|j=(qipan.length-1)qipanij = -1;elseqipanij=0;if(isPC)/ 人機對弈模式label.setText(" 游戲開始,請玩家先下棋! ");else/ 人人對弈模式label.setText(" 游戲開始,請 "+(isBlack?" 黑":" 白 ")+" 方先下
10、棋! ");printqipan(row,col);addEventHandler(););/ 給模式選項添加事件監(jiān)聽mode0.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e) cMode = false;label.setText(" 已選擇人 "+(cMode?" 機":" 人 ")+" 對弈模式,重新開局將生效! "););mode1.addActionListener(new Acti
11、onListener()public void actionPerformed(ActionEvent e) cMode = true;label.setText(" 已選擇人 "+(cMode?" 機":" 人")+" 對弈模式,重新開局將生效! "););jit02.addActionListener(new ActionListener() / 結(jié)束游戲public void actionPerformed(ActionEvent e) label.setText(" 游戲結(jié)束,請按開局開始游戲!
12、");isEnd=true;);jit11.addActionListener(new ActionListener() / 悔棋public void actionPerformed(ActionEvent e) if(!isPC)huiqi();elsepchuiqi(););jit12.addActionListener(new ActionListener() / 背景顏色public void actionPerformed(ActionEvent e) Color cc=JColorChooser.showDialog(frame," 棋盤背景顏色 "
13、, new Color(226,189,0);if(cc!=null)c=cc;panel.setBackground(c););/ 監(jiān)聽鼠標事件,下棋以及判斷本盤是否結(jié)束,電腦是白方,玩家是黑方public void addEventHandler()panel.addMouseListener(new MouseAdapter()public void mousePressed(MouseEvent e) if(!isEnd)int x=(e.getX()-5)/30;int y=(e.getY()-5)/30;if(qipany+1x+1=0)load(x+1,y+1);elselabe
14、l.setText(" 此處已經(jīng)有棋子,請重新下子! "););/ 電腦下棋public void pcLoad()qixing();int count = 0;int hang = 0;int lie = 0;for(int i=0;i<17;i+)for(int j=0;j<17;j+)if(qixingPCij>count)count = qixingPCij;hang = i+1;lie = j+1; if(qixingPlayerij>count)count = qixingPlayerij;hang = i+1;lie = j+1;if(
15、qipanhanglie=0)load(lie,hang);return;/ 下棋子public void load(int x,int y)col=x;row=y;if(isBlack)prow=row;pcol=col;qipanrowcol=1;isBlack = false;elseqipanrowcol=2;isBlack = true;printqipan(row,col);if(panduan(row-1,col-1)if(isPC)label.setText(" 本局結(jié)束,恭喜 "+(isBlack?" 電腦":" 玩家&quo
16、t;)+" 獲勝! "); isEnd = true;elselabel.setText(" 本局結(jié)束,恭喜 "+(isBlack?" 黑":" 白 ")+" 方獲勝! "); isEnd = true;elseif(isPC)label.setText(isBlack?" 電腦":" 玩家 ")+" 在("+row+":"+col+")處下子,"+"現(xiàn)在"+(isBlack?
17、" 玩家":"電腦")+"下子! ”);白":" 黑")+" 方在("+處下子,"+"現(xiàn)在"+(isBlack?" 黑":"白 ")+" 下子! ");elselabel.setText(isBlack?" row+":"+col+")if(!isBlack) if(isPC) pcLoad();/ 刷新棋盤 public void printqipan(int n,
18、int m) panel=new DrawPanel(qipan,n,m); panel.setBackground(c); frame.add(panel,"Center");/ 人人對弈悔棋public void huiqi() if(isEnd)label.setText(" 游戲已經(jīng)結(jié)束不能悔棋,請重新開局! "); return;isBlack=!isBlack;qipanrowcol=0;printqipan(row,col);label.setText(isBlack?" 黑":" 白")+"
19、; 方悔棋,請重新下棋! ");/ 人機對弈悔棋public void pchuiqi() if(isEnd)label.setText(" 游戲已經(jīng)結(jié)束不能悔棋,請重新開局! "); return;qipanrowcol=0;qipanprowpcol=0;printqipan(row,col);label.setText(isBlack?" 玩家":" 電腦")+" 悔棋,請重新下棋! ");/ 算出雙方的棋形數(shù)組public void qixing()for(int i=0;i<17;i+)f
20、or(int j=0;j<17;j+)if(qipani+1j+1=0)/ 說明此處沒有棋子 qixingPCijheiheng(i,j,2)+heishu(i,j,2)+heizuoxie(i,j,2)+heiyouxie(i,j,2);qixingPlayerij heiheng(i,j,1)+heishu(i,j,1)+heizuoxie(i,j,1)+heiyouxie(i,j,1);elseqixingPCij = 0; qixingPlayerij = 0;/ 算出黑子橫方向的棋型數(shù)值public int heiheng(int hang,int lie,int num)in
21、t k = 0;/記錄空白處的個數(shù)int count = 1;/ 記錄可以形成幾連int n = hang+1;/對應(yīng)棋盤的行int m = lie+1;/ 對應(yīng)棋盤的列boolean left = false;/判斷左邊是否有黑子boolean liveLeft = false;/判斷左邊是活還是死boolean liveRight = false;/ 判斷右邊是活還是死 while(qipannm-1!=-1)&&(qipannm-1=num|qipannm-1=0) if(qipannm-1=0&&k<1)/ 第一個空白 if(qipannm-2!=
22、num)liveLeft = true;break;k+;m-;else if(qipannm-1=num)/ 黑子left = true;m-;else/ 第二個空白liveLeft = true;break; if(!left) k = 0;m = lie+1;while(qipannm+1!=-1)&&(qipannm+1=num|qipannm+1=0) int t = qipannm+1;if(m=lie)count+;m+;continue;if(t=0&&k<1)/ 第一個空白if(qipannm+2!=num)liveRight = tru
23、e;break;k+;m+;else if(t=0&&k>0)/ 第二個空白liveRight = true;break;else/ 黑子m+;count+;return jieguo(liveLeft,liveRight,count,k,num);/ 算出黑子豎方向的棋型數(shù)值public int heishu(int hang,int lie,int num)int k = 0;/記錄空白處的個數(shù)int count = 1;/ 記錄可以形成幾連int n = hang+1;/對應(yīng)棋盤的行int m = lie+1;/ 對應(yīng)棋盤的列boolean top = false;
24、/判斷上邊是否有黑子boolean liveLeft = false;boolean liveRight = false;while(qipann-1m!=-1)&&(qipann-1m=num|qipann-1m=0) if(qipann-1m=0&&k<1)/ 第一個空白 if(qipann-2m!=num)liveLeft = true;break;k+;n-;else if(qipann-1m=num)/ 黑子top = true;n-;else/ 第二個空白liveLeft = true; break;if(!top)k = 0;n = hang
25、+1; while(qipann+1m!=-1)&&(qipann+1m=num|qipann+1m=0) int t = qipann+1m;if(n=hang) count+; n+; continue;if(t=0&&k<1)/ 第一個空白 if(qipann+2m!=num) liveRight = true; break;k+;n+;else if(t=0&&k>0)/ 第二個空白liveRight = true; break;else/ 黑子n+; count+;/return jieguo(k=0,count);retu
26、rn jieguo(liveLeft,liveRight,count,k,num);/ 算出黑子左斜方向的棋型數(shù)值public int heizuoxie(int hang,int lie,int num)int k = 0;/記錄空白處的個數(shù)int count = 1;/ 記錄可以形成幾連int n = hang+1;/對應(yīng)棋盤的行int m = lie+1;/ 對應(yīng)棋盤的列boolean top = false;/判斷上邊是否有黑子boolean liveLeft = false;boolean liveRight = false; while(qipann+1m-1!=-1)&&
27、amp;(qipann+1m-1=num|qipann+1m-1=0) if(qipann+1m-1=0&&k<1)/ 第一個空白 if(qipann+2m-2!=num)liveLeft = true; break;k+;n+;m-;else if(qipann+1m-1=num)/ 黑子top = true;n+;m-;else/ 第二個空白liveLeft = true;break;if(!top)k = 0;n = hang+1;m = lie+1; while(qipann-1m+1!=-1)&&(qipann-1m+1=num|qipann-1
28、m+1=0) int t = qipann-1m+1;if(n=(hang+2)&&m=lie)count+;n-;m+;continue; if(t=0&&k<1)/ 第一個空白 if(qipann-2m+2!=num) liveRight = true; break;k+;n-;m+;liveRight = true;break;else/ 黑子n-;m+;count+;return jieguo(liveLeft,liveRight,count,k,num);/ 算出黑子右斜方向的棋型數(shù)值public int heiyouxie(int hang,i
29、nt lie,int num)int k = 0;/記錄空白處的個數(shù)int count = 1;/ 記錄可以形成幾連int n = hang+1;/對應(yīng)棋盤的行int m = lie+1;/ 對應(yīng)棋盤的列boolean top = false;/判斷上邊是否有黑子boolean liveLeft = false;boolean liveRight = false;while(qipann-1m-1!=-1)&&(qipann-1m-1=num|qipann-1m-1=0) if(qipann-1m-1=0&&k<1)/ 第一個空白 if(qipann-2m
30、-2!=num)liveLeft = true;break;k+;n-;m-;else if(qipann-1m-1=num)/ 黑子top = true;n-;m-;else/ 第二個空白liveLeft = true;break;if(!top)k = 0;n = hang+1;m = lie+1;while(qipann+1m+1!=-1)&&(qipann+1m+1=num|qipann+1m+1=0)int t = qipann+1m+1;if(n=hang&&m=lie)count+;n+;m+; continue;if(t=0&&k
31、<1)/ 第一個空白 if(qipann+2m+2!=num) liveRight = true; break;k+;n+;m+;else if(t=0&&k>0)/ 第二個空白 liveRight = true; break;else/ 黑子n+;m+; count+;return jieguo(liveLeft,liveRight,count,k,num);public int jieguo(boolean left,boolean right,int count,int k,int num) if(count=1)return 0;else if(count=
32、2)if(left&&right) if(k=0)if(num=2)return 60;elsereturn 50;elseif(num=2)return 40;elsereturn 35;else if(!left&&!right)return 0;elsereturn 10;else if(count=3)if(left&&right)if(k=0) if(num=2) return 950;elsereturn 700;elseif(num=2) return 900;elsereturn 650; else if(!left&&a
33、mp;!right)return 0;elsereturn 100;else if(count=4)if(left&&right)if(k=0)if(num=2) return 6000;elsereturn 3500; elseif(num=2) return 5000;elsereturn 3000; else if(!left&&!right)return 0;elseif(k=0)if(num=2)return 4000;elsereturn 800;elseif(num=2)return 3600;elsereturn 750;elseif(k=0)if(num=2)return 20000;elsereturn 15000;elseif(num=2)return 10000;elsereturn 3300;public void showMe()frame.setSize(530,600);Toolkit kit = Toolkit.getDefaultToolkit();Dimension screenSize = kit.getScreenSiz
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 餐飲肉類采購合同范本
- 展位展臺設(shè)計合同范本
- 上海員工合同范本
- 餐廳直營托管合同范本
- 水果賣貨合同范本
- 小型餐飲服務(wù)合同范本
- 2025年合同談判中應(yīng)注意的關(guān)鍵幾點問題
- 2025汽車租賃合同模板
- 2025勞動合同申訴書模板
- 2025商業(yè)空間設(shè)計合同范本
- 最新軍事英語基本詞匯和表達(英漢對照)
- 張騫出使西域課本劇
- 《北京市市級投資基金績效評價管理暫行辦法》
- 100道湊十法練習(xí)習(xí)題
- 人教版初中階段語文古詩詞理解性背誦默寫匯編
- 內(nèi)蒙古高中畢業(yè)生學(xué)籍表畢業(yè)生登記表學(xué)年評語表成績單身體健康檢查表完整版高中檔案文件
- 光電效應(yīng)和普朗克常數(shù)測定實驗數(shù)據(jù)表格
- 重力式橋臺計算程序表格
- (完整word版)清表施工方案
- 污水池防腐施工方案改
- 公務(wù)用車派車單、車輛維修保養(yǎng)申請單(修訂版)
評論
0/150
提交評論