Java小项目之:植物大战僵尸!

《植物大战僵尸》是由PopCap Games开发的一款益智策略类单机游戏,于2009年5月5日发售,这款游戏可谓是无人不知无人不晓。

在我身边,上到40岁的大叔阿姨,下到7、8岁的小弟弟妹妹都听说和玩过这游戏。在以前智能手机还没流行的时候,各种黑网吧,游戏厅便有着玩这游戏的人。当3G技术现世,半智能手机和智能手机出现后,这款游戏更是如日中天,与愤怒的小鸟一起霸占了手机游戏市场(但当时估计都是盗版的)。

相信有些使用b站的小伙伴,应该看过很多这样的视频:

这种视频里的植物大战僵尸,大多都是用java实现的,只需改一下素材图片,就可以了!

今天便教大家用java做出植物大战僵尸这款游戏!

奉上游戏图:

部分代码展示:

package tarena.game.gui;

import java.awt.Color;

import java.awt.Font;

import java.awt.Graphics;

import java.awt.Image;

import java.awt.Point;

import tarena.game.constants.GuiConstnat;

import tarena.game.constants.PlantType;

import tarena.game.gui.obj.SeedCard;

import tarena.game.utils.ImageUtil;

/*

* 植物卡片框

*/

public class PlantsBar implements GuiConstnat {

// 卡片格子数量

private int plantSum;

// 太阳数量和卡片选择窗口

private Image seedBank;

// 卡片

private SeedCard[] cards;

// 太阳数量

private int lights;

// 画笔颜色,显示太阳数量

private Font lightFont;

public PlantsBar() {

seedBank = ImageUtil.loadImage("SeedBank.png");

// allSeedImg = ImageUtil.loadImage("allseeds.png");

plantSum = 7;

cards = new SeedCard[plantSum];

for (int i = 0; i < plantSum; ++i) {

cards[i] = new SeedCard(new Point(SEED_OFFSET + ADD_SUN_OFFSET

+ (CARD_WIDTH + CARD_GAP_W) * i, TOP_OFFSET), new Point(i,

0));

}

lightFont = new Font(Font.DIALOG, Font.BOLD, 20);

lights = 1000;

}

public void gameUpdate(long time) {

for (SeedCard sc : cards) {

sc.gameUpdate();

}

}

// 选择植物卡片

public PlantType selectedPlant(Point pos) {

// 判断是否坐标是否在指定范围

if ((pos.x > SEED_OFFSET + ADD_SUN_OFFSET)

&& (pos.x < SEED_OFFSET + ADD_SUN_OFFSET

+ seedBank.getWidth(null)) && (pos.y > TOP_OFFSET)

&& (pos.y < TOP_OFFSET + seedBank.getHeight(null))) {

// 判断哪一张卡片被选择,是否可选

for (SeedCard sc : cards) {

if (sc.mouseIn(pos.x, pos.y) && sc.isEnable()) {

if (lights >= sc.getCost()) {

System.out.println("This plant will use our "

+ sc.getCost() + " lights. we have" + lights);

sc.reset();

lights -= sc.getCost();

return sc.getPlantType();

}

}

}

}

return PlantType.NONE;

}

public void draw(Graphics g) {

g.drawImage(seedBank, GuiConstnat.SEED_OFFSET, 0, null);

for (SeedCard sc : cards) {

sc.draw(g);

}

g.setColor(Color.BLACK);

g.setFont(lightFont);

g.drawString(String.valueOf(lights), SEED_OFFSET

+ ADD_SUN_COUNT_X_OFFSET, ADD_SUN_COUNT_y_OFFSET);

// cards[0].draw(g);

/*

* g.drawImage(allSeedImg, SEED_OFFSET + ADD_SUN_OFFSET, TOP_OFFSET,

* SEED_OFFSET + ADD_SUN_OFFSET + CARD_WIDTH, TOP_OFFSET + CARD_HEIGHT,

* 0, 0, CARD_WIDTH, CARD_HEIGHT, null);

*/

}

// 收集阳光

public void collectSun(int num) {

lights += num;

}

}

需要植物大战僵尸游戏素材和源码的小伙伴可以私信我

喜欢这样文章的可以关注我,我会持续更新,你们的关注是我更新的动力!需要更多java学习资料的也可以私信我!

祝关注我的人都:身体健康,财源广进,福如东海,寿比南山,早生贵子,从不掉发!

