云文档网 - 专业文章范例文档资料分享平台

围棋对弈界面课程设计

来源:网络收集 时间:2024-05-08 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xuecool-com或QQ:370150219 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

课程设计(论文)任务书

理 学 院 光信息 专 业 2 班

一、课程设计(论文)题目 围棋对弈界面设计 二、课程设计(论文)工作自 2016年 6 月 27 日起至 2017 年 7 月1 日止。

三、课程设计(论文) 地点: 8-605 四、课程设计(论文)内容要求: 1.本课程设计的目的

(1)使学生掌握软件开发的基本工作流程; (2)巩固JAVA程序设计课程所学的内容; (3)培养学生的计算机思维能力以及合作的精神; (4)培养学生分析、解决问题的能力; (5)提高学生的科技论文写作能力。 2.课程设计的任务及要求 1)基本要求:

[1] 掌握Frame,Panel等容器的使用 [2] 掌握AWT图形绘制的常用方法。

[3] 掌握java的事件监听机制,理解相关角色与相互关系。 [4] 熟悉按钮和鼠标事件的处理。

[5] 完成类围棋对弈界面设计。界面参考如图1所示。 [6] 功能至少包含:

a) 能用颜色选择对话框改变棋盘背景颜色; b) 实现黑白棋子轮流落子; c) 显示游标即游标轨迹擦除; d) 显示下棋所用时间。

学生需分析课程设计任务,进行系统需求分析;并对系统进行总体设计, 分解系统功能模块;实现各功能模块代码,进而组装各模块,并测试、完善系统。

1

图 1 围棋对弈界面

2)创新要求:

实现更复杂的界面控制,提供更多的围棋对弈功能等,并提高系统的容错能 力,完善系统功能,进行代码优化。 3)课程设计论文编写要求

课程设计报告的撰写要求表述简明,图表准确。 报告按如下内容和顺序用A4纸进行打印并装订成册。 (1)封面

采用统一的课程设计封面,并按要求填写好封面要求的个人信息。 (2)设计任务书 (3)评阅书 (4)目录 (5)正文

(6)主要参考文献 4)答辩与评分标准:

(1)达到课程设计的目的与要求,程序的可读性较好,并调试正确,50分; (2)能正确回答设计中老师所提问题,可增加10分; (3)课程设计报告书写规范整齐,可增加20分;

2

(4)心得体会认真总结,可增加10分; (5)程序有创新性,可增加10分; 5)参考文献:

(1)丁振凡 .《Java语言程序设计实用教程(第二版)》. 北京: 清华大学出版社,2014.

(2)印旻 .《Java语言与面向对象程序设计》. 北京: 清华大学出版社,2000. (3)周晓聪《.面向对象程序设计与Java语言》. 北京:机械工业出版社,2004. (4)http://cai.ecjtu.jx.cn 6)课程设计进度安排

内容 天数 地点

系统总体设计 1 实验室,图书馆 软件设计及调试 2 实验室、图书馆 答辩及撰写报告 2 实验室、图书馆

学生签名:

2016年6月27日

课程设计(论文)评审意见

(1)课程设计过程(20分):优( )、良( )、中( )、一般( )、差( ); (2)是否完成调试,系统运行效果(30分):优( )、良( )、中( )、

一般( )、差( );

(3)回答问题及创新(20分):优( )、良( )、中( )、一般( )、

差( );

(4)课程设计报告(30分):优( )、良( )、中( )、一般( )、差( );

评阅人: 职称:

2016年 7月3 日

3

中文摘要

本次课程设计是对前面学过的所有面向对象的编程思想以及编程方法的一个总结、回顾和实践,因此,开始设计前需要先回顾以前所学的内容,明确本次作业设计所要用到的技术点并到网上搜索以及查阅相关的书籍来搜集资料。通过编写一个基于JAVA的应用系统综合实例,来掌握Java语言编程技巧。此次课程设计旨在通过让学生面对任务自己编程以解决问题,并发现问题从而实现让学生学到的java的知识从理论到实践的转变,是鼓励学生学以致用和创新的第一步。

