java实训报告

时间:2024.4.21

《Java实训》设计报告

项目名称

石家庄科技信息职业学院

信息工程系

20##年10月15日

项目名称

一、项目需求

(格式说明:小四号字,1.5倍行距)

本次项目设计是applet小应用程序的java版拼图游戏,它可以嵌入到网页中运行,此款游戏主要实现的是图片的选择和块状图片的拖拽,而且此款游戏还添加了舒缓的背景音乐使得整个游戏过程中都处在轻松愉快的氛围中。

(1)单击“拼图游戏初始界面”上的块状图片(0~2)可以选择游戏对象(即图片的选择)。

(2)单击“块状图片”可对其进行拖拽。

二、项目设计

在设计拼图游戏时,编写1个Java源文件:pintu.java计算器除了上述这个Java源文件所给出的类外,还需要Java系统提供的一些重要类,如AudioClip,Image,Graphics,boolean等。

下面是这个Java源文件的总体设计。

(1)pintu.java(主类)

Applet类负责创建计算器的主窗口,该类含有init方法,拼图游戏从该类开始执行。Applet类有5种类型的对象,分别是:AudioClip,Image, Graphic,Buffer, int对象。

……

1、pintu类(主类)

(1)数据和方法

Applet类是java.applet包中applet的一个子类,并实现了MouseListener和MouseMotionListenert接口。类中有关数据和方法的详细说明。

1)成员变量

pic是Image型数组,每个单元是一个Image n类创建的“块状图片”对象,该数组长度为16。numberButton数组中的“块状图片”含有的数字依次为0~15。每个“数字按钮”都注册有MouseListener和MouseMotionListenert事件监听器。

……

2)方法

init()方法是程序初始化的方法。

initForm()方法是界面初始化的方法;

……

(2)代码(格式说明:五号字,单倍行距)

import java.awt.*;

import java.applet.*;

import java.awt.event.* ;

import javax.swing.*;

public class pintu extends Applet implements MouseListener,MouseMotionListener

{

 AudioClip sound;

 private Image picture;

 private Graphics buffer;

 private Image pic[];

 private Image off_pic[];

 private Graphics off_buf[];

 private Image off_screen;

 private Graphics off_buffer;

 private Image off_drag;

 private Graphics off_drag_buf;

 private int map[][];

 private int ran[];

 private int width=0;

 private int height=0;

 private int lastx;

 private int lasty;

 private int last_downx;

 private int last_downy;

 private int stepx;

 private int stepy;

 private boolean choose;

 private boolean click[][];

 private boolean m_down;

 private boolean m_drag;

 private boolean not_redraw;

 private boolean able;

 Font font1,font2;

 //程序的初始化

 public void init()

 {

  resize(640,480);

  pic = new Image [3];

  off_pic =  new Image[16]; 

  off_buf = new Graphics [16];

  map = new int [4][4];

  ran = new int [15];

 

  for(int a=0;a<16;a++)

   map[a/4][a%4] = a; 

  for(int a=0;a<15;a++)

   ran[a]=a;

  click=new boolean [4][4];

 

  MediaTracker tracker= new MediaTracker (this);

 

  sound=getAudioClip(getDocumentBase(),"2.mid");

  sound.play();

  jdsz=new JDialog();

 

  //要载入的图片

  pic[0]=getImage(getCodeBase(),"12.JPG");

  pic[1]=getImage(getCodeBase(),"13.JPG");

  pic[2]=getImage(getCodeBase(),"14.jpg");

  tracker.addImage (pic[0],0);

  tracker.addImage (pic[1],0);

  tracker.addImage (pic[2],0); 

  try{

   tracker.waitForID (0);

  }catch(InterruptedException e){}

  //设置字体

  font1= new Font ("TimesRoman", Font.BOLD, 48);

  font2= new Font ("TimesRoman", Font.BOLD, 32);

  width=640;

  height=480;

 

  //初始化主界面

  initForm();

 

  //添加鼠标监听事件

  addMouseListener(this);

  addMouseMotionListener(this); 

 }

 //面板初始化

 void initForm()

 {

  this.setBackground (Color.orange);

  if(off_drag==null){

   off_drag = createImage(width/4,height/4);

   off_drag_buf = off_drag.getGraphics ();

  }

 }

