软件技术实习项目:实验二、贪吃蛇游戏

本文档详述了一个使用Java Swing开发的贪吃蛇游戏项目。开发者通过IntelliJ IDEA和JDK17在Windows环境下进行开发,旨在设计一个允许用户通过键盘控制蛇移动并吃到食物得分的游戏。游戏包含开始、暂停、退出功能,设有计分器和计时器。重点介绍了键盘监听、蛇的移动逻辑以及食物随机生成的实现方法,通过项目实践提升了GUI界面设计能力,但也认识到自身在算法应用和代码水平方面的不足,计划通过更多实践来提高技能。
摘要由CSDN通过智能技术生成

目录

 1.系统简介

1.1设计背景

1.2开发工具及环境

2.系统分析与设计

2.1设计目的

2.2功能需求

2.3系统功能代码设计

2.3.1包和类的说明

2.3.2简单计算器的源代码清单

3.系统调试

3.1编写源程序界面

3.2测试用例

3.3运行结果

4.设计总结

附录:源代码


 1.系统简介

1.1设计背景

首先贪吃蛇作为手机上的经典游戏,丰富了我们的童年生活,借此机会,锻炼自己的编程能力并且重温童年。我希望自己可以尝试一下,经历还原经典游戏。

1.2开发工具及环境

(1)开发工具及介绍
IntelliJ IDEA2021是一款专业的JAVA IDE编程工具,最新版本支持git、svn、github等版本控制工具,并整合了智能代码助手、代码自动提示等功能,软件的强大的静态代码分析和人体工程学设计,能够让用户的开发设计变得简单轻松。同时,它也被认为是当前Java开发效率最快的IDE工具。 
(2)开发环境:window10系统、IntelliJ IDEA2021、JDK17。

2.系统分析与设计

2.1设计目的

使用Java Swing的GUI图形用户界面编程设计并编写一个贪吃蛇程序,用户通过键盘操作可以进行贪吃蛇的移动,并进行游戏。

2.2功能需求

1屏幕上随机出现一个食物称为豆子。玩家能利用上下左右控制“蛇”的移动,“蛇”吃到食物身体加长一节,得分增加,“碰到边界蛇头与蛇身相撞“蛇”死亡,游戏结束

2有开始键、暂停键和停止退出的功能,设置计分器和计时器。

2.3系统功能代码设计

2.3.1包和类的说明

2.3.2简单计算器的源代码清单

public GluttonousSnake()

游戏界面布局,设置键盘监听。

public GluttonousSnake() {
        //布局
        JLabel label = new JLabel("当前身长:");
        add(label);
        label.setBounds(5, 15, 80, 20);
        label.setFont(new Font("微软雅黑", Font.PLAIN, 15));
        add(Score);
        Score.setBounds(90, 15, 80, 20);
        Score.setFont(new Font("微软雅黑", Font.PLAIN, 15));
        JLabel label2 = new JLabel("所花时间:");
        add(label2);
        label2.setBounds(5, 45, 80, 20);
        label2.setFont(new Font("微软雅黑", Font.PLAIN, 15));
        add(Time);
        Time.setBounds(90, 45, 80, 20);
        Time.setFont(new Font("微软雅黑", Font.PLAIN, 15));

        for (int i = 0; i < MAX_SIZE; i++) {
            body[i] = new Grid(0, 0);
        }

        addKeyListener(new KeyAdapter() {
            public void keyPressed(KeyEvent e) {
                super.keyPressed(e);

                if (e.getKeyCode() == KeyEvent.VK_D) {
                    if (isRun && !current_direction.equals("L")) {
                        direction = "R";
                    }
                }
                if (e.getKeyCode() == KeyEvent.VK_A) {
                    if (isRun && !current_direction.equals("R")) {
                        direction = "L";
                    }
                }
                if (e.getKeyCode() == KeyEvent.VK_W) {
                    if (isRun && !current_direction.equals("D")) {
                        direction = "U";
                    }
                }
                if (e.getKeyCode() == KeyEvent.VK_S) {
                    if (isRun && !current_direction.equals("U")) {
                        direction = "D";
                    }
                }
                if (e.getKeyCode() == KeyEvent.VK_ESCAPE) {
                    direction = "R";//默认向右走
                    current_direction = "R";//当前方向
                    first_launch = false;
                    isRun = true;
                    body_length = 5;
                    head = new Grid(227, 100);
                    Score.setText("6");
                    hour = 0;
                    min = 0;
                    sec = 0;
                    for (int i = 0; i < MAX_SIZE; i++) {
                        body[i].x = 0;
                        body[i].y = 0;
                    }

                    run.start();
                    System.out.println("Start again");
                }
                if (e.getKeyCode() == KeyEvent.VK_SPACE) {
                    if (!pause)//暂停
                    {
                        pause = true;
                        isRun = false;
                    } else//开始
                    {
                        pause = false;
                        isRun = true;
                    }
                }
            }
        });

        new Timer();

        setFocusable(true);
    }

public void paintComponent( )

初始化蛇头、蛇身、食物和起始位置,设置游戏界面。

public void paintComponent(Graphics g1) {
        super.paintComponent(g1);
        Graphics2D g = (Graphics2D) g1;

        //画头
        g.setColor(Color.BLUE);
        g.fillRoundRect(head.x, head.y, 20, 20, 20, 20);
        if (!first_launch) {
            //初始化身体
            
  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值