1.1Java语言发展简史

1995年:sun公司发布Java语言。

1996年年初:发布了JDK1.0。这个版本包括两部分:运行环境(即JRE)和开发环境(即JDK)。运行环境包括核心API、集成API、用户界面API、发布技术、Java虚拟机(JVM)5个部分;开发环境包括编译Java程序的编译器(即javac命令)。

1997年2月18日发布JDK1.1。JDK1.1增加了JIT(即时编译)编译器。JIT和传统的编译器不同,传统的编译器是编译一条,运行完后将其扔掉;而JIT会将经常用到的命令保存在内存中当下次调用时就不需要重新编译了,通过这种方式让JDK在效率上有了较大提升。

1998年12月:sun发布了Java历史上最重要的JDK版本:JDK1.2,伴随JDK1.2一同发布的还有JSP/Servlet、EJB等规范,并将Java分成了J2EE、J2SE和J2ME三个版本。JDK1.2还把它的API分成了三大类:核心API、可选API、特殊API。

2002年2月:sun发布了JDK历史上最为成熟的版本:JDK1.4。

2004年10月,sun发布了万众期待的JDK1.5,同时,sun将JDK1.5改名为Java SE5.0、J2EE、J2ME也相应的改名为Java EE和Java ME。JDK1.5增加了诸如泛型、增强的for语句、可变数量的形参、注释(Annotations)、自动拆箱和装箱等功能;同时,也发布了新的企业级平台规范,如通过注释等新特性来简化EJB的复杂性,并推出了EJB3.0规范。还推出了自己的MVC框架规范:JSF,JSF类似于ASP.NET的服务器端控件,通过它可以快速的构建复杂的JSP界面。

2006年12月,sun公司发布了JDK1.6。

2009年4月20日,Oracle宣布将以每股9.5美元的价格收购sun,该交易的总价值约为74亿美元。

2011年7月28日,Oracle发布了Java SE7,引入了二进制整数、支持字符串的switch语句、菱形语法、多异常捕捉、自动关闭资源的try语句等新特性。

4

2014年3月18日,Oracle发布了Java SE8,这次版本升级为Java带来了全新的Lambda表达式等大量新特性。

1.2Java程序运行机制 1.2.1高级语言的运行机制

Java语言是一种特殊的高级语言,它既具有解释型语言的特征,也具有编译型语言的特征,因为Java程序要经过先编译,后解释两个步骤。

计算机高级语言按程序的执行方式可以分为编译型和解释型两种。现有的C、C++、Objective-C、Pascal等高级语言都属于编译型语言。对于解释型语言,可以认为:每次执行解释型语言的程序都需要进行一次编译,因此解释型语言的程序运行效率通常较低,而且不能脱离解释器独立运行。但解释型语言有一个优势:跨平台比较容易,只需提供特定平台的解释器即可,每个特定平台上的解释器负责将源程序解释成特定平台的机器指令即可。解释型语言可以方便的实现源程序级的移植,但这是以牺牲程序执行效率为代价的。现有的Ruby、Python等语言都属于解释型语言。

1.2.2Java程序的运行机制和JVM

Java语言比较特殊,有Java语言编写的程序需要经过编译步骤,但这个编译步骤并不会生成特定平台的机器码,而是生成一种与平台无关的字节码(也就是*.class文件)。当然,这种字节码不是可执行性的,必须使用Java解释器来解释执行。因此可以认为:Java语言既是编译型语言,也是解释型语言。或者说,Java语言既不是纯粹的编译型语言,也不是纯粹的解释型语言。Java程序的执行过程必须经过先编译、后解释两个步骤,如图1.1所示。

Java语言里负责解释执行字节码文件的是Java虚拟机,即JVM(Java Virtual

5

Machine)。JVM是可运行Java字节码文件的虚拟计算机。

