资讯详情

JAVA课程设计—飞机大战和道路狂飙小游戏(可连接数据库实现用户信息查询、刷新)

文章目录

    • 一、系统需求,主要功能描述
    • 1.系统需求
    • 2.主要功能
    • 二、系统结构、设计方案(类图)
    • 1.系统结构
    • 2. 设计方案(类图)
    • 三、系统实现技术,编码说明
    • 1.系统实现技术
    • 四、 性能参数的设计
    • 1. 要求数据管理能力
    • 2. 准确性
    • 3. 灵活性
    • 4. 流畅性
    • 5. 鲁棒性(robust)
    • 6. 时间特性
    • 五、 操作结果及分析
    • 1.项目打包
    • 2.服务器数据截图
    • 3.游戏主界面
    • 4.游戏状态界面
    • 5. 飞机大战排行榜界面
    • 6.登录失败界面
    • 7.注册失败界面
    • 8.注册失败界面
    • 六、总结和项目自评
    • 1.项目质量完成
    • 2.项目完成进度
    • 3.项目存在问题
    • 4.项目改进方向
    • 六、 其他(项目细节)
    • 八. 代码说明
    • 九、开发环境

一、系统需求,主要功能描述

1.系统需求

用户可以在主界面注册、登录和查看列表;登录成功后,可以选择ShootGame(飞机大战游戏)或CarGame(道路狂飙游戏)。

2.主要功能

  1. 竞技排行榜:用户查看排行榜,实现与他人竞争。
  2. 用户注册和登录:用户可根据既定规则注册和登录专属账号,体验专属游戏记录。
  3. ShootGame:随着敌机和小蜜蜂数量的增加,给定时器的设置进度,飞行物的生成/入口/步行/射击/碰撞,游戏结束,绘制游戏状态(开始/进行/暂停/结束),绘制飞行物(小蜜蜂/小敌机/Boss机/英雄机),画分数(Score/MaxScore/Life/Energy)、绘制背景
  4. 用户注册与登录:用户可以根据既定规则注册与登录专属账号,体验专属的游戏记录。
  5. 项目包装:将项目包装成可执行文件,实现项目移植,摆脱jdk,IJ等待环境约束。
  6. 云存储:用户信息存储在云服务器端,不占用额外的用户内存,杜绝直接信息修改,实现所有用户信息同步。

二、系统结构、设计方案(类图)

1.系统结构

在这里插入图片描述

2. 设计方案(类图)

该包以Flying飞行类行,分Shoot,Collision接口,Flying定义飞行物的固有特征和飞行物的共同方法,Hero,Boss,Bee,Enemy,Bullet为Flying子类,继承Flying变量和方法提高了代码的重用性和鲁棒性。 User包中包含User类别和存储配置文件的位置Info接口,User类别主要包括用户与后端数据库的连接、登录、注册和保存。 图形界面包括项目主界面、用户登录注册和游戏入口。 该包包含ShootGame与CarGame游戏主界面和游戏操作逻辑方法。 该包包含CarGame游戏的所有组件,以Car为父类,UserCar,PcCar为子类。

三、系统实现技术,编码说明

1.系统实现技术

:实现账户密码验证、注册、用户信息检索、插入、更新、删除等操作,统一管理数据,确保数据的安全性和完整性。 :将代码实现为软件,摆脱增强jdk开发环境降低了项目沟通和用户使用的可能性,降低了用户的使用成本。提高了项目的安全性,防止了错误导致的代码丢失或错误,防止了用户在游戏中的不正当竞争。 :利用GUI构建鼠标键盘监控(AWT)、登录界面、主界面、游戏界面、提示界面等,实现可视化界面。 1.代码中可以反映继承、包装、多肽和接口。

四、 性能参数的设计

1. 要求数据管理能力

用户账号:不使用空格,无字数限制,支持汉英文; 用户密码:6-11位字符,无特殊符号限制;

2. 准确性

为每个用户设置索引值,通过索引值准确修改用户信息,实现端到端数据连接。

3. 灵活性

多个用户可以同时在线,用户和用户不会互相干扰。

4. 流畅性

采用写回策略,设置了写回缓冲器,减少了访问主存的次数,即更新缓存时,只有在需要交换缓存中的脏数据时,才能将数据同步到主内存中。

5. 鲁棒性(robust)

系统生存在异常和危险情况下的关键。该项目具有异常处理功能,可以捕获和响应事故,以确保程序安全结束,计算机不会崩溃。

. 时间特性

