本文实例讲述了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 blacklist=new ArrayList();

private ArrayList whitelist=new ArrayList();

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 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有所帮助。

Java五子棋书,本文实例讲述了java实现的五子棋游戏代码,分享给大家供大家参考,具体代码如下package gyb.exam; import java.awt.Bo...相关推荐

  1. android实现10ms定时器,本文实例讲述了Android定时器和Handler用法。分享给大家供大家参考。具体分析如下:一、环境:主机:WIN8开发环境:Android Studio...

    本文实例讲述了Android定时器和Handler用法.分享给大家供大家参考.具体分析如下: 一.环境: 主机:WIN8 开发环境:Android Studio 二.定时器使用示例: 初始化: //定 ...

  2. android搜索功能xml,Android_Android ActionBar搜索功能用法详解,本文实例讲述了Android ActionBar - phpStudy...

    Android ActionBar搜索功能用法详解 本文实例讲述了Android ActionBar搜索功能用法.分享给大家供大家参考,具体如下: 使用ActionBar SearchView时的注意 ...

  3. jquery查找父窗体id_JavaScript_jQuery子窗体取得父窗体元素的方法,本文实例讲述了jQuery子窗体取 - phpStudy...

    jQuery子窗体取得父窗体元素的方法 本文实例讲述了jQuery子窗体取得父窗体元素的方法.分享给大家供大家参考.具体如下: $("#父窗口元素ID",window.parent ...

  4. php java执行linux_java_java执行Linux命令的方法,本文实例讲述了java执行Linux命 - phpStudy...

    java执行Linux命令的方法 本文实例讲述了java执行Linux命令的方法.分享给大家供大家参考.具体实现方法如下: public class StreamGobbler extends Thr ...

  5. java httpclient 异步请求_java_java实现HttpClient异步请求资源的方法,本文实例讲述了java实现HttpClien - phpStudy...

    java实现HttpClient异步请求资源的方法 本文实例讲述了java实现HttpClient异步请求资源的方法.分享给大家供大家参考.具体实现方法如下: package demo; import ...

  6. java继承类长方形面积_java_java用接口、多态、继承、类计算三角形和矩形周长及面积的方法,本文实例讲述了java用接口、多 - phpStudy...

    java用接口.多态.继承.类计算三角形和矩形周长及面积的方法 本文实例讲述了java用接口.多态.继承.类计算三角形和矩形周长及面积的方法.分享给大家供大家参考.具体如下: 定义接口规范: /** ...

  7. php监测tomcat,java_JAVA实现监测tomcat是否宕机及控制重启的方法,本文实例讲述了JAVA实现监测tom - phpStudy...

    JAVA实现监测tomcat是否宕机及控制重启的方法 本文实例讲述了JAVA实现监测tomcat是否宕机及控制重启的方法.分享给大家供大家参考.具体如下: Detector.java: import ...

  8. java sqlite 多线程并发_C#_C#解决SQlite并发异常问题的方法(使用读写锁),本文实例讲述了C#解决SQlite并 - phpStudy...

    C#解决SQlite并发异常问题的方法(使用读写锁) 本文实例讲述了C#解决SQlite并发异常问题的方法.分享给大家供大家参考,具体如下: 使用C#访问sqlite时,常会遇到多线程并发导致SQLI ...

  9. js php滚动图代码,JavaScript_JS实现的N多简单无缝滚动代码(包含图文效果),本文实例讲述了JS实现的N多简 - phpStudy...

    JS实现的N多简单无缝滚动代码(包含图文效果) 本文实例讲述了JS实现的N多简单无缝滚动代码.分享给大家供大家参考,具体如下: 实现原理很简单,注册事件之后,立即将元素的innerHTML累加一次. ...

  10. php拆分excel,PHP_PHPExcel合并与拆分单元格的方法,本文实例讲述了PHPExcel合并与 - phpStudy...

    PHPExcel合并与拆分单元格的方法 本文实例讲述了PHPExcel合并与拆分单元格的方法.分享给大家供大家参考,具体如下: $objPHPExcel; $filepath="c:\tem ...

最新文章

  1. js生成随机数函数,倒计时函数
  2. 为什么我不建议你用阿里巴巴Java规范,而使用 Google Guava 编程?
  3. linux getfattr中文乱码,在bash shell中使用getfattr查看文件扩展属性
  4. java nio教程_Java NIO教程
  5. java爬虫自动识别验证码_简单Java爬虫(一)爬取手机号码
  6. python的包文件叫什么_python之包和文件目录规范
  7. 考勤管理系统c语言,C语言课程设计学生考勤系统最终版(范文1)
  8. 计算2的幂(信息学奥赛一本通-T1037)
  9. python 近期用到的基础知识汇总(八)
  10. linux安装包安装nginx,Linux tar包安装Nginx
  11. dw php获取当前时间,tp5时间戳转日期的方法
  12. python泊松_python – 泊松过程的测试
  13. 用健身的思维来对待学习
  14. cisco packet tracer 介绍
  15. 深度解析SQL和NoSQL数据库,掌握主流数据库【两万字解析】
  16. 大数据面试题集锦-Hadoop面试题(一)
  17. 阿里云虚拟主机 mysql_阿里云虚拟主机数据库用户操作是怎样的
  18. lrs_save_searched_string
  19. Supplier应用场景
  20. matlab画一组数据的频率分布图

热门文章

  1. 如何用Redis统计UV(独立访客)
  2. C#局域网下的简单即时通讯案例
  3. TexWorks中添加拼写纠察
  4. centos 6.4 thinly-provisioned
  5. 周六研易01:深入研究甲木选用法
  6. [Unity3d] [图文]【寻路】 Waypoint 与 NavMesh 比较(转)
  7. 这片“农场”被他们承包了|第一届中国农业人工智能创新创业大赛初赛回顾
  8. <C++>初识STL —— 标准模板库
  9. 无心剑英译秦观《鹊桥仙》
  10. Xcode6内置环境变量(Build Setting Macros)