




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第Java實現五子棋單機版本文實例為大家分享了Java實現五子棋單機版的具體代碼,供大家參考,具體內容如下
Java五子棋設計流程:
1.創建窗口和設計一個棋盤界面
2.實現鼠標點擊,棋子出現,黑白棋輪流下
3.能夠判斷輸贏
4.添加按鈕功能
實現結果圖:
importjava.awt.BorderLayout;
importjava.awt.Color;
importjava.awt.Cursor;
importjava.awt.FlowLayout;
importjava.awt.Graphics;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjava.awt.event.KeyEvent;
importjava.awt.event.KeyListener;
importjava.awt.event.MouseEvent;
importjava.awt.event.MouseListener;
importjava.awt.image.BufferedImage;
importjava.io.File;
importjava.io.IOException;
importjavax.imageio.ImageIO;
importjavax.swing.JButton;
importjavax.swing.JFrame;
importjavax.swing.JOptionPane;
importjavax.swing.JPanel;
publicclassTest{
publicstaticvoidmain(String[]args){
newMyFrame();
}
classMyFrameextendsJFrameimplementsMouseListener{
//保存坐標
intx;
inty;
intx1;
inty1;
//黑子數
//白子數
//1是黑下,2是白下
//默認開始是黑旗先下
intflag=1;
//表示游戲是否結束
//true游戲開始,false游戲結束,不能再下
booleancanPlay=true;
//保存之前下過的棋子的坐標
//'0'代表沒有棋子,'1'代表黑棋,'2'代表白棋
int[][]allChess=newint[19][19];
//int[][]allChess=newint[25][25];
//當前棋子的總數
intchessSum=0;
BufferedImagebgImage=null;
JButtonwithdraw=newJButton("悔棋");
JButtonrestart=newJButton("重新開始");
JButtonexit=newJButton("退出");
JPanelsouth=newJPanel();
publicMyFrame(){
this.setTitle("五子棋");
setSize(630,700);
setLayout(newBorderLayout());
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
try{
bgImage=ImageIO.read(newFile("C:\\Users\\us\\Desktop\\1.jpg"));
}catch(IOExceptione1){
e1.printStackTrace();
}
addMouseListener(this);//將窗體加入監聽
south.setLayout(newFlowLayout(FlowLayout.LEFT,60,30));
south.add(restart);
south.add(withdraw);
south.add(exit);
//初始化按鈕事件監聽器內部類
MybuttonListenerbuttonListener=newMybuttonListener();
//將三個按鈕事件注冊監聽事件
restart.addActionListener(buttonListener);
withdraw.addActionListener(buttonListener);
exit.addActionListener(buttonListener);
//將按鈕面板加到窗體的南部
this.add(south,BorderLayout.SOUTH);
setVisible(true);
}
publicvoidpaint(Graphicsg){
inttempSum=chessSum;
//棋盤
g.drawImage(bgImage,8,30,this);
for(intcolum=58;colum600;colum=colum+30){//行
g.drawLine(38,colum,578,colum);
}
for(intrand=38;randrand=rand+30){//列
g.drawLine(rand,58,rand,598);
}
//黑點
g.fillOval(122,143,10,10);
g.fillOval(484,143,10,10);
g.fillOval(122,504,10,10);
g.fillOval(303,353,10,10);
g.fillOval(484,503,10,10);
g.fillOval(122,355,10,10);
g.fillOval(484,355,10,10);
g.fillOval(303,145,10,10);
g.fillOval(303,503,10,10);
for(inti=0;iallChess.length;i++){
for(intj=0;jallChess.length;++j){
//下黑子
if(allChess[i][j]==1){
inttempX=i*30+38;//左邊界到棋盤的距離
inttempY=j*30+58;//上邊界到棋盤的距離
g.setColor(Color.black);
g.fillOval(tempX-13,tempY-13,25,25);
}
//下白子
if(allChess[i][j]==2){
inttempX=i*30+38;
inttempY=j*30+58;
g.setColor(Color.white);
g.fillOval(tempX-13,tempY-13,25,25);
}
}
}
//最后棋子用紅框表示
if(chessSum0){
g.setColor(Color.red);
g.drawRect(x*30+38-13,y*30+58-13,25,25);
}
//g.setColor(Color.red);
//g.drawRect(x1*30+38-13,y1*30+58-13,25,25);
chessSum++;
System.out.println("總數為"+(chessSum-1));
}
publicvoidmouseClicked(MouseEvente){
x=e.getX();
y=e.getY();
//System.out.println("x="+e.getX()+""+"y="+e.getY());
if(canPlay){
if(x=38x=588y=58y=620){
x=(x-38)/30;//38起點,適應19x19
y=(y-58)/30;
if(allChess[x][y]==0){//此點沒有棋子,才可下
//判斷該由哪方下棋
if(flag==1){//'1'代表由黑方下
allChess[x][y]=1;//'1'表示此處放黑棋
this.checkFive();//判斷黑棋是否五子相連
flag=2;
}
else{
allChess[x][y]=2;//'2'表示此處放白棋
this.checkFive();//判斷白棋是否五子相連
flag=1;//'1'代表由黑方下
}
this.repaint();
}
}
}
}
//判斷五子相連
public
voidcheckFive(){
//把要下的棋子顏色保存
intcolor=allChess[x][y];
//計算已連棋子個數
intcount=1;
//判斷橫向右邊是否五子
for(inti=1;ii++){
if(x=15)
break;
if(color==allChess[x+i][y]){
count++;
}
checkWin(count);
}
count=1;
//判斷橫向左邊是否五子
for(inti=1;ii++){
if(x=3)//當棋子左邊無法連成五子,直接退出
break;
if(color==allChess[x-i][y]){
count++;
}
checkWin(count);
}
count=1;
//判斷豎向下邊是否五子
for(inti=1;ii++){
if(y=15)//當棋子左邊無法連成五子,直接退出
break;
if(color==allChess[x][y+i]){
count++;
}
checkWin(count);
}
count=1;
//判斷豎向上邊是否五子
for(inti=1;ii++){
if(y=3)//當棋子豎向上邊無法連成五子,直接退出
break;
if(color==allChess[x][y-i]){
count++;
}
checkWin(count);
}
count=1;
//判斷右斜上邊是否五子
for(inti=1;ii++){
if(y=3||x=15)//當棋子右斜上邊無法連成五子,直接退出
break;
if(color==allChess[x+i][y-i]){
count++;
}
checkWin(count);
}
count=1;
//判斷左斜向下邊是否五子
for(inti=1;ii++){
if(x=3||y=15)//當棋子左斜向下邊無法連成五子,直接退出
break;
if(color==allChess[x-i][y+i]){
count++;
}
checkWin(count);
}
count=1;
//判斷左斜向上邊是否五子
for(inti=1;ii++){
if(x=3||y=3)
break;
if(color==allChess[x-i][y-i]){
count++;
}
checkWin(count);
}
count=1;
//判斷右斜向下邊是否五子
for(inti=1;ii++){
if(y=15||x=15)
break;
if(color==allChess[x+i][y+i]){
count++;
}
checkWin(count);
}
count=1;
}
publicvoidmouseEntered(MouseEvente){
x1=e.getX();
y1=e.getY();
if(x1=38x1=588y1=58y1=620){
setCursor(newCursor(Cursor.HAND_CURSOR));
}
}
publicvoidmouseExited(MouseEventarg0){
//TODOAuto-generatedmethodstub
}
publicvoidmousePressed(MouseEventarg0){
}
publicvoidmouseReleased(MouseEvente){
publicvoidcheckWin(intcount){
if(count=5){//五子相連
if(allChess[x][y]==1){
JOptionPane.showMessageDialog(this,"黑方勝出!!!!!!");
}
if(allChess[x][y]==2){
JOptionPane.showMessageDialog(this,"白方勝出!!!!!!");
}
canPlay=false;//游戲結束
}
}
//重新開始
publicvoidrestartGame(){
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 職業病賠償標準考核試卷
- 全球家電產品認證要求考核試卷
- 融資政策精準對接考核試卷
- 內河運輸企業盈利能力研究考核試卷
- 樂器批發商渠道合作效果評估方法考核試卷
- 2025年中國PU剎車腳輪數據監測研究報告
- 2025年中國IC一卡通管理系統數據監測報告
- 2025年中國49鍵電子琴數據監測研究報告
- 2025年中國107膠數據監測報告
- 2025至2030年中國高爾夫柄市場分析及競爭策略研究報告
- 水泥攪拌樁施工項目進度管理措施
- 人工智能賦能教師數字素養提升
- 換電站合同范例
- 【超星學習通】馬克思主義基本原理(南開大學)爾雅章節測試網課答案
- (CNAS-CL01-2018認可準則)內審核查表
- 2024年模型模具加工合同范本
- 廣東省高州市2023-2024學年高一下學期期中考試數學
- 食堂工作人員考核方案
- 國家基本公衛(老年人健康管理)考試復習題及答案
- 臨床營養(043)(正高級)高級衛生專業技術資格考試試卷及答案指導(2025年)
- 重慶市旋挖成孔灌注樁工程技術規程
評論
0/150
提交評論