1、java实验报告 Java上机实验报告 姓 名: 班 级: 学 号: 日 期: 指导老师: -目录-1、实验目的-22、实验开发环境和工具-23、实验内容-24、问题描述-35、需求和规格说明-36、概要设计-37、详细设计流程图-188、游戏截图-269、调试报告-2910、讨论分析-2911、体会-32一、实验目的 1. 了解和掌握Java基本概念和语法 2了解和掌握Java图形界面编程的基本概念和用法 3. 了解和掌握Java事件编程的基本概念和用法 4. 了解和掌握Java IO基本功能和用法二、实验开发环境和工具Windows操作系统开发环境,可使用集成开发环境Jcreator,使用
2、Java语言,工具包使用JDK 1.7。三、实验内容 设计一个基于图形界面、事件编程、IO的小软件,实现一个具有图形界面和进度存盘功能的小游戏(例如字母游戏、俄罗斯方块、坦克大战等)或者具有图形界面和存储聊天记录功能的聊天软件。也可以实现任意其他形式的小软件(但必须具备图形界面,能够响应用户事件,并且具有存盘功能,拓展所实现的小软件,增加网络通信的功能。四、问题描述 设计一个窗口贪吃蛇游戏,实现一只人为操动的小蛇努力寻找猎物。游戏设置关卡,当捕食到一定猎物之后,游戏难度增加,小蛇的移动速度加快,蛇的长度代表其捕食猎物的数量。五、需求和规格说明 利用函数使蛇的移动速度加快,利用多线程的方法设计游
3、戏,当游戏成功或者游戏失败时,出现弹窗提示游戏进程。利用鼠标事件,键盘事件操控小蛇,在面板上绘出游戏框图。 六、概要设计需要用到的类:客户端:import java.awt.*; import java.awt.event.*;import javax.swing.JOptionPane;import .Socket;import javax.swing.JButton;import javax.swing.JFrame;主类:public class KingSnake public static void main(String args) / TODO Auto-generated me
4、thod stub new MyWindow(); 用来辅助功能实现的类: class abc static int a=5,i=1; static long b=100; static boolean gg=false; static boolean bg=true;自定义面板类,继承了键盘和线程接口 ,实现用键盘控制蛇,及游戏通关等进程class MyPanel extends Panel implements KeyListener,Runnable abc qt=new abc();/再次声明辅助函数Button snake; /定义蛇按钮 int shu=0; /蛇的节数 int f
5、ood; /食物数组 Thread thread; /定义线程 static int weix,weiy; /食物位置 int fangxiang=0; /蛇移动方向 int x=0,y=0; /蛇头位置 MyPanel() /定义蛇体和食物并为蛇头添加键盘监视器 setLayout(null); snake=new Button20; food=new int 20; thread=new Thread(this); for(int j=0;j99;j+) foodj=(int)(Math.random()*20);/定义20个随机食物 weix=(int)(food0*0.1)*60; /
6、十位*60为横坐标 weiy=(int)(food0%10)*40; /个位*40为纵坐标 for(int i=0;i1) if(snakenum1.getBounds().x=snake0.getBounds().x&snakenum1.getBounds().y=snake0.getBounds().y) /判断是否咬自己的尾巴 qt.bg=false; num1-; if(x=this.getWidth()|y=this.getHeight()/判断是否撞墙 t=false; result=false; qt.bg=false;repaint(); int num=shu; while(
7、num0) /设置蛇节位置 snakenum.setBounds(snakenum-1.getBounds(); num-; if(shu=7) /如果蛇节数等于7则胜利 t=false; result=true; qt.gg=true;repaint(); public void keyPressed(KeyEvent e) /按下键盘方向键 if(e.getKeyCode()=KeyEvent.VK_RIGHT)/右键 if(fangxiang!=1)/如果先前方向不为左 fangxiang=0; else if(e.getKeyCode()=KeyEvent.VK_LEFT) if(fa
8、ngxiang!=0) fangxiang=1; else if(e.getKeyCode()=KeyEvent.VK_UP) if(fangxiang!=3) fangxiang=2; else if(e.getKeyCode()=KeyEvent.VK_DOWN) if(fangxiang!=2) fangxiang=3; public void keyTyped(KeyEvent e) public void keyReleased(KeyEvent e) public void paint(Graphics g) /在面板上绘图 int x1=this.getWidth()-1; in
9、t y1=this.getHeight()-1; g.setColor(Color.red); g.fillOval(weix, weiy, 10, 10);/食物 g.drawRect(0, 0, x1, y1); /墙 if(qt.bg=false) g.drawString(游戏失败!, 250, 200);/输出游戏失败 int option = JOptionPane.showConfirmDialog(null, 游戏失败,是否继续, 是否继续, JOptionPane.YES_NO_OPTION);/设置确认消息框 if (option = JOptionPane.YES_OPT
10、ION) /选择确认按钮 qt.bg=true; new MyWindow(); else if (option = JOptionPane.NO_OPTION)/选择取消按钮 System.exit(0);/退出游戏 if(qt.gg=true) g.drawString(恭喜过关, 250, 200);/输出游戏成功 int option = JOptionPane.showConfirmDialog(null, 恭喜过关, 是否继进入下一关, JOptionPane.YES_NO_OPTION); if (option = JOptionPane.YES_OPTION) qt.gg=fa
11、lse; qt.b=qt.b/4; qt.i+; new MyWindow(); else if (option = JOptionPane.NO_OPTION) System.exit(0); 自定义窗口类,控制程序启动 class MyWindow extends Frame implements ActionListener MyPanel my; Button btn; Panel panel; MyWindow() super(KingSnake); my=new MyPanel(); btn=new Button(begin); panel=new Panel(); btn.add
12、ActionListener(this); panel.add(new Label(欢迎来到第关begin后请按Tab键选定蛇); panel.add(btn); panel.add(new Label(按上下左右键控制蛇行动); add(panel,BorderLayout.NORTH); add(my,BorderLayout.CENTER); setBounds(100,100,610,500); setVisible(true); validate(); addWindowListener(new WindowAdapter() public void windowClosing(Wi
13、ndowEvent e) System.exit(0); ); public void actionPerformed(ActionEvent e)/按下begin按钮 if(e.getSource()=btn) try my.thread.start(); /开始线程 my.validate(); catch(Exception ee) 实现通信功能代码:class Snake extends JFrame implements ActionListener private JButton btConnect=new JButton(连接);SuppressWarnings(unused)p
14、rivate Socket socket;public Snake() super(客户端aaa); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.add(btConnect,BorderLayout.NORTH); btConnect.addActionListener(this); this.setSize(300,100); this.setVisible(true); public void actionPerformed(ActionEvent e) try socket=new Socket(127.0.0.1,
15、9999); this.setTitle(连接成功,您的分数为+MyPanel.score); catch(Exception ex) ex.printStackTrace(); 服务器代码:import .ServerSocket;import .Socket;import javax.swing.JFrame;SuppressWarnings(serial)public class Server extends JFrame private ServerSocket ss; private Socket socket; public Server() super(服务器端,目前未见链接);
16、 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setSize(300,100); this.setVisible(true); try ss=new ServerSocket(9999); socket=ss.accept(); String clienAddress=socket.getInetAddress().getHostAddress(); this.setTitle(客户+clienAddress+连接); catch(Exception ex) ex.printStackTrace(); public sta
17、tic void main(String args) new Server(); 七、详细设计流程图public static void main(String args) new MyWindow(); -if(x=this.getWidth()|y=this.getHeight()/判断是否撞墙 t=false; result=false; qt.bg=false;repaint(); int num=shu; while(num0) /设置蛇节位置 snakenum.setBounds(snakenum-1.getBounds(); num-; if(shu=7) /如果蛇节数等于7则胜
18、利 t=false; result=true; qt.gg=true;repaint(); -public void keyPressed(KeyEvent e) /按下键盘方向键 if(e.getKeyCode()=KeyEvent.VK_RIGHT)/右键 if(fangxiang!=1)/如果先前方向不为左 fangxiang=0; else if(e.getKeyCode()=KeyEvent.VK_LEFT) if(fangxiang!=0) fangxiang=1; else if(e.getKeyCode()=KeyEvent.VK_UP) if(fangxiang!=3) fa
19、ngxiang=2; else if(e.getKeyCode()=KeyEvent.VK_DOWN) if(fangxiang!=2) fangxiang=3; if (option = JOptionPane.YES_OPTION) qt.bg=true; new MyWindow(); else if (option = JOptionPane.NO_OPTION) System.exit(0); if(qt.gg=true) g.drawString(YOU WIN!, 250, 200);/输出游戏成功 int option = JOptionPane.showConfirmDial
20、og(null, 恭喜过关, 是否继进入下一关, JOptionPane.YES_NO_OPTION); if (option = JOptionPane.YES_OPTION) qt.gg=false; qt.b=qt.b/4; qt.i+; new MyWindow(); else if (option = JOptionPane.NO_OPTION) System.exit(0); public void actionPerformed(ActionEvent e)/按下begin按钮 if(e.getSource()=btn) try my.thread.start(); /开始线程 my.validate(); catch(Exception ee) MyPanel() setLayout(null); snake=new Button20; food=new int 20; thread=new Thread(this); for(int j=0;j99;j+) foodj=(int)(Math.random()*99);/定义20个随机食物
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1