1.团队名称、团队成员介绍

团名:嗷嗷嗷嗷嗷

吴军霖(组长)

  • 写得一手好代码也改得一手好bug
  • 代码整洁好看源于强迫症
  • 大概没有什么不会的东西叭
  • 真正的王者段位

欧阳震霆(组员)

  • 同样擅长写代码
  • 在青青草原上创造了僵尸家族
  • 熟练掌握多线程等技术
  • 也是王者段位

陈文杰(组员)

  • 可代码可PPT可画图
  • 创造太阳落在青青草地
  • 熟练******等等厉害技术
  • ***(隐藏段位)

刘艳钦(组员)

  • 可代码可bug可博客
  • 豌豆射手吐出豌豆
  • 在数据库的危险边缘试探
  • 擅长叨逼叨和细节控
  • ***(隐藏段位)

2.项目git地址

3.项目git提交记录截图(要体现出每个人的提交记录、提交说明),老师将重点考核。

4.项目功能架构图与主要功能流程图

5.项目UML图

6.项目运行截图

7.项目关键代码(不能太多)

1.游戏界面效果###

  • JLayeredPane为容器添加了深度,允许组件在需要时互相重叠。
  • JLayeredPane将深度范围按 层 划分,在同一层内又对组件按位置进一步划分,将组件放入容器时需要指定组件所在的层,以及组件在该层内的 位置(position/index)。

    层的编号越大越显示在前面;同层内位置编号越大越靠近底部
  • 使用JLayeredPane对界面实现按层划分,使各组件按层级相覆盖,并实现组件对鼠标监听的优先级划分
  • 代码定义了两个层级面板,一个作为游戏的选择界面,一个作为战斗界面
  • 在选择界面中,在层级面板的底层添加背景图,在较上层添加各个功能按钮,而在最上层有一个不可见的登录注册组件(JPanel),点击登录按钮时将登录面板改为可见.点击游戏开始时,将窗体的层级面板换为战斗面板战斗面板中也是将背景图置于底层,将其它组件放在面板的较上层.将阳光所在层级设置高于其他组件可以实现阳光对鼠标的监听优先于其他组件,使得阳光收集事件可以优先于其他事件,如卡片的选取,铲子的点击和菜单的点击.点击时菜单时,各线程暂停,同样在最顶层使原来不可见的菜单面板设为可见.
  1. private void chooseCards(){
  2. Card card1 = new Card(GameFrame,"SunFlower", plantMap, controller);
  3. card1.setBounds(85, 7, card1.getCardWidth(), card1.getCardHeight());
  4. Cardboard.add(card1);
  5. cardList.add(card1);
  6. Card card2 = new Card(GameFrame,"Peashooter", plantMap, controller);
  7. card2.setBounds(145, 7, card2.getCardWidth(), card2.getCardHeight());
  8. Cardboard.add(card2);
  9. cardList.add(card2);
  10. }
  11. class PaintThread implements Runnable{
  12. JFrame frame;
  13. PaintThread(LaunchFrame launchFrame) {
  14. this.frame = launchFrame;
  15. }

2.僵尸的产生

  • 通过根据状态不断重绘僵尸来达到动画效果

  1. /***** 正常移动 *****/
  2. for (int i=1 ; this.x> minx && this.state==1 ; i++){
  3. if(this.life<=50) {
  4. this.state=2;
  5. zombie.setPic(0);
  6. zombie.setState(state);
  7. break;
  8. }
  9. if(this.x==350)
  10. this.life=20;
  11. try {
  12. if (i%11==0){
  13. zombie.normalpicChange();
  14. }
  15. zombie.setBounds(x,y,300,300);
  16. Thread.sleep(8);
  17. if (i%7==0){
  18. this.x--;
  19. }
  20. zombie.repaint();
  21. } catch (InterruptedException e) {
  22. e.printStackTrace();
  23. }
  24. }
  25. //正常换图
  26. public void normalpicChange(){
  27. if (pic < allPic[type])
  28. pic++;
  29. else
  30. pic = 0;
  31. }
  32. public void normalwalk(){
  33. }
  34. public void paintComponent(Graphics g) {
  35. super.paintComponent(g);
  36. if(state == 1) {
  37. ImageIcon img = new ImageIcon("Img\\Zombie"+type+"\\Frame"+pic+".png");
  38. image = img.getImage();
  39. Graphics2D g2 = (Graphics2D) g;
  40. g2.drawImage(image, 0, 0, img.getIconWidth(), img.getIconHeight(), this);
  41. }
  42. }

3.太阳的收集

  • 通过对鼠标的监听来判断是否收集到太阳
  1. @Override
  2. public void mouseClicked(MouseEvent e) {
  3. if (!isCollected){
  4. new Thread(new Collect(sun, x, y)).start();
  5. frame.setCursor(Frame.DEFAULT_CURSOR);
  6. isCollected = true;
  7. }
  8. }
  9. class Collect implements Runnable{
  10. private Sun sun;
  11. private int x;
  12. private int y;
  13. Collect(Sun sun, int x, int y){
  14. this.sun = sun;
  15. this.sun.alpha = 100;
  16. this.x = x;
  17. this.y = y;
  18. }

4.植物攻击

  • 以豌豆射手发射子弹为例
  • 碰撞检测:通过获得豌豆的坐标以及僵尸的坐标来算出两者的距离是否构成碰撞
  1. private boolean touchZombie(){
  2. List<Zombie> zombies = controller.getZombieLists().get(r);
  3. if (zombies.isEmpty())
  4. return false;
  5. for (Zombie zombie:zombies){
  6. int dis = Math.abs(x-40-zombie.getX());
  7. if (dis<25&& zombie.getLife()>0){
  8. zombie.getHurt();
  9. return true;
  10. }
  11. }
  12. return false;
  13. }

8.代码静态扫描

  • 第一次静态扫描的结果

  • 全部修正后的结果

9.尚待改进或者新的想法

尚改进:游戏还是会出现卡顿现象,以及樱桃炸弹只能攻击前方的僵尸而不能攻击后方的僵尸等小bug,没有实现利用网络技术进行排名

新想法:实现更多的植物种植以及加入更多种类的僵尸,实现利用网络技术进行排名

10.团队成员任务分配,标明组长

  • 吴军霖(组长):大部分的模块以及存档,读档等
  • 欧阳震霆:僵尸,道具,游戏界面等
  • 陈文杰:太阳模块等
  • 刘艳钦:豌豆射手射出豌豆,登录界面,dao模式结合数据库以及团队博客等

JAVA课程设计——植物大战僵尸(团队)的更多相关文章

  1. JAVA课程设计+五子棋(团队博客)

    JAVA课程设计 利用所学习的JAVA知识设计一个五子棋小游戏 1.团队名称.团队成员介绍(菜鸟三人组) 杨泽斌[组长]:201521123049 网络1512 叶文柠[组员]:20152112305 ...

  2. Java课程设计-定时器(团队)

    一.团队介绍(没头脑和不高兴) 陈文俊[组长] 201521123047 网络1512 宣委 郑子熙 201521123045 网络1512 二.项目Git链接 定时器 三.项目git提交记录截图 四 ...

  3. java课程设计-表达式运算(团队博客)

    1 团队课程设计博客 1 团队名称.团队成员介绍 团队名称 奔跑吧土拨鼠 团队成员 洪亚文 201521123065 网络1513 郑晓丽 201521123066 网络1513 2 项目git地址 ...

  4. JAVA课程设计——俄罗斯方块(团队)

    1.团队介绍 1.1 团名:终于可以回家了嗷嗷嗷 1.2 团员介绍 2.参考来源 https://www.jb51.net/article/142716.htm 3.项目git地址 https://g ...

  5. Java课程设计(2019版)

    参考资料 Java课程设计参考资料(2018-12-26更新) Java课程设计常见问题(程序部署.数据库.JSP) 项目开发参考-阿里巴巴Java开发手册(正式版) 更多参考资料请查看QQ群文件中的 ...

  6. Java课程设计-定时器

    Java课程设计--定时器 1.团队课程设计博客链接 团队博客地址 2.个人负责模块或任务说明 框架构建 时间设置面板,倒计时面板 按钮设置 3.自己的代码提交记录截图 4.自己负责模块或任务详细说明 ...

  7. Java 课程设计 "Give it up"小游戏(团队)

    JAVA课程设计 "永不言弃"小游戏(From :Niverse) 通过Swing技术创建游戏的登陆注册界面,使用mySQL数据库技术完成用户的各项信息保存和游戏完成后的成绩保存. ...

  8. java课程设计--猜数字(团队博客)

    java课程设计--猜数字(团队博客) 1.团队名称以及团队成员介绍 团队名称:cz 团队成员:陈伟泽,詹昌锦 团队照片: 2.项目git地址 http://git.oschina.net/Devil ...

  9. Java课程设计博客(团队)

    Java课程设计博客(团队) 1. 团队/项目名称 使用JAVA实现简易HTTP服务器 2. 团队成员 组长:林一心 组员:张杭镖 3. 项目git地址 https://github.com/oran ...

随机推荐

  1. GNS3的安装和配置

    一.为什么安装GNS3 简单说来它是dynamips的一个图形前端,相比直接使用dynamips这样的虚拟软件要更容易上手和更具有可操作性.更重要的一点是很多Cisco实验在cisco packet ...

  2. c#实现的HTTP服务端

    这次在整理一个服务组件的时候,需要涉及到HTTP的请求,HTTP是应用层,建立在TCP之上的.因此,可以用TCP服务端接收HTTP请求,只需要解析请求内容.HTPP有固定的格式,大家可以直接搜索.网上 ...

  3. 20181009noip HZ EZ两校联考sum(莫队,组合数学)

    题面戳这里 思路: noip考莫队???!!! 考场上死活没往这方面想啊!!!数据分治忘写endl50pts滚粗了 这里每个询问都有n,m两个参数 我们可以把它看做常规莫队中的l和r 然后利用组合数的 ...

  4. 【TOJ 4493】Remove Digits(单调栈贪心)

    描述 Given an N-digit number, you should remove K digits and make the new integer as large as possible ...

  5. [tree]合并果子(哈夫曼树+优先队列)

    现在有n堆果子,第i堆有ai个果子.现在要把这些果子合并成一堆,每次合并的代价是两堆果子的总果子数.求合并所有果子的最小代价. Input 第一行包含一个整数T(T<=50),表示数据组数. 每 ...

  6. 2019年第十届蓝桥杯c++A组java/c++组题解

    #include<iostream> #include<vector> using namespace std; vector <int > vec; long l ...

  7. 编程 - 前端 - JavaScript - 库 - ECharts (开源可视化)

    ECharts,一个使用 JavaScript 实现的开源可视化库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Safari等) ...

  8. I/O流、文件操作

    1)操作文件 Path和Files是在JavaSE7中新添加进来的类,它们封装了在用户机器上处理文件系统所需的所有功能.Path表示的一个目录名序列,其后还可以跟着一个文件名.路径中的第一个参数可以是 ...

  9. phpredis命令

    <?php //redis //检查一个扩展是否已经加载.大小写不敏感. if (!function_exists('redis')) { echo '不支持 redis'; return ; ...

  10. 响应式布局--设置rem自适应

    //designWidth:设计稿的实际宽度值,需要根据实际设置 //maxWidth:制作稿的最大宽度值,需要根据实际设置 //这段js的最后面有两个参数记得要设置,一个为设计稿实际宽度,一个为制作 ...