初学JavaGUI编程,就写了一个小游戏–五子棋。
目前只实现了单机版,任何事情都是从简制作的,有问题请大牛们不吝指教啊。

此处的棋盘和棋子都未用图片,全部都是使用Java中的Graphics画出来的。

源码已提交至GitHub,点击此处GitHub源码

以下列出其中的五子棋类:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.Vector;
import javax.swing.JFrame;
import javax.swing.JOptionPane;public class FiveInARow extends JFrame implements MouseListener {Vector v = new Vector();    //所有的每步走棋信息Vector white = new Vector(); //白方走棋信息Vector black = new Vector(); //黑方走棋信息boolean b; //用来判断白旗还是黑棋int whiteCount, blackCount; //计算悔棋步数int w = 25; //间距大小int px = 100, py = 100; //棋盘的大小int pxw = px + w, pyw = py + w;int width = w * 16, height = w * 16;int vline = width + px; //垂直线的长度int hline = height + py; //水平线的长度/*** 构造方法*/public FiveInARow() {super("单机版五子棋");this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭按钮Container con = this.getContentPane();con.setLayout(new BorderLayout());this.addMouseListener(this);//添加监听this.setSize(600, 600);//设置窗体大小this.setBackground(Color.orange);this.setVisible(true);}/*** 画棋盘和棋子* @param e*/public void paint(Graphics g) {g.clearRect(0, 0, this.getWidth(), this.getHeight());//清除画板g.setColor(Color.BLACK);//绘制网格颜色g.drawRect(px, py, width, height);//网格大小g.drawString("单机版五子棋小游戏,右击可以悔棋,欢迎使用", 180, 70);for (int i=0; i<15; i++) {g.drawLine(pxw+i*w, py, pxw+i*w, hline);//每条横线和竖线g.drawLine(px, pyw+i*w, vline, pyw+i*w);}for (int x=0; x<v.size(); x++) {String str = (String)v.get(x);String tmp[] = str.split("-");int a = Integer.parseInt(tmp[0]);int b = Integer.parseInt(tmp[1]);a = a * w + px;b = b * w + py;if (x%2 == 0) {g.setColor(Color.WHITE);} else {g.setColor(Color.BLACK);}g.fillArc(a-w/2, b-w/2, w, w, 0, 360);}}@Overridepublic void mouseClicked(MouseEvent e) {if (e.getButton() == e.BUTTON1) {int x = e.getX();int y = e.getY();x = (x - x % w) + (x % w > w / 2 ? w : 0);y = (y - y % w) + (y % w > w / 2 ? w : 0);x = (x - px) / w;y = (y - py) / w;if (x >= 0 && y >= 0 && x <= 16 && y <= 16) {if (v.contains(x+"-"+y)) {System.out.println("已经有棋了!");} else {v.add(x+"-"+y);this.repaint();if (v.size() % 2 == 0) {black.add(x+"-"+y);this.victory(x, y, black);
//                      System.out.println("黑棋");} else {white.add(x+"-"+y);this.victory(x, y, white);
//                      System.out.println("白棋");}
//                  System.out.println(e.getX()+"-"+e.getY());}} else {
//              System.out.println(e.getX()+"-"+e.getY()+"|"+x+"-"+y+"\t超出边界了");}}if (e.getButton() == e.BUTTON3) {   //右击悔棋的方法
//          System.out.println("鼠标右击--悔棋");if (v.isEmpty()) {JOptionPane.showMessageDialog(this, "没有棋可悔");} else {if (v.size() % 2 == 0) {    //判断是白棋悔棋,还是黑棋悔棋blackCount++;if (blackCount > 3) {JOptionPane.showMessageDialog(this, "黑棋已经悔了3步");} else {v.remove(v.lastElement());this.repaint();}} else {whiteCount++;if (whiteCount > 3) {JOptionPane.showMessageDialog(this, "白棋已经悔了3步");} else {v.remove(v.lastElement());this.repaint();}}}}}/*** 判断胜利的方法* @param x* @param y* @param contain*/private void victory(int x, int y, Vector contain) {int cv = 0; //垂直方向棋子数量int ch = 0; //水平方向棋子数量int ci1 = 0; //斜面方向棋子数量1int ci2 = 0; //斜面方向棋子数量2//计算水平方向棋子数量for (int i=1; i<5; i++) {if (contain.contains((x+i)+"-"+y)) {ch++;} else {break;}}for (int i=1; i<5; i++) {if (contain.contains((x-i)+"-"+y)) {ch++;} else {break;}}//计算垂直方向棋子数量for (int i=1; i<5; i++) {if (contain.contains(x+"-"+(y+i))) {cv++;} else {break;}}for (int i=1; i<5; i++) {if (contain.contains(x+"-"+(y-i))) {cv++;} else {break;}}//计算45°斜面方向棋子数量for (int i=1; i<5; i++) {if (contain.contains((x+i)+"-"+(y+i))) {ci1++;} else {break;}}for (int i=1; i<5; i++) {if (contain.contains((x-i)+"-"+(y-i))) {ci1++;} else {break;}}//计算135°斜面方向棋子数量for (int i=1; i<5; i++) {if (contain.contains((x+i)+"-"+(y-i))) {ci2++;} else {break;}}for (int i=1; i<5; i++) {if (contain.contains((x-i)+"-"+(y+i))) {ci2++;} else {break;}}if (ch>=4 || cv>=4 ||ci1>=4 ||ci2>=4) {System.out.println(v.size()+"步棋");if (v.size() % 2 == 0) {//判断是黑棋赢,还是白棋赢JOptionPane.showMessageDialog(null, "黑棋赢了");} else {JOptionPane.showMessageDialog(null, "白棋赢了");}this.v.clear();this.black.clear();this.white.clear();this.repaint();}}@Overridepublic void mouseEntered(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mouseExited(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mousePressed(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mouseReleased(MouseEvent e) {// TODO Auto-generated method stub}}

PS:打算再写个网络版的五子棋,可惜对Java中网络不太清楚,得学习一段时间后再继续完成了,检验下个人学习成果。

Java源码分享——单机版五子棋相关推荐

  1. 分享77个Java源码,总有一款适合您

    Java源码 分享77个Java源码,总有一款适合您 下面是文件的名字,我放了一些图片,文章里不是所有的图主要是放不下...,大家下载后可以看到. 源码下载链接:https://pan.baidu.c ...

  2. 分享52个Java源码,总有一款适合您

    Java源码 分享52个Java源码,总有一款适合您 下面是文件的名字,我放了一些图片,文章里不是所有的图主要是放不下...,大家下载后可以看到. 源码下载链接:https://pan.baidu.c ...

  3. 分享111个Java源码,总有一款适合您

    Java源码 分享111个Java源码,总有一款适合您 源码下载链接:https://pan.baidu.com/s/1fycjYHA7y6r-IH8H7v5XKA?pwd=ag8l  提取码:ag8 ...

  4. 微信跳一跳java实现自动跳_微信跳一跳自动连跳挂java源码

    火凤下载吧小编为大家带来了微信跳一跳自动连跳挂java源码分享哦,可以快速帮您在游戏中获得高分,而且还不会被系统检查到,是大家在玩微信小游戏跳一跳时候的最佳助手哦,有想要体验的亲们就来下载吧! 微信跳 ...

  5. 中国大学MOOC北京大学唐大仕老师《Java程序设计》源码分享

    中国大学MOOC北京大学唐大仕老师<Java程序设计>源码分享 简介 Github地址 LearnJava中需要导入的jar 导入jar的方法 简介 这是我在学习中国大学MOOC北京大学唐 ...

  6. Java外卖点餐送餐平台源码带手机端带文档(源码分享)

    Java仿饿了么外卖点餐送餐平台源码带手机端带文档(源码分享) 一个简单的外卖系统,包括手机端,后台管理,api基于spring boot和vue的前后端分离的外卖系统.包含手机端,后台管理功能. 核 ...

  7. Java在线网校学习平台源码分享

    项目描述: Java在线网校学习平台源码分享 运行环境: jdk8+tomcat8+mysql5.7+eclipse(IntelliJ IDEA)+maven3.X 项目技术(必填): spring+ ...

  8. 【Web入门项目源码分享】Java+Jsp

    Web入门项目源码分享--记账本 这篇文章分享一个Web项目--记账本,编码语言:Java+Jsp . 资源链接:https://download.csdn.net/download/zsdoudou ...

  9. 插件一:JAVA微信砍价活动源码分享[商品帮砍到0元,免费领取奖品]

    插件一:微信砍价活动源码分享 [商品帮砍到0元,免费领取奖品] 活动描述: 砍价活动即公众号向粉丝推广的0价赠商品(或优惠价购商品)活动,用户通过分享好友帮其砍价,可将价格从原价一路砍到底价,并抢得名 ...

最新文章

  1. 人工智能数理基础 · 前沿系列报告议程 第 6 期
  2. cgi web 调用多次启动_CGI、FastCGI和PHPFPM有什么关系呢?
  3. 试用 smartdraw 2010 方便快捷的图表工具
  4. Yii2使用Cookie的注意事项
  5. rust的权限柜怎么做_潍坊装修知识~二胎家庭不做上下铺,把两张床靠墙放,中间做收纳柜,你感觉怎么样?...
  6. 前端开发必看 | Vue在前端市场这么火,它到底是什么?
  7. “人,年轻时一定要去大公司、大城市奋斗”你怎么看?
  8. 一级计算机技术,《一级考试大参考》自动化技术、计算机技术.pdf
  9. seo 伪原创_seo文章优化(怎么样做好伪原创文章)
  10. 网络时代课堂教学模式整合的探索
  11. JAVA博客和书籍推荐
  12. SpringBoot yml文件命名规则
  13. 解决IE兼容H5的问题
  14. ADAS高级驾驶辅助系统功能介绍
  15. Kubernetes网络自学系列 | 千呼万唤始出来:veth pair
  16. win10+黑苹果 单硬盘的双系统引导配置
  17. 蚌埠学院教务系统自动导入课程表到小米/Redmi手机小爱同学课程表使用说明
  18. OneZero第三周第三次站立会议(2016.4.6)
  19. python绘制图形沙漏_sandglass(沙漏)——一个让人解脱的python时间处理库
  20. sideeffects没配置css也还在,webpack4踩坑配置之sideEffects, 打包文件中没有css文件

热门文章

  1. 苹果13适配充电宝推荐,苹果官方推荐的充电宝
  2. 第九周 oj 二 ASCII排序
  3. Python学子之如何退出python 命令行
  4. 鸟哥的Linux私房菜(服务器)- 第二十二章、邮件服务器: Postfix
  5. 解密日内回转交易的优点和缺点
  6. nested exception is org.apache.ibatis.binding.BindingException: Parameter ‘xxx‘ not found错误的详细解决方法
  7. dynamic receptive filed adaptor
  8. Linux下uniq命令的详解
  9. 求职清单!AI商业落地企业Top100;『数据科学:理论、模型、算法与分析』电子书;超快多线程DataFrame 8K★;前沿论文 | ShowMeAI资讯日报
  10. 联想笔记本X1开机报错0271:Check Date and Time setting,系统无限重启