`
mathfox
  • 浏览: 36519 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

山寨 植物大战僵尸 0.01beta版

阅读更多

花了一周时间把 植物大战僵尸 都打通关了。

 

好久没有游戏让我能玩这么长时间了,于是就打算用pygame实现,可惜发现自己的python玩了太烂了,

 

还是Java Swing吧,由于比较简单没有使用什么现成的2D游戏引擎(找了半天也没找到合适的,也不想学了)。

 

现在还只能种两个植物,

 

 

用了周六周日,完成了最基础的一部分,以后有时间,再接着做吧。

 

 

已经加上源代码了。没有什么框架,想到哪写到哪,也没有注释。想看的就对付看吧。

 

 

已删除美女,后来的同学来晚了。

  • 大小: 1 MB
分享到:
评论
70 楼 xiaochun91103 2010-11-18  
佩服,相当不错
69 楼 ediwer 2010-11-12  
我不得不说,javaeye有人才在...
68 楼 ht_09 2010-09-17  
我嘞个去,完整版的没有了
67 楼 keke020 2010-09-15  
还不会玩这种游戏...土了.......
66 楼 swingmay 2010-09-15  
帖子都长期不动了,看来Swingmay的风潮快过去了,
65 楼 swingmay 2010-09-14  
图片确实很漂亮,楼主应该把程序完善,借这个东风好好推推
64 楼 keter12345 2010-09-01  
哈哈,强大的,我也玩了2个星期通关的,觉得很不错~不过我是做J2EE的~SWING不大懂~
63 楼 seth_yang 2010-08-30  
引用

哪位会用java2d实现那个图片,一部分亮,一部分暗啊。

我找了半天没有找到,只好用photoshop变暗了图片用两张实现的。

应该使用AffineTransform来实现吧,图形学不太会啊,

在这里抛砖引玉,给出一份 ColdDown 的例子
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.Arc2D;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import java.util.EventListener;
import java.util.EventObject;

/**
 * Created by IntelliJ IDEA.
 * User: seth.yang
 * Date: 2010-8-30
 * Time: 15:56:26
 */
public class ColdDownSample {
    public static void main (String[] args) throws Exception {
        JFrame frame = new JFrame ("Test");
        ImageIcon icon = new ImageIcon ("20203.png");
        JPanel panel = new JPanel ();
        final ColdDownLabel cd1 = new ColdDownLabel (icon, .5f, 1000, ColdDownLabel.Type.Pie);
        final ColdDownLabel cd2 = new ColdDownLabel (icon, .5f, 5000, ColdDownLabel.Type.Line);
        final ColdDownLabel cd3 = new ColdDownLabel (icon, .8f, 10000, ColdDownLabel.Type.Line);

        cd1.setMaskColor (Color.ORANGE);
        cd2.setMaskColor (Color.MAGENTA);
        cd3.setMaskColor (Color.GREEN);

        panel.add (cd1);
        panel.add (cd2);
        panel.add (cd3);
        frame.getContentPane ().add (panel);

        panel = new JPanel ();
        final JButton button = new JButton ("Cold Down All");
        button.addActionListener (new ActionListener() {
            public void actionPerformed (ActionEvent e) {
                cd1.start ();
                cd2.start ();
                cd3.start ();
                button.setEnabled (false);
            }
        });
        panel.add (button);
        frame.getContentPane ().add (panel, BorderLayout.SOUTH);

        frame.pack ();
        frame.setVisible (true);
        frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);

        ColdDownCompleteListener l = new ColdDownCompleteListener() {
            public void coldDown (ColdDownEvent e) {
                if (cd1.isColdDownComplete () && cd2.isColdDownComplete () && cd3.isColdDownComplete ())
                    button.setEnabled (true);
            }
        };
        cd1.addColdDownCompleteListener (l);
        cd2.addColdDownCompleteListener (l);
        cd3.addColdDownCompleteListener (l);
    }
}

class ColdDownEvent extends EventObject {
    public ColdDownEvent (Object source) {
        super (source);
    }
}

interface ColdDownCompleteListener extends EventListener {
    void coldDown (ColdDownEvent e);
}

class ColdDownLabel extends JLabel implements Runnable {
    private long interval = 0;
    private int top = 0, angle = 360;
    private Type type = Type.Line;
    private static int lineDelta = 1, angleDelta = 1;
    private double x, y; // 饼状 CD 时候的左上角坐标
    private double r;    // 饼状 CD 时的半径
    private boolean running;
    private float alpha = 1f;
    private boolean coldDownComplete;

    private final Object lock = new Object ();

    private Color maskColor;
    private BufferedImage buff;
    private Icon icon;
    private final java.util.List<ColdDownCompleteListener> listeners = new ArrayList<ColdDownCompleteListener> ();

    private Runnable repainter = new Runnable() {
        public void run () {
            repaint ();
        }
    };

    public static enum Type { Line, Pie }

    public ColdDownLabel (Icon icon, float alpha, long delay, Type type) {
        this.icon = icon;
        setSize (icon.getIconWidth (), icon.getIconWidth ());
        buff = new BufferedImage (icon.getIconWidth (), icon.getIconHeight (), BufferedImage.TYPE_INT_RGB);        

        setAlpha (alpha);
        setDelay (delay);
        setType (type);
        paintShawdow ();
    }

    public void setType (Type type) {
        this.type = type;
        if (type == Type.Pie) {
            int x0 = icon.getIconWidth () / 2, y0 = icon.getIconHeight () / 2; // center point
            r = Math.sqrt (x0 * x0 + y0 * y0);
            x = x0 - r;
            y = y0 - r;
        }
    }

    public void setDelay (long delay) {
        if (type == Type.Line) {
            interval = delay * lineDelta / icon.getIconHeight ();
        } else {
            interval = delay * angleDelta / 360;
        }
    }

    public void setAlpha (float alpha) {
        this.alpha = alpha;
        setMaskColor (Color.black);
    }

    public void start () {
        synchronized (lock) {
            if (running) return;
        }

        top = 0;
        angle = 360;
        running = true;
        coldDownComplete = false;
        new Thread (this).start ();
    }

    public boolean isColdDownComplete () {
        return coldDownComplete;
    }

    @Override
    public Dimension getPreferredSize () {
        if (icon == null)
            return super.getPreferredSize ();
        return new Dimension (icon.getIconWidth (), icon.getIconHeight ());
    }

    @Override
    public void paint (Graphics g) {
        g.drawImage (buff, 0, 0, this);
    }

    public void setMaskColor (Color c) {
        maskColor = new Color (c.getRed (), c.getGreen (), c.getBlue (), (int)(255 * alpha)); // 不透明度为 aplha
    }

    public void run () {
        while (running) {
            if (type == Type.Line) top += lineDelta;
            else angle -= angleDelta;
            paintShawdow ();
            SwingUtilities.invokeLater (repainter);
            try {
                Thread.sleep (interval);
            } catch (InterruptedException e) {
                e.printStackTrace ();
            }
            running = type == Type.Line ? top < icon.getIconHeight () : angle > 0;
        }
        coldDownComplete = true;
        if (listeners.size () > 0) {
            ColdDownEvent e = new ColdDownEvent (this);
            for (ColdDownCompleteListener l : listeners) l.coldDown (e);
        }
    }

    public void addColdDownCompleteListener (ColdDownCompleteListener l) {
        synchronized (listeners) { listeners.add (l); }
    }

    private void paintShawdow () {
        Graphics2D g2 = buff.createGraphics ();
        g2.setColor (Color.white);
        g2.fillRect (0, 0, getWidth (), getHeight ());
        icon.paintIcon (this, g2, 0, 0);
        g2.setPaint (maskColor);
        if (type == Type.Line) g2.fill (new Rectangle (0, top, getWidth (), getHeight () - top));
        else g2.fill (new Arc2D.Double (x, y, 2 * r, 2 * r, 90, angle, Arc2D.PIE));
    }
}
62 楼 xinshou 2010-08-15  
见过还有一个网页版的,纯js写的。
61 楼 SteveZhang 2010-08-15  
楼主的代码非常值得学习,收下了
60 楼 kelongsoft 2010-08-11  
好像俺来晚了!
59 楼 yixh1 2010-07-19  
唉,果然来晚了,没看到美女。
58 楼 andyjojo 2010-07-18  
mark
57 楼 C_J 2010-07-08  
哇哈哈,坛子里都是些如饥似渴的郎啊
56 楼 HeDYn 2010-07-07  
强烈抗议阉割版,强烈要求发原版,不能没有美女图啊
55 楼 dreamweaver 2010-07-01  
看图就觉得很不错啊,要下过来仔细看看
54 楼 cloud21 2010-06-21  
看了你的东西,比较感兴趣,回家利用几天 用flex做了一个山寨的。

你还接着做吗,有时间一起研究,我想吧这个添加点功能。玩家对战,一方僵尸,一方植物。
53 楼 ycysth 2010-06-12  
很不错哦,我基本没做过游戏
52 楼 wangsysu 2010-06-06  
哈哈,楼主好强大啊。
51 楼 yadihaoku 2010-06-03  
谁有 那两个 美女的图片啊????
让我 Look 一下......... 

相关推荐

    山寨版植物大战僵尸源码0_01beta版

    《山寨版植物大战僵尸源码0_01beta版》是一个非常适合初学者研究的游戏开发项目,它基于Java编程语言,提供了完整的源代码,为想要学习Java游戏开发的程序员提供了宝贵的实践资源。Java作为一种广泛使用的面向对象...

    一个flash actionscript3网页游戏成品 山寨版植物大战僵尸 开2个浏览器窗口网络对战,一边使用植物一边使用僵尸(本游戏特色能使用僵尸)

    《Flash ActionScript3网页游戏:植物大战僵尸网络对战版》 本文将深入探讨一个基于Flash ActionScript3(AS3)开发的网页游戏——山寨版的植物大战僵尸,该版本独特之处在于支持双人对战模式,玩家可以分别在两个...

    Uchome 插件 植物大战僵尸(完美版) 亲测可用 Uchome插件

    《Uchome插件:植物大战僵尸(完美版) 安装及使用指南》 "Uchome 插件 植物大战僵尸(完美版) 亲测可用 Uchome插件"这一主题,指的是在Uchome社区平台上的一个特色插件,即我们熟知的"植物大战僵尸"游戏的完美版本。...

    植物大战僵尸 解包工具

    可以从pc版本的植物大战僵尸1代解包所有资源,包括图片、音乐等文件,方便大家山寨需要

    植物大战僵尸山寨版源码

    《植物大战僵尸》是一款深受玩家喜爱的塔防类游戏,其山寨版源码为我们提供了一个了解游戏开发过程的独特视角。源码是程序的核心,包含了游戏的逻辑、算法和设计思想,对于学习游戏编程的开发者来说,是宝贵的参考...

    项目实训 学员作品 flash actionscript3游戏 山寨版植物大战僵尸demo 有工具栏能放物品定时落阳光和出僵尸.zip

    这次实训的重点是复刻经典游戏“植物大战僵尸”,学员将学习如何构建游戏的基本框架,实现游戏逻辑,以及与用户交互的界面设计。 在“植物大战僵尸”这款游戏中,玩家需要通过放置不同种类的植物来抵御僵尸的入侵。...

    植物大战僵尸

    《植物大战僵尸》是一款深受玩家喜爱的塔防类游戏,其山寨版的可使用性意味着我们可以深入了解游戏的内部机制和编程实现。在这个“PlantPKGhost”压缩包中,很可能包含了这款游戏的源代码,这为我们提供了宝贵的资料...

    山寨平板8650最终极精简版

    【标题解析】:“山寨平板8650最终极精简版”这个标题指的是一个针对型号为8650的山寨平板电脑的系统优化版本。"最终极精简版"意味着这是该系列的一个高度优化和轻量化的固件,可能是为了提高设备的运行速度和效率,...

    山寨主板的BIOS ROM

    山寨主板的BIOS ROM

    java版山寨QQ项目源码

    java版山寨QQ项目 里面有四个压缩包 QQ服务器端.rar QQ客户端.rar 改进QQ客户机服务器视频实现.rar Q第三方库.rar 这个java版山寨QQ项目实现的功能有: 1.实现的java视频聊天; 2.集成了Mina框架; 3.服务器管理...

    山寨版QQ和坦克大战

    【标题】"山寨版QQ和坦克大战"是一个适合初学者的编程练习项目,它涵盖了多个IT领域的关键知识点,包括网络编程、多线程处理以及图形用户界面(GUI)设计等。 【描述】中的"网络编程"是指通过网络进行数据交换的...

    PHP168整站山寨版(beta)

    正式版通常会在测试版的基础上进行完善,修复所有已知问题,确保所有功能都能正常运行,并且可能包含更多的新特性、优化和改进。因此,用户在使用测试版时需要注意可能存在不稳定的情况,而正式版则更适合用于生产...

    huanghe OS 0.01

    这个系统可以被视为对经典Linux 0.11的一个致敬或学习实践,虽然被标签为“山寨”,但其中蕴含的技术原理和实现方法对于理解操作系统底层工作原理具有重要价值。 首先,实模式与保护模式是x86处理器的两种主要工作...

    山寨java版qq

    【标题】"山寨java版qq" 是一个基于Java编程语言开发的简易聊天软件,它旨在模仿QQ的功能,但并非官方版本。这个项目主要是为了学习和实践网络通信、多线程以及用户界面设计等技术。 【描述】这个"山寨版局域网聊天...

    山寨QQ完整版

    【标题】"山寨QQ完整版"揭示了这个项目的核心,即一个模仿QQ即时通讯软件的实现。这个"山寨"版本并非官方腾讯QQ,而是由开发者或爱好者基于QQ的功能特性自行构建的一个版本,目的是为了学习、研究或者测试即时通讯...

    E盾山寨E盾E语言的源码

    山寨E盾,将需要登陆的程序山寨到本地,或者指定的服务器上

    山寨版qq源码.素材

    QQ是中国知名的即时通讯软件,由腾讯公司开发,其源代码是商业机密,不对外公开。然而,"山寨版qq源码.素材"这个主题暗示我们可能会探讨的是一个非官方的、模仿QQ功能的软件源码及相关的素材。在IT行业中,这样的...

    HTML5小游戏源码下载网页版游戏JS小游戏-山寨版愤怒的小鸟源码.zip

    HTML5小游戏源码下载,JS小游戏源码下载,坦克大战,驴子跳,连连看,俄罗斯方块,圈泡泡,塔防,太空战舰,愤怒的小鸟,植物大战僵尸,水果忍者,扫雷,超级玛丽,打地鼠,坦克大战,麻将等JS小游戏源码下载,游戏...

    山寨APP的危害以及防止山寨APP的方法

    ### 山寨APP的危害以及防止山寨APP的方法 #### 山寨APP的危害 ##### 对用户的危害 1. **窃取账号**:山寨APP通过各种手段获取用户的登录信息,进而非法访问用户的账户,可能导致资金被盗或其他隐私泄露。 2. **...

    最新山寨云PC版

    山寨云PC版,破解百度云限速,还有几个网盘搜索引擎可供免费下载

Global site tag (gtag.js) - Google Analytics