1. 前言

该项目为经典版本的五子棋游戏和自创的毁灭玩法所结合,总体而言是一个休闲的小游戏。其中的规则不难,主要是为了丰富大家的文娱生活,让大家在忙碌的学习课后可以轻松一小下。这就是本程序的编写初衷。众所周知,经典版本的五子棋不过就是判断5连和5连以上的胜负,而这里的毁灭版,可以“毁灭”对方的4连状态,从而达到己方的攻击 ,而使己方达到胜利。而对方亦可以运用这种方法获得胜利。

2. 需求分析

首先,我们需要了解该程序是怎么编写的,需要用到哪些工具,用到哪些知识和方法。以及是如何运用该方法。

1:了解五子棋的运行机制。

2:了解博弈的对战机制,如:怎么获得胜利,判断胜利的条件。

3:游戏主界面的构造,以及模型的建立。

4:各种功能如何实现,各个部分怎么构成一个整体。

5:事件的处理。

6:如何生成棋盘,以及如何生成棋子。

7:对计时工具的设计,如何运用到多线程来解决。

3. 概要设计

对我要实现的相应功能,用一个框架图可以来概述该程序各个部分的相依关系,以及各个功能是如何实现。如何将这些功能整合成为一个游戏

通过该流程图,我们可以看出,要完成一个五子棋游戏。必须有两大类,主界面类和相关的事件处理类,而主界面类包括菜单界面的布局、五子棋盘的生成、棋子的生成、和各种消息框的提示。对于事件处理类,我们要监听各种按钮,分别实现他们相应的功能。例如开始按钮,当点击开始按钮后应该进入执棋的阶段,在执棋的过程中又要在棋盘中生成新棋子,与主界面的棋盘相联系。还有点击游戏设置按钮,应该给于相应的用户提示,需要输入什么信息来设置游戏。在这里,游戏设置按钮主要是为了设置游戏的限行时间,由此增加游戏的难度。悔棋按钮不用多说,毁灭按钮是基于悔棋按钮的设计之上的一个按钮。可以毁掉对方的棋子。‘

然而我认为在编写代码中最关键的部分有三点,一是如何生成棋盘,二是如何生成棋子,三是如何对胜负进行判断。只要抓住这三个大点,这个游戏就算是成功了一大半,下面对该游戏的框架进行详细设计。

4. 详细设计

需要用到的重要知识:

1:mouselistener()

功能:监听鼠标相关状态.

mouseClicked(MouseEvente) 鼠标按键在组件上单击(按下并释放)时调用。

mouseEntered(MouseEvente) 鼠标进入到组件上时调用

mouseExited(MouseEvent e)   鼠标离开组件时调用。

mouseExited(MouseEvent e)鼠标离开组件时调用。

mouseReleased(MouseEvent e)  鼠标按钮在组件上释放时调用

mousePressed(MouseEvente)  鼠标按下时调用

e.getX();获取鼠标当前按下的位置的X坐标;

e.getY();获取鼠标当前按下的位置的Y坐标;

在设置布局时通常要用到这两个函数辅助找到相应的坐标。

这些是对鼠标的监控实现的功能,需要在窗口中添加addMouseListener()方法;

2:Graphics 类

是所有图形的抽象基类,允许程序在组件上图像上进行绘制

功能:覆写JFrame 的paint()方法来使用,通过repaint()来调用

主要方法:drawstring();使用此图形上下文的当前字体和颜色绘制由指定 string 给定的文本。

setFont();设置字体的属性。

setColor();设置颜色。

drawOval();画圆,用于画棋盘的棋子,drawoval是空心的圆形边框

fillOval();画图,用于画棋盘的棋子,fillOvail是实心的圆

drawRect();绘制指定矩形的边框。

fillRect();绘制指定实心矩形

drawImage();绘制指定图像中当前可用的图像。

3:frame类()

功能:实现主界面的布局

主要方法:主类继承自Jframe,在主类的构造函数中实现布局的设置。

setIconImage(Imageimage);设置窗体的图标,从文件filename中获得图标。

setTitle(Stringsting);设置标题为字符串string;

setDefaultCloseOperation();设置关闭窗体的操作

setResizable(Booleann);设置窗体是否为大小可以改变。