本项目通过定时器设置进度,可以指定想要delay(开始执行的等待时间)时间,在实现时Timer类可以调度任务,TimerTask则是通过在run()方法里实现具体任务。Timer实例可以调度多任务,它是线程安全的。当Timer的构造器被调用时,它创建一个线程,这个线程可以用来调度任务。

五、 运行结果与分析

1.项目打包

2.服务器数据截图

3.游戏主界面

4.游戏状态界面

5. 飞机大战排行榜界面

6.登录失败界面

7.注册失败界面

8.注册失败界面

六、总结与项目自评

1.项目完成质量

按计划完成原定飞机大战项目功能目标,实现英雄机射击,加血,减血清屏等功能,并且拥有BOSS,小蜜蜂奖励机制。利用数据库存放用户数据,可以联机实现不同用户端共享数据,并且达到较好的用户体验。同时利用飞机大战定时器,碰撞,随机等机制,实现小汽车碰撞小游戏。

2.项目完成进度

按照原定计划按时完成项目,并在完成原定的飞机大战计 划上制作了一个汽车游戏。

3.项目存在问题

3.1其他用户只有与主机连接同一局域网时才可正常登入账号。 3.2游戏方式单一,用户粘性不强。 3.3缺乏多感官的游戏体验。

4.项目改进方向

4.1实现“全网通”,在用户连接不同网络时也可以正常登入账号。 4.2开发多种玩法,比如关卡模式、联机模式等。 4.3实现声音特效的嵌入。 4.4实现用户间的交流平台(聊天室)。 4.5添加更多的游戏项目。

六、 其他(项目细节)

1.游戏难度随时间增加,5%的概率生成小蜜蜂 2.定时器定时任务,每1秒保存1次用户信息,既能保持适度流畅的游戏体验,也能及时保存用户信息。 3.碰撞逻辑

