2 qq 38999991 qq_38999991 于 2017.06.22 13:41 提问

添加悔棋功能,整体代码 50C

package wuziqi1;
import java.awt.Checkbox;
import java.awt.CheckboxGroup;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class wuziqi1 extends JFrame{
CheseGame CG;
wuziqi1 ()
{
this.CG= new CheseGame();
addMouseListener(CG);
add(CG);
}
public static void main(String[] args) {
wuziqi1 fivechese= new wuziqi1 ();
fivechese.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
fivechese.setSize(900, 700);
fivechese.setTitle("五子棋");
fivechese.setVisible(true);
fivechese.setResizable(true);
}
}
class CheseGame extends JPanel implements MouseListener,ItemListener
{
int [][]map = new int[20][20];
Color []color = {Color.BLACK,Color.WHITE,Color.GREEN};
int x = -1;
int y = -1;
int flag = 1;
int winner = 3;
JButton btn1 = new JButton("开始");
JButton btn2 = new JButton("再来一局");
CheckboxGroup cbg = new CheckboxGroup();
Checkbox chb1 = new Checkbox("黑棋先开始",cbg,true);
Checkbox chb2 = new Checkbox("白棋先开始",cbg,false);
public void itemStateChanged(ItemEvent ie) {
if(chb1.getState())
{
flag = 1;
}
else
{
flag = 2;
}
}
class GameStart implements ActionListener
{
public void actionPerformed(ActionEvent ae)
{

         if(ae.getSource() == btn1)
         {
             start();
             repaint();
             btn1.setEnabled(false);
             btn2.setEnabled(true);
             chb1.setEnabled(false);
             chb2.setEnabled(false);
         }
         if(ae.getSource() == btn2)
         {
             start();
             repaint();
             chb1.setEnabled(true);
             chb2.setEnabled(true);
         }
    }
}
CheseGame()
{  

    this.setLayout(null);
    chb1.setBounds(650, 50, 100, 30);
    chb2.setBounds(650, 100, 100, 30);
    chb1.addItemListener(this);
    chb2.addItemListener(this);
    btn1.setBounds(650,150,100,30);
    btn1.addActionListener(new GameStart()); 
    btn2.setBounds(650, 200, 100, 30);
    btn2.addActionListener(new GameStart());
    btn2.setEnabled(false);
    this.add(btn1);
    this.add(btn2);
    this.add(chb1);
    this.add(chb2);
}
void start()
{
    for(int i = 0;i < 20;i++)
        for(int j = 0;j < 20;j++)
            map[i][j] = 0;
    winner = 0;
}
Boolean win(int x,int y)
{
    int score = 1;
         for(int i = x;i < x+4;)
         {
             if(i == 19)
                 break;
             if(map[i][y] != map[++i][y])
                break;
             score++;
         }
         for(int i = x;i > x-4;)
         {
             if(i == 0)
                 break;
             if(map[i][y] != map[--i][y])
                break;
             score++;
         } 
        if(score >= 5)
             return true;
        else
             score = 1;
        for(int j = y; j < y+4;)
        {
            if(j == 19)
                break;
            if(map[x][j] != map[x][++j])
                break;
            score++;
        }
        for(int j = y; j > y-4;)
        {
            if(j == 0)
                break;
            if(map[x][j] != map[x][--j])
                break;
            score++;
        } 
        if(score >= 5)
             return true;
        else
             score = 1;
        for(int i = x;i < x+4;)
            for(int j = y;j < y+4;)
            {
                if(i == 19 || y == 19)
                {i = x+4; break;}
                if(map[i][j] != map[++i][++j])
                {
                    i = x+4;
                    break;
                }
                score++;
            }
          for(int i = x;i > x-4;)
            for(int j = y;j > y-4;)
            {
                if(i == 0||j==0)
                {i = x-4; break;}
                if(map[i][j] != map[--i][--j])
                {
                    i = x-4;
                    break;
                }
                score++;
            } 
          if(score >= 5)
             return true;
         else
             score = 1;
        for(int i = x;i > x-4;)
            for(int j = y;j < y+4;)
            {
                if(i==0 || j==19)
                { i = x-4;break;}
                if(map[i][j] != map[--i][++j])
                {
                    i = x-4;
                    break;
                }
                score++;
            }  
        for(int i = x;i < x+4;)
            for(int j = y;j > y-4;)
            {
                if(i==19||j==0)
                { i = x+4;break;}
                if(map[i][j] != map[++i][--j])
                {
                    i = x + 4;
                    break;
                }
                score++; 
            } 
        if(score >= 5)
             return true;
        else
             return false;
}
public void paintComponent(Graphics g)
 {
       super.paintComponent(g);
       setBackground(color[2]);
       for(int i = 1;i <= 20;i++)
       {
           g.setColor(color[0]);
           g.drawLine(30, i*30 ,600 , i*30);
           g.drawLine(i*30,30, i*30, 600);
       }
       for(int i = 0;i < 20;i++)
           for(int j = 0;j < 20;j++)
           {
               if(map[i][j] == 1)
               { 
                   g.setColor(color[0]);
                   g.fillOval((i+1)*30-15, (j+1)*30-15, 30, 30);
               }
               if(map[i][j] == 2)
               {
                   g.setColor(color[1]);
                   g.fillOval((i+1)*30-15, (j+1)*30-15, 30, 30);
               }
           }
       Font font = new Font("",30,50);
       g.setFont(font);
       if(winner == 1)
       {
           g.setColor(color[0]);
           g.drawString("黑棋胜", 650, 300);
       }
       if(winner == 2)
       { 
           g.setColor(color[1]);
           g.drawString("白棋胜", 650, 300);
       }
 }
public void mouseClicked(MouseEvent me) {
}
public void mousePressed(MouseEvent me) {
    if(winner == 0)
    {
        x = me.getX();
        y = me.getY();
        chb1.setEnabled(false);
        chb2.setEnabled(false);
    }
    x = (int)(x/30)-1;
    y = (int)((y-15)/30)-1;
    if(x>=0&&x<=19&&y>=0&&y<=19)
    {
        if(flag == 1&&map[x][y] == 0)
        {
            map[x][y] = 1;
            if(win(x,y))
                winner = 1;
            flag = 2;
        }
        else
            if(flag == 2&&map[x][y] == 0)
        {
            map[x][y] = 2;
             if(win(x,y))
                 winner = 2;
            flag = 1;
        }
    }
    repaint();
}
@Override
public void mouseReleased(MouseEvent me) {
   // throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public void mouseEntered(MouseEvent me) {
   // throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public void mouseExited(MouseEvent me) {
   // throw new UnsupportedOperationException("Not supported yet.");
}

}

2个回答

caozhy
caozhy   Ds   Rxr 2017.06.24 00:12

2块5毛钱就找人帮你改程序,还不如直接说你们程序员好贱。

caozhy
caozhy 回复沐之潼: 是啊,相互交流啊,你都帮了多少人。你做了什么贡献。
7 个月之前 回复
qq_38999991
qq_38999991 没有哦,论坛不是互相交流的地方吗,钱只是意思一下,乐于助人不是一件好事吗
7 个月之前 回复
wang873985264
wang873985264   2017.06.22 14:16

没有注释,不想看,头疼,大概思路就是保存所有步数,然后回到上一步

qq_38999991
qq_38999991 上一个问题有注释回答,麻烦可以看一下吗
7 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!