 public void paint(Graphics g){

  if(off_screen==null)

  {

   off_screen = createImage(width,height);

   off_buffer=off_screen.getGraphics ();  

  }

  if(able){

   off_buffer.setColor (Color.black );

 

   for(int a=0;a<4;a++)

    for(int b=0;b<4;b++)

    {

     if(map[a][b]!=15)

      off_buffer.drawImage (off_pic[map[a][b]],b*width/4,a*height/4,this);

     if(map[a][b]==15)

      off_buffer.fillRect (b*width/4,a*height/4,width/4,height/4);

     for(int c=0;c<2;c++)

      off_buffer.drawRect (b*width/4+c,a*height/4+c,width/4-c,height/4-c);

     if(click[a][b])

     {

      off_buffer.setColor(Color.red);

      for(int d=0;d<2;d++)

      off_buffer.drawOval (b*width/4-d,a*height/4-d,width/4+d,height/4+d);

      off_buffer.setColor (Color.black );   

     }

    }

  }

  else{

   off_buffer.setColor (Color.orange );

   off_buffer.fillRect (0,0,640,480);

   off_buffer.setFont (font1);

   off_buffer.setColor(Color.red );

   off_buffer.drawImage (pic[2],30,50,250,180,this);  

   off_buffer.drawImage (pic[0],370,160,250,180,this);

   off_buffer.drawImage (pic[1],60,270,250,180,this);

   off_buffer.drawString ("Choose One!",320,100);

  }

  g.drawImage (off_screen,0, 0,this);         

 }

 public void repaint(){

  paint(this.getGraphics ());

 }

 //单击鼠标时产生的事件

 public void mouseClicked(MouseEvent evt){}

 //鼠标进入某个区域时产生的事件

 public void mouseEntered(MouseEvent evt){}

 //鼠标退出某个区域时产生的事件

 public void mouseExited(MouseEvent evt){}

 //移动鼠标时产生的事件

 public void mouseMoved(MouseEvent evt){

  if(!able){

   Point point; 

   point=evt.getPoint();

   if(point.x >30 && point.x<280 && point.y>50 && point.y<230)

   {

    off_buffer.setColor (Color.orange );

    off_buffer.fillRect (0,0,640,480);

    off_buffer.setFont (font1);

    off_buffer.drawImage (pic [2], 25, 45, 250,180,this);  

    off_buffer.drawImage (pic[0],370,160,250,180,this);

    off_buffer.drawImage (pic[1],60,270,250,180,this);   

    off_buffer.setColor(Color.black );

    off_buffer.fillRect (30,225,250,5);

    off_buffer.fillRect (275,50,5,176);

    off_buffer.setColor(Color.red );

    off_buffer.drawString ("picture 2!",320,100);

    this.getGraphics ().drawImage (off_screen,0,0,this);              

   }

   else if(point.x >370 && point.x<620 && point.y>160 && point.y<340)

   {

    off_buffer.setColor (Color.orange );

    off_buffer.fillRect (0,0,640,480);

    off_buffer.setFont (font1);

    off_buffer.drawImage (pic[2],30,50,250,180,this);  

    off_buffer.drawImage (pic[0],365,155,250,180,this);

    off_buffer.drawImage (pic[1],60,270,250,180,this);   

    off_buffer.setColor(Color.black );

    off_buffer.fillRect (370,335,250,5);

    off_buffer.fillRect (615,160,5,175);

    off_buffer.setColor(Color.red );

    off_buffer.drawString ("picture 0!",320,100);

    this.getGraphics ().drawImage (off_screen,0,0,this);              

  

   }

   else if(point.x >60 && point.x<310 && point.y>270 && point.y<450)

   {

    off_buffer.setColor (Color.orange );

    off_buffer.fillRect (0,0,640,480);

    off_buffer.setFont (font1);

    off_buffer.drawImage (pic[2],30,50,250,180,this);  

    off_buffer.drawImage (pic[0],370,160,250,180,this);

    off_buffer.drawImage (pic[1],55,265,250,180,this);   

    off_buffer.setColor(Color.black );

    off_buffer.fillRect (60,445,250,5);

    off_buffer.fillRect (305,270,5,175);

    off_buffer.setColor(Color.red );

    off_buffer.drawString ("picture 1!",320,100);

    this.getGraphics ().drawImage (off_screen,0,0,this);                 

   }

   else{

    repaint();

   }

  }

 }

 //拖动鼠标时产生的事件

