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;
- }
- }
需要植物大战僵尸游戏素材和源码的小伙伴可以私信我
喜欢这样文章的可以关注我, 我会持续更新, 你们的关注是我更新的动力!
祝关注我的人都: 身体健康, 财源广进, 福如东海, 寿比南山, 早生贵子, 从不掉发!
来源: http://www.bubuko.com/infodetail-3376976.html