JAVA拼图大作业实验报告.docx
《JAVA拼图大作业实验报告.docx》由会员分享,可在线阅读,更多相关《JAVA拼图大作业实验报告.docx(67页珍藏版)》请在冰豆网上搜索。
JAVA拼图大作业实验报告
2016秋天学期《Java语言》大作业
系统说明报告
编制:
岳晓飞(20153280)
专业计算机科学与技术
审察:
班级信1501-2
1项目目的与意义3
1.1项目背景说明3
1.2项目目的与意义3
2软件开发环境与技术说明4
2.1软件开发环境4
2.2软件开发技术描绘4
3系统剖析与设计5
3.1项目需求剖析说明5
3.2系统设计方案5
4系统源代码8
4.1系统源代码文件说明8
4.2源代码8
5系统使用说明书41
6参照资料49
7附件说明49
1项目目的与意义
1.1项目背景说明
JAVA语言2016年学期期末大作业-44拼图游戏的设置
1.2项目目的与意义
目的:
实现简单的4X4JAVA拼图游戏的简单功能,能够进行用户的登
录和拼图游戏的达成,给用户以优秀的游戏体验,再加入更多个性化
的内容
意义:
从用户角度,设计一个简单可是十分考验人的小型拼图游戏,让人们在简单方便的操作中舒缓自己一天的疲倦,和朋友一同进行挑战,不停地打破,显现游戏的漂亮,实现游戏的价值
从开发者角度,这是对我半年JAVA语言学习的检测,同时我也自学了很多东西,比方数据库的链接,SQL语句和JAVA的各样函数,让我能够真实的领会到开发一个项目的过程和需要付出的不懈努力,也让我享遇到了自己尽全力达成一个项目的过程和达成后的愉悦。
2软件开发环境与技术说明
2.1软件开发环境
JAVA开发环境-Eclipse
JAVA支持包:
importjava.awt.*;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjava.sql.*;
importjavax.swing.*;
mysql-connector-java-5.1.40-bin.jar(MySql驱动jar
包)
数据库环境:
MySql数据库(使用的是Navicat图形界面)
2.2软件开发技术描绘
1.拼图游戏界面设计主要使用了JAVA的GUI图形界面,主登录界面
和账号注册界面使用的是流式FlowLayOut布局进行登录框和按钮的
设置,而拼图游戏界面则是使用的网格式GridFlowOut布局.
2.经过连结MySql数据库,(名称:
user),创立数据表user_info
列名称为:
username(账号),password(密码),score(过关时间),
Count(过关所用步数);实现了游戏的账号注册和登录功能,以及每
个账号成绩的记录和储藏,并能够再实行界面中显示每个用户的游戏
记录
3.经过Timer类实现了拼图游戏计时功能
4.图片储存在项目文件夹下image文件夹中,经过名字的奇妙设置实现了打乱图片次序,切换图片,判断拼图能否达成。
3系统剖析与设计
3.1项目需求剖析说明
立足于用户的角度,第一,我们实现了个性化的服务,即账号的注册和登录功能,不一样的用户能够进履行用,使游戏具备了最重要的竞技性,只有这样才不会让用户感觉无聊,并且我们实现了4X4拼图游戏的基本功能,并且配有游戏的时间的所用步骤,能够及时地反应给游戏用户,让用户清楚地认识到自己的分数,同时还能够记录游戏过关的时间和步数,知足了用户的冲击记录的心理需求,调高了游戏的可玩性,不会被用户迅速地玩腻。
3.2系统设计方案
从用户的角度,我们需要有以下数据种类
数据库user
数据表user_info
列名称种类长度数据
usernamevarchar255JAVA2016
passwordvarchar255Java2016
score
varchar
255
01:
30
count
int
11
56
username和password是用户的必有属性,能够进行登录和注册
score和count即用户所用的时间和步骤,两重分数完满体现了每个
人的实力
从系统设计角度
第一,
最主要的是实现最最基本的游戏功能,即设计拼图游戏的中心程序
1.拼图表格式的布局,简单让我想到使用按钮进行网格式布局
2.为每个按钮增添背景图片(这些背景图片需要经过预先的裁剪),
3.需要进行按钮背景图片的打乱,简单想到使用随机数RANDOM()函数,而后会想到在背景图片的名字上做文章来进行背景图片的
随机设置
4.我们把16个按钮储存在数组中,便于操作,但是数组最大的方便之处在于他的随机储存,我们能够经过下标接见随意一个按钮,于是想到把图片的名字与下标联系在一同,解决了图片的随机排
列
5.怎样设置背景图片?
我们需要有图片的路径,而图片的路径只是是图片名字的不一样,因此我们将固定的图片储存路径寄存到字符
串数组中,而后经过循环进行图片的设置,SetIcon()函数能够做到
这全部.
6.切换下一张,本质仍是背景图片的变化,因此我们持续在图片名字上做文章,设置一个表示数字代表是第几张的图片,把他设置到图片名字里面。
而后切换下一张被简化为改变一个数字(编程
思路要清楚),数字变即路径变,也就是背景图发生变化
总结:
拼图-》背景图片的变化-》背景图片路径的变化-》图片名字的变化
接下来,
实现一个项目的登录和注册,我们需要数据库,而游戏的记录也需要数据库来寄存,因此我么一定第一确定自己的数据库系统,如上所示,而后就是实现注册,将数据写入数据库和登录,在数据库中进行般配,游戏记录的写入和读取。
在游戏成功时,获得当时的时间和步数,写
入对应的用户的数据表中,而后另一个界面中设置表格,从数据库中读守信息,而后写入到表格里面进行显现最后,
我考虑了游戏的一些详细实现,游戏界面的设计,怎样才能让用户看得舒心,玩的自在,和暂停等适用小功能,无穷知足用户的需求。
以上,就是我在设计拼图游戏是系统设计方案,此后还会不停地完美自己的程序!
4系统源代码
4.1系统源代码文件说明
拼图游戏源代码构造
-分为4个窗口介绍
1.Frame1主登录窗口
(属性)包含3个标签组件,4个按钮组件,2个文本域组件和1个布局,4个按钮的鼠标点击监听事件
(方法)包含1个函数来进行组件的增添和布局的设置,1个函数进行数据库的连结和读取,4个监听类进行事件的编写
2.Frame2注册窗口
(属性)包含2个按钮,4个标签和3个文本域以及2个按钮的
点击事件
(方法)包含1个函数进行组件的增添和布局的设置,1个函数进行数据库的连结和写入,2个监听类进行点击事件的编写
3.Frame3历史记录窗口
(属性)包含1个表格
(方法)包含1个函数进行表格的属性设置和数据库数据的读
取并写入到表格中
4.Frame4游戏窗口
(属性)包含4个按钮,3个标签,16个按钮和85张图片
(方法)包含1个函数进行组件的增添和布局的设置,4个按钮的点击事件函数,1个计时器的计时势件
其余:
还有每个窗口中的字体的设置,面板地点的设置,等
4.2源代码
importjava.awt.*;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjava.sql.*;
importjavax.swing.*;
publicclassTest{
MyListenner1myListenner1=newMyListenner1();MyListenner2myListenner2=newMyListenner2();MyListenner3myListenner3=newMyListenner3();MyListenner4myListenner4=newMyListenner4();MyListenner5myListenner5=newMyListenner5();
MyListennerFanHuimyListenner18=newMyListennerFanHui();
JFrameframe=newJFrame();//
登录主窗口
JFrameframe2=newJFrame();//
注册窗口
JFrameframe5=newJFrame();//
注册窗口
JPanelpane00=newJPanel();//历史记录
JPanelpane0=newJPanel();
JPanelpane1=newJPanel();
JPanelpane2=newJPanel();
JPanelpane3=newJPanel();
JPanelpane4=newJPanel();
JPanelpane5=newJPanel();//
注册界面
JPanelpane6=newJPanel();//
注册界面
JPanelpane7=newJPanel();//
注册界面
JPanelpane8=newJPanel();//
返回按钮
JButtonbutton7=newJButton("
返回");
JLabellab=newJLabel("☆简略拼图游戏☆");
//注册界面
JLabellab1=newJLabel("游戏开始");
//登录界面/注册
JLabellab7=newJLabel("☆账号注册界面☆");
JLabellab2=newJLabel("账号:
");//注册
JLabellab3=newJLabel("密码:
");//zhuce
JLabellab4=newJLabel("确认密码:
");
JTextFieldtext1=newJTextField(10);//注册账号
JPasswordFieldtext2=newJPasswordField(10);//注册密码JPasswordFieldtext3=newJPasswordField(10);JButtonbutton6=newJButton("注册");
JLabellab5=newJLabel("
账号");//
登录
JLabellab6=newJLabel("
密码");//denglu
JButtonbutton2=newJButton("进入游戏");
JButtonbutton1=newJButton("注册账号");
JButtonbutton3=newJButton("游戏记录");
JButtonbutton5=newJButton("退出游戏");
JTextFieldtext4=newJTextField(10);//登录账号
JPasswordFieldtext5=newJPasswordField(10);//登录密码
GridLayoutlay1=newGridLayout(2,2,5,3);
GridLayoutlay2=newGridLayout(4,2);
FlowLayoutlay3=newFlowLayout(FlowLayout.LEFT,15,20);
Fontfont1=newFont("楷体",Font.BOLD,25);
Fontfont0=newFont("楷体",Font.BOLD,30);
intnum=0;
intCount=0;
inta=0,b=0,c=0,d=0;
JFrameframe4=newJFrame();
MyListenner1_1mylistenner11=newMyListenner1_1();
MyListenner2_1mylistenner12=newMyListenner2_1();
MyListenner3_1mylistenner13=newMyListenner3_1();
MyListenner4_1mylistenner14=newMyListenner4_1();
MyListenner5_1mylistenner15=newMyListenner5_1();
MyTimerlisternermytimerlisterner=newMyTimerlisterner(frame4);
MyListennerJilumylistenner16=newMyListennerJilu();
JPanelpane1_1=newJPanel();
JPanelpane1_2=newJPanel();
JPanelpane1_3=newJPanel();
JPanelpane1_4=newJPanel();
JPanelpane1_5=newJPanel();
JPanelpane1_6=newJPanel();
Timertimer;//计时器
//游戏界面按钮
JButtonbutton1_1=newJButton("开始");
JButtonbutton1_2=newJButton("下一张");
JButtonbutton1_3=newJButton("暂停");
JButtonbutton1_4=newJButton("返回");
JButtonEmptyButton=newJButton();
JButtonbutton_1[][]=newJButton[4][4];
//游戏界面标签
JLabelYuanTu=newJLabel();
JLabelBuShu=newJLabel();
JLabelShiJian=newJLabel();
JLabelBuShu_num=newJLabel("步数:
"+Count);
JLabelShiJian_num=newJLabel();
JLabellabel_time=newJLabel("时间:
"+"00:
00");
GridLayoutTuLay=newGridLayout(4,4,0,0);
FlowLayoutLeftLay=newFlowLayout(FlowLayout.LEFT,0,15);
voidjiLu(){
intnumber=0;
String[]colname={"编号","账号","时间","步数
","日期"};
String[][]data=newString[10][5];
Connectionconn=ConnectSql();
Stringsql="selectusername,score,countfrom
user_info";
try{
Statementstmt=conn.createStatement();
ResultSetrs=stmt.executeQuery(sql);
while(rs.next()){
Stringusername=rs.getString
(1);
Stringscore=rs.getString
(2);
intcount=rs.getInt(3);
Stringnum=""+number;
Stringcount1=""+count;
if(count!
=0){
data[number][0]=num;
data[number][1]=username;
data[number][2]=score;
data[number][3]=count1;
data[number][4]="";
number++;
}
}
}catch(SQLExceptione1){
//TODO自动生成的catch块
e1.printStackTrace();
}
JTabletable=newJTable(data,colname);
table.setEnabled(false);
JScrollPanejsPane=newJScrollPane(table);pane00.add(jsPane,BorderLayout.CENTER);frame5.add(pane00);
}
privateString[][]order(){
String[][]exactnessOrder=newString[4][4];
for(inti=0;i<4;i++){
for(intj=0;j<4;j++){
exactnessOrder[i][j]
="image/"+
num+i+j+
".jpg";
}
}
returnexactnessOrder;
}
//随机生成无序的图片给每个按钮
privateString[][]reorder(){
String[][]exactnessOrder=newString[4][4];
for(inti=0;i<4;i++){
for(intj=0;j<4;j++){
exactnessOrder[i][j]
="image/"+
num+i+
j+
".jpg";
}
}
String[][]stochasticOrder=newString[4][4];for(inti=0;i<4;i++){
for(intj=0;j<4;j++){
while(stochasticOrder[i][j]==null){
intr=(int)(Math.random()*4);
intc=(int)(Math.random()*4);
if(exactnessOrder[r][c]!
=null){
stochasticOrder[i][j]=
exactnessOrder[r][c];
exactnessOrder[r][c]=null;
}
}
}
}
returnstochasticOrder;
}
//判断游戏能否达成
publicBooleanisSuccess(){
intflag=1;
String[][]exactnessOrder=order();
for(inti=0;i<4;i++){
for(intj=0;j<4;j++){
if(!
button_1[i][j].getIcon().equals(exactnessOrder[i][j]
)){
flag=0;
}
}
}
if(flag==0){
returnfalse;
}else{
returntrue;
}
}
//数据库连结函数
ConnectionConnectSql(){
Stringurl=
ing=utf-8&useSSL=false";
Stringusername="root";
Stringpassword="153478";//加载驱动程序以连结
数据库
try{
Class.forName("com.mysql.jdbc.Driver");
return
DriverManager.getConnection(url,username,password);
}
//捕捉加载驱动程序异样
catch(ClassNotFoundExceptioncnfex){
System.err.println(
"装载JDBC/ODBC驱动程序失败。
");cnfex.printStackTrace();
}catch(SQLExceptione){
System.err.println(
"没法连结到数据库。
");e.printStackTrace();
}
returnnull;
}
voidCreateTable(){
Connectionconn=ConnectSql();
Stringsql="createtableuser_info(usernamevarchar(255),passwordvarchar(255),scoreint);";
Statementstmt;
try{
stmt=conn.createStatement();
stmt.execute(sql);
}catch(SQLExceptione){
//TODO自动生成的catch块
e.printStackTrace();