java小项目之:植物大战僵尸,这个僵尸有点冷!内附素材源码
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小项目之:植物大战僵尸,这个僵尸有点冷!内附素材源码的更多相关文章
- Java小项目--坦克大战(version1.0)
Java小项目--坦克大战<TankWar1.0> 这个小项目主要是练习j2se的基础内容和面向对象的思想.项目实现了基本的简单功能,我方一辆坦克,用上下左右键控制移动方向,按F键为发射炮 ...
- Java学习笔记三十:Java小项目之租车系统
Java小项目之租车系统 一:项目背景介绍: 根据所学知识,编写一个控制台版的“呱呱租车系统” 功能: 1.展示所有可租车辆: 2.选择车型.租车量: 3.展示租车清单,包含:总金额.总载货量以及其车 ...
- Java小项目之:五子棋,你下棋下得过电脑吗?
Java小项目之:五子棋,你下棋下得过电脑吗? Java五子棋功能要求: 1.创建窗口和设计一个棋盘界面 2.实现鼠标点击,棋子出现,黑白棋轮流下 3.能够判断五子相连输赢 4.添加重新开始,悔棋,退 ...
- Java小项目之:教你做个聊天系统!
Java小项目之:聊天系统 今天给大家带来的java练手小项目是一个简单的聊天室,界面简单,操作不难. 分为注册系统,登录系统和聊天系统三部分,很适合java小白练手. 完整的源码和素材请关注并私信我 ...
- Java生鲜电商平台-电商会员体系系统的架构设计与源码解析
Java生鲜电商平台-电商会员体系系统的架构设计与源码解析 说明:Java生鲜电商平台中会员体系作为电商平台的基础设施,重要性不容忽视.我去年整理过生鲜电商中的会员系统,但是比较粗,现在做一个最好的整 ...
- java小项目之:扫雷,这游戏没有你想的那么简单!
扫雷 我之前分享的小项目和小游戏,电影购票.坦克大战.捕鱼达人.贪吃蛇等,虽然已经是耳熟能详人尽皆知的项目和游戏,但是保不齐真的有人没接触过. 今天分享的这个项目,我不相信没人接触过(仅限80后-00 ...
- java小项目之:象棋,羡慕你们有对象的!
象棋,是我国传统棋类益智游戏,在中国有着悠久的历史,属于二人对抗性游戏的一种,由于用具简单,趣味性强,成为流行极为广泛的棋艺活动.中国象棋是中国棋文化也是中华民族的文化瑰宝. 象棋还有很多口诀,这是最 ...
- java小项目之:抽奖系统!java初学者必备(内附源码)
[Java]Java摇奖源码,Java抽奖源码,Java随机抽奖源码 任务描述 本次任务要求为某商场开发一套幸运抽奖系统,客户必须首先注册成为该商场会员,会员登录成功后,就可以参加抽奖活动了.注册 用 ...
- [开源类库/项目] android保存崩溃时的错误信息log至本地【源码+jar包+使用说...
不知大家是否经常遇到这种情况:自己的项目有时会在没有连接到电脑时发生崩溃,好不容易发现的bug结果连接到电脑时又复现不出来了:又或者自己写的一个功能在开机启动时产生小bug导致崩溃,而刚启动的机器想让 ...
随机推荐
- Unity5.6.4f1 配置WebGL教程
Unity 5.6.4f1 发布WebGL的配置教程 步骤一:先查看自带的Unity是否yi配置好WebGL的项,若无,则可遵循以下教程来设置 步骤二:下图是我已经设置好的,未设置好的状态是,有个Op ...
- php页面最大执行时间 set_time_limit函数不起作用
作者: default|标签:PHP set_time_limit 执行时间|2017-3-21 15:03 set_time_limit 不生效或者无效解决方法 <?php globa ...
- Lua环境搭建之使用EditPlus搭建Lua开发环境
luatools正则表达式extension工具encoding 一.语法高亮 打开 EditPlus,Tools 工具-->Preferences首选项==>setting & ...
- Python--day26--反射
反射对象的属性:(非常重要) getattr(类名,‘属性名’):获得属性值 使用getattr的好处:需要查看某个属性值的时候,不用再在代码中用if else elif 去判断输入(input函数) ...
- centos7.0 可以访问HTML文件,不能访问PHP文件,因为php-fpm没有扩展包
解决方法 :https://blog.csdn.net/ityang_/article/details/53980190 nginx调用PHP有sock方式和端口方式 1.确认nginx已经调用了ph ...
- Redux 认识之后进阶
两个东西 action 状态 路由 以及嵌套路由 完整结构 进阶+源代码 源代码在我的 gitHub 存储库里面 https://github.com/Haisenan/Redux2.0
- springboot2.0.2+redis+spring-session 解决session共享的问题
准备工作 新建两个springboot2.0.2版本的服务,配置文件添加: #在默认设置下,Eureka服务注册中心也会将自己作为客户端来尝试注册它自己,所以我们需要禁用它的客户端注册行为 eurek ...
- linux 存取 I/O 内存
在一些平台上, 你可能逃过作为一个指针使用 ioremap 的返回值的惩罚. 这样的使用不 是可移植的, 并且, 更加地, 内核开发者已经努力来消除任何这样的使用. 使用 I/O 内 存的正确方式是通 ...
- vue-learning:37 - router - 目录
vue路由vue-router 目录 前端路由历史 服务端渲染(SSR:server side render) 客户端路由(client side routing) 前端路由实现原理 hash模式: ...
- es6笔记 day2---函数默认参数、箭头函数、剩余参数
函数变化: 1.函数默认参数 2.函数参数默认是已经定义了,不能再使用let.const声明 3.扩展运算符.rest运算符 ...就是扩展运算符,它的作用就是把数组给展开 结合函数使用传参,也可以将 ...