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 ...
随机推荐
- 2小时学会spring boot 以及spring boot进阶之web进阶(已完成)
1:更换Maven默认中心仓库的方法 <mirror> <id>nexus-aliyun</id> <mirrorOf>central</mirr ...
- Vue--- Vue(Pubsub + Ajax) 数据交互
案例知识点 兄弟组件儿的通信 使用了Pubsub 订阅与发布 ajax数据请求 获取前 获取中 获取后 获取为空 获取异常 获取成功后显示数据给到 原先定义号的 ...
- QT基于model/view数据库编程2
Qt中数据编程主要分为以下两点:1.利用qt提供类 访问数据库或者成为简单的数据库编程2.数据库编程中引入model/view编程模型 基于model/view数据库编程: qt提供model类: Q ...
- vim 输入特殊字符
在VIM中可以通过二合字符和十进制进行输入, 在输入模式中,Ctrl + V, 十进制 在输入模式中,Ctrl + K, 二合字符(区分大小写) 注意:特殊字符也算一个字节 通过用的^@是为了保证结尾 ...
- CentOS7——网络配置
ip addr #查看当前IP地址信息.(contos7以下的为ifconfig) /etc/sysconfig/network-scripts/ifcfg-*** #***代表不一定的,需要进入该设 ...
- PG进程结构和内存结构
本文主要介绍PostgreSQL数据库(后文简称PG)进程结构和内存结构,物理结构将在后续继续整理分享. 上图描述了PG进程结构.内存结构和部分物理结构的内容.图中的内容包含了两个部分: PG ...
- GUI小程序---理解GUI
package com.gui; import java.awt.*; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent ...
- php导出excel长数字串显示为科学计数方法与最终解决方法
1.设置单元格为文本 $objPHPExcel = new PHPExcel(); $objPHPExcel->setActiveSheetIndex(0); $objPHPExcel-> ...
- python循环,函数
平常的网页会转换成ascll码,在转编译成十六进制a='http://www.mywebsit.com/?query=python&count=20'print(a)b=a.replace(' ...
- Leecode刷题之旅-C语言/python-35.搜索插入位置
/* * @lc app=leetcode.cn id=35 lang=c * * [35] 搜索插入位置 * * https://leetcode-cn.com/problems/search-in ...