java实现单人版五子棋游戏

时间:2021-05-19

本文实例讲述了java实现的五子棋游戏代码,分享给大家供大家参考,具体代码如下

package gyb.exam; import java.awt.BorderLayout;import java.awt.Color;import java.awt.Dimension;import java.awt.Font;import java.awt.Graphics;import java.awt.Point;import java.awt.Toolkit;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.util.ArrayList; import javax.swing.Icon;import javax.swing.ImageIcon;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.border.TitledBorder; public class MainFrame extends JFrame{ private static int BIG=15; private static final int ONE=25; private static final int START=10; private static int X=BIG*START/2; private static int Y=BIG*START/2; private int HL=BIG*ONE+START; private static boolean isBlack; CanvasFrame canvas=new CanvasFrame(); CanvasFrame can; Graphics g; public MainFrame(){ init(); } private Point point; private ArrayList<Point> blacklist=new ArrayList<Point>(); private ArrayList<Point> whitelist=new ArrayList<Point>(); private void init() { JMenuBar bar=new JMenuBar(); setJMenuBar(bar); setSize(600,600); setTitle("五子棋"); JMenu menu=new JMenu("game"); bar.add(menu); JMenuItem start=new JMenuItem("start"); JMenuItem end=new JMenuItem("棋盘大小"); end.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { } }); JMenuItem renew=new JMenuItem("重新开始"); JMenuItem exit=new JMenuItem("退出"); exit.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { System.exit(0); } }); renew.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { blacklist.clear(); whitelist.clear(); } }); menu.add(start); menu.add(renew); menu.add(end); menu.add(exit); setLayout(new BorderLayout()); add(BorderLayout.CENTER,createCenter()); add(BorderLayout.EAST,createEast()); } private boolean isWin(ArrayList<Point> list){ int x; int y; int idx=0; loop:for (Point p : list) { x=p.x; y=p.y; idx=0; while(list.contains(new Point(x,y))){ idx++; x=x-ONE; if(idx==5) break loop; } x=p.x; y=p.y; idx=0; while(list.contains(new Point(x,y))){ idx++; y=y-ONE; if(idx==5) break loop; } x=p.x; y=p.y; idx=0; while(list.contains(new Point(x,y))){ idx++; x=x-ONE; y=y-ONE; if(idx==5) break loop; } x=p.x; y=p.y; idx=0; while(list.contains(new Point(x,y))){ idx++; x=x-ONE; y=y+ONE; if(idx==5) break loop; } } return idx==5; } private JPanel createEast() { JPanel pane=new JPanel(); BorderLayout border=new BorderLayout(); pane.setLayout(border); pane.setBorder(new TitledBorder("五子棋")); Icon image=new ImageIcon(getClass().getResource("mm.png")); pane.add(BorderLayout.NORTH,new JLabel(image,JLabel.CENTER)); pane.add(BorderLayout.CENTER,ballColor()); pane.add(BorderLayout.SOUTH,button()); return pane; } private JPanel ballColor() { JPanel pane=new JPanel(); pane.setLayout(new BorderLayout()); can=new CanvasFrame(){ public void paint(Graphics g){ g.setColor(Color.PINK); g.fillRect(1, 1,200,300); g.setFont(new Font("sans",Font.BOLD,20)); g.setColor(Color.BLACK); g.fillOval(55, 20,25,30); g.drawString("黑子", 10, 43); g.setColor(Color.WHITE); g.fillOval(55, 60,25,30); g.drawString("白子", 10, 83); if(isBlack){ g.setColor(Color.BLACK); g.drawString("黑方落子", 5, 120); }else{ g.setColor(Color.WHITE); g.drawString("白方落子",5,120); } can.repaint(); } }; pane.add(BorderLayout.CENTER,can); return pane; } private JPanel button() { JPanel pane=new JPanel(); BorderLayout bor=new BorderLayout(); JButton start=new JButton("开始"); JButton end=new JButton("结束"); end.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { System.exit(0); }}); pane.setLayout(bor); bor.setVgap(5); pane.setBorder(new TitledBorder("")); pane.add(BorderLayout.NORTH,start); pane.add(BorderLayout.SOUTH,end); return pane; } private JPanel createCenter() { JPanel pane=new JPanel(); canvas.setPreferredSize(new Dimension(HL+10,HL+10)); canvas.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e){ loop:if(e.getButton()==MouseEvent.BUTTON1){ X=e.getX(); Y=e.getY(); int x=(X/ONE)*ONE; int y=(Y/ONE)*ONE; point=new Point(x,y); if(!(blacklist.contains(point)||whitelist.contains(point))){ if(isBlack){ blacklist.add(point); if(isWin(blacklist)){ JOptionPane.showMessageDialog(null, "黑方胜利!"); blacklist.clear(); whitelist.clear(); } }else{ whitelist.add(point); if(isWin(whitelist)){ JOptionPane.showMessageDialog(null, "白方胜利!"); blacklist.clear(); whitelist.clear(); } } } else{ JOptionPane.showMessageDialog(null, "这里己有子了,换个地方落子吧!"); break loop; } canvas.repaint(); isBlack=!isBlack; } } }); pane.add(canvas); return pane; } public static void main(String[] args) { MainFrame frame=new MainFrame(); frame.center(frame); frame.pack(); frame.setVisible(true); } public void center(JFrame frame){ //Toolkit 是当前 绘图系统集合工具包 Toolkit toolkit=Toolkit.getDefaultToolkit(); Dimension screen=toolkit.getScreenSize();//屏幕的宽高 int frameWidth=frame.getWidth(); int frameHigh=frame.getHeight(); int x=(screen.width-frameWidth)/2; int y=(screen.height-frameHigh)/2; frame.setLocation(x, y); } class CanvasFrame extends JPanel { public void paint(Graphics g){ g.setColor(Color.PINK); g.fillRect(0, 0, HL+20, HL+20); g.setColor(Color.BLACK); for(int i=START;i<=HL;i=i+ONE){ for(int j=START;j<=HL;j=j+ONE){ g.drawLine(i, j, HL, j); } } for(int i=START;i<=HL;i=i+ONE){ for(int j=START;j<=HL;j=j+ONE){ g.drawLine(i, j, i, HL); } } g.setColor(Color.YELLOW); g.drawRect(START/2, START/2, HL+1, HL+1); g.setColor(Color.BLACK); for(Point point : blacklist){ g.fillOval(point.x, point.y, 20, 25); } g.setColor(Color.WHITE); for(Point point : whitelist){ g.fillOval(point.x, point.y, 20, 25); } } }}

效果图:

以上所述就是本文的全部内容了,希望能够对大家熟练掌握java有所帮助。

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章