生活随笔
收集整理的這篇文章主要介紹了
简单的五子棋操作用两种方法实现
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
最近有五子棋的大作業(yè),周折半天才弄明白其中的原理,查閱了許多資料,然后網(wǎng)上的代碼只有幾篇原創(chuàng)并且注釋很少,感覺不好理解。所以感覺有必要分享一下自己的心得
本人使用兩種方法:
1:(傳統(tǒng)方法)鼠標點擊事件。大致流程為 定義窗口——從寫JPanel中的paint函數(shù)(畫圖由paint實現(xiàn))——畫棋盤——設(shè)置數(shù)組儲存坐標以及是否有棋子——添加鼠標點擊事件畫棋子(判斷鼠標點擊的位置離此點最近的那個店的坐標并畫棋子)——判斷是否有勝利
1)這里說一下paint函數(shù),paint函數(shù)定義在那個界面里他會自動執(zhí)行畫圖不需要調(diào)用,所以你只需要寫好約束的事件讓他畫完棋盤后該什么時候在哪里畫棋子。
2)repaint 函數(shù)是起到重畫作用,你點擊過后再最近的那個店需要畫棋子,repaint就起到從畫的作用
3)本人判斷成行的方法是分別定義四個變量代碼五子棋個數(shù),當(dāng)》=5時停止。彈出新的窗口。具體是如果此點左右都有相同顏色的棋子,就吧這個點向左找到一直顏色不同為止,然后從這點向下(右)直接計數(shù)。
4)本人的棋子是畫出來的,如果追求美觀可以用image方法使用下載下來的圖片棋子(但是思想一致)。
附上代碼和注釋:
import java
.awt
.Color
;
import java
.awt
.Component
;
import java
.awt
.Container
;
import java
.awt
.FlowLayout
;
import java
.awt
.Font
;
import java
.awt
.Graphics
;
import java
.awt
.GridLayout
;
import java
.awt
.Point
;
import java
.awt
.event
.ActionEvent
;
import java
.awt
.event
.ActionListener
;
import java
.awt
.event
.MouseAdapter
;
import java
.awt
.event
.MouseEvent
;
import javax
.swing
.*
;
public class wuziqi extends JFrame {void judgle(int a
[][],int i
,int j
){int k
=1; int kk
=1;int l
=1;int kl
=1;int k1
=1;int kk1
=1;int k2
=1; int kk2
=1;int m
=i
;int n
=j
;int m1
=i
;int n1
=j
;int m2
=i
;int n2
=j
;while(m
-1>=0&&a
[m
-1][j
]==1) {m
--;}while(m
<18&&a
[m
1][j
]==1) {k
;m
;} while(n
-1>=0&&a
[i
][n
-1]==1) {n
--;}while(n
<18&&a
[i
][n
1]==1) {l
;n
;} while(m1
-1>=0&&n1
-1>=0&&a
[m1
-1][n1
-1]==1) {m1
--;n1
--;}while(m1
<18&&n1
<18&&a
[m1
1][n1
1]==1) {k1
;m1
;n1
;} while(m2
-1>=0&&n2
1<19&&a
[m2
-1][n2
1]==1) {m2
--;n2
;}while(m2
<18&&n2
-1>=0&&a
[m2
1][n2
-1]==1) {k2
;m2
;n2
--;} m
=i
; n
=j
; m1
=i
; n1
=j
;m2
=i
; n2
=j
;while(m
-1>=0&&a
[m
-1][j
]==2) {m
--;}while(m
<18&&a
[m
1][j
]==2) {kk
;m
;} while(n
-1>=0&&a
[i
][n
-1]==2) {n
--;}while(n
<18&&a
[i
][n
1]==2) {kl
;n
;} while(m1
-1>=0&&n1
-1>=0&&a
[m1
-1][n1
-1]==2) {m1
--;n1
--;}while(m1
<18&&n1
<18&&a
[m1
1][n1
1]==2) {kk1
;m1
;n1
;} while(m2
-1>=0&&n2
1<19&&a
[m2
-1][n2
1]==2) {m2
--;n2
;}while(m2
<18&&n2
-1>=0&&a
[m2
1][n2
-1]==2) {kk2
;m2
;n2
--;}if(k
>=5||l
>=5||k1
>=5||k2
>=5||kk
>=5||kl
>=5||kk1
>=5||kk2
>=5) { setTitle("游戲已結(jié)束");JFrame frame
=new JFrame ("恭喜獲勝");Container c
=frame
.getContentPane();c
.setLayout(new GridLayout(4,1,0,0) );if(a
[i
][j
]==1) {JLabel label
=new JLabel("恭喜黑色贏了",JLabel
.CENTER
);label
.setFont(new Font("宋體",0,35));c
.add(label
);}if(a
[i
][j
]==2) {JLabel label
=new JLabel("恭喜白色贏了",JLabel
.CENTER
);label
.setFont(new Font("宋體",0,35));c
.add(label
);}JButton b1
=new JButton("再來一把");JButton b2
=new JButton("結(jié) 束");b1
.setFocusPainted(false); b2
.setFocusPainted(false); c
.add(new JLabel("")); c
.add(b1
);b1
.setBackground(Color
.YELLOW
);c
.add(b2
);c
.setBackground(Color
.red
);frame
.setSize(300, 300);frame
.setLocationRelativeTo(null
);frame
.setVisible(true);frame
.setDefaultCloseOperation(WindowConstants
.DISPOSE_ON_CLOSE
); b1
.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e
) { if(b1
==e
.getSource()) for(int i
=0;i
<19;i
)for(int j
=0;j
<19;j
){a
[i
][j
]=0;}frame
.dispose();repaint(); } });b2
.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e
) {if(b2
==e
.getSource())
System
.exit(0);} }); setDefaultCloseOperation(JFrame
.DISPOSE_ON_CLOSE
); }
}
public wuziqi() {setTitle("這是一個五子棋游戲");setVisible(true);Container c
= getContentPane();DrawPanel1 jp1
= new DrawPanel1();c
.add(jp1
);setSize(1000, 1010);jp1
.setBackground(new Color(60,150,200));this.setResizable(false);this.setLocationRelativeTo(null
);setDefaultCloseOperation(WindowConstants
.EXIT_ON_CLOSE
);c
.addMouseListener(new MouseAdapter() {public void mouseClicked(MouseEvent e
) {{int x
=0,y
=0;for (int i
= 0; i
< 19; i
) {if (jp1
.b4
[i
][2] >e
.getX()){if(i
>0) { if(e
.getX()-jp1
.b4
[i
-1][2] e
.getY()){if(i
>0) { if(e
.getY()-jp1
.b3
[2][i
-1]=0&&i
<=18) {int m
=i
;int n
=j
;int m1
=i
;int n1
=j
;int m2
=i
;int n2
=j
;while(m
-1>=0&&a
[m
-1][j
]==true) {m
--;}while(m
<18&&a
[m
1][j
]==true) {k
;m
;} while(n
-1>=0&&a
[i
][n
-1]==true) {n
--;}while(n
<18&&a
[i
][n
1]==true) {l
;n
;} while(m1
-1>=0&&n1
-1>=0&&a
[m1
-1][n1
-1]==true) {m1
--;n1
--;}while(m1
<18&&n1
<18&&a
[m1
1][n1
1]==true) {k1
;m1
;n1
;} while(m2
-1>=0&&n2
1<19&&a
[m2
-1][n2
1]==true) {m2
--;n2
;}while(m2
<18&&n2
-1>=0&&a
[m2
1][n2
-1]==true) {k2
;m2
;n2
--;} if(k
>=5||l
>=5||k1
>=5||k2
>5) { setTitle("游戲已結(jié)束");JFrame frame
=new JFrame ("恭喜獲勝");Container c
=frame
.getContentPane();c
.setLayout(new GridLayout(4,1,0,0) );JLabel label
=new JLabel("恭喜你贏了",JLabel
.CENTER
);label
.setFont(new Font("宋體",0,35));JButton b1
=new JButton("再來一把");JButton b2
=new JButton("結(jié) 束");b1
.setFocusPainted(false); b2
.setFocusPainted(false); c
.add(new JLabel(""));c
.add(label
);c
.add(b1
);b1
.setBackground(Color
.YELLOW
);c
.add(b2
);c
.setBackground(Color
.red
);frame
.setSize(300, 300);frame
.setLocationRelativeTo(null
);frame
.setVisible(true);frame
.setDefaultCloseOperation(WindowConstants
.DISPOSE_ON_CLOSE
); b1
.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e
) { if(b1
==e
.getSource()) for(int i
=0;i
<19;i
)for(int j
=0;j
<19;j
){judgle
[i
][j
]=false; black
[i
][j
]=false; white
[i
][j
]=false;b
[i
][j
].setIcon(null
); frame
.dispose();repaint(); }} });b2
.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e
) {if(b2
==e
.getSource())System
.exit(0);} }); }}public wuziqi2(){setTitle("這是一個五子棋游戲");DrawPanel1 d1
=new DrawPanel1();d1
.setSize(950,950);d1
.setLayout(new GridLayout(19,19,0,0));d1
.setBackground(new Color(0,200,200));setResizable(false);add(d1
);for(int i
=0;i
<19;i
) {for(int j
=0;j
<19;j
) {b
[i
][j
]=new JButton("");d1
.add(b
[i
][j
]); b
[i
][j
].setContentAreaFilled(false);b
[i
][j
].setBorderPainted(false);b
[i
][j
].setFocusPainted(false); }}for( int i
=0;i
<19;i
){ for(int j
=0;j
<19;j
)b
[i
][j
].addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e
){ for( int i
=0;i
<19;i
){for(int j
=0;j
<19;j
)if(!judgle
[i
][j
])if(e
.getSource()==b
[i
][j
]){ if(n
%2==0) { drawlconw icon
= new drawlconw(40, 40);white
[i
][j
]=true;b
[i
][j
].setIcon(icon
);judgle1(white
,i
,j
);}if(n
%2!=0) { drawlconb icon
= new drawlconb(40, 40);black
[i
][j
]=true;b
[i
][j
].setIcon(icon
);judgle1(black
,i
,j
);}n
;judgle
[i
][j
]=true;}}}});}setSize(950,950);setLocationRelativeTo(null
);setVisible(true);setDefaultCloseOperation(WindowConstants
.DISPOSE_ON_CLOSE
);}public static void main(String
[] args
){wuziqi2 f
= new wuziqi2();}
static class drawlconw implements Icon{ private int width
; private int height
; public int getIconHeight() { return this.height
;}public int getIconWidth() { return this.width
;}public drawlconw(int width
, int height
) { this.width
= width
;this.height
= height
;}public void paintIcon(Component arg0
, Graphics arg1
, int x
, int y
) {arg1
.setColor(Color
.white
);arg1
.fillOval(x
, y
, width
, height
); }}
static class drawlconb implements Icon{ private int width
; private int height
; public int getIconHeight() { return this.height
;}public int getIconWidth() { return this.width
;}public drawlconb(int width
, int height
) { this.width
= width
;this.height
= height
;}public void paintIcon(Component arg0
, Graphics arg1
, int x
, int y
) {arg1
.setColor(Color
.black
);arg1
.fillOval(x
, y
, width
, height
); }
}
class DrawPanel1 extends JPanel {public void paint(Graphics g
) {super.paint(g
);for ( int i
= 25; i
< 910; i
= i
48) {g
.drawLine(30, i
, 912, i
);g
.setColor(Color
.black
);}for (int i
= 30; i
<= 925; i
= i
49) {g
.drawLine(i
, 25, i
, 890);}}
}
}
本人菜雞剛學(xué)java,有很多理解不好的地方,忘大佬指出!
總結(jié)
以上是生活随笔為你收集整理的简单的五子棋操作用两种方法实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。