当使用Java编译器编译Java程序时,生成的是与平台无关的字节码,这些字节码不面向任何具体平台,只面向JVM。不同平台上的JVM都是不同的,但它们都提供了相同的接口。

JVM是一个抽象的计算机,和实际的计算机一样,它具有指令集并使用不同的存储区域。它负责执行指令,还要管理数据、内存和寄存器。

Oracle公司制定的Java虚拟机规范在技术上规定了JVM的统一标准,具体定义了JVM的如下细节:指令集、寄存器、类文件的格式、栈、垃圾回收堆、存储区。

1.3开发Java的准备 1.3.1下载和安装JDK

JDK的全称是Java SE Development Kit,即Java标准开发包,它提供了编译、运行Java程序所需的各种工具和资源,包括Java编译器、Java运行时环境,以及常用的Java类库等。

Java运行时环境,它的全称是Java Runtime Environment,因此也被称为JRE,它是运行Java程序的必须条件。

注意:简单地说,JRE包含JVM。JVM是运行Java程序的核心虚拟机,而运行Java程序不仅需要核心虚拟机,还需要其他的类加载器、字节码校验器以及大量的基础类库。JRE除了包含JVM之外,还包含运行Java程序的其它环境支持。

一般而言,如果只运行Java程序,可以只安装JRE(仅安装JVM是不够的),无需安装JDK。开发Java程序,则选择安装JDK,JDK包含了JRE。后来开发Java EE应用时,安装Java EE SDK就包含了JDK。

安装JDK步骤:①登录Oracle官方网站,根据所用电脑系统选择合适的JDK版本。②开始安装,注意不装public JRE,把它去掉。Development Tools是JDK的核心,包括编译Java程序必需的命令工具。实际上,它已经包含了JRE。安装Source Code这个选项将会安装Java所有核心类库的源代码。③选择JDK的安装路径,系统默认安装在C:\\Program Files\\Java路径下,但不推荐安装在有空格的路径下,会导致一些未知问题。示例路径:D:\\Java\\jdk1.8.0_60\\。

基本目录解释:①bin:该路径下存放了JDK的各种工具命令,常用的javac、java等命令就放在该目录下。②db:该路径是安装Java DB的路径。③include:一些平台特定的头文件。④jre:该路径下安装的就是运行Java程序所必需的JRE环境。⑤lib:该路径下存放的是JDK工具命令的实际执行程序。⑥javafx-src.zip:该压缩文件里存放的就是Java FX所有核心类库的源代码。⑦src.zip:该压缩文件里存放的是Java所有核心类库的源代码。⑧README和LICENSE等说明性

6

文档。

1.3.2设置PATH环境变量

Windows不区分大小写,而Linux区分大小写,因此只需要设置PATH环境变量即可(就通用了)。

在win10系统中右击计算机,选择属性,进入高级系统设置,选择环境变量,设置如下:①在用户变量中(或者系统变量(对所有用户有效))添加一个新变量:变量名:JAVA_HOME,变量值为:jdk安装目录,如D:\\Java\\jdk1.8.0_60②设置PATH变量:在PATH变量的变量值前面添加%JAVA_HOME%\\bin;即可(注意不要丢失分号)。③该步骤在可以省略.;%JAVA_HOME%\\lib\\dt.jar;%JAVA_HOME%\\lib\\tools.jar; (classpath环境变量,1.5后可以不配)④在Windows命令行界面键入javac或java命令,测试环境变量是否配置成功。

1.4Java程序的基本规则 1.4.1 Java程序的组织形式

Java程序必须以类(class)的形式存在,类(class)是Java程序的最小程序单位。Java程序不允许可执行性语句、方法等成分独立存在,所有的程序部分都必须放在类定义里。

Java解释器规定:如需某个类能被解释器直接解释执行,则这个类里必须包含main方法,而且main方法必须使用public static void来修饰,且main方法的形参必须是字符串数组类型(String[] args)。Java虚拟机就是从这个main方法开始解释执行。因此,main方法是程序的入口。对于一个大型的Java程序而言,往往只需要一个入口,也就是只有一个类包含main方法,而其它类都是用于被main方法直接或间接调用的。