八. 代码说明


    public void setPassword(String password) { 
        
        this.password = password;
    }

    public int getMax_score() { 
        
        return max_score;
    }

    /** * 判断是否登录成功 */
    public boolean sign_in(String name, String password) { 
        
        String sql = "select user_id,user_name,user_password,user_score from user";//查询user表中的所有信息
        try { 
        
            initParam(Sql_filename);
            Connection connection = DriverManager.getConnection(url, user, pass);//连接数据库
            Statement statement = connection.createStatement();//创建statement对象
            ResultSet resultSet = statement.executeQuery(sql);//执行sql语句
            while (resultSet.next()) { 
        
                this.id = resultSet.getInt(1);
                this.name = resultSet.getString(2);
                this.password = resultSet.getString(3);
                this.score = 0;
                this.max_score = resultSet.getInt(4);
                if (this.name.equals(name) && this.password.equals(password))
                    return true;
            }
            connection.close();
            statement.close();
            resultSet.close();
        } catch (Exception e) { 
        
            e.printStackTrace();
        }
        return false;

    }

    /** * 判断是否注册成功 */
    public boolean register(String name, String password) { 
        

        if (password.length() > 11 || password.length() < 6) { 
        
            //System.out.println(password);
            return false;
        }
        if (name.contains(" "))
            return false;
        if (in(name))
            return false;
        getCount();
        String sql = "insert into user(user_id,user_name,user_password,user_score) values(" +
                (COUNT + 1) + " , '" + name + "' , '" + password + "' , " + 0 + ")";
        try { 
        
            initParam(Sql_filename);
            Connection connection = DriverManager.getConnection(url, user, pass);
            Statement statement = connection.createStatement();
            statement.executeUpdate(sql);//插入信息
            connection.close();
            statement.close();
            return true;
        } catch (Exception e) { 
        
            e.printStackTrace();
        }
        return false;
    }

    /** * 判断用户是否已存在于配置文件中 */
    public boolean in(String name) { 
        
        String sql = "select user_id,user_name,user_password,user_score from user";//查询user表中的所有信息
        try { 
        
            initParam(Sql_filename);
            Connection connection = DriverManager.getConnection(url, user, pass);//连接数据库
            Statement statement = connection.createStatement();//创建statement对象
            ResultSet resultSet = statement.executeQuery(sql);//执行sql语句
            while (resultSet.next()) { 
        
                int id = resultSet.getInt(1);
                this.name = resultSet.getString(2);
                this.password = resultSet.getString(3);
                this.score = resultSet.getInt(4);
                if (this.name.equals(name))
                    return true;
            }
        } catch (Exception e) { 
        
            e.printStackTrace();
        }
        return false;
    }

    /** * 给用户临时增加分数 */
    public void add_score(int score) { 
        
        this.score += score;
    }

    /** * 保存用户信息 */
    public void save() { 
        
        set_score();
    }

    public void copyFrom(User user) { 
        
        this.setScore(user.getScore());
        this.setId(user.getId());
        this.setName(user.getName());
        this.setAttribute(user.getAttribute());
        this.setPassword(user.getPassword());
    }

    public void set_score() { 
        
        String sql = "update user set user_score=" + score + " where user_id=" + this.id;
        if (score <= max_score)
            return;
        try { 
        
            //System.out.println(score);
            initParam(Sql_filename);
            Connection connection = DriverManager.getConnection(url, user, pass);//连接数据库
            Statement statement = connection.createStatement();//创建statement对象
            statement.executeUpdate(sql);//执行sql语句
            connection.close();
            statement.close();
        } catch (Exception e) { 
        
            e.printStackTrace();
        }
    }

    public ArrayList<User> getRank() { 
        
        String sql = "select user_id,user_name,user_password,user_score from user";//查询user表中的所有信息
        ArrayList<Integer> score_rank = new ArrayList<>();
        ArrayList<User> user_rank = new ArrayList<>();
        try { 
        
            initParam(Sql_filename);
            Connection connection = DriverManager.getConnection(url, user, pass);//连接数据库
            Statement statement = connection.createStatement();//创建statement对象
            ResultSet resultSet = statement.executeQuery(sql);//执行sql语句
            while (resultSet.next()) { 
        
                int temp_id = resultSet.getInt(1);
                String temp_name = resultSet.getString(2);
                String temp_password = resultSet.getString(3);
                int temp_score = resultSet.getInt(4);
                score_rank.add(temp_score);
            }
            connection.close();
            statement.close();
            resultSet.close();
        } catch (Exception e) { 
        
            e.printStackTrace();
        }
        for (int j = 0; j < score_rank.size(); j++) { 
        
            int maxIndex = 0;
            for (int k = 0; k < score_rank.size(); k++) { 
        
                if (score_rank.get(maxIndex) < score_rank.get(k))
                    maxIndex = k;
            }
            String temp_name = id_to_account(maxIndex);
            int temp_score = score_rank.get(maxIndex);
            User user = new User(temp_name, temp_score, maxIndex);
            user_rank.add(user);
            score_rank.add(maxIndex, -1);
            score_rank.remove(maxIndex + 1);
        }


        class MyComparator implements Comparator { 
        
            @Override
            public int compare(Object o1, Object o2) { 
        
                Integer score1 = ((User) o1).getScore();
                Integer score2 = ((User) o2).getScore();
                return score1.compareTo(score2);
            }
        }

        //Arrays.sort(rank,new MyComparator());
        return user_rank;
    }

    //按指定行读取用户名称
    public String id_to_account(int id) { 
        
        String sql = "select user_id,user_name,user_password,user_score from user";//查询user表中的所有信息
        try { 
        
            initParam(Sql_filename);
            Connection connection = DriverManager.getConnection(url, user, pass);//连接数据库
            Statement statement = connection.createStatement();//创建statement对象
            ResultSet resultSet = statement.executeQuery(sql);//执行sql语句
            while (resultSet.next()) { 
        
                int temp_id = resultSet.getInt(1);
                String temp_name = resultSet.getString(2);
                if (id == temp_id)
                    return temp_name;
            }
            connection.close();
            statement.close();
            resultSet.close();
        } catch (Exception e) { 
        
            e.printStackTrace();
        }
        return null;
    }

    public int id_to_score(int id) { 
        
        String sql = "select user_id,user_name,user_password,user_score from user";//查询user表中的所有信息
        try { 
        
            initParam(Sql_filename);
            Connection connection = DriverManager.getConnection(url, user, pass);//连接数据库
            Statement statement = connection.createStatement();//创建statement对象
            ResultSet resultSet = statement.executeQuery(sql);//执行sql语句
            while (resultSet.next()) { 
        
                int temp_id = resultSet.getInt(1);
                String temp_name = resultSet.getString(2);
                String temp_password = resultSet.getString(3);
                int temp_score = resultSet.getInt(4);
                if (id == temp_id) { 
        
                    this.max_score = temp_score;
                    return temp_score;
                }
            }
            connection.close();
            statement.close();
            resultSet.close();
        } catch (Exception e) { 
        
            e.printStackTrace();
        }
        return -1;
    }

}

Test类
public class Test { 
        
    public static void main(String[] args) { 
        
        Run run = new Run();
        run.main();
    }
}

import Games.CarGame;
import Games.ShootGame;
import Users.User;
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.ArrayList;

public class Run extends 
        标签: 快插矩形连接器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台