日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++(15)--面向对象编程实践-欢乐斗地主(vector的花式输出)

發(fā)布時間:2023/12/13 c/c++ 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++(15)--面向对象编程实践-欢乐斗地主(vector的花式输出) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

面向?qū)ο缶幊虒嵺`-歡樂斗地主


《老九學(xué)堂C++課程》《C++ primer》學(xué)習(xí)筆記。《老九學(xué)堂C++課程》詳情請到B站搜索《老九零基礎(chǔ)學(xué)編程C++入門》
-------------簡單的事情重復(fù)做,重復(fù)的事情用心做,用心的事情堅持做(老九君)---------------

要求:實現(xiàn)錄入及打印地主的信息功能
實現(xiàn)地主的摸牌,及查看牌面的功能。

// main 文件 #include <iostream> #include "LandOwner.h" using namespace std; int main(){LandOwner *ptr_landowner1 = new LandOwner();LandOwner *ptr_landowner2 = new LandOwner("專業(yè)斗地主");LandOwner *ptr_landowner3 = new LandOwner("周扒皮");ptr_landowner1 -> ShowInfo();ptr_landowner2 -> ShowInfo();ptr_landowner3 -> ShowInfo();ptr_landowner2 -> TouchCard(3);// 向量容器vector, 動態(tài)數(shù)組可以在運行階段設(shè)置長度// 具有數(shù)組的快速索引方式// 可以插入和刪除元素// 定義和初始化 vector<double> vec1; vector<string> vec2(5); vector<int> vec3(20, 998)// 54 個元素的數(shù)組來表示撲克牌,除13得到花色,模13得到牌面delete ptr_landowner1;delete ptr_landowner2;delete ptr_landowner3; } // .h 文件 // 地主類 // Created by 陳瑩瑩 on 2021/2/5. //#ifndef HELLOWORLD_LANDOWNER_H #define HELLOWORLD_LANDOWNER_H #include <iostream> #include <vector> using namespace std;class LandOwner { private:string m_NickName;string m_Sex;int m_Gold;long m_Exp;vector<int> currCards; // 當(dāng)前玩家的手牌數(shù)組vector<int> packCards; // 默認(rèn)的一副牌,從1-54vector<int> surplCards; // 摸牌后剩余的牌bool isContains(int); // 剩余牌中是否包含cardNum這個牌面void deleteCards(vector<int> &, int); // 刪除剩余牌數(shù)組數(shù)string getColor(int); // 獲得牌的花色string getValue(int); // 獲得牌面public:LandOwner();LandOwner(string);LandOwner(string, string, int, long);~LandOwner();void ShowInfo();string GetNickName(){return m_NickName;}void SetNickName(string val){m_NickName = val;}string GetSex(){return m_Sex;}void SetSex(string val){m_Sex=val;}int GetGold(){return m_Gold;}void SetGold(int val){m_Gold=val;}long GetExp(){return m_Exp;}void SetExp(long val){m_Exp=val;}void TouchCard(int cardCount);void InitCards();void ShowCards(vector<int> &); };#endif //HELLOWORLD_LANDOWNER_H

vector顯示輸出:傳統(tǒng)for循環(huán)輸出、迭代器輸出、簡化迭代器:auto、auto區(qū)間遍歷、copy算法輸出

// .cpp文件 // // Created by 陳瑩瑩 on 2021/2/5. // #include <iostream> #include <vector> #include <iterator> #include <algorithm> #include <cstdlib> #include <ctime> #include "LandOwner.h" using namespace std;LandOwner::LandOwner(){SetNickName("默認(rèn)地主");SetSex("保密");SetExp(0);SetGold(1000);cout << "LandOwner()" << endl;InitCards();}LandOwner::LandOwner(string nickName):m_NickName(nickName){SetSex("保密");SetExp(0);SetGold(1000);cout << "LandOwner(string nickName)" << endl;InitCards(); // ShowCards(packCards); // ShowCards(currCards); // ShowCards(surplCards); // cout << "測試" << isContains(13);} LandOwner::LandOwner(string nickName, string sex, int gold, long exp):m_NickName(nickName),m_Sex(sex),m_Gold(gold), m_Exp(exp) {cout << "LandOwner(stirng nickName, string sex, int gold, long exp)" << endl;InitCards(); }void LandOwner::ShowInfo(){cout << "昵稱:" << GetNickName() << endl;cout << "性別:" << GetSex() << endl;cout << "金幣:" << GetGold() << endl;cout << "經(jīng)驗:" << GetExp() << endl; } void LandOwner::InitCards(){// 初始化packCards, surplusCards, currCards// 生成默認(rèn)的一副撲克牌for(int i = 0; i < 54; i++){packCards.push_back(i + 1);surplCards.push_back(i + 1);}currCards.clear(); }void LandOwner::ShowCards(vector<int> &cards) {// 顯示牌面信息// C 語言的習(xí)慣: 傳統(tǒng)for 循環(huán)/** for(int i = 0; i < cards.size(); i++){cout << cards[i] << "\t";}cout << "\n" << endl;*/// C++語言習(xí)慣,迭代器的寫法/** for(vector<int>::const_iterator iter = cards.begin(); iter != cards.end(); iter++){cout << *iter << ", ";}cout << endl; */// C++11 之后:迭代器的簡寫版本,類型推斷/*for(auto iter = cards.begin(); iter != cards.end(); iter++){cout << *iter << "。 ";}cout << endl;*/// for 區(qū)間遍歷for(auto card : cards){cout << card << ":" << getColor(card) << "-" << getValue(card) << "\t";}cout << endl;// 使用算法的方式,將容器的內(nèi)容復(fù)制到cout 綁定的迭代器中// #include <iterator> // copy(cards.cbegin(), cards.cend(), ostream_iterator<int>(cout, "- ")); // cout << endl; }void LandOwner::TouchCard(int cardCount) {// 摸牌, 隨機生成一張剩余牌中有的牌,更新連個牌面數(shù)組currCards, suplusCardssrand(time(NULL));for(int i = 0; i < cardCount; i++){int randIdex = rand() % 54 ; // 0-53 之間的隨機數(shù)字// 判斷:隨機生成的這張牌是否在余牌數(shù)組中,私有方法if(isContains(packCards[randIdex])){currCards.push_back(packCards[randIdex]);// 在剩余牌數(shù)組中刪除這張牌deleteCards(surplCards, packCards[randIdex]);}else{i--; // 換一張牌}}cout << "<地主摸牌>-當(dāng)前手牌如下" << endl;ShowCards(currCards);cout << "<地主摸牌>-剩余牌" << endl;ShowCards(surplCards); } bool LandOwner::isContains(int cardNum) {// 普通青年的做法 // for(int i = 0; i < surplCards.size(); i++){ // if(surplCards[i] == packCards[cardIndex]){ // return true // } // } // return false// 使用算法來查找-findvector<int>::iterator iter = find(surplCards.begin(), surplCards.end(), cardNum); // if(iter == surplCards.end()){ // return false; // } // return true;return iter != surplCards.end(); }void LandOwner::deleteCards(vector<int> &cardVec, int card){// 普通青年的做法 // for(auto iter = cardVec.begin(); iter != cardVec.end();){ // if(*iter == card){ // //iter = cardVec.erase(iter); // 返回值指向已刪除元素的下一個元素 // } // else{ // iter++; // } // // }// 使用算法刪除auto iter = find(cardVec.begin(), cardVec.end(), card);if(iter != cardVec.end()){cardVec.erase(iter); //方法調(diào)用不好} }string LandOwner::getColor(int card) { // card 給的牌面if(card == 53) return "小王";if(card == 54) return "大王";string colors[] = {"黑桃", "紅心", "方塊", "梅花"};return colors[(card - 1) / 13]; } string LandOwner::getValue(int card) {if(card == 53) return "Balck Joker";if(card == 54) return "Red Jocker";string values[] = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};return values[(card - 1) % 13]; } LandOwner::~LandOwner(){cout << GetNickName() << "被釋放" << endl;}

總結(jié)

以上是生活随笔為你收集整理的C++(15)--面向对象编程实践-欢乐斗地主(vector的花式输出)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。