Java實現五子棋單機版_第1頁
Java實現五子棋單機版_第2頁
Java實現五子棋單機版_第3頁
Java實現五子棋單機版_第4頁
Java實現五子棋單機版_第5頁
已閱讀5頁,還剩9頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論