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

团名:嗷嗷嗷嗷嗷

吴军霖(组长)

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

欧阳震霆(组员)

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

陈文杰(组员)

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

刘艳钦(组员)

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

2.项目git地址

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

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

5.项目UML图

6.项目运行截图

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

1.游戏界面效果###

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

    层的编号越大越显示在前面;同层内位置编号越大越靠近底部
  • 使用JLayeredPane对界面实现按层划分,使各组件按层级相覆盖,并实现组件对鼠标监听的优先级划分
  • 代码定义了两个层级面板,一个作为游戏的选择界面,一个作为战斗界面
  • 在选择界面中,在层级面板的底层添加背景图,在较上层添加各个功能按钮,而在最上层有一个不可见的登录注册组件(JPanel),点击登录按钮时将登录面板改为可见.点击游戏开始时,将窗体的层级面板换为战斗面板战斗面板中也是将背景图置于底层,将其它组件放在面板的较上层.将阳光所在层级设置高于其他组件可以实现阳光对鼠标的监听优先于其他组件,使得阳光收集事件可以优先于其他事件,如卡片的选取,铲子的点击和菜单的点击.点击时菜单时,各线程暂停,同样在最顶层使原来不可见的菜单面板设为可见.
  private void chooseCards(){

        Card card1 = new Card(GameFrame,"SunFlower", plantMap, controller);
card1.setBounds(85, 7, card1.getCardWidth(), card1.getCardHeight());
Cardboard.add(card1);
cardList.add(card1); Card card2 = new Card(GameFrame,"Peashooter", plantMap, controller);
card2.setBounds(145, 7, card2.getCardWidth(), card2.getCardHeight());
Cardboard.add(card2);
cardList.add(card2); } class PaintThread implements Runnable{
JFrame frame; PaintThread(LaunchFrame launchFrame) {
this.frame = launchFrame;
}

2.僵尸的产生

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

/***** 正常移动 *****/
for (int i=1 ; this.x> minx && this.state==1 ; i++){
if(this.life<=50) {
this.state=2;
zombie.setPic(0);
zombie.setState(state);
break;
}
if(this.x==350)
this.life=20;
try {
if (i%11==0){
zombie.normalpicChange();
}
zombie.setBounds(x,y,300,300);
Thread.sleep(8);
if (i%7==0){
this.x--;
}
zombie.repaint();
} catch (InterruptedException e) {
e.printStackTrace();
}
} //正常换图
public void normalpicChange(){
if (pic < allPic[type])
pic++;
else
pic = 0;
} public void normalwalk(){ } public void paintComponent(Graphics g) {
super.paintComponent(g);
if(state == 1) {
ImageIcon img = new ImageIcon("Img\\Zombie"+type+"\\Frame"+pic+".png");
image = img.getImage();
Graphics2D g2 = (Graphics2D) g;
g2.drawImage(image, 0, 0, img.getIconWidth(), img.getIconHeight(), this);
}
}

3.太阳的收集

  • 通过对鼠标的监听来判断是否收集到太阳
     @Override
public void mouseClicked(MouseEvent e) {
if (!isCollected){
new Thread(new Collect(sun, x, y)).start();
frame.setCursor(Frame.DEFAULT_CURSOR);
isCollected = true;
}
}
class Collect implements Runnable{
private Sun sun;
private int x;
private int y;
Collect(Sun sun, int x, int y){
this.sun = sun;
this.sun.alpha = 100;
this.x = x;
this.y = y;
}

4.植物攻击

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

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. Oracle四舍五入,向上取整,向下取整

    用oracle sql对数字进行操作: 取上取整.向下取整.保留N位小数.四舍五入.数字格式化 取整(向下取整): select floor(5.534) from dual; select trun ...

  2. Python常用模块之re

    1.正则表达式规则 2.Python正则常用模块 2.1.re.match与re.search 函数说明:re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match ...

  3. ROUND()和TRUNC()函数

    ROUND(number[,decimals]) 其中:number 待做截取处理的数值: decimals 指明需保留小数点后面的位数,可选项.需要注意的是,和trunc函数不同,对截取的数字要四舍 ...

  4. 2018 Wannafly summer camp Day3--Travel

    Travel 描述 题目描述: 魔方国有n座城市,编号为1~n.城市之间通过n-1条无向道路连接,形成一个树形结构. 澜澜打算在魔方国进行mm次旅游,每次游览至少一座城市.为了方便,每次旅游游览的城市 ...

  5. 两台Linux主机 scp免密传输

    两台服务器IP如下配置 Linux1: 10.0.0.1   Linux2: 10.0.0.2 Linux1服务器执行如下操作: #  ssh-keygen -t rsa 然后一直回车就行 # sud ...

  6. 洛谷 P3952

    题目描述 小明正在学习一种新的编程语言 A++,刚学会循环语句的他激动地写了好多程序并 给出了他自己算出的时间复杂度,可他的编程老师实在不想一个一个检查小明的程序, 于是你的机会来啦!下面请你编写程序 ...

  7. Hadoop(8)-HDFS的读写数据流程以及机架感知

    1. HDFS的写数据流程 1.客户端通过fs模块向NameNode申请文件上传,NameNode检查请求是否合法,如用户权限,目标文件是否已存在,父目录是否存在等等 2.NameNode返回是否可以 ...

  8. 002---tcp/ip五层详解

    tcp/ip 五层模型讲解 越靠底层就越接近硬件,越靠上层越接近用户.先从底层看起,理解整个互联网通信的原理. 物理层(传输电信号) 孤立的计算机想要一起玩.就必须用硬件在计算机之间完成组网.以硬件做 ...

  9. Go语言中的UDP应用

    Go语言中的UDP应用 Go语言中使用UDP是很方便的,net包提供了UDP和TCP的功能,这里使用UDP做了一个UDP广播,然后接收各个设备的返回信息.实现起来很快,总体感觉比使用C#中的UDP更优 ...

  10. COURSES POJ1469(模板)

    Description Consider a group of N students and P courses. Each student visits zero, one or more than ...