 public void mouseDragged(MouseEvent evt){

  if(!able)

   return;

  if(m_down){

   Point point;

   Point temp;

   point=evt.getPoint();

   m_drag=true;

   repaint();

   Graphics david = this.getGraphics ();

   if(!not_redraw)

    off_drag_buf.drawImage (off_pic[map[last_downy][last_downx]],0,0,this);      

   david.drawImage (off_drag,point.x+stepx,point.y+stepy,this);

   not_redraw=true;

  }

 } 

 

 //按下鼠标时产生的事件

 public void mousePressed(MouseEvent evt){

  if(!able)

   return;

  Point point;

  Point temp;

  point=evt.getPoint();

  if(getarea(point) == point)

   return;

  else {

   temp=getarea(point);

   if(!m_down){

    if(map[temp.y][temp.x]==15)

     return;

    else{

     m_down=true;mid

    

     last_downx=temp.x;

     last_downy=temp.y;

     stepx=temp.x*160-point.x;

     stepy=temp.y*120-point.y;

    }

   }

   else if(m_down){

    m_down=false;

   }

  }

 }

 //放开鼠标时产生的事件

 public void mouseReleased(MouseEvent evt){

 if(able){

  if(m_drag){

   m_down=false;m_drag=false;not_redraw=false;

   Point point;

   Point temp;

   point=evt.getPoint();

   if(getarea(point) == point)

   { repaint();

    return;}

   else {

    temp=getarea(point);

    if(map[temp.y][temp.x]!=15){

     repaint();return;}

    else{

      if(Math.abs (last_downx-temp.x)==1 && last_downy-temp.y==0)

      {

       int david;

       david=map[last_downy][last_downx];     

       map[last_downy][last_downx] =15;

       map[temp.y][temp.x]=david;

       if(wingame())

        able=false;      

       repaint();

       return;

      }

      else if(last_downx-temp.x==0 && Math.abs (last_downy-temp.y)==1)

      {

       int david;

       david=map[last_downy][last_downx];     

       map[last_downy][last_downx] =15;

       map[temp.y][temp.x]=david;

       if(wingame())

        able=false;      

       repaint();

       return;

      }

      else{repaint(); return;}

    }

   }

  }

 }

  else{

   Point point; 

   point=evt.getPoint();

   if(point.x >30 && point.x<280 && point.y>50 && point.y<230)

   {able=true; initmap(2);}

   if(point.x >370 && point.x<620 && point.y>160 && point.y<340)

   {able=true;initmap(0);}

   if(point.x >60 && point.x<310 && point.y>270 && point.y<450)

   {able=true;initmap(1);}

   else return;

  }

 }

 //转换坐标

 public Point getarea(Point point){

  if(point.x>640 || point.y>480)

   return point;

  else return point = new Point (point.x/160,point.y/120);  

 }

 //图片初始化

 void initmap(int stage){

  picture = createImage(width,height);

  buffer = picture.getGraphics ();

  buffer.drawImage (pic[stage],0,0,640,480,this);

  for(int a=0;a<15;a++)

  {

    off_pic[a] = createImage(width/4,height/4);

    off_buf[a] = off_pic[a].getGraphics ();

    off_buf[a].drawImage (picture,0,0,width/4,height/4,

       (a%4)*width/4,(a/4)*height/4,(a%4+1)*width/4,(a/4+1)*height/4,this);

  }    

  initgame();

  repaint();

 }

 //程序是否结束

 boolean wingame(){

  for(int a=0;a<4;a++)

   for(int b=0;b<4;b++)

   {

    if(map[a][b]==a*4+b)

     ;

    else return false;

   }

  return true;

 }

 //游戏初始化

 void initgame(){ 

  for(int a=0;a<4;a++)

   for(int b=0;b<4;b++)

   {

    if(!(a==3 && b==3)){

     map[a][b] = (int)(Math.random()*14);

     if(ran[map[a][b]]==-1)

     {

      int temp=map[a][b];

      while(ran[temp]==-1){

       temp++;

       if(temp>14)

        temp=0;

      }

      map[a][b]=ran[temp];

      ran[temp]=-1;

     }

     else{

      ran[map[a][b]]=-1;

     }

    }

    else map[3][3] = 15;

   }

 }

}

(3)效果图

pintu创建的窗口效果如下图所示。

图一界面初始化

图二游戏界面

三、项目总结:

 经过多次的实验之后我觉得该程序还有许多需要改的地方:

1.虽然在程序中添加了背景音乐但是音乐单一,应该添加多种音乐。

