<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      實(shí)驗(yàn)5 繼承和多態(tài)

      task4

      pets.hpp

      #pragma once
      #include <iostream>
      #include <string>
      using namespace std;
      using std::string;
      
      class MachinePets
      {
      public:
          MachinePets(const string name) : nickname{name} {}
          ~MachinePets() = default;
          string get_nickname() const { return nickname; }
          virtual string talk() = 0;
      
      private:
          string nickname;
      };
      
      class PetCats : public MachinePets
      {
      
      public:
          PetCats(const string str) : MachinePets(str) {}
          ~PetCats() = default;
          string talk() { return "miao wu~"; }
      };
      
      class PetDogs : public MachinePets
      {
      public:
          PetDogs(const string s) : MachinePets(s) {}
          ~PetDogs() = default;
          string talk() { return "wang wang~"; }
      };
      

        task4.cpp

      #include <iostream>
      #include "pets.hpp"
      
      void play(MachinePets &obj) {
          std::cout << obj.get_nickname() << " says " << obj.talk() << std::endl;
      }
      
      void test() {
          PetCats cat("miku");
          PetDogs dog("da huang");
      
          play( cat );
          play( dog );
      }
      
      int main() {
          test();
      }
      

        

      task5

      person.hpp

      #pragma once
      
      #include <iostream>
      #include <string>
      
      using namespace std;
      using std::cin;
      using std::cout;
      using std::endl;
      using std::string;
      
      class Person
      {
      public:
          Person(string n = " ", string t = " ", string e = " ") : name{n}, telephone{t}, email{e} {}
          Person(const Person &p) : name{p.name}, telephone{p.telephone}, email{p.email} {}
          ~Person() = default;
          void update_telephone();
          void update_email();
      
          friend std::ostream &operator<<(std::ostream &out, Person &p);
          friend std::istream &operator>>(std::istream &in, Person &p);
          friend bool operator==(Person &p1, Person &p2);
      
      private:
          string name,telephone,email;
      };
      
      void Person::update_telephone()
      {
          cout << "Enter the telephone number: ";
          cin.clear();
          string new_telephone;
          cin >> new_telephone;
          telephone = new_telephone;
          cout << "telephone number has been updated" << endl;
      }
      
      void Person::update_email()
      {
          cout << "Enter the email address: ";
          string new_email;
          cin.clear();
          cin >> new_email;
          cout << "email address has been updated..." << endl;
      
          email = new_email;
      }
      
      std::ostream &operator<<(std::ostream &out, Person &p)
      {
          out << p.name << "   " << p.telephone << "    " << p.email;
          return out;
      }
      std::istream &operator>>(std::istream &in, Person &p)
      {
          in >> p.name >> p.telephone >> p.email;
          return in;
      }
      
      bool operator==(Person &p1, Person &p2)
      {
          if (p1.name == p2.name && p1.telephone == p2.telephone)
              return true;
          else
              return false;
      }
      

        task5.cpp

      #include <iostream>
      #include <fstream>
      #include <vector>
      #include "Person.hpp"
      
      void test() {
          using namespace std;
      
          vector<Person> phone_book;
          Person p;
      
          cout << "Enter person's contact until press Ctrl + Z" << endl;
          while(cin >> p)
              phone_book.push_back(p);
          
          cout << "\nupdate someone's contact: \n";
          phone_book.at(0).update_telephone();
          phone_book.at(0).update_email();    
          
          cout << "\ndisplay all contacts' info\n";
          for(auto &phone: phone_book)
              cout << phone << endl;
          
          cout << "\ntest whether the same contact\n";
          cout << boolalpha << (phone_book.at(0) == phone_book.at(1)) << endl;
      }
      
      int main() {
          test();
      }
      

        

      task6

      container.cpp

      //=======================
      //        container.cpp
      //=======================
      
      // default constructor initialise the inventory as empty
      #include "container.h"
      #include <iostream>
      using namespace std;
      container::container()
      {
      	set(99, 99);
      }
      
      // set the item numbers
      void container::set(int heal_n, int mw_n)
      {
      	numOfHeal = heal_n;
      	numOfMW = mw_n;
      }
      
      // get the number of heal
      int container::nOfHeal()
      {
      	return numOfHeal;
      }
      
      // get the number of magic water
      int container::nOfMW()
      {
      	return numOfMW;
      }
      
      // display the items;
      void container::display()
      {
      	cout << "Your bag contains: " << endl;
      	cout << "Heal(HP+100): " << numOfHeal << endl;
      	cout << "Magic Water (MP+80): " << numOfMW << endl;
      }
      
      // use heal
      bool container::useHeal()
      {
      	numOfHeal--;
      	return 1; // use heal successfully
      }
      
      // use magic water
      bool container::useMW()
      {
      	numOfMW--;
      	return 1; // use magic water successfully
      }
      

        container.h

      #ifndef _CONTAINER
      #define _CONTAINER
       
      
      class container		// Inventory
      {
      protected:
      	int numOfHeal;			// number of heal
      	int numOfMW;			// number of magic water
      public:
      	container();			// constuctor
      	void set(int heal_n, int mw_n);	// set the items numbers
      	int nOfHeal();			// get the number of heal
      	int nOfMW();			// get the number of magic water
      	void display();			// display the items;
      	bool useHeal();			// use heal
      	bool useMW();			// use magic water
      };
      
      #endif
      

        main.cpp

      //=======================
      //		main.cpp
      //=======================
      
      // main function for the RPG style game
      #include "swordsman.h"
      #include <iostream>
      #include <string>
      
      using namespace std;
      
      int main()
      {
      	string tempName;
      	bool success = 0; // flag for storing whether operation is successful
      	cout << "Please input player's name: ";
      	cin >> tempName; // get player's name from keyboard input
      	player *human;	 // use pointer of base class, convenience for polymorphism
      	int tempJob;	 // temp choice for job selection
      	do
      	{
      		cout << "Please choose a job: 1 Swordsman, 2 Archer, 3 Mage" << endl;
      		cin >> tempJob;
      		system("cls"); // clear the screen
      		switch (tempJob)
      		{
      		case 1:
      			human = new swordsman(1, tempName); // create the character with user inputted name and job
      			success = 1;						// operation succeed
      			break;
      		default:
      			break; // In this case, success=0, character creation failed
      		}
      	} while (success != 1); // so the loop will ask user to re-create a character
      
      	int tempCom;					  // temp command inputted by user
      	int nOpp = 0;					  // the Nth opponent
      	for (int i = 1; nOpp < 5; i += 2) // i is opponent's level
      	{
      		nOpp++;
      		system("cls");
      		cout << "STAGE" << nOpp << endl;
      		cout << "Your opponent, a Level " << i << " Swordsman." << endl;
      		system("pause");
      		swordsman enemy(i, "Warrior"); // Initialise an opponent, level i, name "Junior"
      		human->reFill();			   // get HP/MP refill before start fight
      
      		while (!human->death() && !enemy.death()) // no died
      		{
      			success = 0;
      			while (success != 1)
      			{
      				showinfo(*human, enemy); // show fighter's information
      				cout << "Please give command: " << endl;
      				cout << "1 Attack; 2 Special Attack; 3 Use Heal; 4 Use Magic Water; 0 Exit Game" << endl;
      				cin >> tempCom;
      				switch (tempCom)
      				{
      				case 0:
      					cout << "Are you sure to exit? Y/N" << endl;
      					char temp;
      					cin >> temp;
      					if (temp == 'Y' || temp == 'y')
      						return 0;
      					else
      						break;
      				case 1:
      					success = human->attack(enemy);
      					human->isLevelUp();
      					enemy.isDead();
      					break;
      				case 2:
      					success = human->specialatt(enemy);
      					human->isLevelUp();
      					enemy.isDead();
      					break;
      				case 3:
      					success = human->useHeal();
      					break;
      				case 4:
      					success = human->useMW();
      					break;
      				default:
      					break;
      				}
      			}
      			if (!enemy.death()) // If AI still alive
      				enemy.AI(*human);
      			else // AI died
      			{
      				cout << "YOU WIN" << endl;
      				human->transfer(enemy); // player got all AI's items
      			}
      			if (human->death())
      			{
      				system("cls");
      				cout << endl
      					 << setw(50) << "GAME OVER" << endl;
      				delete human; // player is dead, program is getting to its end, what should we do here?
      				system("pause");
      				return 0;
      			}
      		}
      	}
      	delete human; // You win, program is getting to its end, what should we do here?
      	system("cls");
      	cout << "Congratulations! You defeated all opponents!!" << endl;
      	system("pause");
      	return 0;
      }
      

        play.cpp

      //=======================
      //		player.cpp
      //=======================
      #include "player.h"
      #include <iostream>
      #include <iomanip>
      
      using namespace std;
      
      // character's HP and MP resume
      void player::reFill()
      {
      	HP = HPmax; // HP and MP fully recovered
      	MP = MPmax;
      }
      
      // report whether character is dead
      bool player::death()
      {
      	return playerdeath;
      }
      
      // check whether character is dead
      void player::isDead()
      {
      	if (HP <= 0) // HP less than 0, character is dead
      	{
      		cout << name << " is Dead." << endl;
      		system("pause");
      		playerdeath = 1; // give the label of death value 1
      	}
      }
      
      // consume heal, irrelevant to job
      bool player::useHeal()
      {
      	if (bag.nOfHeal() > 0)
      	{
      		HP = HP + 100;
      		if (HP > HPmax) // HP cannot be larger than maximum value
      			HP = HPmax; // so assign it to HPmax, if necessary
      		cout << name << " used Heal, HP increased by 100." << endl;
      		bag.useHeal(); // use heal
      		system("pause");
      		return 1; // usage of heal succeed
      	}
      	else // If no more heal in bag, cannot use
      	{
      		cout << "Sorry, you don't have heal to use." << endl;
      		system("pause");
      		return 0; // usage of heal failed
      	}
      }
      
      // consume magic water, irrelevant to job
      bool player::useMW()
      {
      	if (bag.nOfMW() > 0)
      	{
      		MP = MP + 100;
      		if (MP > MPmax)
      			MP = MPmax;
      		cout << name << " used Magic Water, MP increased by 100." << endl;
      		bag.useMW();
      		system("pause");
      		return 1; // usage of magic water succeed
      	}
      	else
      	{
      		cout << "Sorry, you don't have magic water to use." << endl;
      		system("pause");
      		return 0; // usage of magic water failed
      	}
      }
      
      // possess opponent's items after victory
      void player::transfer(player &p)
      {
      	cout << name << " got" << p.bag.nOfHeal() << " Heal, and " << p.bag.nOfMW() << " Magic Water." << endl;
      	system("pause");
      	 bag.set(bag.nOfHeal()+p.bag.nOfHeal(),bag.nOfMW()+p.bag.nOfMW());
      	// set the character's bag, get opponent's items
      }
      
      // display character's job
      void player::showRole()
      {
      	switch (role)
      	{
      	case sw:
      		cout << "Swordsman";
      		break;
      	case ar:
      		cout << "Archer";
      		break;
      	case mg:
      		cout << "Mage";
      		break;
      	default:
      		break;
      	}
      }
      
      void showinfo(player &p1, player &p2)   
      {
      	system("cls");
      	cout << "##############################################################" << endl;
      	cout << "# Player" << setw(10) << p1.name << "   LV. " << setw(3) << p1.LV
      		 << "  # Opponent" << setw(10) << p2.name << "   LV. " << setw(3) << p2.LV << " #" << endl;
      	cout << "# HP " << setw(3) << (p1.HP <= 999 ? p1.HP : 999) << '/' << setw(3) << (p1.HPmax <= 999 ? p1.HPmax : 999)
      		 << " | MP " << setw(3) << (p1.MP <= 999 ? p1.MP : 999) << '/' << setw(3) << (p1.MPmax <= 999 ? p1.MPmax : 999)
      		 << "     # HP " << setw(3) << (p2.HP <= 999 ? p2.HP : 999) << '/' << setw(3) << (p2.HPmax <= 999 ? p2.HPmax : 999)
      		 << " | MP " << setw(3) << (p2.MP <= 999 ? p2.MP : 999) << '/' << setw(3) << (p2.MPmax <= 999 ? p2.MPmax : 999) << "      #" << endl;
      	cout << "# AP " << setw(3) << (p1.AP <= 999 ? p1.AP : 999)
      		 << " | DP " << setw(3) << (p1.DP <= 999 ? p1.DP : 999)
      		 << " | speed " << setw(3) << (p1.speed <= 999 ? p1.speed : 999)
      		 << " # AP " << setw(3) << (p2.AP <= 999 ? p2.AP : 999)
      		 << " | DP " << setw(3) << (p2.DP <= 999 ? p2.DP : 999)
      		 << " | speed " << setw(3) << (p2.speed <= 999 ? p2.speed : 999) << "  #" << endl;
      	cout << "# EXP" << setw(7) << p1.EXP << " Job: " << setw(7);
      	p1.showRole();
      	cout << "   # EXP" << setw(7) << p2.EXP << " Job: " << setw(7);
      	p2.showRole();
      	cout << "    #" << endl;
      	cout << "--------------------------------------------------------------" << endl;
      	p1.bag.display();
      	cout << "##############################################################" << endl;
      }
      

        player.h

      //=======================
      //		player.h
      //=======================
      
      // The base class of player
      // including the general properties and methods related to a character
      
      #ifndef _PLAYER
      #define _PLAYER
      
      #include <iomanip>		// use for setting field width
      #include <time.h>	
      
      #include <string>
      #include "container.h"
      using std::string;
      
      enum job {sw, ar, mg};	/* define 3 jobs by enumerate type
      							   sword man, archer, mage */
      class player
      {
      	friend void showinfo(player &p1, player &p2);
      	friend class swordsman;
      
      protected:
      	int HP, HPmax, MP, MPmax, AP, DP, speed, EXP, LV;
      	// General properties of all characters
      	string name;	// character name
      	job role;		/* character's job, one of swordman, archer and mage,
      					   as defined by the enumerate type */
      	container bag;	// character's inventory
      
      public:
      	virtual bool attack(player &p)=0;	// normal attack
      	virtual bool specialatt(player &p)=0;	//special attack
      	virtual void isLevelUp()=0;			// level up judgement
      	/* Attention!
      	These three methods are called "Pure virtual functions".
      	They have only declaration, but no definition.
      	The class with pure virtual functions are called "Abstract class", which can only be used to inherited, but not to constructor objects. 
      	The detailed definition of these pure virtual functions will be given in subclasses. */
      
      	void reFill();		// character's HP and MP resume
      	bool death();		// report whether character is dead
      	void isDead();		// check whether character is dead
      	bool useHeal();		// consume heal, irrelevant to job
      	bool useMW();		// consume magic water, irrelevant to job
      	void transfer(player &p);	// possess opponent's items after victory
      	void showRole();	// display character's job
      	
      private:
      	bool playerdeath;			// whether character is dead, doesn't need to be accessed or inherited
      };
      
      #endif
      

        swordsman.cpp

      //=======================
      //		swordsman.cpp
      //=======================
      #include "swordsman.h"
       #include<bits/stdc++.h>
      using namespace std;
      
      // constructor. default values don't need to be repeated here
      swordsman::swordsman(int lv_in, string name_in)
      {
      	role = sw; // enumerate type of job
      	LV = lv_in;
      	name = name_in;
      
      	// Initialising the character's properties, based on his level
      	HPmax = 150 + 8 * (LV - 1); // HP increases 8 point2 per level
      	HP = HPmax;
      	MPmax = 75 + 2 * (LV - 1); // MP increases 2 points per level
      	MP = MPmax;
      	AP = 25 + 4 * (LV - 1);	   // AP increases 4 points per level
      	DP = 25 + 4 * (LV - 1);	   // DP increases 4 points per level
      	speed = 25 + 2 * (LV - 1); // speed increases 2 points per level
      
      	playerdeath = 0;
      	EXP = LV * LV * 75;
      	bag.set(lv_in, lv_in);
      }
      
      void swordsman::isLevelUp()
      {
      	if (EXP >= LV * LV * 75)
      	{
      		LV++;
      		AP += 4;
      		DP += 4;
      		HPmax += 8;
      		MPmax += 2;
      		speed += 2;
      		cout << name << " Level UP!" << endl;
      		cout << "HP improved 8 points to " << HPmax << endl;
      		cout << "MP improved 2 points to " << MPmax << endl;
      		cout << "Speed improved 2 points to " << speed << endl;
      		cout << "AP improved 4 points to " << AP << endl;
      		cout << "DP improved 5 points to " << DP << endl;
      		system("pause");
      		isLevelUp(); // recursively call this function, so the character can level up multiple times if got enough exp
      	}
      }
      
      bool swordsman::attack(player &p)
      {
      	double HPtemp = 0;			 // opponent's HP decrement
      	double EXPtemp = 0;			 // player obtained exp
      	double hit = 1;				 // attach factor, probably give critical attack
      	srand((unsigned)time(NULL)); // generating random seed based on system time
      
      	// If speed greater than opponent, you have some possibility to do double attack
      	if ((speed > p.speed) && (rand() % 100 < (speed - p.speed))) // rand()%100 means generates a number no greater than 100
      	{
      		HPtemp = (int)((1.0 * AP / p.DP) * AP * 5 / (rand() % 4 + 10)); // opponent's HP decrement calculated based their AP/DP, and uncertain chance
      		cout << name << "'s quick strike hit " << p.name << ", " << p.name << "'s HP decreased " << HPtemp << endl;
      		p.HP = int(p.HP - HPtemp);
      		EXPtemp = (int)(HPtemp * 1.2);
      	}
      
      	// If speed smaller than opponent, the opponent has possibility to evade
      	if ((speed < p.speed) && (rand() % 50 < 1))
      	{
      		cout << name << "'s attack has been evaded by " << p.name << endl;
      		system("pause");
      		return 1;
      	}
      
      	// 10% chance give critical attack
      	if (rand() % 100 <= 10)
      	{
      		hit = 1.5;
      		cout << "Critical attack: ";
      	}
      
      	// Normal attack
      	HPtemp = (int)((1.0 * AP / p.DP) * AP * 5 / (rand() % 4 + 10));
      	cout << name << " uses bash, " << p.name << "'s HP decreases " << HPtemp << endl;
      	EXPtemp = (int)(EXPtemp + HPtemp * 1.2);
      	p.HP = (int)(p.HP - HPtemp);
      	cout << name << " obtained " << EXPtemp << " experience." << endl;
      	EXP = (int)(EXP + EXPtemp);
      	system("pause");
      	return 1; // Attack success
      }
      
      bool swordsman::specialatt(player &p)
      {
      	if (MP < 40)
      	{
      		cout << "You don't have enough magic points!" << endl;
      		system("pause");
      		return 0; // Attack failed
      	}
      	else
      	{
      		MP -= 40; // consume 40 MP to do special attack
      
      		// 10% chance opponent evades
      		if (rand() % 100 <= 10)
      		{
      			cout << name << "'s leap attack has been evaded by " << p.name << endl;
      			system("pause");
      			return 1;
      		}
      
      		double HPtemp = 0;
      		double EXPtemp = 0;
      		// double hit=1;
      		// srand(time(NULL));
      		HPtemp = (int)(AP * 1.2 + 20); // not related to opponent's DP
      		EXPtemp = (int)(HPtemp * 1.5); // special attack provides more experience
      		cout << name << " uses leap attack, " << p.name << "'s HP decreases " << HPtemp << endl;
      		cout << name << " obtained " << EXPtemp << " experience." << endl;
      		p.HP = (int)(p.HP - HPtemp);
      		EXP = (int)(EXP + EXPtemp);
      		system("pause");
      	}
      	return 1; // special attack succeed
      }
      
      // Computer opponent
      void swordsman::AI(player &p)
      {
      	if ((HP < (int)((1.0 * p.AP / DP) * p.AP * 1.5)) && (HP + 100 <= 1.1 * HPmax) && (bag.nOfHeal() > 0) && (HP > (int)((1.0 * p.AP / DP) * p.AP * 0.5)))
      	// AI's HP cannot sustain 3 rounds && not too lavish && still has heal && won't be killed in next round
      	{
      		useHeal();
      	}
      	else
      	{
      		if (MP >= 40 && HP > 0.5 * HPmax && rand() % 100 <= 30)
      		// AI has enough MP, it has 30% to make special attack
      		{
      			specialatt(p);
      			p.isDead(); // check whether player is dead
      		}
      		else
      		{
      			if (MP < 40 && HP > 0.5 * HPmax && bag.nOfMW())
      			// Not enough MP && HP is safe && still has magic water
      			{
      				useMW();
      			}
      			else
      			{
      				attack(p); // normal attack
      				p.isDead();
      			}
      		}
      	}
      }
      

        swordsman.h

      //=======================
      //		swordsman.h
      //=======================
      
      // Derived from base class player
      // For the job Swordsman
      
      #include "player.h"
      
      class swordsman : public player	// subclass swordsman publicly inherited from base player
      {
      public:
      	swordsman(int lv_in=1, string name_in="Not Given");	
      		// constructor with default level of 1 and name of "Not given"
      	void isLevelUp();
      	bool attack (player &p);
      	bool specialatt(player &p);
      		/* These three are derived from the pure virtual functions of base class
      		   The definition of them will be given in this subclass. */
      	void AI(player &p);				// Computer opponent
      };
      

        

       

      posted on 2022-11-28 14:02  cflxl  閱讀(36)  評(píng)論(0)    收藏  舉報(bào)

      導(dǎo)航

      主站蜘蛛池模板: 野花社区www视频日本| 沈阳市| 色综合久久精品亚洲国产| 情欲少妇人妻100篇| 午夜福利国产片在线视频| 亚洲avav天堂av在线网爱情| 国产高清一区二区不卡| 一个人看的www视频免费观看| 亚洲国产另类久久久精品黑人 | 欧美无人区码suv| 国产午夜精品久久一二区| 熟女一区二区中文字幕| A男人的天堂久久A毛片| 国产成人综合久久亚洲精品| 精品偷拍被偷拍在线观看| 国产黄色一区二区三区四区| 18女下面流水不遮图| 欧洲美熟女乱av在免费| 日本中文字幕有码在线视频| 中文字幕少妇人妻精品| 大尺度国产一区二区视频| 人妻av一区二区三区av免费 | 中文字幕日韩有码一区| 亚洲色最新高清AV网站| 亚洲高清乱码午夜电影网| 精品视频国产狼友视频| 日本污视频在线观看| 亚洲男人天堂一级黄色片| 国产成人亚洲欧美二区综合| 精品国产午夜肉伦伦影院| 国产亚洲一区二区三不卡| 国产精品无遮挡猛进猛出| 欧美激烈精交gif动态图| 中国xxx农村性视频| 狠狠躁夜夜躁人人爽天天古典| 欧美国产精品不卡在线观看| 国产超碰无码最新上传| 久久99国产精品尤物| 无码乱人伦一区二区亚洲一| 欧美人与动欧交视频| 中国少妇无码专区|