Java项目连连看小游戏.docx
《Java项目连连看小游戏.docx》由会员分享,可在线阅读,更多相关《Java项目连连看小游戏.docx(17页珍藏版)》请在冰豆网上搜索。
Java项目连连看小游戏
《Java程序设计实训》
连连看小游戏
一、实训名称
《连连看小游戏》
二、实训项目的目的和功能
本次实训是对前面学过的所有面向对象的编程思想以及编程方法的一个总结、回顾和实践,因此,开始设计前学生一定要先回顾以前所学的内容,明确本次作业设计所要用到的技术点并到网上搜索以及查阅相关的书籍来搜集资料。
通过编写一个基于JAVA的应用系统综合实例,来掌握Java语言编程技巧。
具体要求有以下几点:
1.问题的描述与程序将要实现的具体功能。
2.程序功能实现的具体设计思路或框架,并检查流程设计。
3.代码实现。
4.程序测试(如程序代码、功能测试、可靠性测试和效率测试等)。
5.设计小结。
三、实训项目的开发环境和所使用的技术
使用Java核心API技术,利用Eclipse或NetBeans、JBuilder集成开发环境完成实训项目,界面友好,代码的可维护性好,有必要的注释和相应的文档。
四、实训地点、日程、分组情况
实训地点:
分组情况:
日程:
第一阶段:
1.班级分组,选定课题,查阅相关资料半天
2.划分模块、小组成员分工半天
3利用CASE工具进行系统设计和分析,并编制源程序3天
第二阶段:
上机调试,修改、调试、完善系统1天
第三阶段:
撰写、上交课程设计报告,上交课程设计作品源程序(每人一份)1天
实训成绩
评语
一.选题与分工
选题:
连连看小游戏
分工:
姓名
所做工作
查阅相关的书籍,搜集资料
编写文档
程序编码
课程设计总结
二.问题描述及设计思路
1.问题描述:
连连看小游戏。
设计JDK界面的连连看小游戏,用户可以通过点击鼠标消除相同数字来结束游戏。
2.设计思路:
本程序功能不是太复杂,主要工作是界面的设计。
为减少通信接口设计,所有功能均在一个类中实现。
程序中主要函数列表如下:
函数名称
函数功能简介
publicclasslianliankanimplementsActionListener()
构建主面板
publicvoidinit()
程序入口
publicvoidrandomBuild()
随机数的建立
publicvoidfraction()
实现计分
publicvoidreload()
实现游戏重置
privatevoidinitTimer()
实现计时
三.具体设计
1.程序代码
importjavax.swing.*;
importjava.awt.*;
importjava.awt.event.*;
publicclasslianliankanimplementsActionListener{
JFramemainFrame;//主面板
ContainerthisContainer;
staticlongstartTime,endTime;
staticTimertimer=null;
intmaxTime;
inttime=0;
JPanelcenterPanel,southPanel,northPanel;//子面板
JButtondiamondsButton[][]=newJButton[6][5];//游戏按钮数组
JButtonexitButton,resetButton,setButton,newlyButton;//退出,重列,设置,重新开始按钮
JLabelfractionLable=newJLabel("0");//分数标签
JLabeltimeLable=newJLabel("0");//时间标签
JButtonfirstButton,secondButton;//分别记录两次被选中的按钮
intgrid[][]=newint[8][7];//储存游戏按钮位置
staticbooleanpressInformation=false;//判断是否有按钮被选中
intx0=0,y0=0,x=0,y=0,fristMsg=0,secondMsg=0,validateLV;//游戏按钮的位置坐标
inti,j,k,n;//消除方法控制
publicvoidinit(){
mainFrame=newJFrame("JKJ连连看");
thisContainer=mainFrame.getContentPane();
thisContainer.setLayout(newBorderLayout());
centerPanel=newJPanel();
southPanel=newJPanel();
northPanel=newJPanel();
thisContainer.add(centerPanel,"Center");
thisContainer.add(southPanel,"South");
thisContainer.add(northPanel,"North");
centerPanel.setLayout(newGridLayout(6,5));
for(intcols=0;cols<6;cols++){
for(introws=0;rows<5;rows++){
diamondsButton[cols][rows]=newJButton(String
.valueOf(grid[cols+1][rows+1]));
diamondsButton[cols][rows].addActionListener(this);
centerPanel.add(diamondsButton[cols][rows]);
}
}
exitButton=newJButton("退出");
exitButton.addActionListener(this);
resetButton=newJButton("重列");
resetButton.addActionListener(this);
setButton=newJButton("设置");
setButton.addActionListener(this);
newlyButton=newJButton("再来一局");
newlyButton.addActionListener(this);
southPanel.add(exitButton);
southPanel.add(resetButton);
southPanel.add(setButton);
southPanel.add(newlyButton);
fractionLable.setText(String.valueOf(Integer.parseInt(fractionLable
.getText())));
northPanel.add(fractionLable);
timeLable
.setText(String.valueOf(Integer.parseInt(timeLable.getText())));
northPanel.add(timeLable);
mainFrame.setBounds(280,100,500,450);
mainFrame.setVisible(true);
}
privatevoidrepaint(){
//TODOAuto-generatedmethodstub
}
publicvoidfraction(){
fractionLable.setText(String.valueOf(Integer.parseInt(fractionLable
.getText())+100));
}
publicvoidtime(){
timeLable.setText(String
.valueOf(Integer.parseInt(timeLable.getText())+100));
}
publicvoidreload(){
initTimer();
startTime=System.currentTimeMillis()/1000;
intsave[]=newint[30];
intn=0,cols,rows;
intgrid[][]=newint[8][7];
for(inti=0;i<=6;i++){
for(intj=0;j<=5;j++){
if(this.grid[i][j]!
=0){
save[n]=this.grid[i][j];
n++;
}
}
}
n=n-1;
this.grid=grid;
while(n>=0){
cols=(int)(Math.random()*6+1);
rows=(int)(Math.random()*5+1);
while(grid[cols][rows]!
=0){
cols=(int)(Math.random()*6+1);
rows=(int)(Math.random()*5+1);
}
this.grid[cols][rows]=save[n];
n--;
}
mainFrame.setVisible(false);
pressInformation=false;//这里一定要将按钮点击信息归为初始
init();
for(inti=0;i<6;i++){
for(intj=0;j<5;j++){
if(grid[i+1][j+1]==0)
diamondsButton[i][j].setVisible(false);
}
}
}
publicvoidestimateEven(intplaceX,intplaceY,JButtonbz){
publicvoidxiao(){//相同的情况下能不能消去。
if((x0==x&&(y0==y+1||y0==y-1))
||((x0==x+1||x0==x-1)&&(y0==y))){//判断是否相邻
remove();
}else{
for(j=0;j<7;j++){
if(grid[x0][j]==0){//判断第一个按钮同行哪个按钮为空
if(y>j){//如果第二个按钮的Y坐标大于空按钮的Y坐标说明第一按钮在第二按钮左边
for(i=y-1;i>=j;i--){//判断第二按钮左侧直到第一按钮中间有没有按钮
if(grid[x][i]!
=0){
k=0;
break;
}else{
k=1;
}//K=1说明通过了第一次验证
}
if(k==1){
linePassOne();
}
}
if(yfor(i=y+1;i<=j;i++){//判断第二按钮左侧直到第一按钮中间有没有按钮
if(grid[x][i]!
=0){
k=0;
break;
}else{
k=1;
}
}
if(k==1){
linePassOne();
}
}
if(y==j){
linePassOne();
}
}
if(k==2){
if(x0==x){
remove();
}
if(x0for(n=x0;n<=x-1;n++){
if(grid[n][j]!
=0){
k=0;
break;
}
if(grid[n][j]==0&&n==x-1){
remove();
}
}
}
if(x0>x){
for(n=x0;n>=x+1;n--){
if(grid[n][j]!
=0){
k=0;
break;
}
if(grid[n][j]==0&&n==x+1){
remove();
}
}
}
}
}
for(i=0;i<8;i++){//列
if(grid[i][y0]==0){
if(x>i){
for(j=x-1;j>=i;j--){
if(grid[j][y]!
=0){
k=0;
break;
}else{
k=1;
}
}
if(k==1){
rowPassOne();
}
}
if(x
for(j=x+1;j<=i;j++){
if(grid[j][y]!
=0){
k=0;
break;
}else{
k=1;
}
}
if(k==1){
rowPassOne();
}
}
if(x==i){
rowPassOne();
}
}
if(k==2){
if(y0==y){
remove();
}
if(y0for(n=y0;n<=y-1;n++){
if(grid[i][n]!
=0){
k=0;
break;
}
if(grid[i][n]==0&&n==y-1){
remove();
}
}
}
if(y0>y){
for(n=y0;n>=y+1;n--){
if(grid[i][n]!
=0){
k=0;
break;
}
if(grid[i][n]==0&&n==y+1){
remove();
}
}
}
}
}
}
}
publicvoidlinePassOne(){
if(y0>j){//第一按钮同行空按钮在左边
for(i=y0-1;i>=j;i--){//判断第一按钮同左侧空按钮之间有没按钮
if(grid[x0][i]!
=0){
k=0;
break;
}else{
k=2;
}//K=2说明通过了第二次验证
}
}
if(y0for(i=y0+1;i<=j;i++){
if(grid[x0][i]!
=0){
k=0;
break;
}else{
k=2;
}
}
}
}
publicvoidremove(){
firstButton.setVisible(false);
secondButton.setVisible(false);
fraction();
pressInformation=false;
k=0;
grid[x0][y0]=0;
grid[x][y]=0;
}
privatevoidinitTimer(){
ActionListeneractionListener=newActionListener(){
publicvoidactionPerformed(ActionEvente){
endTime=System.currentTimeMillis()/1000;
if((endTime-startTime)>100){
intresult=JOptionPane.showConfirmDialog(thisContainer,
"时间到了!
!
是否重新开始?
","提醒",JOptionPane.YES_NO_OPTION);
timer.stop();
timer=null;
if(result==JOptionPane.YES_OPTION){
reload();
}else{
thisContainer.setVisible(false);
timer.stop();
}
}
timeLable.setText(String.valueOf(100-(endTime-startTime)));
}
};
timer=newjavax.swing.Timer(1000,actionListener);
timer.start();
}
publicstaticvoidmain(String[]args){
lianliankanllk=newlianliankan();
llk.randomBuild();
llk.init();
}
}
2..程序运行
运用jar命令打包后如下:
主界面如下:
游戏主界面
游戏进行
游戏时间结束
四.课程设计总结
经过一周的实训,虽然实训的时间不长,但是总体上还是受益多多。
在以前,学习java的时候,虽然也经常上机操作,但是更多的是对于理论的理解。
正是这次实训,它让我明白,java并不是一次简单的上机操作,它是一门语言,一门不是很复杂但却并不简单的计算机语言,它很实用,无需平台的限制,几百行代码就可以实现程序的操作。
实训期间,在老师的建议下,我们成立了项目小组,进行了明确的分工,有的查阅相关书籍、搜集资料,有的编写文档,有的编写代码,有的设计总结。
在项目进行时,难免会有一些困难,通过我们小组的积极努力,通过请教老师和其他同学,我们化解了这些困难。
在实际操作过程中,我们更加熟练地掌握了Eclipse的使用,知道如何通过构造函数实现窗体的布局和容器的加载,如何运用到了GUI应用程序、继承、构造、包等相关知识。
同时,它也让我知道,学习中我们必须边总结边学习,对老师讲解的任何方法和类都不要放过,不管是否简单都要乐于的接受,因为老师既然讲了,那就一定有它的道理。
我给我个人的综合评价是中等。
在对待java这门课程时,个人认为,态度第一,兴趣是关键。
因为,只有当你自己付出之后,程序运行成功时,才会产生那种自豪感,所以,一定要有自己的东西。
因为有兴趣,才会想充分理解程序当中的细节,才会更好的把支离破碎的知识融会贯通,而我在这方面做的却远远不够。
感谢老师,感谢这次实训,使他们让我充分认识到自己的不足,是他们让我找到了自己今后的方向。
虽然这学期的java结束了,但我对java这门语言的学习并没有结束。
相信我,我会努力,我相信,我会收获。
五.参考资料
1.《java项目开发案例精粹》作者曲培新等,电子工业出版社
2.《Java编程那些事儿》作者:
陈跃峰、李中彬、谷骁勇清华大学出版社
3.《JAVA程序设计》作者:
高晓黎,刘博等清华大学出版社
4.