1.4.2 Java源文件的命名规则

(1)Java程序源文件的后缀必须是.java,不能是其它文件后缀名。

(2)在通常情况下,Java程序源文件的主文件名可以是任意的。但有一种情况例外,如果Java程序源代码里定义了一个public类,则该源文件的主文件名必须与该public类的类名相同。(因此一个Java源文件里可以包含多个类定义,但最多只能定义一个public类)。

建议:一个Java源文件只定义一个类,不同的类使用不同的源文件定义,让Java源文件的主文件名与该源文件中定义的public类同名。

1.5垃圾回收机制

7

Java程序的内存分配和回收都是由JRE在后台自动进行的。JRE会负责回收那些不再使用的内存,这种机制被称为垃圾回收(Garbage Collection,GC)。通常JRE会提供一个后台线程来进行检测和控制,一般都是在CPU空闲或内存不足时自动进行垃圾回收,而程序员无法精确控制垃圾回收的时间和顺序等。

Java的堆内存是一个运行时数据区,用以保存类的实例(对象),Java虚拟机的堆内存中存储着正在运行的应用程序所建立的对象,这些对象不需要程序通过代码来显式地释放。

除了释放没用的对象外,垃圾回收也可以清除内存记录碎片。 垃圾回收使得Java虚拟机具有两个显著的优点。

(1)垃圾回收机制可以很好的提高编程效率。在没有垃圾回收机制时,可能需要花很长的时间来解决一个难懂的存储器问题。在用Java语言编程时,依靠垃圾回收机制可大大缩短时间。

(2)垃圾回收机制保证程序的完整性,垃圾回收是Java语言安全性策略的一个重要部分。

一个潜在缺点:它的开销影响程序性能。 垃圾回收具有如下几个特点:

(1)垃圾回收机制的工作目标是回收无用对象的内存空间,这些内存空间都是JVM堆内存里的内存空间,垃圾回收只能回收内存资源,对其它物理资源,如数据库连接、磁盘I/O等资源则无能为力。

(2)为了更快的让垃圾回收机制回收那些不再使用的对象,可以将对象的引用变量设置为null,通过这种方式暗示垃圾回收机制可以回收该对象。

(3)垃圾回收发生的不可预知性。程序员可以通过调用Runtime对象的gc()或System.gc()等方法来建议系统进行垃圾回收,但这种方法仅仅只是建议,依然不能精确控制垃圾回收机制的执行。

(4)垃圾回收的精确性主要包括两个方面:一是垃圾回收机制能够精确的标记活着的对象;二是垃圾回收器能够精确地定位对象之间的引用关系。

(5)现在的JVM有多种不同的垃圾回收实现,每种回收机制因其算法差异可能表现各异,有的当垃圾回收开始时就停止应用程序的运行,有的当垃圾回收机制运行时允许应用程序的线程运行,还有的在同一时间允许垃圾回收多线程运行。

当编写Java程序时,一个基本原则是:对于不再需要的对象,不要引用它们。如果保持对这些对象的引用,垃圾回收机制暂时不会回收该对象,则会导致系统可用内存越来越少;当系统可用内存越来越少时,垃圾回收执行的频率就越来越高,从而导致系统的性能下降。

8

运用到的相关JAVA知识

①图形用户界面编程基础:其中工作主要有两个:一是应用外观设计,

既创建组成图形界面的各部件,指定它们的属性和位置关系;二是与用户的交互处理,包括定义图形用户界面的事件以及事件的响应处理。

常用GUI部件的的类层次

用到的布局

9

事件源与事件监听者的关系

②JAVA的绘图模式:

(1)覆盖模式:将绘制的图形像素覆盖屏幕上该位置已有的像素

(2)异或模式:将绘制的图形像素与屏幕上该位置的像素信息进行异或运算,以运算的结果作为结果。异或模式的Graphics类的setXORMode()方法为: setXORMode(Color c):

