首页 > 分享 > 阶段项目

阶段项目

java编写的多态项目,宠物小精灵图形化界面,第三节

Adventure(冒险家)是游戏核心控制类,负责管理玩家资源(装备、药品、宠物);

驱动游戏流程(关卡切换、地图探索、事件交互)

处理用户输入与反馈(移动、战斗、物品获取)

三、核心方法解析 1. start():游戏入口方法

功能:初始化游戏,启动主循环处理用户输入与事件。
流程

关键逻辑

关卡切换:通过传送门(Portar)实现,通往下一关时动态生成新关卡(Level),并更新currentLevel;地图刷新:每次操作后调用LevelMap.show()重新绘制地图,确保用户看到最新状态;输入校验:使用Tools.getInputChar()和Tools.getInputNumber()限制用户输入范围,避免非法操作。

public void start(){

currentLevel = new Level(null,1,null);

LevelMap map = currentLevel.getMap();

map.addAdventure(this);

while(true){

currentLevel.getMap().show();

System.out.println("请选择移动方向:W(上)、A(左)、S(下)、D(右)、E(退出)");

char direct = Tools.getInputChar();

if(direct == 'E')

{

System.out.println("确定要退出吗?Y/N");

char quit = Tools.getInputChar();

if(Character.toUpperCase(quit) == 'Y'){

System.out.println("感谢使用宠物小精灵闯关");

break;

}

}

else

{

Item item = discovery(direct);

if(item != null){

item.setDiscovery(true);

currentLevel.getMap().show();

}

if(item instanceof Treasure){

processTreasure((Treasure) item,direct);

}else if(item instanceof Monster){

processMonster((Monster) item,direct);

} else if (item instanceof Portar) {

System.out.println("发现传送门是否通过? Y/N");

char pass = Tools.getInputChar();

if(Character.toUpperCase(pass) == 'Y'){

if(((Portar) item).isNext()){

Level nextLevel = currentLevel.getNextLevel();

if(nextLevel == null)

{

nextLevel = new Level(currentLevel,currentLevel.getNumber()+1,null);

nextLevel.getMap().addAdventure(this);

currentLevel.setNextLevel(nextLevel);

}

currentLevel = nextLevel;

}else{

Level prevLevel = currentLevel.getPrevLevel();

if(prevLevel == null){

System.out.println("非法操作");

}else{

currentLevel = prevLevel;

}

}

}

}

else {

move(direct);

}

}

}

}

java

运行

2. processMonster(Monster monster, char direct):处理怪物战斗

功能:与怪物交互,触发战斗逻辑,处理药品使用、宠物选择及战斗结果。

关键步骤

确认战斗:用户选择是否清除怪物(输入Y/N);选择宠物:展示所有宠物信息,用户选择出战宠物;战斗循环:宠物与怪物交替攻击(Pokemon.attackMonster()和Monster.attackPokemon());宠物生命值低于50%时,询问是否使用药品(调用getCurrentLevelHP()查找可用药品);药品使用后更新背包(若药品数量耗尽则移除,否则减少数量);战斗结果:怪物被击败:掉落物品(Monster.drop()),物品添加至背包(processItem());宠物被击败:怪物恢复满血(Monster.resume())。

private void processMonster(Monster monster,char direct){

System.out.println("发现" + monster.getName() + ",是否清除?Y/N");

char clear = Tools.getInputChar();

if(Character.toUpperCase(clear) == 'Y'){

for (int i=0;i<pokemons.length;i++)

{

System.out.println((i+1) + "t" + pokemons[i].getItemInformation());

}

System.out.println("请选择出站宠物小精灵:");

int number = Tools.getInputNumber(1,pokemons.length);

Pokemon pokemon = pokemons[number-1];

while (monster.getCurrentHealth() > 0 && pokemon.getCurrentHealth() > 0)

{

double rate = pokemon.getHealthPercent();

if(rate < 0.5){

System.out.println(pokemon.getName() + "生命值低于50%,是否使用药品?Y/N");

char eatHp = Tools.getInputChar();

if(Character.toUpperCase(eatHp) == 'Y')

{

HP hp = getCurrentLevelHP(currentLevel.getNumber());

if(hp == null){

System.out.println("背包中没有药品。请探索其他地图");

break;

}else {

if(hp.canDestroy()){

int index = -1;

for (int i = 0;i<medicines.length;i++){

if(hp.getLevelNumber() == medicines[i].getLevelNumber()){

index = i;

break;

}

}

System.arraycopy(medicines,index + 1,medicines,index,medicines.length - index - 1);

System.out.println("药品已经使用完毕");

}else {

int health = hp.use();

pokemon.setCurrentHealth(pokemon.getCurrentHealth() + health);

}

}

}

}

Tools.lazy(300L);

pokemon.attackMonster(monster);

Tools.lazy(300L);

monster.attackPokemon(pokemon);

Tools.lazy(300L);

}

if(monster.getCurrentHealth() == 0) {

System.out.println("怪物已被击败");

Item dropItem = monster.drop();

System.out.println("怪物已被击败,掉落" + dropItem.getItemInformation());

processItem(dropItem);

move(direct);

}else {

monster.resume();

System.out.println(pokemon.getName() + "已被击败");

}

}

}