setLayout();设置窗体的布局

setBounds(intx,int y,int width,int height)设置控件的边界以及坐标

setEditable()设置文本框是否可输入。

4: JOptionPane

方法名

描述

showConfirmDialog

询问确认问题,回答 是/否/取消

sowInputDialog

要求用户输入数据

showMessageDialog

告知用户发生的消息

showOptionDiaog

综合以上三个方法

5:Thread类;

功能:实现多线程,计时器的主要实现方法。

主要方法:主类实现Runnable接口,重写Thread类的run方法。

Threadt1 = new Thread(this);

实现主类线程的创建

t1.start();启动线程,执行run方法;

t1.sleep(time);使线程休眠time 毫秒。

t1.stop();使线程停止运行.

需要实现的功能:

1:点击开始游戏时在界面上有黑子或白子先行的提示,然后玩家开始行棋。

2:点击游戏设置时提示相应输入限制时间的信息,让玩家设置限定时间。

3:点击悔棋时给玩家一次悔棋机会。

4:点击毁灭时对方玩家棋子变成己方颜色,并且变成方形。

5:帮助,给出相关信息提示帮助。

就三大关键给出解决—》

1:如何生成棋盘

首先在主类中定义一个二维数组,int cb[][] = new int[15][15];

我将它命名为cb,英文名全写是chessboard.它的长度为15行15列,在这里可以对棋盘进行相关的数值存储。然后,在paint()绘图方法中,定义一个图片文件,BufferedImage image =null并且初始化,然后运用IO调用本地的图片。在这里我是自制了一张图片用来作为该游戏的背景,直接在paint()中读取背景文件,g.drawImage(0,0,this)直接绘画在窗口上。

2:如何生成棋子

在1中我们已经定义好了一个二维数组,往二维数组中存储数据就是生成棋子的步骤。用1表示黑子,2表示白子,3表示白色方子,4表示黑色方子。当我需要在棋盘的某一点上落子时,获取该点的坐标,转化成相应的二维数组,cb[x][y]=1;

就是在该落点上下黑子,同理cb[x][y]=2就是白子。此时棋子以及生成完成。作为数据的状态保存在二维数组中,方便于胜负的判断。

3:如何判断输赢。

在2中我们已经生成好了棋子,并且将棋子的位置存贮在棋盘当中,只需要对二维数组进行判断就能得出胜负。此时打印出的二维数组应该是这样

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 2 0 0 0 0 0 0 0 0 0

0 0 0 0 2 0 0 0 1 0 0 0 0 0 0

0 2 0 0 0 0 0 0 1 0 0 0 0 0 0

0 0 0 0 0 0 2 0 1 0 0 0 0 0 0

0 0 0 0 0 0 0 1 1 0 0 0 0 0 0

0 0 0 0 2 0 0 0 1 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

判断输赢就变得容易,只需要判断二维数组中相关数据相邻5次的情况。运用isWin()函数判断横向纵向左上左下右上右下的数据情况,下面有相关方法的具体代码展示。.

4:如何给游戏设计计时

首先,我们需要给设置时间的按钮绑定监控。在按下按钮后要求用户输入限制的时间,进行相应的操作。当用户输入时间大于0时,启动启动线程,执行时间的递减。

简而言之,就是当黑方行棋时,计时器开始执行逐步递减,当白方行棋时,黑方的时间停止递减,轮到白方的时间递减。当时间用尽时,游戏就结束了。

源码程序都在这:点击打开链接

