JAVA 面向对象编程练习(一个回合制的战斗游戏:战士,骑兵,法师,电脑互相攻击)

一. 小编有话说

前面一篇文章写了JAVA面向对象编程的思想,本文主要展示关于面向对象编程的实例(一个回合制的战斗游戏:战士,骑兵,法师,电脑互相攻击),小编的基础暂时薄弱,如此一来有助于更深入的理解和灵活的运用,以及打下坚实的基础。

二. 游戏的要求

  1. 定义一个描述战斗单位的类,此类必须包含以下成员变量:名称,生命值,攻击力,防御力,命中率。此类还必须包含以下成员方法:遭到攻击时的处理函数,阵亡时的处理函数。自行设计生命值,攻击力,防御力,命中率之间的关系。请自行设计各处理函数被执行时的提示信息。

  2. 此游戏中存在多种战斗角色,每种角色都是由要求1所定义的类派生出来的子类。每种角色类除了继承自父类的成员变量和函数之外,可以增加一些成员变量和成员函数,例如增加防御这一动作的处理函数。
    战斗角色例:
    战士,生命高,普通攻击敌人,攻击力中,防御力高
    骑兵,生命中,普通攻击敌人,攻击力高,防御力高
    法师,生命极低,法术攻击敌人,攻击力极高,防御力低

  3. 此游戏采用回合制,人对人或人对电脑。每个角色对象依次顺序被使用,游戏操作者通过选菜单的方式操作角色对象的攻击、攻击谁、防御等等动作。游戏以某方全体阵亡而结束。

  4. 游戏必须具有完备的提示信息,例如每个回合都要提示轮到那方的那名角色对象行动,每个回合菜单之前都必须显示敌我双方每一个角色对象的各种参数值,并且每个回合必须重新刷新显示屏幕上的提示内容等。

三. 编程前的准备

  1. 按上面的描述,该有5个.java文件:
  • 1个父类文件:GameUtil.java
  • 3个子类文件:Soilder.javaCavalry.javaMagian.java
  • 1个含执行入口的文件:GameStart.java
  1. 角色及其成员变量的设置
角色 生命值 攻击力 防御力 命中率
战士 100 10 12 80%
骑兵 80 10 12 70%
法师 50 20 5 75%
电脑 80 15 5 75%

四. 代码及详细注释

  1. GameUtil.java
/*描述战斗单位的类(父类)
 * 父类初始化值为电脑
 * 成员变量(5个):名称,生命值,攻击力,防御力,命中率
 * 方法函数3个:
 * 遭到攻击的处理函数
 * 阵亡时的处理函数
 * 对方没有打中的处理函数
 * 
 * author:@杨陈菊
 */

public class GameUtil {
   
	String name = "电脑";            //名称
	int life = 80;                  //生命值
	int attack = 15;                //攻击力
	int defend = 5;                 //防御力
	double hr = 0.75 ;              //命中率
	public int getLife() {
   
		return life;
	}
	public void setLife(int life) {
   
		this.life = life;
	}
	public int getAttack() {
   
		return attack;
	}
	public void setAttack(int attack) {
   
		this.attack = attack;
	}
	public int getDefend() {
   
		return defend;
	}
	public void setDefend(int defend) {
   
		this.defend = defend;
	}
	public double getHr() {
   
		return hr;
	}
	public void setHr(double hr) {
   
		this.hr = hr;
	}
	//遭到攻击时的处理函数
	public void fangyu(int attack) {
   
		int hurt = 0;              //受到的伤害
		int residue_life;          //剩余生命值
		if (die()) {
                  //调用下面的阵亡处理函数
			if(attack>defend) {
       //对手攻击力大于自身防御力则受到伤害,否则受伤值为0
				hurt = attack-defend;
			}else {
   
				hurt = 0;
			}
				residue_life = life - hurt;         //每回合计算剩余生命值
				System.out.println(this.name+"做出了防御,受到"+hurt+"点伤害!");//打印受到多少伤害
				if(residue_life<0)
					residue_life = 0;
				System.out.println("还剩"+residue_life+"点生命值");   //打印剩余生命值
				life = residue_life;         //当前生命值
		}else {
   
			
		}
	}
	//阵亡时的处理函数,返回一个布尔值,代表是否死亡
	public boolean die() {
   
		boolean flag=true;    //初始化,代表活着
		if (life <= 0) {
          //生命值小于等于0则阵亡
			System.out.println(this.name+"阵亡,游戏结束!");
			flag = false;
		}
		return flag;    //返回生存状态
	}
	//没有打中,躲开的处理函数
	public void dodge() {
   
		System.out.println("没有击中,"+this.name+"躲过一劫!");
	}
}

  1. Soilder.java
/*描述战士的类(子类)
 * 成员变量(5个):名称,生命值,攻击力,防御力,命中率
 * 1个函数:对方没有打中的处理函数(重写)
 * author:@杨陈菊
 */

//定义战士子类,继承父类GameUtil
public class Soilder extends GameUtil {
   
	
	public Soilder() {
   
		//初始化5个变量
		name = "战士"
  • 37
    点赞
  • 141
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
好的,下面是一个简单的回合制战斗游戏的示例代码: ```python import pygame import time # 初始化pygame pygame.init() # 设置窗口大小 window_width = 640 window_height = 480 game_display = pygame.display.set_mode((window_width, window_height)) pygame.display.set_caption('回合制战斗游戏') # 定义颜色 black = (0, 0, 0) white = (255, 255, 255) red = (255, 0, 0) # 定义角色类 class Character: def __init__(self, name, hp, damage): self.name = name self.hp = hp self.damage = damage def attack(self, target): target.hp -= self.damage print(f'{self.name}对{target.name}造成了{self.damage}点伤害!') if target.hp <= 0: print(f'{target.name}已经死亡!') # 定义主角和敌人 player = Character('主角', 100, 20) enemy = Character('敌人', 80, 10) # 定义游戏循环 def game_loop(): game_exit = False while not game_exit: for event in pygame.event.get(): if event.type == pygame.QUIT: game_exit = True # 显示角色状态 game_display.fill(white) font = pygame.font.SysFont(None, 25) text = font.render(f'{player.name}:HP {player.hp}', True, black) game_display.blit(text, (10, 10)) text = font.render(f'{enemy.name}:HP {enemy.hp}', True, black) game_display.blit(text, (window_width - 150, 10)) # 显示操作提示 font = pygame.font.SysFont(None, 30) text = font.render('按空格键攻击!', True, red) game_display.blit(text, (window_width/2 - 100, window_height/2)) pygame.display.update() # 等待空格键按下 while True: for event in pygame.event.get(): if event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE: break else: continue break # 主角攻击敌人 player.attack(enemy) time.sleep(1) # 敌人攻击主角 enemy.attack(player) time.sleep(1) # 判断游戏是否结束 if player.hp <= 0 or enemy.hp <= 0: game_exit = True # 显示最终结果 game_display.fill(white) font = pygame.font.SysFont(None, 50) if player.hp <= 0: text = font.render('游戏结束,你输了!', True, red) else: text = font.render('游戏结束,你赢了!', True, red) game_display.blit(text, (window_width/2 - 200, window_height/2)) pygame.display.update() time.sleep(3) pygame.quit() quit() game_loop() ``` 运行这段代码,你将看到一个窗口,提示你按空格键攻击敌人。当你按下空格键后,主角和敌人将轮流攻击,直到其中一方的HP降为0。最后,游戏将显示最终结果。这只是一个简单的示例游戏,你可以根据自己的需求进行扩展和改进。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值