JAVA课程设计——植物大战僵尸(团队)
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课程设计——植物大战僵尸(团队)的更多相关文章
- JAVA课程设计+五子棋(团队博客)
JAVA课程设计 利用所学习的JAVA知识设计一个五子棋小游戏 1.团队名称.团队成员介绍(菜鸟三人组) 杨泽斌[组长]:201521123049 网络1512 叶文柠[组员]:20152112305 ...
- Java课程设计-定时器(团队)
一.团队介绍(没头脑和不高兴) 陈文俊[组长] 201521123047 网络1512 宣委 郑子熙 201521123045 网络1512 二.项目Git链接 定时器 三.项目git提交记录截图 四 ...
- java课程设计-表达式运算(团队博客)
1 团队课程设计博客 1 团队名称.团队成员介绍 团队名称 奔跑吧土拨鼠 团队成员 洪亚文 201521123065 网络1513 郑晓丽 201521123066 网络1513 2 项目git地址 ...
- JAVA课程设计——俄罗斯方块(团队)
1.团队介绍 1.1 团名:终于可以回家了嗷嗷嗷 1.2 团员介绍 2.参考来源 https://www.jb51.net/article/142716.htm 3.项目git地址 https://g ...
- Java课程设计(2019版)
参考资料 Java课程设计参考资料(2018-12-26更新) Java课程设计常见问题(程序部署.数据库.JSP) 项目开发参考-阿里巴巴Java开发手册(正式版) 更多参考资料请查看QQ群文件中的 ...
- Java课程设计-定时器
Java课程设计--定时器 1.团队课程设计博客链接 团队博客地址 2.个人负责模块或任务说明 框架构建 时间设置面板,倒计时面板 按钮设置 3.自己的代码提交记录截图 4.自己负责模块或任务详细说明 ...
- Java 课程设计 "Give it up"小游戏(团队)
JAVA课程设计 "永不言弃"小游戏(From :Niverse) 通过Swing技术创建游戏的登陆注册界面,使用mySQL数据库技术完成用户的各项信息保存和游戏完成后的成绩保存. ...
- java课程设计--猜数字(团队博客)
java课程设计--猜数字(团队博客) 1.团队名称以及团队成员介绍 团队名称:cz 团队成员:陈伟泽,詹昌锦 团队照片: 2.项目git地址 http://git.oschina.net/Devil ...
- Java课程设计博客(团队)
Java课程设计博客(团队) 1. 团队/项目名称 使用JAVA实现简易HTTP服务器 2. 团队成员 组长:林一心 组员:张杭镖 3. 项目git地址 https://github.com/oran ...
随机推荐
- Vue--- mint-UI 穿插
Vue-mint-UI库 概述:就是一个 封装好的库 安装/下载:npm install --save mint-ui 常用 1) Mint UI:a. 主页: http://mint-ui.git ...
- C.Sum 2017 ACM-ICPC 亚洲区(西安赛区)网络赛
题目来源:Sum 限制:1000ms 32768K Define the function S(x) for xx is a positive integer. S(x) equals to the ...
- POJ 1180 Batch Scheduling (dp,双端队列)
#include <iostream> using namespace std; + ; int S, N; int T[MAX_N], F[MAX_N]; int sum_F[MAX_N ...
- HDFS的存储策略
本文介绍hdfs的存储策略 内容译自:http://hadoop.apache.org/docs/r2.8.0/hadoop-project-dist/hadoop-hdfs/ArchivalStor ...
- 日常工作linux常用命令
1:cp 复制文件/文件夹 cp -r 源目录 目标目录 2:mv 文件重命名 mv 源文件/源目录 目标文件/目标目录 3:du -sh 查看当前目录大小 du -l 查看当前目录下文件大小 d ...
- 简单使用PuTTy登录centos虚拟机
博主刚刚开始学习Linux,想通过写博客的方式加深对linux学习的记忆 使用虚拟机安装精简版的linux后发现窗口字体太小,于是就想着通过PuTTy登录的方式解决 简单安装linux后 将linux ...
- jquery如何获取对应表单元素?
问题描述:我页面中有这样多个表单,我都是这个定义的,当我点击确定按钮时,此时能够获得相对应的表单对象,我该怎么获取到他的两个值呢? 解决方案: 页面元素 <form id="form1 ...
- 解决百度编辑器ueditor插入视频网址保存不了问题
问题:如下图,在百度编辑器中插入视频,视频网址可以识别,但是提交内容后视频却显示不了. 解决:这个问题主要是编辑器中会过滤一些html标签,所以可以给标签添加白名单. 修改 ueditor.confi ...
- Python数值
一.python数值类型 python数值类型有以下四种: int(整数) float(浮点数) complex(复数) bool(布尔型) 注意:python3取消了long型. 二.python ...
- 08 datetime与logging模块(进阶)
datetime与logging模块 阶段一:日期与时间 1.datetime 模块中 主要类: 类名 功能说明 date 日期对象,常用的属性有year, month, day time 时间对象h ...