python编写格斗游戏_设计并编写代码自动格斗类游戏

题目描述:

1)角色类CRole为基类:

构造函数、析构函数;

成员变量:头像、HP(血量)、ATK(攻击力)、DEF(防御力)、Lv(等级),EXP(经验值);

成员函数:武器攻击、跳跃。

2)英雄类CHero继承于CRole类

构造函数、析构函数;

英雄类新增技能踢腿(成员函数)、抱摔(成员函数),给对方造成伤害具体值由学员自己进行设定;

3)敌人类CEnemy继承于CRole类

构造函数、析构函数;

新增技能劈掌(成员函数)、连环腿(成员函数),给对方造成伤害值由学员自己进行设定;

4)战斗类CBattle

构造函数、析构函数及其他成员函数

双方HP(血量)初始值为100,开始战斗以后,英雄和敌人轮流攻击对方,掉血量=攻击方技能伤害值+ATK(攻击方的攻击力)-DEF(防御方的防御力),当一方血量为0时,战斗结束,玩家经验值增加相应点数,当经验等级达一定时候,玩家等级提升。

“game.h”

#pragma once

#include

#include

//角色类

class CRole{

public:

std::string sculpture;//头像

int HP;//血量

int ATK;//攻击力

int DEF;//防御力

int Lv;//等级

int EXP;//经验

public:

CRole() {};//默认构造函数

CRole(const std::string sculpture,int HP,int ATK,int DEF,int Lv,int EXP);

~CRole();

void WeaponAttack();//武器攻击

void Jump();//跳跃

void show();

public:

int wa_ATK;

};

//英雄类

class CHero :public CRole {

public:

CHero() {};//默认构造函数

CHero(const std::string sculpture, int HP, int ATK, int DEF, int Lv, int EXP);

~CHero();//析构函数

void Kicking();//踢腿

void Wresting();//抱摔

public:

int k_ATK;//踢腿攻击力

int w_ATK;//抱摔攻击力

};

//敌人类

class CEnemy:public CRole {

public:

CEnemy() {};//默认构造函数

CEnemy(const std::string sculpture, int HP, int ATK, int DEF, int Lv, int EXP);

~CEnemy();//析构函数

void Chopping_Palm();//劈掌

void Serial_Leg();//连环腿

public:

int p_ATK;//劈掌攻击力

int s_ATK;//连环腿攻击力

};

//战斗类

class CBattle :public CRole {

public:

CBattle();//构造函数

~CBattle();//析构函数

void ready(CHero &obj1, CEnemy &obj2);//战斗准备函数

void fighting(CHero obj1, CEnemy obj2);//战斗函数

};

"game.cpp"

#include"pch.h"

#include"game.h"

#include

#include

#include

//角色类——构造函数

CRole::CRole(const std::string sculpture, int HP, int ATK, int DEF, int Lv, int EXP) {

this->sculpture = sculpture;

this->HP = HP;

this->ATK = ATK;

this->DEF = DEF;

this->Lv = Lv;

this->EXP = EXP;

}

void CRole::show() {

std::cout << "角色:" << this->sculpture << " 血量:" << this->HP << " 攻击力:"

<< this->ATK << " 防御力:" << this->DEF << " 等级:" << this->Lv << " 经验:" << this->EXP << std::endl;

}

//角色类——析构函数

CRole::~CRole(){

}

//角色类——武器攻击

void CRole::WeaponAttack() {

wa_ATK =10;

}

//角色类——跳跃

void CRole::Jump() {

std::cout << "miss" << std::endl;

}

//英雄类——构造函数

CHero::CHero(const std::string sculpture, int HP, int ATK, int DEF, int Lv, int EXP)

:CRole(sculpture,HP,ATK,DEF,Lv,EXP)

{

}

//英雄类——析构函数

CHero::~CHero() {

}

//英雄类——踢腿

void CHero::Kicking() {

k_ATK = 10;

}

//英雄类——抱摔

void CHero::Wresting() {

w_ATK = 15;

}

//敌人类——构造函数

CEnemy::CEnemy(const std::string sculpture, int HP, int ATK, int DEF, int Lv, int EXP)

