1、陕西国际商贸学院Java 程序设计集践 实训报告二 级 学 院:信息与工程学院专 业 名 称:计算机科学与技术学 生 学 号:132703学 生 姓 名:李哲指 导 教 师:程瑶 二一五年六月前 言电脑已经深入到日常工作和生活的方方面面,比如文字处理、信息管理、辅助设计、图形图像处理、教育培训以及游戏娱乐等,各行各业的人们无须经过特别的训练就能够使用电脑完成许许多多复杂的工作。然而,虽然现在世界上已经充满了花样繁多的各种软件,但它们依然不能满足用户的各种特殊需要,人们还不得不开发适合自己特殊需求的软件。Java 语言作为一种面向对象的编程语言,具有分布式,可移植,高性能,多线程等特点。如今网络
2、休闲游戏发展迅速,它凭借健康、方便、互动性强、益智等诸多优点,成为大部分现代人休闲娱乐的首选。 五子棋游戏是使用 Java 语言开发的一款游戏。这款游戏无论是服务器还是客户端的实现都相对容易。随着计算机技术的发展,游戏已经成为计算机技术中最具潜力的热点领域,随着联众世界、腾讯游戏等游戏平台的拓展,越来越多的人参与到游戏中。特别是其中一些休闲益智类的棋牌游戏,集趣味性、娱乐性、互动性和益智性于一体,拥有大量的用户。因此使用 Java 开发网络五子棋游戏是一个实用性很强的毕业设计项目。 五子棋游戏的总体功能是要设计出具有精美界面的,具备人工智能的,支持对弈的五子棋游戏。本系统最终的目的是建立一个有
3、具体规则的五子棋平台,使两台不同计算机的使用者通过一定操作的,达到游戏目的,以及单机上的人机对战。2015 年 6 月 23 日- 1 - 目录1 实训目的 .- 2 -2 概述 .- 2 -3 项目需求 - 2 -3.1 系统实现的目标分析 - 3-3.2 设计内容 - 3-3.3 整体流程图 .- 4 -3.4 循环流程图 - 4-4 设计要求 .- 5-5 实现的功能 .- 5-5.1 整个游戏能实现的功能 - 5-5.2 测试数据及运行结果 - 6 -5.2.1 操作界面 - 6 -5.2.2 测试 .- 7-7 程序功能的评价 - 7 -8 总结 .- 8-8.1 遇到的问题及解决的
4、方法 .- 8 -9 源程序(部分代码) - 8 - 2 - 1.目的在 java 中,图形界面设计与交互体现于窗口之上,是软件开发中程序设计非常重要的一个项目与重要部分。这次实训是对图形用户界面的那一章内容里的知识进行实际操作实际训练与对知识的温习巩固,也涉及到了很前面的 java 课程的基础知识,也拓展了部分知识点。这次实训也是锻炼编写程序要严格按照 Java 编程规范进行代码编写的习惯。这次的实践也是对 Java 中图形用户界面中零散的知识点的整合,在了解各个知识点的同时,并熟练的掌握图形组件的使用,加深对理论教学内容的理解和掌握,使学生能较系统地掌握程序设计及其在开发中的广泛应用,基本
5、方法及技巧,为学生综合运用所学知识,并在实践应用方面打下一定的基础。要求学生全面深入理解和熟练掌握的基础下,能够分析和解决类似的问题,具有良好的编程风格。此次实训同时也考查了学生的综合运用能力和逻辑分析能力,还提高了学生自学的能力和独立工作的能力,并培养了严谨的态度和遇到问题努力解决不退缩的精神。是对学生进行设计分析、操作、理解、观察、归纳能力的一个提高。对本课程的学习能力和知识的掌握起到了一个积极的推进作用。2.概述通过 Swing 组件的应用,事件监听器的使用进行实现,来完成人人对战的功能的一个应用程序,可以任意两个用户的对战棋盘。此系统为智力游戏,适合于各类游戏爱好者。由于其经典性及其游
6、戏的简单性,进行简单的操作后就可以进行游戏。人们在享受娱乐的同时,也会体会到自己的智力也会有所提升。在学习了 Java 语言之后,经常用它搞一些小程序。这次 java 实训,正好将学过的 Java 语言中的各种知识综合起来,用 eclipse 开发工具编写一个小游戏,既对自己学过的技能进行一次检验,也能系统地将学过的知识复习巩固。- 3 - 3.项目需求本实训中的五子棋具有普通的游戏功能外,还具有显示游戏过程、提示游戏之功能。 (1)单击“五子棋”上的开始按钮可以进入游戏。 (2)单击“五子棋”上的新游戏按钮可以选择放弃本次游戏。 (3)单击“五子棋”上的重新开始按钮可以重新进入新游戏。(4)
7、单击“五子棋”上的退出按钮可以退出游戏界面。 (5)在一个文本框中显示当前的游戏过程,在一个文本区中显示以往的计算过程。 (6)单击“保存”按钮可以将文本区中的全部游戏过程保存到文件;单击“复制”按钮可以将文本区中选中的文本复制到剪贴板;单击“清除”按钮可以清除文本区中的全部内容。3.1 系统实现的目标分析为了熟悉五子棋规则及技巧,以及研究简单的人工智能,用 Java 开发五子棋游戏。主要完成人人对战的功能。并且没有网络连接部分编程应用,实现了任意两个对战用户的棋盘功能。3.2 设计内容(1) 、题目:五子棋游戏。 (2) 、具体实现绘制棋盘,横竖线实现,在直线交点处下黑白棋子(实心圆形) 。
8、(3) 、然后对棋子的设计是,颜色分为黑色和白色,形状为实心圆形。- 4 - 3.3 整体流程图3.4 循环流程图开始- 5 - 4 设计要求(1)设计面要简洁。 (2)设计功能明确。 (3)熟悉 JAVA 开发环境,掌握 JAVA 程序的编译和运行; (4)掌握 JAVA 基本编程技术和方法; (5)了解异常处理机制。 (6)说明书、流程图要清楚; (7)要求采用模块化程序设计方法,要求上机调试通过和按设计报告格式; (8)设计上交内容:设计报告一份(按格式书写) ;源程序文件。5 实现的功能根据上面的系统的设计要求,可以将此五子棋游戏分为以下几个模块:初始化模块:建立棋盘数组并清零以备使用
9、;初始化键盘/鼠标等输入输出设备并在屏幕上画出棋盘。玩家落子模块:即用户在指定落子区域单击后,程序会计算该子的坐标,并且将棋盘数组中坐标处记录棋子的颜色,1 代表黑色,2 代表白色,以表明是哪方下的棋子。5.1 整个游戏能实现的功能1、 悔棋2、 认输3、 变棋盘背景4、 放弃一手5、 显示黑子先走6、 显示该哪个棋子走了 - 6 - 5.2 测试数据及运行结果5.2.1 操作界面开局时双方还未落棋子的运行界面,如下图所示。- 7 - 5.2.2 测试(1)可以实现胜负的判断,并终止游戏6 程序功能的评价本程序主要实现简单的五子棋对战功能,游戏界面简单,操作简易。开局后由系统默认分配先下棋的一
10、方,黑白方先实现五子连珠的一方则取得胜利。本程序由 6 个基本功能模块构成,各模块的详细分析如下: 1.主函数 GameMain 本程序的主函数,初始化棋盘。2. BlackWin 实现黑方获胜,WhiteWin 实现白方获胜。3. Draw 双方平局。4. GameFrame setTitle(“五子棋“);setSize(400, 420);4. PaintPanel 游戏界面。- 8 - 7 总结7.1 遇到的问题及解决的方法问题:设计的游戏没有游戏界面。 解决方法:进行界面设计。去网上查找资料,准备需要的图片文件等;设计图形界面。 如创建键盘 for(int i=0; i16; i+)
11、 g2.draw(new Line.Double(startX, startY+20*i, startX+300, startY+20*i); /创建盘面 g2.draw(new Line.Double(startX+20*i, startY, startX+20*i, startY+300); 8 源程序(部分代码)import java.awt.*;import java.awt.event.*;/import java.lang.*;import javax.swing.*;public class chessGame extends JFrame chessBoard b=new ch
12、essBoard();public chessGame() setBackground(Color.lightGray);setLayout(new BorderLayout();add(“Center“,b);Panel panel=new Panel();Button passButton=new Button(“放弃一手“);Button colorButton=new Button(“变棋盘背景“);Button failButton=new Button(“认输“);Button backButton=new Button(“悔棋“); panel.setLayout(new Gri
13、dLayout(8, 1,10,10);panel.add(new Label();panel.add(passButton);panel.add(colorButton);panel.add(failButton);panel.add(backButton);add(“East“,panel);setSize(500,450);setVisible(true);public static void main(String args) new chessGame();class chessBoard extends Canvas- 9 - int chess=new int1919;int s
14、x=20,sy=20,w=20,cx=50,cy=50,player=1;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
15、;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);ches
16、s(cx-sx)/w(cy-sy)/w=2; g.fillOval(cx-w/2+1,cy-w/2+1,w-2,w-2);player=(player+1)%2;g.setXORMode(chessBoard.this.getBackground();g.setColor(Color.red);g.fillRect(cx-w/2, cy-w/4, w/2, w/2); )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
17、 19; k+) g.drawLine(sx+k*w, sy, sx+k*w, sy+w*18);for (int i = 0; i chess.length; i+)for (int j = 0; j chess0.length; j+) if (chessij=1) g.setColor(Color.black);g.fillOval(sx+i*w-w/2+1, sx+j*w-w/2+1, w-2, w-2);else if (chessij=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);