java

运行

3. processTreasure(Treasure treasure, char direct):处理宝箱

功能:开启宝箱,获取随机物品(药品、装备、宠物),并将物品添加至背包。

关键逻辑

用户确认开启宝箱(输入Y/N);调用Treasure.open()生成随机物品(通过Tools.getRandomItem());调用processItem()将物品分类存入对应背包(药品合并、装备更换、宠物融合或新增);开启后冒险家移动至宝箱位置(move(direct))。

private void processTreasure(Treasure treasure,char direct){

System.out.println("发现宝箱,是否打开? Y/N");

char open = Tools.getInputChar();

if(Character.toUpperCase(open) == 'Y'){

Item item = treasure.open();

System.out.println("获得" + item.getItemInformation());

processItem(item);

move(direct);

}

}

java

运行

4. processItem(Item item):处理获得的物品

功能:根据物品类型(药品、装备、宠物),将其添加至对应背包或执行特殊操作(如融合)。

分支逻辑

药品(HP):遍历medicines背包,若存在同等级药品则合并数量(HP.addCount());装备(Equipment):询问用户是否更换宠物装备(Pokemon.changeEquipment()),换下的旧装备存入equipments背包;宠物(Pokemon):若背包已有同类型宠物(getClass()比较),询问是否融合(Pokemon.merge());若无同类型宠物,直接扩容pokemons背包并添加新宠物。

private void processItem(Item item){

if(item instanceof HP)

{

for(HP hp:medicines){

if(hp.getLevelNumber() == item.getLevelNumber()){

hp.addCount(((HP) item).getCount());

break;

}

}

}

else if(item instanceof Equipment)

{

System.out.println("发现新的装备,是否给宠物小精灵更换? Y/N");

char change = Tools.getInputChar();

if(Character.toUpperCase(change) == 'Y'){

Equipment old = null;

for(Pokemon pokemon: pokemons)

{

old = pokemon.changeEquipment((Equipment) item);

if(old == null) break;

}

if(old != null){

equipments = Arrays.copyOf(equipments,equipments.length+1);

equipments[equipments.length-1] = old;

}

}

}

else {

int index = -1;

for(int i=0;i<pokemons.length;i++)

{

if(item.getClass() == pokemons[i].getClass()){

index = i;

break;

}

}

if(index == -1){

pokemons = Arrays.copyOf(pokemons,pokemons.length + 1);

pokemons[pokemons.length - 1] = (Pokemon) item;

}

else {

System.out.println("发现可融合宠物小精灵,是否融合? Y/N");

char merge = Tools.getInputChar();

if(Character.toUpperCase(merge) == 'Y'){

pokemons[index].merge((Pokemon) item);

}else{

pokemons = Arrays.copyOf(pokemons,pokemons.length + 1);

pokemons[pokemons.length - 1] = (Pokemon) item;

}

}

}

}

java

运行

5. getCurrentLevelHP(int levelNumber):查找可用药品

功能:递归查找当前关卡或更低关卡的可用药品(优先使用当前关卡,逐级回退)。

逻辑

从当前关卡levelNumber开始遍历medicines背包,查找同等级药品;若未找到,递归调用levelNumber-1继续查找;若到第0关仍未找到,返回null(无可用药品)。

private HP getCurrentLevelHP(int levelNumber){

if(levelNumber == 0)return null;

HP hp = null;

for (int i= 0;i<medicines.length;i++)

{

if(medicines[i].getLevelNumber() == levelNumber){

hp = medicines[i];

break;

}

}

if(hp == null){

return getCurrentLevelHP(levelNumber - 1);

}else {

return hp;

}

}

java

运行

6. discovery(char direct)与move(char direct):探索与移动 discovery:调用LevelMap.getPositionItem()获取目标方向的物品,并标记为可见(item.setDiscovery(true));move:调用LevelMap.move()移动冒险家位置,更新地图中冒险家坐标。

private Item discovery(char direct){

return (Item) currentLevel.getMap().getPositionItem(Character.toUpperCase(direct));

}

private void move(char direct){

currentLevel.getMap().move(Character.toUpperCase(direct));

}

java

运行

 

最后创建一个启动类调用游戏入口方法就能运行了

以上就是冒险家的实现,感谢大家观看! 

相关知识

【项目】疾病治疗 一直在乖乖体检 前阶段
中宠股份:年产3万吨宠物湿粮项目目前已进入试生产阶段
项目合作目标案例分析选项目,项目找资源
宠物店创业项目选项目,项目找资源
宠物店创业项目介绍选项目,项目找资源
宠物店创业项目背景选项目,项目找资源
宠物店创业项目简介选项目,项目找资源
宠物店的创业项目介绍选项目,项目找资源
宠物app创业项目策划选项目,项目找资源
阳光城土拨鼠项目

网址: 阶段项目 https://m.mcbbbk.com/newsview1278139.html

所属分类:萌宠日常
上一篇: 十年前抓宠物对战的一个游戏叫什么
下一篇: 课室的宠物完整版下载