一 设计分析………………………………………………………………………3
    1.设计目标……………………………………………………………………………3
    2.主要内容……………………………………………………………………………3
二 设计说明……………………………………………………………………4
    1.游戏逻辑……………………………………………………………………………程序前端开发需要学什么软件4
    2.技术分工……………………………………………………………………………4
    3.设计方法……………………………………………………………………………5
三 成果展示……………………………………………………………………6
    1.运行截图………………………………………………………………6
    2.程序代码………………………………………………………………7
结束语………………………………………………………………………18
五 致谢……………………………………………………………………………18
六 参考文献……………………………………………………………………18

  设计分析
一.设计目标:
此项目是模仿PopCap Games公司开发的一款同名游戏《植物大战僵尸》而开发的,是一款益智策略类单机游戏,玩家通过武装多种植物切换不同的功能,快速有效地把僵尸阻挡在入侵的道路上。不同的敌人,不同的玩法,游戏的内容就是:玩家控制植物,抵御僵尸的进攻,保护主人的屋子。此游戏对玩家的要求也是大脑的智慧和小脑的反应,玩家可以从游戏中获得成就感和战略思维。
特点:
1、冒险模式。
2、有不同的敌人和可使用道具,使游戏更具挑战性。
3、无限次重玩,不会经历两次同样的事件。
二.设计内容:
      通过玩家对不同植物的选择,例如向日葵可快速产生阳光,豌豆射手可攻击敌人等等,来操作游戏,后台通过调整时间和参数达到前端界面游戏的可玩性。
功能类别
子功能
前端游戏界面
主界面
模式选择
进入游戏
确定关卡
退出
后台代码设计
选择、放置植物
阳光生产时间
收集阳光
产生僵尸
攻击、杀死僵尸
二  设计说明
1游戏逻辑
(1)僵尸是攻击方,为了攻击,防御僵尸,人类通过栽种培植出的各种植物来抵御进攻型僵尸的攻击。植物需要相应的阳光值成长。
(2)在作战地点,玩家需要通过种植各种攻击植物来消灭僵尸,也可以通过种防御植物来阻挡僵尸,还需要太阳花来产生种植需要的阳光。
3僵尸作战单位
(1)普通僵尸。速度(1帧),血限3,毁掉植物需要3s。
4植物作战单位
(1)太阳花。种植需阳光值50,作用:生产种植所需的阳光值,每隔10s生产50点阳光值,不具备攻击力。
(2)碗豆射手。种植需阳光值100,作用:5s发射一颗炮弹,战斗值1。
(3)寒冰射手。种植需阳光值175,作用:5s发射一颗炮弹,战斗值1.
(4)土豆卫士。种植需阳光值50,作用:抵挡各种僵尸3s,主要用来防御,没有任何战斗力。等共5种可供选择种植的植物。关卡简介:所有的僵尸都会参与攻击,所有的植物也都会参与作战,每次只能选取5种植物参与作战。
5碰撞逻辑说明 
僵尸会在屏幕的右边生成,然后缓慢向左边屏幕移动,如果在僵尸移动的线路上有攻击型植物,则发射炮弹。当种植的植物或炮弹与僵尸接触,即当他们的坐标相同的时候,即为接触,接触大小的区域就是图片的大小区域。当炮弹与僵尸碰撞之后,炮弹也就会立即消失,同时僵尸生命值的也随之减少一点。若炮弹未击中任何僵尸,越出屏幕后也将消失。
2.技术分工
本人在项目中负责后台代码实现,主要有
1.阳光添加
2.僵尸移动
3.子弹移动
4.生产阳光
5.产生子弹
3.设计方法
  通过玩家对不同植物的选择,例如向日葵可快速产生阳光,豌豆射手可攻击敌人等等,来操作游戏,后台通过调整时间和参数达到前端界面游戏的可玩性。
功能类别
子功能
前端游戏界面
主界面
模式选择
进入游戏
确定关卡
退出
后台代码设计
选择、放置植物
阳光生产时间
收集阳光
产生僵尸
攻击、杀死僵尸
技术要求:
前端:Javascript
后台:Servlet         
开发工具:MyEclipse
因为类中已经写好了方法和属性,在后台代码设计中,只需要调用之前写好的类,对静止的图像进行多次重绘,就可以实现游戏的画面。

第三部分 成果展示
设计成果:产品设计类
一:运行截图
   
二:程序代码:
阳光添加代码:
l;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JLabel;
import plantvsplant.Controller;
public class SunAdd extends Thread{
    Controller controller;
    private JLabel sun;
    private int a;
    private int b;
    public static boolean stop=false;
    public SunAdd(int x,int y,Controller controller,JLabel sun){
        ller=controller;
        this.a=x;
        this.b=y;
        this.sun=sun;
    }   
    public void run(){
        sun.addMouseListener(new MouseAdapter(){
            public void mouseClicked(MouseEvent e) {
                sun.setVisible(false);
                controller.putSunValue(25);
            }
        });
        while(true){
            if(stop){
                sun.setVisible(false);
                break;
            }
            try {
                sleep(200);
            } catch (InterruptedException e) {