由于闲得无聊,做了一个非常简陋的java小游戏(未用到JFrame技术)
跟大家分享,一方面可以加强自己对java的理解,一方面也希望能对比我还初学的初学者有些帮助,有错误的话希望大家能帮忙纠正。
结构:
bean.Role:
这个类用来定义角色属性
package bean;
/*
这个类用来定义角色属性
*/
public class Role {
private int hp;
private int mp;
private int at;
private int df;
public Role(int hp, int mp, int at, int df) {
//构造方法,用于构造类对象
this.hp = hp;
this.mp = mp;
this.at = at;
this.df = df;
}
public Role() {}//两个同名的构造方法形成重载,在调用时可供选择。
/*
由于这个类成员定义为私有成员变量,这些成员变量只有在同类中才可调用,
所以我们要加入public(公有)的get(获取)和set(设置)方法来
对这里的数值进行修改调用
*/
public int getHp() {
return hp;
}
public void setHp(int hp) {
this.hp = hp;
}
public int getMp() {
return mp;
}
public void setMp(int mp) {
this.mp = mp;
}
public int getAt() {
return at;
}
public void setAt(int at) {
this.at = at;
}
public int getDf() {
return df;
}
public void setDf(int df) {
this.df = df;
}
}
game.Act:
写了一些以后可能用到的方法
/*
为了降低程序之间的耦合度和增加可读性、可扩展性,这里单独用一个类写了对数据的操作方法,供以后使用
*/
package game;
import bean.Role;
public class Act {
//提供了一些针对 Role这个类的对象的操作,也可以自己扩展其他的操作(此处我写的可读性不高)
public void attack( Role x , int y){
int r=x.getHp()+x.getDf()-y;
x.setHp(r);
}
public void defence( Role x ,int df){
df=x.getDf()+df;
x.setDf(df);
}
public void atup( Role x ,int at){
at=x.getAt()+at;
x.setAt(at);
}
public void skill(Role x,Role y){
y.setHp(y.getHp()-x.getAt()*2);
x.setMp(x.getMp()-7);
}
public void battleup(Role x,Role y){
y.setAt(y.getAt()+3);
y.setDf(y.getDf()+1);
x.setAt(x.getAt()+2);
}
}
one.Index:
主类:
package one;
import java.util.Scanner;
import one.Rule;
public class Index {
public static void main(String[] args) {
int x=0;
Scanner r=new Scanner(System.in);//常用的读取键盘输入的方法
while(x==0)
{
Rule rule=new Rule();
rule.game();
System.out.println("按任意数字退出,按 “0(零)” 重新开始");
x=r.nextInt(); //此处x来获取键盘输入数值
}
r.close(); //用完Scanner记得关闭
}
}
可见主类非常之短小精悍,却能实现很多的功能,这是通过类之间的相互调用实现的,
主类只调用这些类方法就能轻松控制全局
下面是最复杂的one.Rule(这个包名随便起的),也就是控制游戏进行的规则都在这个类中,这个类也比较复杂多处调用act类的方法这个类硬编码还是不少,有待改进
package one;
import java.util.Scanner;
import bean.Role;
import game.Act;
public class Rule {
Role player = new Role( 150,20,15,7);//创建敌我双方属性(血 mp 攻击力 防御力) 创建Role对象并通过构造函数给其赋值(可自行修改)
Role enemy = new Role( 200,20,12,10);
public void game(){
int x=1,z=0;
Act act = new Act();//创建act对象来调用act中的方法
Scanner read=new Scanner(System.in);
while(player.getHp()>0 && enemy.getHp()>0){
//多处调用act类中的方法
//下面做一个简陋的画面
System.out.printf("HP= ");
for(int i=1;i<player.getHp()/5;i++)System.out.printf("*");//用“*”做一下血条每5滴血一个“*”
System.out.printf(player.getHp()+" EHP= ");
for(int i=1;i<enemy.getHp()/5;i++)System.out.printf("*");
System.out.println(enemy.getHp());
System.out.println("mp= "+player.getMp()+" emp= "+enemy.getMp());
System.out.println("at= "+player.getAt()+" eat= "+enemy.getAt());
System.out.println("df= "+player.getDf()+" edf= "+enemy.getDf());
System.out.println("请选择: 1.攻击 ("+player.getAt()+") "
+ " 2.防御 ("+player.getDf()+"+2) 3.技能(真实伤害:"+player.getAt()*2+"消耗mp:"+7+" )");
x=read.nextInt();//读入键盘输入的数值
switch (x){//用switch来选择接下来的动作
case 1 :
act.attack(enemy , player.getAt());//输入1的话攻击
break;
case 2 :
act.defence(player, 2); //输入2的话提升2点防御力
break;
case 3 :
act.skill(player, enemy);;//输入3的话用7点mp释放技能造成大量伤害
break;
}
if(player.getDf()<enemy.getAt()){//敌方攻击力低于我方防御力时防止伤害为负数而回血
act.attack(player , enemy.getAt());
}
if(z%3==1){//每过3回合加强双方攻击力和防御力,增加游戏变数
act.battleup(player,enemy);
}
player.setMp(player.getMp()+1);//回合结束回一点MP
z++;
if(enemy.getHp()<=0)System.out.println("YOU WIN");//结束循环后判断究竟谁赢了(此处未考虑平局情况)
else if(player.getHp()<=0)System.out.println("LOSS BUT DO YOU WANT TO PLAY AGAIN?");
}
}
}
运行主类:
以现在的水平结合对MVC的浅显理解只能做到这一步了,后续还会在学习中不断改进,做一些其他的小项目或是学习总结。