③绘制棋盘棋子用到的知识:

(1)二维数组的创建 如 int chess[][]=new int[19][19];

(2)流程控制语句for语句与 else if语句的使用如:

for(int i=0;i

for(int j=0;j

g.setColor(Color.black);

g.fillOval(sx+i*w-w/2+1,sx+j*w-w/2+1,w-2,w-2); }else if(chess[i][j]==2){

g.setColor(Color.white);

g.fillOval(sx+i*w-w/2+1,sx+j*w-w/2+1,w-2,w-2);

④日期与时间:

Calendar类:它为一个抽象方类通过使用静态方法获得Calendar rightNow=Calendar.

getInstance();

10

目录

1 围棋对弈界面任务书 .................... 错误!未定义书签。 2中文摘要 ............................................... 8 2.1 JAVA语言概论...................................... 8

2.2相关JAVA知识,工作原理分析 ....................... 10 3正文 .................................................. 12 3.1题目内容要求与设计思路 ............................ 12 3.2类设计与代码实现 .................................. 13 3.3围棋对弈界面视图 .................. 错误!未定义书签。 3.4运行调试与分析 .................... 错误!未定义书签。 4参考文献 .............................................. 19 5附录 .................................................. 20

11

正文

(1)题目内容及要求

设计一个围棋对弈程序界面: 1.掌握Frame,Panel等容器的使用 2.掌握AWT图形绘制的常用方法。

3.掌握java的事件监听机制,理解相关角色与相互关系。 4.熟悉按钮和鼠标事件的处理。

5.完成类围棋对弈界面设计。界面参考如图2所示。 6.功能至少包含:

a.能用颜色选择对话框改变棋盘背景颜色; b.实现黑白棋子轮流落子; c.显示游标即游标轨迹擦除; d.显示下棋所用时间; (2)设计思路

围棋对弈界面设计分析:

在窗体中要同时安排棋盘和下棋过程中的若干操作按钮,在棋盘中用一个Canvas部件绘制,下棋过程控制按钮则部署在一个面板上。棋盘上的棋子信息通过一个二维数组记录,数组元素为1表示黑棋,2表示白旗。0表示没有棋子。为了方下棋定位操作,在棋盘上绘制一个红色小方框代表位置的小游标,鼠标移动时小游标也跟随移动。小游标移动时要擦除先前的绘制,所以,小游标采用异或方式绘制,擦除只要按相同颜色重绘一次即可。我们可以用鼠标移动事件处理小游标的移动处理,利用鼠标单击事件处理新下棋子的绘制处理。另外,棋盘以及棋子信息利用paint()方法实现绘制。程序中引入了cx和cy两个变量代表游标位置。引入变量player表示当前轮到黑白子谁下。为了实现棋盘位置和大小调整,引入实例变量sx和sy记录棋盘左上角位置信息,并引入了实例变量w代表棋盘格子宽度。

步骤实现:

①先设计出整个程序的总体面貌此处用Panel来构造以及游戏各个部件的按钮的安排

②用Graphics 的方法来绘制棋盘以及棋子,用异或的方法实现小游标的绘制 ③构造chessBoard的类与方法来实现存放棋子的状态、棋盘格子的宽度以及棋子状态以及下棋方式的定义

④各个分部设计好后再把每个部件协调好达到程序的简洁美观 (3)具体实现 ①类设计

12

class chessGame 定义了整个围棋游戏的布局它继承的是Frame class chessBoard 定义了棋盘的分部细节 ②功能实现

要实现整个程序需要先引入四个包分别为import java.awt. import java.awt.event. import javax.swing. import java.util.

Color c=new Color((int)(Math.random()*255),(int)(Math.random()*255),

(int)(Math.random()*255)); 此代码定义了一个随机颜色c 用来在随后的改变围棋面板用

hessBoard b=new chessBoard(); setBackground(c);

setLayout(new BorderLayout());

add(\此部分代码实现了把围棋面板定义在了窗口中央以及设置其背景色

Panel p=new Panel();

Label a1=new Label(\对战时间\

Button color=new Button(\更改棋盘颜色\ Button fail=new Button(\认输\ Button back=new Button(\悔棋\ Button quit=new Button(\退出游戏\ TextArea t1= new TextArea(mydate,2,1); p.setLayout(new GridLayout(8,1,10,10));

p.add(new Label()); //为界面美观插入一个空标签 p.add(color); p.add(back); p.add(a1); p.add(t1); p.add(fail);

p.add(quit); add(\

fail.addActionListener(this); color.addActionListener(this); quit.addActionListener(this);

addWindowListener(new closeWin()); setSize(500,450); setVisible(true);

此长代码块设置了棋盘各个部件,包括各个按钮、标签以及面板的布局

13

public void actionPerformed(ActionEvent e){

Color c=new Color((int)(Math.random()*255),(int)(Math.random()*255), (int)(Math.random()*255)); setBackground(c);

if(e.getActionCommand().equals(\退出游戏\ dispose();}

if(e.getActionCommand().equals(\认输\你输了\

此处通过actionPerformed实现了对设置按钮相应功能的实现如“认输”,“退出游戏”等等

class chessBoard extends Canvas{ int chess[][]=new int[19][19];

int sx=20,sy=20; //存放棋盘子的状态

int w=20; //棋盘左上角的位置 int cx=50; //棋盘每个格子的宽度

int cy=50; //下棋位置游标的初值,对应鼠标移动位置 int player=1; // 1表示轮下黑子,0表示轮下白子

public chessBoard(){

this.addMouseMotionListener(new MouseMotionAdapter(){ public void mouseMoved(MouseEvent e){ Graphics g= getGraphics();

g.setXORMode(chessBoard.this.getBackground()); g.setColor(Color.red); g.fillRect(cx-w/4,cy-w/4,w/2,w/2); cx=sx+(int)(e.getX()/w)*w; cy=sy+(int)(e.getY()/w)*w; g.fillRect(cx-w/4,cy-w/4,w/2,w/2);

该处代码块处理鼠标移动事件,解决鼠标位置的跟踪问题

this.addMouseListener(new MouseAdapter(){

public void mouseClicked(MouseEvent e){ //鼠标单击表示下子 Graphics g=getGraphics(); if(chess[(cx-sx)/w][(cy-sy)/w]==0){ //判断是否已有棋子 if (player==1){

g.setColor(Color.black); //黑棋 chess[(cx-sx)/w][(cy-sy)/w]=1; }else{

g.setColor(Color.white); //白棋

14

chess[(cx-sx)/w][(cy-sy)/w]=2; }

g.fillOval(cx-w/2+1,cy-w/2,w-2,w-2); player=(player+1)%2; //黑白方轮流下棋

g.setXORMode(chessBoard.this.getBackground()); g.setColor(Color.red); //用异或方式绘制小游标 g.fillRect(cx-w/4,cy-w/2,w/2,w/2); }

该处代码块处理鼠标单击事件,解决当前游标位置下一颗棋子的显示和记录问题。通过getGraphics()方法获取画笔进行图形绘制,其好处是避免画面闪烁。

public void paint(Graphics g){ //绘制棋盘 for (int k=0;k<19;k++)

g.drawLine(sx,sy+k*w,sx+w*18,sy+k*w); for (int k=0;k<19;k++)

g.drawLine(sx+k*w,sy,sx+k*w,sy+w*18); for(int i=0;i

for(int j=0;j

g.setColor(Color.black);

g.fillOval(sx+i*w-w/2+1,sx+j*w-w/2+1,w-2,w-2); }else if(chess[i][j]==2){

g.setColor(Color.white);

g.fillOval(sx+i*w-w/2+1,sx+j*w-w/2+1,w-2,w-2); } }

g.setXORMode(this.getBackground()); g.setColor(Color.red);

g.fillRect(cx-w/4,cy-w/4,w/2,w/2); 此处的代码用来绘制棋盘以及棋盘上所有棋子

15

(3)界面情况

不同颜色的界面

16

实际中的围棋对战情况

棋盘上各个部件以及它们的效果

17

(4)运行调试与讨论分析

编译整个程序的采用的是分块编写的方法,在保证每个小部分代码块运行正常的同时还要考虑到整个程序的协调性,首先用到的问题是对包的引用这个关系到整个后续的细节部分能否可以实现。定义chessGame的时候要考虑到它的各个按钮的布局采用网格布局这样效果出来后更美观整洁。其中actionListener和actionPerformed对应功能的适应都是难点。由于对鼠标事件的设置还掌握的不全面导致在设置鼠标移动以及小游标的时候参考了好多资料才得以实现相应的功能。

在我自身调试下围棋程序的同时总共遇到三个问题:

①设置的“改变棋盘颜色”的按钮无法改变棋盘的颜色反而是改变鼠标小游码的颜色。

解决方法:无法通过按钮改变棋盘的颜色,那么就从棋盘背景定义的颜色做文章

Color c=new Color((int)(Math.random()*255),(int)(Math.random()*255), (int)(Math.random()*255));

setBackground(c);通过定义随机颜色c然后设置棋盘的背景颜色为c那么每次重新打开游戏的时候棋盘的颜色都会改变。

②无法在文本域中插入计时器,究其原因是对java.util中的thread类的掌握不牢

解决方法:改在文本域中插入进入游戏时的时间点这样就会对游戏时间有一个把握度,实现这个功能需要引进java.util包中的Calender类由于它是抽象方法无法实例化所以通过

Calendar rightNow=Calendar.getInstance(); String

mydate=rightNow.get(Calendar.YEAR)+\-\”

TextArea t1= new TextArea(mydate,2,1); 可以实现在文本框中插入进入游戏时间的信息 ③实现游戏退出以及菜单栏中的“x”关闭窗口

解决方法: if(e.getActionCommand().equals(\退出游戏\ dispose();}该码通过按钮实现退出游戏

class closeWin extends WindowAdapter{ public void windowClosing(WindowEvent e){ Window w=e.getWindow(); w.dispose();}

18

\分\秒\

而此部分则通过窗口菜单实现关闭游戏的功能

总结:计算机编程语言有多种多样,每一门都有自己独特的特点。而java是面向对象编程的语言,该语言的学习不在于死记硬背而在于理解与灵活应用。而学习的关键在于平时对基础知识的掌握与基本方法的掌握以及平时多加练习熟练程度也是编程能否准确有效的关建因素,在做课设的过程中让人又气又有兴趣的是发现错误解决错误的过程,在犯错中不断弥补自己的不足。此次课设让我熟练掌握了图形用户界面的编辑,颜色的调配,时间的插入以及方法的调用定义以及各种类的重新理解,可以说此次收获很大,更激发我深入学习的兴趣,在以后的日子里我要学习更多的相关知识以便达到学以致用。

参考文献

[1]丁振凡. Java语言程序设计(第2版).清华大学出版社,2008 [2]丁振凡. 利用Java在主页上学习. 电脑学习,2016

19

附录

围棋对弈界面程序源代码:

import java.awt.*;

import java.awt.event.*; import javax.swing.*; import java.util.*;

public class chessGame extends Frame implements ActionListener {

Color c=new Color((int)(Math.random()*255),(int)(Math.random()*255), (int)(Math.random()*255));

public chessGame(){ super(\围棋\

chessBoard b=new chessBoard();

setBackground(c);

setLayout(new BorderLayout()); add(\

Calendar rightNow=Calendar.getInstance(); String

mydate=rightNow.get(Calendar.YEAR)+\-\时\分\秒\ //设置一个时间字符串 Panel p=new Panel();

Label a1=new Label(\对战时间\

Button color=new Button(\更改棋盘颜色\ Button fail=new Button(\认输\ Button back=new Button(\悔棋\ Button quit=new Button(\退出游戏\

TextArea t1= new TextArea(mydate,2,1); p.setLayout(new GridLayout(8,1,10,10));

p.add(new Label()); //为界面美观插入一个空标签 p.add(color);

20

p.add(back); p.add(a1); p.add(t1); p.add(fail); p.add(quit); add(\

fail.addActionListener(this); color.addActionListener(this); quit.addActionListener(this);

addWindowListener(new closeWin()); setSize(500,450); setVisible(true);

}

public void actionPerformed(ActionEvent e){

Color c=new Color((int)(Math.random()*255),(int)(Math.random()*255), (int)(Math.random()*255)); setBackground(c);

if(e.getActionCommand().equals(\退出游戏\ dispose();}

if(e.getActionCommand().equals(\认\你输了\ } }

public static void main(String[] args){ new chessGame(); } }

class closeWin extends WindowAdapter{

public void windowClosing(WindowEvent e){ Window w=e.getWindow(); w.dispose();}

} //定义完了窗体构造

21

class chessBoard extends Canvas{ int chess[][]=new int[19][19];

int sx=20,sy=20; //存放棋盘子的状态

int w=20; //棋盘左上角的位置 int cx=50; //棋盘每个格子的宽度

int cy=50; //下棋位置游标的初值,对应鼠标移动位置 int player=1; // 1表示轮下黑子,0表示轮下白子

public chessBoard(){

this.addMouseMotionListener(new MouseMotionAdapter(){ public void mouseMoved(MouseEvent e){ Graphics g= getGraphics();

g.setXORMode(chessBoard.this.getBackground()); g.setColor(Color.red); g.fillRect(cx-w/4,cy-w/4,w/2,w/2); cx=sx+(int)(e.getX()/w)*w; cy=sy+(int)(e.getY()/w)*w; g.fillRect(cx-w/4,cy-w/4,w/2,w/2); } });

this.addMouseListener(new MouseAdapter(){

public void mouseClicked(MouseEvent e){ //鼠标单击表示下子 Graphics g=getGraphics(); if(chess[(cx-sx)/w][(cy-sy)/w]==0){ //判断是否已有棋子 if (player==1){

g.setColor(Color.black); //黑棋 chess[(cx-sx)/w][(cy-sy)/w]=1; }else{

g.setColor(Color.white); //白棋 chess[(cx-sx)/w][(cy-sy)/w]=2; }

g.fillOval(cx-w/2+1,cy-w/2,w-2,w-2); player=(player+1)%2; //黑白方轮流下棋

g.setXORMode(chessBoard.this.getBackground()); g.setColor(Color.red); //用异或方式绘制小游标 g.fillRect(cx-w/4,cy-w/2,w/2,w/2); } } }); }

22

public void paint(Graphics g){ //绘制棋盘 for (int k=0;k<19;k++)

g.drawLine(sx,sy+k*w,sx+w*18,sy+k*w); for (int k=0;k<19;k++)

g.drawLine(sx+k*w,sy,sx+k*w,sy+w*18); for(int i=0;i

for(int j=0;j

g.setColor(Color.black);

g.fillOval(sx+i*w-w/2+1,sx+j*w-w/2+1,w-2,w-2); }else if(chess[i][j]==2){

g.setColor(Color.white);

g.fillOval(sx+i*w-w/2+1,sx+j*w-w/2+1,w-2,w-2); } }

g.setXORMode(this.getBackground()); g.setColor(Color.red);

g.fillRect(cx-w/4,cy-w/4,w/2,w/2); } }

23

百度搜索“yundocx”或“云文档网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,云文档网,提供经典综合文库围棋对弈界面课程设计在线全文阅读。

围棋对弈界面课程设计.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.yundocx.com/wenku/185508.html(转载请注明文章来源)
Copyright © 2018-2022 云文档网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:370150219 邮箱:370150219@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:7 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219