Java编写五子棋小游戏

代码如下:

package org.liky.game.frame;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Toolkit;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JOptionPane;public class FiveChessFrame extends JFrame implements MouseListener {Integer width=Toolkit.getDefaultToolkit().getScreenSize().width;Integer height=Toolkit.getDefaultToolkit().getScreenSize().height;Integer x=0;Integer y=0;int[][] allChess=new int[19][19];boolean isBlack=true;boolean canPlay=true;String message="黑方先行";BufferedImage bgImage=null;public FiveChessFrame() {this.setTitle("五子棋");this.setSize(500,500);this.setLocation((width-500)/2,(height-500)/2);this.setResizable(false);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.addMouseListener(this);try {bgImage=ImageIO.read(new File("c:/image/game.jpg"));} catch (IOException e) {// TODO 自动生成的 catch 块e.printStackTrace();}this.setVisible(true);}public void paint(Graphics g) {BufferedImage bi=new BufferedImage(500,500,BufferedImage.TYPE_INT_ARGB);Graphics g2=bi.createGraphics();g2.drawImage(bgImage, 0, 20,this);g2.setFont(new Font("黑体",Font.BOLD,20));g2.drawString("游戏信息:"+message, 30, 60);g2.setFont(new Font("黑体",Font.BOLD,15));g2.drawString("开始游戏", 400, 90);g2.setFont(new Font("宋体",0,14));g2.drawString("黑方时间:", 30, 470);g2.drawString("白方时间:", 260, 470);g2.drawRect(400, 70, 70, 30);//绘制for(Integer i=0;i<19;i++) {g2.drawLine(10, 70+20*i, 370, 70+20*i);g2.drawLine(10+20*i, 70, 10+20*i, 430);}g2.fillOval(68, 128, 4, 4);g2.fillOval(188, 128, 4, 4);g2.fillOval(308, 128, 4, 4);g2.fillOval(68, 248, 4, 4);g2.fillOval(188, 248, 4, 4);g2.fillOval(308, 248, 4, 4);g2.fillOval(68, 368, 4, 4);g2.fillOval(188, 368, 4, 4);g2.fillOval(308, 368, 4, 4);//绘制棋子//x=(x-10)/20*20+10; //是为了取得交叉点的坐标//y=(y-70)/20*20+70;// //黑子//g.fillOval(x-7, y-7, 14, 14);// //白子//g.setColor(Color.BLACK);//g.fillOval(x-7, y-7, 14, 14);//g.setColor(Color.BLACK);//g.drawOval(x-7, y-7, 14, 14);for(int i=0;i<19;i++) {for(int j=0;j<19;j++) {if(allChess[i][j]==1) {Integer tempX=i*20+10;Integer tempY=j*20+70;g2.fillOval(tempX-7, tempY-7, 14, 14);}if(allChess[i][j]==2) {Integer tempX=i*20+10;Integer tempY=j*20+70;g2.setColor(Color.white);g2.fillOval(tempX-7, tempY-7, 14, 14);g2.setColor(Color.black);g2.drawOval(tempX-7, tempY-7, 14, 14);}}}g.drawImage(bi, 0, 0, this);}@Overridepublic void mouseClicked(MouseEvent e) {// TODO 自动生成的方法存根}@Overridepublic void mouseEntered(MouseEvent e) {// TODO 自动生成的方法存根}@Overridepublic void mouseExited(MouseEvent e) {// TODO 自动生成的方法存根}@Overridepublic void mousePressed(MouseEvent e) {// TODO 自动生成的方法存根if(canPlay) {System.out.println("X:"+e.getX());System.out.println("Y:"+e.getY());x=e.getX();y=e.getY();if(x>=10&&x<=370&&y>=70&&y<=430) {x=(x-10)/20;y=(y-70)/20;if(allChess[x][y]==0) {if(isBlack==true) {allChess[x][y]=1;isBlack=false;message="轮到白方";}else {allChess[x][y]=2;isBlack=true;message="轮到黑方";}//判断boolean winFlag = this.checkWin();if (winFlag == true) {JOptionPane.showMessageDialog(this, "游戏结束,"+ (allChess[x][y] == 1 ? "黑方" : "白方") + "获胜!");canPlay = false;}}else {JOptionPane.showMessageDialog(this, "当前位置已经有棋子!");}this.repaint();}}if (e.getX() >= 400 && e.getX() <= 470 && e.getY() >= 70&& e.getY() <= 100) {int result = JOptionPane.showConfirmDialog(this, "是否重新开始游戏?");if (result == 0) {// 现在重新开始游戏// 重新开始所要做的操作:1)把棋盘清空,allChess数组中全部数据归0;// 2)游戏相关信息显示初始化// 3)将下一步下棋改为黑方for (int i = 0; i < 19; i++) {for (int j = 0; j < 19; j++) {allChess[i][j] = 0;}}// 另一种方式 allChess=new int[19][19]message = "黑方先行";isBlack = true;this.repaint();}}}@Overridepublic void mouseReleased(MouseEvent e) {// TODO 自动生成的方法存根}private boolean checkWin() {boolean flag=false;int color=allChess[x][y];int count=this.checkCount(1, 0, color);if(count>=5) {flag=true;}else {count=this.checkCount(0, 1, color);if(count>=5) {flag=true;}else {count=this.checkCount(1, -1, color);if(count>=5) {flag=true;}else {count=this.checkCount(1, 1, color);if(count>=5) {flag=true;}}}}return flag;}private int checkCount(int xChange,int yChange,int color) {int count=1;int tempX=xChange;int tempY=yChange;while((x + xChange >= 0 && x + xChange <= 18 && y + yChange >= 0&& y + yChange <= 18&& color == allChess[x + xChange][y + yChange])) {count++;if(xChange!=0)xChange++;if(yChange!=0) {if(yChange>0)yChange++;else {yChange--;}}}xChange=tempX;yChange=tempY;while(x - xChange >= 0 && x - xChange <= 18 && y - yChange >= 0&& y - yChange <= 18&& color == allChess[x - xChange][y - yChange]) {count++;if(xChange!=0)xChange++;if(yChange!=0) {if(yChange>0)yChange++;else {yChange--;}}}return count;}}

测试类

package org.liky.game.test;import java.awt.Toolkit;import javax.swing.JFrame;
import javax.swing.JOptionPane;import org.liky.game.frame.FiveChessFrame;public class Test {public static void main(String[] args) {//MyChessFrame jf=new MyChessFrame();//JOptionPane.showMessageDialog(jf, "我的信息");//Integer result=JOptionPane.showConfirmDialog(jf, "xx");//System.out.print(result);//String n=JOptionPane.showInputDialog("22");//sSystem.out.print(n);FiveChessFrame ff=new FiveChessFrame();}}

运行结果

点击开始游戏


主要难点:
1.每一步棋的保存:使用二维数组来模仿19*19的棋盘,等于0时无棋,等于1时黑棋,等于2时白旗。
2.五子连成时的判断:每下落一个棋子时判断它的周围是否连成五子,从它的上下、左右、两斜方向共4个方向判断。

Java编写五子棋小游戏相关推荐

  1. java编写2048小游戏

    java版2048小游戏 java编写2048小游戏 java编写2048小游戏 // An highlighted block /*** */ package games;/*** @author ...

  2. Java写五子棋小游戏

    Java写五子棋小游戏 最近用Java写了个五子棋小游戏,遇到了许多细节问题,在此不得不总结一下,以便有同样需求朋友参考. 1.]面板发生变化,重绘棋盘与棋局问题: 必须调用父类的paint方法,因为 ...

  3. Java实现五子棋小游戏(附源码)

    今天给大家分享一个用java写的小游戏--<五子棋> (完整代码可在[资源下载]目录查看) . 推荐学习专栏: Java基础学习专栏:[Java]基础篇 Java进阶学习专栏:[Java] ...

  4. python语言编写五子棋小游戏

    摘要 这是我基于pygame库做个一个五子棋小游戏,通过上网学习pygame库内的具体函数,以及一些前辈的指导.在这里我们需要绘画棋盘,棋子.棋盘直接调用pygame库中的draw.lines()函数 ...

  5. Java实现五子棋小游戏(附思路讲解,全部代码,游戏截图)

    本文章是如何实现一个单机版双人五子棋小游戏,通过Swing技术进行可视操作. 个人简介:

  6. c语言编写五子棋小游戏ppt,C语言实现简单五子棋小游戏

    五子棋简单功能实现,供大家参考,具体内容如下 游戏功能演示 代码如下: #include #include #include #include // 棋盘 char board[15][15]; // ...

  7. ❤️Java❤️实现“五子棋”小游戏❤️

    五子棋游戏程序源代码以及实现页面 需要各种小游戏源程序(贪吃蛇,火柴人,五子棋,手机界面空调等等二十款小游戏),私信我!!! 1.要求 (1)对局双方各执一色棋子. (2)空棋盘开局. (3)交替下子 ...

  8. JAVA单机五子棋小游戏(双人对战版)

    此代码为简单双人对战五子棋程序,不涉及算法游戏策略. 具有轮流出手,判断输赢,判断输入是否合法功能. 运行效果如图: import java.io.*; public class Gobang {// ...

  9. C语言编写五子棋小游戏

    7月14日学习记录 运行结果 代码展示:main.c //include #include <stdio.h> #include<conio.h>//#define #defi ...

最新文章

  1. PHP版本的自动生成有规则的订单号(或编号)
  2. linux java ocr_Linux环境如何支持使用tess4j进行ORC
  3. delphi 中CreateOleObject函数产生的对象的释放问题
  4. 【CyberSecurityLearning 77】DC系列之DC-8渗透测试(Drupal)
  5. windows任务计划程序 坑
  6. matlab电压稳定极限,电力系统电压稳定性的Matlab建模分析
  7. Android开发:1-3、Android常用布局
  8. 关于Rxjava的几个问题
  9. 北京可以备案什么域名
  10. Uiautomator之入门
  11. Android键盘属性
  12. markdown编辑器sublime text3
  13. SPPnet论文总结
  14. python 点分十进制IP地址转16进制字符串
  15. Ubuntu20+TendaU12驱动离线安装
  16. python续行符是啥_python 续行符
  17. Linux服务器远程连接
  18. 计算机网络(考研)第二章 物理层
  19. 软件项目管理三国启示录01 群雄争霸之项目经理的自我修养
  20. 量化交易入门之vnpy简单策略编写

热门文章

  1. 雷军称37岁财务自由,小米造车是被逼出来的决定;Adobe约200亿美元收购Figma;首批iPhone 14已发货|极客头条...
  2. 以太坊生成合约地址以及存在的账户碰撞
  3. ami bios设置图解
  4. 光复印机常见故障代码及解决办法
  5. 计算机室内设计绘图论文,浅析计算机辅助室内设计.doc
  6. 终于有人把线性回归讲明白了!
  7. 深入理解7816协议(1)---- 关于F/D和etu
  8. 迅睿CMS 网站备份和数据库备份
  9. 基于ISO26262的功能安全 学习笔记1
  10. 软件测试面试月薪10k+的秘籍--仅限软件测试刚从业人员,大佬请绕过哦~