1、Java 贪吃蛇报告Java高级编程课程报告第xx小组:贪吃蛇游戏项目小组成员及分工姓名角色负责功能组长设计与编码测试主要完成模式选择窗口和游戏主窗口菜单栏下拉菜单的设计与程序编写,贪吃蛇游戏界面布局,游戏的操作步骤设计。程序的调试主要完成游戏主窗口的设计与编程,设计贪吃蛇的移动方向键设置,得分规则等,以及最后程序的调试。主要完成主菜单窗口的设计和程序编写,界面的设计布局,游戏主窗口界面背景设置,按钮的图片设置等。一、 实验环境操作系统:Windows 7编程环境:Eclipse、JDK二、 实验内容与完成情况(主要介绍项目总体功能分析与说明。)贪吃蛇小游戏的JAVA程序是利用上 、下 、左、
2、右 方向键来改变蛇的运动方向,按空键暂停游戏,按enter键重新开始。长按某个方向键后,蛇的运动速度会加快,在随机的地方产生食物,吃到食物就变成新的蛇体,碰到壁或自身则游戏结束,否则正常进行游戏。以不同的速度和不同方向吃到食物所获得的分数也不相同。窗口功能说明:设计了三个窗口,分别是游戏主窗口,主菜单窗口,模式选择窗口。?菜单栏分别为:游戏菜单(重新开始)和帮助菜单以及返回(返回主菜单)?。其中,按返回菜单按钮后会显示主菜单,其包括游戏开始、设置、退出游戏三项按钮选择;如果按“设置”按钮会进入“模式选择”窗口。而模式选择窗口菜单包括了初级、中级、高级、返回按钮。1、功能1(主菜单窗口)(1)
3、主菜单窗口主要是提供“游戏开始”、“设置”和“退出”按钮。“游戏开始”按钮按下后会进入“游戏主窗口”开始游戏; “设置”按钮是调用“模式选择”窗口对游戏贪吃蛇的速度进行设置; “退出”按钮按下则会直接退出游戏。(2) 功能1实现的流程图实现的效果图如下:(3) 功能1(主菜单窗口)代码:package Swing;import ;import ;import ;import ;import ;import ;import ;import ;import ;import ;import ;public class setMenu extends JFrame private int speed1
4、 = 200;public static int speed = 200;/ static int speed = 20; private JPanel contentPane; /* * Launch the application. */ public static void main(String args) EventQueue.invokeLater(new Runnable() public void run() try setMenu frame = new setMenu(speed); frame.SsetMenu(frame); frame.setVisible(true)
5、; catch (Exception e) e.printStackTrace(); ); /* * Create the frame. */ public setMenu(int speed2) speed1=speed2; (speed2); public void SsetMenu(final setMenu frame) setTitle(主菜单); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 250, 350); contentPane = new JPanel(); contentPane.
6、setBackground(new Color(102, 204, 102); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5); setContentPane(contentPane); contentPane.setLayout(null); /按钮:游戏开始 JButton NewGameButton = new JButton(); NewGameButton.setIcon(new ImageIcon(img/gamebegin.png); NewGameButton.setBounds(53, 52, 123, 40); NewGa
7、meButton.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) Game gs = new Game(speed1); frame.dispose(); ); contentPane.add(NewGameButton); /按钮:游戏设置 JButton setButton = new JButton(); setButton.addMouseListener(new MouseAdapter() Override public void mouseClicked(Mouse
8、Event e) model frame1 = new model(); frame1.Mmodel(frame1); frame1.setVisible(true); frame.dispose(); ); /按钮图片设置 setButton.setIcon(new ImageIcon(img/set.png); setButton.setBounds(53, 128, 123, 45); contentPane.add(setButton); /按钮:游戏推出 JButton exitButton= new JButton(); exitButton.setIcon(new ImageIc
9、on(img/exit.png); exitButton.setBounds(53, 206, 123, 40); exitButton.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) System.exit(0); ); contentPane.add(exitButton); 2、功能2(模式选择窗口)(1) 功能2的文字描述:“模式选择”窗口菜单包括了初级、中级、高级、返回按钮。其中当选择按下初级、中级、高级按钮后,会弹出一个“游戏难度“窗口,并提示设置成功:*,并按下”确
10、定“按钮后窗口关闭同时模式选择成功,按下”返回“按钮返回主菜单窗口。(2) 功能2(模式选择窗口)实现的流程图实现的效果图如下:(3) 功能2(模式选择窗口)代码: package Swing;import ;import ;import ;import ;import ;import ;import ;import ;import ;import ;import ;public class setMenu extends JFrame private int speed1 = 200;public static int speed = 200;/ static int speed = 20;
11、 private JPanel contentPane; /* * Launch the application. */ public static void main(String args) EventQueue.invokeLater(new Runnable() public void run() try setMenu frame = new setMenu(speed); frame.SsetMenu(frame); frame.setVisible(true); catch (Exception e) e.printStackTrace(); ); /* * Create the
12、 frame. */ public setMenu(int speed2) speed1=speed2; System.out.println(speed2); public void SsetMenu(final setMenu frame) setTitle(主菜单); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 250, 350); contentPane = new JPanel(); contentPane.setBackground(new Color(102, 204, 102); con
13、tentPane.setBorder(new EmptyBorder(5, 5, 5, 5); setContentPane(contentPane); contentPane.setLayout(null); /按钮:游戏开始 JButton NewGameButton = new JButton(); NewGameButton.setIcon(new ImageIcon(img/gamebegin.png); NewGameButton.setBounds(53, 52, 123, 40); NewGameButton.addActionListener(new ActionListen
14、er() public void actionPerformed(ActionEvent e) Game gs = new Game(speed1); frame.dispose(); ); contentPane.add(NewGameButton); /按钮:游戏设置 JButton setButton = new JButton(); setButton.addMouseListener(new MouseAdapter() Override public void mouseClicked(MouseEvent e) model frame1 = new model(); frame1
15、.Mmodel(frame1); frame1.setVisible(true); frame.dispose(); ); /按钮图片设置 setButton.setIcon(new ImageIcon(img/set.png); setButton.setBounds(53, 128, 123, 45); contentPane.add(setButton); /按钮:游戏推出 JButton exitButton= new JButton(); exitButton.setIcon(new ImageIcon(img/exit.png); exitButton.setBounds(53,
16、206, 123, 40); exitButton.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) System.exit(0); ); contentPane.add(exitButton); 3、 功能3(贪吃蛇游戏窗口)(1) 能3(贪吃蛇游戏窗口)文字描述:贪吃蛇游戏窗口界面包括蛇体与食物游戏区域,正上方有即时计分框(记录目前所得的分数),左上角有三个下拉菜单选项包括“菜单”下拉菜单,“帮助”菜单,“返回”菜单。点击“菜单”菜单会出现下拉的“重新开始”选项同时也可以按下E
17、nter键重新开始游戏;点击“帮助”菜单会出现“游戏说明”选项,点击进入后出现游戏帮助信息;点击“返回”菜单则直接返回主菜单选择窗口。贪吃蛇游戏窗口大小是固定的目的是确定并设置当蛇体碰触到边框后提示游戏失败的出框,在规定的窗口范围内蛇体可以通过按上 、下 、左、右 方向键控制其运动方向;在吃到界面区域中出现的食物后蛇体会变长,而以不同的速度和运动长度(UP和DOWN是偶数,RIGHT和LEFT是奇数)所得到的分数也不一样。按空键游戏暂停,按Enter键游戏重新开始。(2) 功能3现的流程图:(3) 功能3(贪吃蛇游戏窗口)代码: package Swing;import ;import ;im
18、port ;import ;import ;import ;import ;import ;import ;import ;import ;import ;import ;import ;import ;import ;import ;import ;import ;import ;import ;import ;import ;import ;import ;import ;import ;import ;/Main Classpublic class Game extends KeyAdapter implements ImageObserver /初始速度 int speed_all =
19、 200; BufferedImage bgImage=null; JFrame mainFrame; JPanel jPanel; / Canvas paintCanvas; JLabel labelScore;/ 计分牌 SnakeModel snakeModel = null;/ 蛇 public static final int DEFAULT_WIDTH = 500; public static final int DEFAULT_HEIGHT = 400; public static final int nodeWidth = 10; public static final int
20、 nodeHeight = 10; private JMenuBar menuBar; private JMenu menu; private JMenuItem menuItem; private JMenuBar menuBar_1; private JMenu mnNewMenu; private JMenu mnNewMenu_1; private JMenuItem mntmNewMenuItem; private JMenuItem mntmNewMenuItem_1; private JMenu mnNewMenu_2; / GreedSnake():初始化游戏界面 public
21、 Game(int speed_gs) speed_all=speed_gs; (Game:+speed_all); / 设置界面元素 mainFrame = new JFrame(贪吃蛇游戏); Container cp = mainFrame.getContentPane(); aoao(mainFrame); jPanel = new JPanel(); jPanel.setPreferredSize(new Dimension(DEFAULT_WIDTH-10, DEFAULT_HEIGHT-10 );/500*390 / paintCanvas.setSize(DEFAULT_WID
22、TH + 20, DEFAULT_HEIGHT + 20); jPanel.addKeyListener(this); cp.add(jPanel, BorderLayout.CENTER); / cp.add(paintCanvas, BorderLayout.CENTER); JPanel panelButtom = new JPanel(); panelButtom.setLayout(new BorderLayout(); cp.add(panelButtom, BorderLayout.SOUTH); /score labelScore = new JLabel(所得分数为:, JL
23、abel.CENTER); mainFrame.getContentPane().add(labelScore, BorderLayout.NORTH); mainFrame.addKeyListener(this); mainFrame.pack(); mainFrame.setResizable(false);/ 设置窗口大小不能变化 mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); mainFrame.setVisible(true); begin(); / keyPressed():按键检测及菜单设置 public vo
24、id aoao(final JFrame mainFrame) mainFrame.setJMenuBar(menuBar); menuBar_1 = new JMenuBar(); mainFrame.setJMenuBar(menuBar_1); mnNewMenu = new JMenu(菜单); menuBar_1.add(mnNewMenu); mntmNewMenuItem = new JMenuItem(重新开始); mntmNewMenuItem.addActionListener(new ActionListener() public void actionPerformed
25、(ActionEvent arg0) Game gs = new Game(speed_all); mainFrame.dispose(); ); mnNewMenu.add(mntmNewMenuItem); mnNewMenu_1 = new JMenu(帮助); mnNewMenu_1.addMouseListener(new MouseAdapter() Override public void mouseClicked(MouseEvent e) snakeModel.changePauseState(); ); menuBar_1.add(mnNewMenu_1); mntmNew
26、MenuItem_1 = new JMenuItem(游戏说明); mntmNewMenuItem_1.addActionListener(new ActionListener() /游戏说明响应时间 public void actionPerformed(ActionEvent arg0) JOptionPane.showMessageDialog(null, 按 控制方向,空格键暂停,Enter键重新开始, 游戏帮助, JOptionPane.INFORMATION_MESSAGE); ); mnNewMenu_1.add(mntmNewMenuItem_1); mnNewMenu_2 =
27、 new JMenu(返回); mnNewMenu_2.addMouseListener(new MouseAdapter() /连接主菜单 Override public void mouseClicked(MouseEvent arg0) setMenu frame123 = new setMenu(speed_all); frame123.SsetMenu(frame123); frame123.setVisible(true); mainFrame.dispose(); /(123456); ); menuBar_1.add(mnNewMenu_2); /键盘响应时间设置 public
28、 void keyPressed(KeyEvent e) int keyCode = e.getKeyCode(); if (snakeModel.running) switch (keyCode) case KeyEvent.VK_UP: snakeModel.changeDirection(SnakeModel.UP); break; case KeyEvent.VK_DOWN: snakeModel.changeDirection(SnakeModel.DOWN); break; case KeyEvent.VK_LEFT: snakeModel.changeDirection(Snak
29、eModel.LEFT); break; case KeyEvent.VK_RIGHT: snakeModel.changeDirection(SnakeModel.RIGHT); break; case KeyEvent.VK_ADD: case KeyEvent.VK_PAGE_UP: snakeModel.speedUp();/ 加速 break; case KeyEvent.VK_SUBTRACT: case KeyEvent.VK_PAGE_DOWN: snakeModel.speedDown();/ 减速 break; case KeyEvent.VK_SPACE: case KeyEvent.VK_P: snakeModel.changePauseState();/
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1