撲克牌遊戲0 發牌實現

老實說,如果用一個數組來記錄發牌的數目會很簡單,但是,由於設計類的時候我設計了isChoosen這個變量,所以,我是直接調用的這個變量查看的某張牌是否被選中了。

實現功能:

InitGame.h 

#pragma once
#include "BasicCardGroup.h"
#include "PukeCards.h"
class InitGame {
	BasicCardGroup player1;
	BasicCardGroup player2;
	BasicCardGroup player3;
	BasicCardGroup player4;
	BasicCardGroup leftcards;

	PukeCards puke;
	void get_handcards(BasicCardGroup& player);
	void get_leftcards();
	void view_handcards(BasicCardGroup& player);
public:
	//獲取手牌
	void player_get_handcards();
	//展示所有手牌
	void player_view_handcards();
	//展示剩餘手牌
	void view_leftcards();
	InitGame();
	

};

InitGame.cpp

在發牌時遇到了一些問題,比如說,我一開始想要設置一個指針變量來指向撲克牌堆的,讓後通過引用來直接改變撲克的isChoosen屬性。但是後來發現,如果使用引用當隨機到的curnum重複的時候,會造成引用錯誤——引用無法重新賦值。並且這個錯誤在VS裏面不會報錯,只會無間斷的運行程序。並且由於一開始的類設定的原因,指針變量也不能使用。所以,我直接寫了一個宏定義。 #define curcard  (puke.show_cardgroup()[curnum]) 將 curcard 直接替換成撲克卡組的當前撲克,從某些意義上,這也算是實現了引用,C++真是太有趣了。

#include "InitGame.h"
#include <iostream>

#define curcard  (puke.show_cardgroup()[curnum])
using namespace std;

void InitGame::get_handcards(BasicCardGroup& player)
{
	//升級遊戲需要獲取6張手牌,後期發牌可以添加多線程操作

	for (int i = 0; i < 25; i++)
	{
		int curnum = (rand() % 108);
		//如果當前卡牌未獲取

		do {

			if (!curcard.isChoosen) {
				curcard.isChoosen = true;
				player.set_cardgroup(curcard);
				break;
			}
			else {
				curnum = (curnum + 1) % 108;
				continue;
			}
		} while (true);

	}
}

void InitGame::get_leftcards()
{
	for (auto& i : puke.show_cardgroup()) {
		if (!i.isChoosen) {
			leftcards.set_cardgroup(i);
		}
	}
}

void InitGame::player_get_handcards()
{
	get_handcards(player1);
	get_handcards(player2);
	get_handcards(player3);
	get_handcards(player4);
	get_leftcards();
	
	cout << "已完成發牌操作" << endl;
}

void InitGame::player_view_handcards()
{
	cout << "player1 的手牌" << endl;
	view_handcards(player1);
	cout << endl;
	cout << "player2 的手牌" << endl;
	view_handcards(player2);
	cout << endl;
	cout << "player3 的手牌" << endl;
	view_handcards(player3);
	cout << endl;
	cout << "player4 的手牌" << endl;
	view_handcards(player4);
	cout << endl;
}

void InitGame::view_handcards(BasicCardGroup& player)
{
	player.view_cardgroup();
}

void InitGame::view_leftcards()
{
	cout << "剩餘卡牌爲:" << endl;
	leftcards.view_cardgroup();
}

InitGame::InitGame()
{
	player_get_handcards();
}

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章