java课程设计五子棋小游戏(1)相关推荐

  1. 面向对象程序设计(Java)课程设计——五子棋小游戏

    目录 一.团队成员及任务 二.项目简介 三.功能设计图 四.运行结果截图 五.核心源码 六.课程设计感想与展望 一.团队成员及任务 队长:管俊杰  计科(智能)22-1 202203200037 负责 ...

  2. JAVA课程设计(小游戏贪吃蛇)完整源码附素材(二)

    目录 JAVA课程设计(小游戏贪吃蛇)完整源码附素材(一) JAVA课程设计(小游戏贪吃蛇)完整源码附素材(二) JAVA课程设计(小游戏贪吃蛇)完整源码附素材(三) 前言 1. 任务描述 1.1  ...

  3. java课程设计之小游戏贪吃蛇

    "贪吃蛇"小游戏的原理(效果图如下) 下代码为页面设置(gui) import java.awt.Graphics;import javax.swing.JFrame;public ...

  4. JAVA课程设计——华容道小游戏

    华容道游戏简介: 华容道,古老的中国游戏,以其变化多端.百玩不厌的特点与魔方.独立钻石棋一起被国外智力专家并称为"智力游戏界的三个不可思议".它与七巧板.九连环等中国传统益智玩具还 ...

  5. java课程设计——扫雷小游戏

    1.项目简介 采用java swing设计扫雷游戏软件,设计目标如下: 扫雷游戏分为初级.中级和高级三个级别,初级模式9*9个方块中有10个雷.中级模式16*16个方块中有40个雷.高级模式16*30 ...

  6. java猜数字游戏总结,java课程设计——猜数字游戏

    java课程设计--猜数字游戏 目目 录录 前言. 1 正文. 1 1 1.设计任务与要求.设计任务与要求 1 1.1 1.1 设计任务与要求设计任务与要求 1 1.2 1.2 选题目的与意义选题目的 ...

  7. 计算器小程序java课程设计,java课程设计----计算器小程序报告.doc

    java课程设计----计算器小程序报告.doc #####学院JAVA语言课程设计报告小程序计算器系统管理班级:#######姓名:#####指导老师:###时间:2012年6月25日至6月29日2 ...

  8. c语言射击类小游戏任务书,(c语言课程设计报告小游戏“石头剪子布”.doc

    (c语言课程设计报告小游戏"石头剪子布" <C语言课程设计>报告 题目:石头剪子布 班级: 学号: 姓名: 指导教师: 成绩: 目 录: 一.选题背景- 3 - 二.设 ...

  9. Java编写的五子棋小游戏

    看书的时候看到一个不完整的Java编写的一个五子棋小游戏,为了恢复一下编程能力刚刚把这个小程序完成了. 实现的功能很简单,两人对下五子棋,程序自动回判断输赢.在ubuntu下搞得,没有装什么高端的输入 ...

最新文章

  1. Java数据类型缓存池
  2. mongo里的type_MongoDB $type 操作符
  3. CRM webClient UI搜索参数里max hit是怎么被后台服务器处理的
  4. html常用标签(form标签)
  5. NOI.AC#2144-子串【SAM,倍增】
  6. 引用数据类型的方法调用
  7. CDN价格战外P2P重获关注,谁才是幕后推手
  8. 使用Jenkins打包和部署Maven工程步骤详解
  9. 教你如何修改运行中的docker容器的端口映射
  10. python更新包列表出错_python – 完整更新pip包时出错
  11. 常见的两种解空间 全排列与幂集
  12. Java+SSM(Spring+SpringMVC+Mybatis)个性化购物商城推荐系统 电子商务推荐系统 基于用户、项目、聚类、混合的协同过滤推荐算法WebShopRSMEx 源代码下载
  13. 太厉害了!28岁任北大博导的她,再获科学大奖!
  14. 博文共赏:也谈大公司病3——治大国不是烹小鲜
  15. java接口如何有效防止恶意请求
  16. 使用 imagecopymerge() 函数创建半透明水印
  17. java replica set_K8s 的ReplicaController ReplicaSet DaemonSet和Job
  18. element ui el-table动态生成表头(v-for/v-if)导致的高度塌陷(少一截)的解决办法
  19. LLC串连谐振半桥变换器在LCD TV电源中的应用
  20. 生产力提升·快捷键肌肉训练

热门文章

  1. sqlserver IDENTITY属性使用小结
  2. swagger内部类_震惊!25分类227页1000+题50w+字的绝版“java高分面试指南”现世!...
  3. 7.5 空间直线及其方程
  4. 观察者模式学习笔记(详细)
  5. mongodb gridfs java_MongoDB基于GridFS管理文件
  6. 什么是设计模式?常用的设计模式有哪些?
  7. Android/安卓 TextView滚动字幕,文字循环演示
  8. js 如何调用摄像头拍照
  9. python中的sorted、iteritems和operator.itemgetter
  10. kmeans 的k值确定方法