贪吃蛇课程设计.docx
贪吃蛇课程设计 面向对象程序设计 课程设计报告 题目:贪吃蛇游戏设计与实现 院(系):信息科学与工程学院 专业班级:计科1302班 学生姓名:毛慧剑 学号:20221101057 指导教师:苏莹 2022年8月31日至2022年9月25日华中科技大学武昌分校制 面向对象程序设计课程设计任务书 目录 1需求与总体设计 (1) 1.1总体设计思路 (1) 1.2系统主要功能图 (1) 1.3系统主要类图 (2) 2详细设计. 错误!未定义书签。 2.1 Login类. 错误!未定义书签。 2.2 SnakeFrame类. 错误!未定义书签。 2.3 SnakeModel类. 错误!未定义书签。 2.4SnakePanel类 (3) 2. 5 LocationRO类. .错误!未定义书签。 2.6 Location类.错误!未定义书签。 3.编码实现 (4) 3.1 Login类的详细代码 (4) 3.2 SnakeFrame类的详细代码 (7) 3.3 SnakeModel类的详细代码 (12) 3.4 SnakePanel类的详细代码 (17) 3.5 LocationRO类的详细代码 (22) 3.6 Location类的详细代码 (23) 4系统运行与测试 (25) 4.1程序主界面 (25) 4.2游戏开始界面 (25) 4.3游戏操作界面 (25) 4.4游戏难度设置界面 (26) 4.5游戏窗口大小设置 (27) 4.6游戏软件开发人员介绍 (27) 5系统使用步骤 (28) 总结 (29) 1需求与总体设计 1.1总体设计思路 本系统要进行的是贪吃蛇游戏的开发。这个游戏是在窗口的平台上进行相关操作的。为了满足大部分用户的要求,本游戏必须实现的功能有如下要求:(1)贪吃蛇游戏是大家很常见的小游戏,在生活工作之余大家可以玩它,已达到放松各种压力的目的。 (2)游戏可以进行升级,也就是增加吃食物的难度,以便使大家更有挑战性,不觉得太无趣。 (3)游戏界面大小可以任意指定,数据从文件读入。 (4)利用swing实现良好的GUI界面。 (5)基本功能与要求: 给出1条小蛇和随机出一个食物当小蛇吃到食物时就加分.良好的用户界面,有分数显示,并且可调节小蛇运动速度。良好的方块形状设计,绘制小蛇和食物,小蛇有六个方块组成,食物由1个方块组成。小蛇可通过键盘方向键(上、下、左、右键)进行向上、向下、向左、向右移动。当小蛇吃掉一个食物后会变长,并且吃完食物时食物会消失,并立即随即生成一个新的食物 . 1.2系统主要功能图 贪吃蛇实现的基本功能:生成登录窗口界面,登录进入游戏,可以设置游戏的窗口大小和难度等级 游戏途中有暂停继续开始等基本功能。同时还设有游戏帮助等具体游戏操作指示、在加入了软件开发人员的相关信息介绍结束游戏之后得分在窗口下自动统计得出 图1-1系统功能图1.3系统主要类图 图1-2类图 2详细设计 2.1 Login 类 Login 类,登陆界面要求输入登陆者输入用户名和密码,分别设Go 和Cancel 两个登陆选项。 2.1.1 2.2 SnakeFrame 类 创建游戏窗口主界面。采用图形界面设计,有窗体,菜单栏和游戏操作界面。 2.3 SnakeModel 类 此类为蛇的初始化状态及模型,所有的游戏的开始都通过此类初始化及对蛇的操作。 2.4 SnakePanel类 此类为游戏界面创建蛇的面板和蛇的移动控制实现 2.5 LocationRO类 随机生成的食物位置。用来随机生成食物。引导蛇的移动方向。 2.6 Location类 对蛇的位置的描述类 3编码实现 1.Login类 /登陆界面 public class Login extends JFrame private TextField f1;/创建文本框 private TextField f2; private JButton b1;/创建按钮 private JButton b2; public Login() /登陆界面 Container cp=getContentPane();/获取容器 cp.setLayout(new GridLayout(4,1);/设置布局管理为网格四行一列 Label l1=new Label("用户名");/创建标签了l1,l2 Label l2=new Label("密码"); Panel p1=new Panel();/创建面板,p1,p2,p3,p4 Panel p2=new Panel(); Panel p3=new Panel(); MyPanel1 p4=new MyPanel1();/创建插入图片平面p4 f1=new TextField(10); f2=new TextField(10); f2.setEchoChar('*');/回显字符为* 用于输入密码,设置为不可见 b1=new JButton("确定");/新建按钮b1,b2 b2=new JButton("取消"); p1.add(l1);/第一行添加label 1 p1.add(f1); p2.add(l2); p2.add(f2); p3.add(b1); p3.add(b2); cp.add(p4);/面板p4,p1,p2,p3分别加入容器cp cp.add(p1); cp.add(p2); cp.add(p3); b1.addActionListener(new Enter();/添加按钮事件响应 b2.addActionListener(new Close(); JFrame.setDefaultLookAndFeelDecorated(true); SnakeFrame frame=new SnakeFrame();/创建游戏主界面 frame.setSize(frame.col*11+11,frame.row*11+100); frame.setResizable(false); frame.setLocation(500,200);/设置窗体位置 frame.setTitle("疯狂贪吃蛇"); frame.setVisible(true); else JOptionPane.showMessageDialog(null, "用户名或密码错误,请重新登录!");/错误用户提示 class Close implements ActionListener /关闭登陆按钮响应 public void actionPerformed(ActionEvent e) JButton bt=(JButton)e.getSource(); if(bt=b2) System.exit(0);/退出 /主函数程序开始 public static void main(String args) Login log=new Login(); log.setTitle("疯狂贪吃蛇界面登陆"); log.setBounds(500, 200, 300, 300); log.setBackground(Color.blue); log.setVisible(true); class MyPanel1 extends JPanel /插入登陆界面图片 Image img=Toolkit.getDefaultToolkit().getImage("imgs/201.jpg");/添加图片public void paint(Graphics g) g.drawImage(img,0,0,this); 2.SnakeFrame 类 public class SnakeFrame extends JFrame implements ActionListener int row=30; int col=45; SnakePanel p=new SnakePanel(this,row,col); JMenuBar menubar=new JMenuBar();/菜单条 JMenu fileMenu=new JMenu("文件");/菜单 JMenuItem newgameitem=new JMenuItem("开始");/菜单条目 JMenuItem stopitem=new JMenuItem("暂停"); JMenuItem runitem=new JMenuItem("继续"); JMenuItem exititem=new JMenuItem("退出"); /"设置"菜单 JMenu optionMenu=new JMenu("设置"); /* * 等级选项 * ButtonGroup 创建一组按钮选项 * JRadioButtonMenuItem 是属于一组菜单项中的一个菜单项,该组中只能选择一个项。 * 被选择的项显示其选择状态。选择此项的同时,其他任何以前被选择的项都切换到未选择状态。 * Panel 是最简单的容器类。应用程序可以将其他组件放在面板提供的空间内,这些组件包括 其他面板。 */ JMenu degreeMenu=new JMenu("等级"); ButtonGroup groupDegree = new ButtonGroup(); JRadioButtonMenuItem oneItem= new JRadioButtonMenuItem("初级"); JRadioButtonMenuItem twoItem= new JRadioButtonMenuItem("中级"); JRadioButtonMenuItem threeItem= new JRadioButtonMenuItem("高级"); / 设置“窗口大小”菜单 JMenu windowsMenu = new JMenu("窗口大小"); JMenu windowsMenu1 = new JMenu("视图"); ButtonGroup groupDegree1 = new ButtonGroup(); JRadioButtonMenuItem minItem= new JRadioButtonMenuItem("小"); JRadioButtonMenuItem midItem= new JRadioButtonMenuItem("中"); JRadioButtonMenuItem maxItem= new JRadioButtonMenuItem("大"); / 设置“作者信息”菜单 JMenu XinXi=new JMenu("关于开发者"); JMenuItem XinXiItem=new JMenuItem("软件相关"); /设置“帮助”菜单 JMenu helpMenu=new JMenu("帮助"); JMenuItem helpItem=new JMenuItem("操作指南"); /可以被选定或取消选定的菜单项. final JCheckBoxMenuItem showGridItem= new JCheckBoxMenuItem("显示网格"); JLabel scorelabel;/为分数创建标签