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