Java新手,手动编写一个简单的数字小游戏(详解)

由于闲得无聊,做了一个非常简陋的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的浅显理解只能做到这一步了,后续还会在学习中不断改进,做一些其他的小项目或是学习总结。

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值