java小项目之:植物大战僵尸,这个僵尸有点冷!内附素材源码的更多相关文章

  1. Java小项目--坦克大战(version1.0)

    Java小项目--坦克大战<TankWar1.0> 这个小项目主要是练习j2se的基础内容和面向对象的思想.项目实现了基本的简单功能,我方一辆坦克,用上下左右键控制移动方向,按F键为发射炮 ...

  2. Java学习笔记三十:Java小项目之租车系统

    Java小项目之租车系统 一:项目背景介绍: 根据所学知识,编写一个控制台版的“呱呱租车系统” 功能: 1.展示所有可租车辆: 2.选择车型.租车量: 3.展示租车清单,包含:总金额.总载货量以及其车 ...

  3. Java小项目之:五子棋,你下棋下得过电脑吗?

    Java小项目之:五子棋,你下棋下得过电脑吗? Java五子棋功能要求: 1.创建窗口和设计一个棋盘界面 2.实现鼠标点击,棋子出现,黑白棋轮流下 3.能够判断五子相连输赢 4.添加重新开始,悔棋,退 ...

  4. Java小项目之:教你做个聊天系统!

    Java小项目之:聊天系统 今天给大家带来的java练手小项目是一个简单的聊天室,界面简单,操作不难. 分为注册系统,登录系统和聊天系统三部分,很适合java小白练手. 完整的源码和素材请关注并私信我 ...

  5. Java生鲜电商平台-电商会员体系系统的架构设计与源码解析

    Java生鲜电商平台-电商会员体系系统的架构设计与源码解析 说明:Java生鲜电商平台中会员体系作为电商平台的基础设施,重要性不容忽视.我去年整理过生鲜电商中的会员系统,但是比较粗,现在做一个最好的整 ...

  6. java小项目之:扫雷,这游戏没有你想的那么简单!

    扫雷 我之前分享的小项目和小游戏,电影购票.坦克大战.捕鱼达人.贪吃蛇等,虽然已经是耳熟能详人尽皆知的项目和游戏,但是保不齐真的有人没接触过. 今天分享的这个项目,我不相信没人接触过(仅限80后-00 ...

  7. java小项目之:象棋,羡慕你们有对象的!

    象棋,是我国传统棋类益智游戏,在中国有着悠久的历史,属于二人对抗性游戏的一种,由于用具简单,趣味性强,成为流行极为广泛的棋艺活动.中国象棋是中国棋文化也是中华民族的文化瑰宝. 象棋还有很多口诀,这是最 ...

  8. java小项目之:抽奖系统!java初学者必备(内附源码)

    [Java]Java摇奖源码,Java抽奖源码,Java随机抽奖源码 任务描述 本次任务要求为某商场开发一套幸运抽奖系统,客户必须首先注册成为该商场会员,会员登录成功后,就可以参加抽奖活动了.注册 用 ...

  9. [开源类库/项目] android保存崩溃时的错误信息log至本地【源码+jar包+使用说...

    不知大家是否经常遇到这种情况:自己的项目有时会在没有连接到电脑时发生崩溃,好不容易发现的bug结果连接到电脑时又复现不出来了:又或者自己写的一个功能在开机启动时产生小bug导致崩溃,而刚启动的机器想让 ...

随机推荐

  1. Unity5.6.4f1 配置WebGL教程

    Unity 5.6.4f1 发布WebGL的配置教程 步骤一:先查看自带的Unity是否yi配置好WebGL的项,若无,则可遵循以下教程来设置 步骤二:下图是我已经设置好的,未设置好的状态是,有个Op ...

  2. php页面最大执行时间 set_time_limit函数不起作用

      作者: default|标签:PHP set_time_limit 执行时间|2017-3-21 15:03   set_time_limit 不生效或者无效解决方法 <?php globa ...

  3. Lua环境搭建之使用EditPlus搭建Lua开发环境

    luatools正则表达式extension工具encoding 一.语法高亮 打开 EditPlus,Tools 工具-->Preferences首选项==>setting & ...

  4. Python--day26--反射

    反射对象的属性:(非常重要) getattr(类名,‘属性名’):获得属性值 使用getattr的好处:需要查看某个属性值的时候,不用再在代码中用if else elif 去判断输入(input函数) ...

  5. centos7.0 可以访问HTML文件,不能访问PHP文件,因为php-fpm没有扩展包

    解决方法 :https://blog.csdn.net/ityang_/article/details/53980190 nginx调用PHP有sock方式和端口方式 1.确认nginx已经调用了ph ...

  6. Redux 认识之后进阶

    两个东西 action  状态 路由 以及嵌套路由 完整结构   进阶+源代码 源代码在我的 gitHub  存储库里面  https://github.com/Haisenan/Redux2.0

  7. springboot2.0.2+redis+spring-session 解决session共享的问题

    准备工作 新建两个springboot2.0.2版本的服务,配置文件添加: #在默认设置下,Eureka服务注册中心也会将自己作为客户端来尝试注册它自己,所以我们需要禁用它的客户端注册行为 eurek ...

  8. linux 存取 I/O 内存

    在一些平台上, 你可能逃过作为一个指针使用 ioremap 的返回值的惩罚. 这样的使用不 是可移植的, 并且, 更加地, 内核开发者已经努力来消除任何这样的使用. 使用 I/O 内 存的正确方式是通 ...

  9. vue-learning:37 - router - 目录

    vue路由vue-router 目录 前端路由历史 服务端渲染(SSR:server side render) 客户端路由(client side routing) 前端路由实现原理 hash模式: ...

  10. es6笔记 day2---函数默认参数、箭头函数、剩余参数

    函数变化: 1.函数默认参数 2.函数参数默认是已经定义了,不能再使用let.const声明 3.扩展运算符.rest运算符 ...就是扩展运算符,它的作用就是把数组给展开 结合函数使用传参,也可以将 ...