:CRole(sculpture, HP, ATK, DEF, Lv, EXP)

{

}

//敌人类——析构函数

CEnemy::~CEnemy() {

}

//敌人类——劈掌

void CEnemy::Chopping_Palm() {

p_ATK = 10;

}

//敌人类——连环腿

void CEnemy::Serial_Leg() {

s_ATK = 16;

}

//战斗类——构造函数

CBattle::CBattle() {

std::cout << "自动格斗小游戏" << std::endl;

}

//战斗类——准备函数

void CBattle::ready(CHero &obj1, CEnemy &obj2){

std::cout << "战斗双方" << std::endl;

obj1.show();

obj2.show();

std::cout << "准备战斗" << std::endl;

for (int i = 3;i > 0;i--) {

std::cout << i << std::endl;

Sleep(1000);

}

std::cout << "战斗开始" << std::endl;

Sleep(1000);

}

//战斗类——析构函数

CBattle::~CBattle() {

}

//战斗类——格斗函数

void CBattle::fighting(CHero obj1, CEnemy obj2) {

srand((unsigned)time(0));

int Blood_Loss;

int temp, temp1;

int t = 1;

//掉血量=攻击方技能伤害+ATK(攻击方的攻击力)-防御方的防御力DEF

while (obj1.HP > 0 && obj2.HP > 0) {

std::cout << "第" << t << "回合" << std::endl;

temp = rand() % (3 - 0 + 1) + 0;//随机生成攻击类型

temp1 = rand() % (2 - 0 + 1) + 0;//随机产生跳跃躲避攻击,三分之一的概率触发跳跃闪避

if (t % 2 == 1) {

switch (temp) {

case 0://普通攻击

if (temp1 == 1) {

obj2.Jump();

std::cout<< obj1.sculpture << "对" << obj2.sculpture << "使出的普通攻击被" << obj2.sculpture << "跳跃躲避了" << std::endl;

}

else {

Blood_Loss = obj1.ATK - obj2.DEF;//掉血量

obj2.HP -= Blood_Loss;//obj2剩余血量

std::cout << obj1.sculpture << "使出普通攻击对" << obj2.sculpture << "造成了" << Blood_Loss << "点伤害" << std::endl;

}

break;

case 1:

if (temp1 == 1) {//武器攻击

obj2.Jump();

std::cout << obj1.sculpture << "对" << obj2.sculpture << "使出的武器攻击被" << obj2.sculpture << "跳跃躲避了" << std::endl;

}

else {

obj1.WeaponAttack();

Blood_Loss = obj1.ATK + obj1.wa_ATK - obj2.DEF;

obj2.HP -= Blood_Loss;

std::cout << obj1.sculpture << "使用武器对" << obj2.sculpture << "造成了" << Blood_Loss << "点伤害" << std::endl;

}

break;

case 2:

if (temp1 == 1) {//踢腿攻击

obj2.Jump();

std::cout << obj1.sculpture << "对" << obj2.sculpture << "使出踢腿攻击被" << obj2.sculpture << "跳跃躲避了" << std::endl;

}

else {

obj1.Kicking();

Blood_Loss = obj1.ATK + obj1.k_ATK - obj2.DEF;

obj2.HP -= Blood_Loss;

std::cout << obj1.sculpture << "使用踢腿对" << obj2.sculpture << "造成了" << Blood_Loss << "点伤害" << std::endl;

}

break;

case 3:

if (temp1 == 1) {//抱摔攻击

obj2.Jump();

std::cout << obj1.sculpture << "对" << obj2.sculpture << "使出抱摔攻击被" << obj2.sculpture << "跳跃躲避了" << std::endl;

}

else {

obj1.Wresting();//抱摔

Blood_Loss = obj1.ATK + obj1.w_ATK - obj2.DEF;

obj2.HP -= Blood_Loss;

std::cout << obj1.sculpture << "使用抱摔对" << obj2.sculpture << "造成了" << Blood_Loss << "点伤害" << std::endl;

}

break;

}

}

if (t % 2 == 0) {

switch (temp) {

case 0://普通攻击

if (temp1 == 1) {

obj1.Jump();

std::cout << obj2.sculpture << "对" << obj1.sculpture << "使出的普通攻击被" << obj1.sculpture << "跳跃躲避了" << std::endl;

}

else {

Blood_Loss = obj2.ATK - obj1.DEF;//掉血量

obj1.HP -= Blood_Loss;//obj2剩余血量

std::cout << obj2.sculpture << "使出普通攻击对" << obj1.sculpture << "造成了" << Blood_Loss << "点伤害" << std::endl;

}

break;

case 1:

if (temp1 == 1) {//武器攻击

obj1.Jump();

std::cout << obj2.sculpture << "对" << obj1.sculpture << "使出的武器攻击被" << obj1.sculpture << "跳跃躲避了" << std::endl;

}

else {

obj2.WeaponAttack();

Blood_Loss = obj2.ATK + obj2.wa_ATK - obj1.DEF;

obj1.HP -= Blood_Loss;

std::cout << obj2.sculpture << "使用武器对" << obj1.sculpture << "造成了" << Blood_Loss << "点伤害" << std::endl;

}

break;

case 2:

if (temp1 == 1) {//劈掌攻击

obj1.Jump();

std::cout << obj2.sculpture << "对" << obj1.sculpture << "使出的劈掌攻击被" << obj1.sculpture << "跳跃躲避了" << std::endl;

}

else {

obj2.Chopping_Palm();//劈掌

Blood_Loss = obj2.ATK + obj2.p_ATK - obj1.DEF;

obj1.HP -= Blood_Loss;

std::cout << obj2.sculpture << "使用劈掌对" << obj1.sculpture << "造成了" << Blood_Loss << "点伤害" << std::endl;

}

break;

case 3:

if (temp1 == 1) {//连环腿攻击

obj1.Jump();

std::cout << obj2.sculpture << "对" << obj1.sculpture << "使出的连环腿攻击被" << obj1.sculpture << "跳跃躲避了" << std::endl;

}

else {

obj2.Serial_Leg();//连环腿

Blood_Loss = obj2.ATK + obj2.s_ATK - obj1.DEF;

obj1.HP -= Blood_Loss;

std::cout << obj1.sculpture << "使用连环腿对" << obj2.sculpture << "造成了" << Blood_Loss << "点伤害" << std::endl;

}

break;

}

}

t++;

}

std::cout << std::endl<

if (obj1.HP > 0) {

int exp;

exp = obj2.Lv * 10;

obj1.EXP += exp;

std::cout << obj2.sculpture << "死亡,";

std::cout << obj1.sculpture << "胜利!获得" << exp << "经验,目前经验值为:" << obj1.EXP << std::endl;

}

if (obj2.HP > 0) {

int exp;

exp = obj1.Lv * 5;

obj2.EXP += exp;

std::cout << obj1.sculpture << "死亡,";

std::cout << obj2.sculpture << "胜利!获得" << exp << "经验,目前经验值为:" << obj2.EXP << std::endl;

}

}

"main.cpp"

// FightingGame.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。

//

#include "pch.h"

#include"game.h"

#include

#include

#include

#include

int main()

{

//创建普通角色

CRole Ordy_character1("村民1",100,3,5,1,0);

CRole Ordy_character2("村民2",100,3,6,1,20);

CRole Ordy_character3("村民3", 100,4,9,3,100);

//创建英雄角色

CHero Hero1("张飞", 100, 19, 5, 1, 0);

CHero Hero2("刘备", 100, 18, 5, 1, 0);

CHero Hero3("关羽", 100, 20, 5, 1, 0);

//创建敌人角色

CEnemy enemy1("小黄巾1",100,16,3,3,100);

CEnemy enemy2("小黄巾2",100,16,3,3,100);

CEnemy enemy3("小黄巾3", 100, 16, 3, 3, 100);

/*std::cout << "战斗双方" << std::endl;

Ordy_character1.show();

Hero1.show();*/

CBattle battle1;

battle1.ready(Hero1, enemy1);

battle1.fighting(Hero1, enemy1);

}

运行结果:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值