日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

简单的五子棋操作用两种方法实现

發(fā)布時(shí)間:2025/3/20 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 简单的五子棋操作用两种方法实现 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

最近有五子棋的大作業(yè),周折半天才弄明白其中的原理,查閱了許多資料,然后網(wǎng)上的代碼只有幾篇原創(chuàng)并且注釋很少,感覺不好理解。所以感覺有必要分享一下自己的心得
本人使用兩種方法:
1:(傳統(tǒng)方法)鼠標(biāo)點(diǎn)擊事件。大致流程為 定義窗口——從寫JPanel中的paint函數(shù)(畫圖由paint實(shí)現(xiàn))——畫棋盤——設(shè)置數(shù)組儲存坐標(biāo)以及是否有棋子——添加鼠標(biāo)點(diǎn)擊事件畫棋子(判斷鼠標(biāo)點(diǎn)擊的位置離此點(diǎn)最近的那個(gè)店的坐標(biāo)并畫棋子)——判斷是否有勝利
1)這里說一下paint函數(shù),paint函數(shù)定義在那個(gè)界面里他會自動執(zhí)行畫圖不需要調(diào)用,所以你只需要寫好約束的事件讓他畫完棋盤后該什么時(shí)候在哪里畫棋子。
2)repaint 函數(shù)是起到重畫作用,你點(diǎn)擊過后再最近的那個(gè)店需要畫棋子,repaint就起到從畫的作用
3)本人判斷成行的方法是分別定義四個(gè)變量代碼五子棋個(gè)數(shù),當(dāng)》=5時(shí)停止。彈出新的窗口。具體是如果此點(diǎn)左右都有相同顏色的棋子,就吧這個(gè)點(diǎn)向左找到一直顏色不同為止,然后從這點(diǎn)向下(右)直接計(jì)數(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){//需要定義兩個(gè)變量(作用相同)一個(gè)判斷黑棋子,一個(gè)判斷白棋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() {//建立監(jiān)聽事件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(); } });//關(guān)閉當(dāng)前窗口b2.addActionListener(new ActionListener() {//建立監(jiān)聽事件public void actionPerformed(ActionEvent e) {if(b2==e.getSource()) System.exit(0);//關(guān)閉所有} }); setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); } } public wuziqi() {setTitle("這是一個(gè)五子棋游戲");setVisible(true);Container c = getContentPane();DrawPanel1 jp1 = new DrawPanel1();c.add(jp1);setSize(1000, 1010);jp1.setBackground(new Color(60,150,200));//隨便賦值一個(gè)背景顏色this.setResizable(false);this.setLocationRelativeTo(null);//劇中放置,要在setsize后面放置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())//找到點(diǎn)擊的點(diǎn)右側(cè)的最近那個(gè)坐標(biāo)值{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);//c.add(b1);//c.add(b2);frame.setSize(300, 300);frame.setLocationRelativeTo(null);frame.setVisible(true);//順序問題frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); b1.addActionListener(new ActionListener() {//建立監(jiān)聽事件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() {//建立監(jiān)聽事件public void actionPerformed(ActionEvent e) {if(b2==e.getSource())System.exit(0);} }); //System.exit(0);//結(jié)束}}public wuziqi2(){setTitle("這是一個(gè)五子棋游戲");//Container c=getContentPane();//setLayout(new FlowLayout(2,10,10));//流布局管理器DrawPanel1 d1=new DrawPanel1();d1.setSize(950,950);d1.setLayout(new GridLayout(19,19,0,0));//網(wǎng)格布局19行19列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); //取消焦點(diǎn)}}for( int i=0;i<19;i ){ for(int j=0;j<19;j )b[i][j].addActionListener(new ActionListener() {//建立監(jiān)聽事件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;//有bai棋子b[i][j].setIcon(icon);judgle1(white,i,j);}if(n%2!=0) { drawlconb icon = new drawlconb(40, 40);black[i][j]=true;//有hei棋子b[i][j].setIcon(icon);judgle1(black,i,j);}n ;//奇數(shù)偶數(shù)的計(jì)量方式,沒有特別意義judgle[i][j]=true;//有了棋子}}}});}setSize(950,950);setLocationRelativeTo(null);//要放在sitsize后面,不然整個(gè)圖形就在setVisible(true);setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);}public static void main(String[] args){wuziqi2 f= new wuziqi2();} static class drawlconw implements Icon{ // 實(shí)現(xiàn)Icon接口白色棋子private int width; // 聲明圖標(biāo)的寬private int height; // 聲明圖標(biāo)的長public int getIconHeight() { // 實(shí)現(xiàn)getIconHeight()方法return this.height;}public int getIconWidth() { // 實(shí)現(xiàn)getIconWidth()方法return this.width;}public drawlconw(int width, int height) { // 定義構(gòu)造方法this.width = width;this.height = height;}// 實(shí)現(xiàn)paintIcon()方法public void paintIcon(Component arg0, Graphics arg1, int x, int y) {arg1.setColor(Color.white);arg1.fillOval(x, y, width, height); // 繪制一個(gè)圓形}} static class drawlconb implements Icon{ // 實(shí)現(xiàn)Icon接口白色棋子private int width; // 聲明圖標(biāo)的寬private int height; // 聲明圖標(biāo)的長public int getIconHeight() { // 實(shí)現(xiàn)getIconHeight()方法return this.height;}public int getIconWidth() { // 實(shí)現(xiàn)getIconWidth()方法return this.width;}public drawlconb(int width, int height) { // 定義構(gòu)造方法this.width = width;this.height = height;}// 實(shí)現(xiàn)paintIcon()方法public void paintIcon(Component arg0, Graphics arg1, int x, int y) {arg1.setColor(Color.black);arg1.fillOval(x, y, width, height); // 繪制一個(gè)圓形 } } class DrawPanel1 extends JPanel {// Graphics g=getGraphics();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)容還不錯(cuò),歡迎將生活随笔推薦給好友。