2.该游戏没有一个详细的设置菜单,考虑添加。

3.在游戏完成后添加一个声音,使这个游戏更人性化。

4.设置游戏难度,不仅仅是将图片分为十六块可以更多或者更少。

四、心得体会

经过这段时间的学习我收获不小,总结起来有如下几点:

1.更进一步的理解了java编程的思想,体会到java与其他编程语言的不同。对于这种面向对象的编程思想,是刚入门的人能够很快的写出自己的程序。

2.锻炼了自己的动手和自学能力,在编程中有许多类和方法在课本中没有学到和提及到。都是通过自己查帮助文档,或者通过网络进行学习和了解到的。和别人在一起交流是一样很快乐的事情。

3.体会到编写程序最重要的是程序思想,而不是单纯的写代码了。如何解决类之间的关联和继承关系,如何组织类是很关键的,此外对于接口和变量的访问权限的设置方面的问题都有不小的收获。

更多相关推荐:
java实习报告

石家庄学院习报告王荣传20xx0502027数学与信息科学系信息与计算科学专业本科一班崔永刚讲师姓名:学号:院系:专业:班级:指导教师:教师职称:实习基本情况河北中信联信息技术有实习单位:限公司实习时间:201…

Java实训报告

Java程序设计实训报告实训名称图书管理系统实训专业计算机应用技术班级学号090443220姓名高宇国指导教师侯丽敏20xx年12月26日实训成绩一实训目的1熟练掌握Java面向对象程序设计的基础知识2熟练掌握...

java实训报告

摘要随着自动化技术的不断发展电子产业对工艺生产的要求越来越高本次实训主要熟悉手工焊锡的常用工具的使用及其与修理手工电烙铁的焊接技术能够独立的简单电子产品的安装与焊接熟悉电子产品的生产流程印制电路板设计的和方法能...

java实训报告模板

辽宁建筑职业学院Java高级应用实训报告课题名称婚庆公司网站专业软件技术班级xxxxxxxxxx学号姓名xxxx指导教师xxx二O一三年十二月三十日成绩评定标准1目录一课程设计目的32二课程设计题目描述和要求3...

Java实训报告

PINGDINGSHANUNIVERSITYJava专业实训项目报告题目超市管理系统院系软件学院专业年级10级软件工程java工程师2班姓名学号1015302指导教师黄淼20xx年5月26日1目录一项目简介31...

java 实习报告

实习报告系别传媒工程系专业班级计算机科学与技术B0901学生姓名吴康学号09405020xx6指导教师李成海二○一二年十二月实习目的:在internet飞速发展的今天,互联网成为人们快速获取、发布和传递信息的重…

java 实验报告 全

河南省高等教育自学考试实验报告册计算机及应用专业(本科段)《JAVA》姓名所属地市实验地点实验日期实验总成绩指导教师签名实验单位(实验室)意见:主考院校审核意见:河南科技大学自学考试办公室二零一零年x月实验一j…

Java实验报告

JAVA课程标准实验报告学号1040501211姓名陈嘉生江苏科技大学计算机科学与工程学院基础部1实验一流程控制语句一实验目的1234二实验内容1安装开发环境JDK2编写一个JAVA应用程序在输出窗口显示quo...

java超市管理系统实训报告

11课程设计的目的通过本次课程设计使学生能够全面深刻地掌握数据库系统的设计流程根据在数据库原理课程中所学到的数据库理论知识结合某个具体的实际需求最终开发出一个较为实用的数据库系统12课程设计的背景和意义121课...

java实训三实训报告

北京联合大学实验报告课程项目名称JAVA语言课程实验报告实验3学院自动化学院专业自动化班级学号姓名成绩20xx年4月4日一实验目的1掌握结构化程序设计的方法2学习用ifelse语句实现单分支3学习用ifelse...

Java实训报告电子版

实训报告书实训名称:Java程序设计实训系(部):信息工程系专业班级:学生姓名:学号:指导教师:完成日期:20##.12.11山东科技大学泰山科技学院目录目录..........................…

java实验报告类构造函数与继承

课程名称Java程序设计成绩评定实验项目名称实验5类构造函数与继承指导教师学生姓名学号专业班级实验项目类型基础实验地点验时间一实验目的与要求1理解类和对象的区别掌握构造函数的使用熟悉通过对象名引用实例的方法和属...

java实训报告(25篇)