欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java實現(xiàn)單人版五子棋游戲

 更新時間:2022年05月04日 14:43:59   投稿:lijiao  
這篇文章主要為大家詳細介紹了java實現(xiàn)五子棋小游戲的相關(guān)資料,十分簡單實用,有不錯的參考借鑒價值,推薦給大家,需要的朋友可以參考下

本文實例講述了java實現(xiàn)的五子棋游戲代碼,分享給大家供大家參考,具體代碼如下

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("結(jié)束");
  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 是當(dāng)前 繪圖系統(tǒng)集合工具包
  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);
   }
  }
 }
}

效果圖:

以上所述就是本文的全部內(nèi)容了,希望能夠?qū)Υ蠹沂炀氄莆誮ava有所幫助。

相關(guān)文章

  • Mybatis用注解寫in查詢的實現(xiàn)

    Mybatis用注解寫in查詢的實現(xiàn)

    這篇文章主要介紹了Mybatis用注解寫in查詢的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Struts2相關(guān)的面試題整理分享

    Struts2相關(guān)的面試題整理分享

    這篇文章主要給大家總結(jié)整理了關(guān)于Struts2相關(guān)的面試題,文中先詳細介紹了關(guān)于struts2的工作原理、工作流程、攔截器和過濾器的區(qū)別以及什么要使用Struts2,然后分享了總結(jié)的一些關(guān)于Struts2面試的一些問題,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-11-11
  • 深入了解java.util.Arrays的使用技巧

    深入了解java.util.Arrays的使用技巧

    在這篇文章中,我們將來帶大家看看?java.util.Arrays?,我們可以使用?Arrays?創(chuàng)建,比較,排序,搜索,stream?和轉(zhuǎn)化數(shù)組,感興趣的小伙伴可以了解一下
    2023-02-02
  • JAVA設(shè)計模式之解釋器模式詳解

    JAVA設(shè)計模式之解釋器模式詳解

    這篇文章主要介紹了JAVA設(shè)計模式之解釋器模式詳解,解釋器模式是類的行為模式,給定一個語言之后,解釋器模式可以定義出其文法的一種表示,并同時提供一個解釋器,需要的朋友可以參考下
    2015-04-04
  • 詳談JSON與Javabean轉(zhuǎn)換的幾種形式

    詳談JSON與Javabean轉(zhuǎn)換的幾種形式

    下面小編就為大家?guī)硪黄斦凧SON與Javabean轉(zhuǎn)換的幾種形式。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • 基于jfreechart生成曲線、柱狀等圖片并展示到JSP

    基于jfreechart生成曲線、柱狀等圖片并展示到JSP

    這篇文章主要介紹了基于jfreechart生成曲線、柱狀等圖片并展示到JSP,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-10-10
  • SpringMVC的ModelAndView傳值方法

    SpringMVC的ModelAndView傳值方法

    今天小編就為大家分享一篇SpringMVC的ModelAndView傳值方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • springcloud教程之zuul路由網(wǎng)關(guān)的實現(xiàn)

    springcloud教程之zuul路由網(wǎng)關(guān)的實現(xiàn)

    這篇文章主要介紹了springcloud教程之zuul路由網(wǎng)關(guān)的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • 詳解Java中如何正確書寫單例模式

    詳解Java中如何正確書寫單例模式

    一般單例都是五種寫法:懶漢,餓漢,雙重校驗鎖,靜態(tài)內(nèi)部類和枚舉。本文整理了幾種常見的單例寫法,下面跟著小編一起來看下吧
    2017-01-01
  • MybatisPlus代碼生成器含XML文件詳解

    MybatisPlus代碼生成器含XML文件詳解

    這篇文章主要介紹了MybatisPlus代碼生成器含XML文件詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01

最新評論