Java控制台游戏~600行代码实现打怪小游戏(多图预警)
一,先放个启动界面(一些英雄,怪物技能介绍跟装备属性都写在里边):
二,在这个简单的小游戏里,你可以体验到:
1.打怪:
2.随机玩法寻宝:
3.英雄/Boos怪物/装备技能:
and其他
三,实现过程:
1.创建Hero类定义英雄属性
String name;//名称
int hp;//生命值
int MaxHp;//最大生命值
int attackNum;//攻击力
int skillType;//技能标号
String skill;//技能描述
int skillTimes;//技能可用次数
boolean enable;//是否可用
boolean Luckly;//幸运属性(曹操专属)
String skillName;//技能名
int weaponSkill;//武器技能标号(寒冰剑专属)
boolean zqUsed;//再起是否可用(孟获专属)
2.创建Monster类定义怪物属性:
String name;//名称
int hp;//生命值
int MaxHp;//最大生命值
int attackNum;//攻击力
int skillType;//技能标号
String skill;//技能描述
String skillName;//技能名
int skillTimes;//技能可用次数
boolean sfUsed;//神愤是否可用(神鬼无双吕布专属)
3,创建Weapon类定义装备属性:
String name;//名称
int damage;//伤害
int addHp;//血量增值
int addVihp;//村庄血量增值
String skill;//技能描述
String skillName;//技能名
int skillType;//技能标号
4,创建Village类定义村庄属性:
int hp;
5,Hero类,Monster类,Weapon类分别实现相关攻击和技能方法
//英雄攻击方法
public void attack(int hattackNum, Monster mo, Hero he, Weapon[] arrWeapon, Village vi, Monster[] arrMonster){
Scanner sc = new Scanner(System.in);
Random r = new Random();
if (he.weaponSkill!=0){
//不为默认值0则说明该英雄被拥有技能的武器赋过值(weaponType),则执行该武器技能(weaponSkill);
switch (he.weaponSkill){
case 1:
System.out.println("您是否发动"+arrWeapon[4].name+"技能【"+arrWeapon[4].skill+"】?(键入“Q”发动技能,或按回车取消)");
String w = sc.nextLine();
int addVhp;
if ("Q".equals(w) || "q".equals(w)) {
//执行技能
if ((attackNum/2)>50){
addVhp=50;
}else {
addVhp=(attackNum/2);
}
vi.hp=vi.hp+addVhp;
System.out.println("您取消了伤害并为村庄回复"+(he.Luckly==false? addVhp:addVhp/2)+"点生命值");//判断是否触发曹操技能
System.out.println("!!!现在村庄的生命值是"+vi.hp);
} else {
mo.hp = mo.hp - hattackNum;
System.out.println(mo.name + "受到" + hattackNum + "点伤害,血量为" + mo.hp + "...");
if (mo.skillType==1){
//神吕布技能时机
mo.skills(mo, arrMonster);
int damage = r.nextInt(51);
he.hp=he.hp-damage;
System.out.println(he.name + "受到" + damage + "点伤害,血量为" + he.hp + "...");
}
}
}
}else {
mo.hp = mo.hp - hattackNum;
System.out.println(mo.name + "受到" + hattackNum + "点伤害,血量为" + mo.hp + "...");
if (mo.skillType==1){
//神吕布技能时机
mo.skills(mo, arrMonster);
int damage = r.nextInt(51);
he.hp=he.hp-damage;
System.out.println(he.name + "受到" + damage + "点伤害,血量为" + he.hp + "...");
}
}
}
//英雄技能方法
public void skills(Hero he,Monster mo){
switch (skillType){
case 1:
System.out.println(he.name+"发动了技能"+he.skillName);
System.out.println(he.skill);
int AddAttack=((mo.MaxHp-mo.hp)/100)*50;
mo.hp=mo.hp-(AddAttack+300);
System.out.println(mo.name+"受到"+(AddAttack+300)+"点伤害,血量为"+mo.hp+"...");
he.skillTimes=0;//技能次数用尽
break;
case 2:
System.out.println(he.name+"发动了技能"+he.skillName);
System.out.println(he.skill);
int Attack= (int)((he.MaxHp)*0.4);
mo.hp=mo.hp-Attack;
he.hp=he.hp-(Attack/2);
System.out.println("黄忠扣除了"+(Attack/2)+"点生命值,血量为"+he.hp+"...");
System.out.println(mo.name+"受到"+Attack+"点伤害,血量为"+mo.hp+"...");
he.skillTimes--;//技能次数减一
break;
case 3:
System.out.println(he.name+"发动了技能"+he.skillName);
System.out.println(he.skill);
break;
case 4:
System.out.println(he.name+"发动了技能"+he.skillName);
System.out.println(he.skill);
he.hp=500;
he.attackNum=120;
he.zqUsed=false;//再起技能用尽
break;
}
6,定义Play类写入循环实现回合制
int num = 1;//回合数
while(true) {
if (mo.hp<=0&&mo.sfUsed==false) {
System.out.println("您的英雄" + he.name + "战胜了怪物,成功守卫村庄!!!");
isWin = true;
break;
}else if (mo.hp<=0&&mo.sfUsed==true){
//神愤技能时机
mo.skills(mo, arrMonster);
System.out.println("您的对手"+mo.name+"已替换成"+arrMonster[2].name);
mo.sfUsed=false;
mo=arrMonster[2];
}
if(vi.hp<=0||he.hp<=0){
break;
}else{
if (he.hp > 0 && vi.hp > 0||he.zqUsed==true) {
System.out.println("*******************************************************************************");
System.out.println("第" + num + "回合");
7,循环体内调用相关攻击,技能方法
public void skills(Hero he,Monster mo){
switch (skillType){
case 1:
System.out.println(he.name+"发动了技能"+he.skillName);
System.out.println(he.skill);
int AddAttack=((mo.MaxHp-mo.hp)/100)*50;
mo.hp=mo.hp-(AddAttack+300);
System.out.println(mo.name+"受到"+(AddAttack+300