导入

要想制作一款游戏,首先要清楚它的流程,画出流程图,然后再添加一些灵魂细节。听起来是大道理但确实很重要,可以节省很多精力和返工 【你有资格说嘛

正题

我经过总结,列出了如下的游戏流程(箭头指向了下一个操作)(流程的框是瞎用的) :

下面这张图添加了一些细节

以上,每一个框至少需要一个函数来实现

由此,我们可以初步搭一个框架(由于交叉太多,为了方便我不得不用了 goto 语句):

注:

这里的 EAST 是一个 enum 值,以后会解释可以忽视这里运用了 C++11 的大括号初始化方法,以后还会广泛运用 是一个 enum 类型,用来传递鸣牌的信息,以实现“抢杠”之类的操作,但现在可能还不完善,未来有可能会有修改

	Maj_system* call{ new Maj_system{ EAST } };//运行构造函数并开发牌
	while (init_interface());				//初始化图形界面
	goto mo;								//第一次运行先摸牌
//------------------------------------------
rong_middle:
	if (call->_ronghe(last_ming))			//如果荣和
		goto jiesuan;						//结算		
//------------------------------------------//否则摸(岭上)牌
mo:
	call->_mo();							//摸牌 
//------------------------------------------
	if (call->_zimo())						//如果自摸 
		goto jiesuan;						//结算
//------------------------------------------//否则(下家)立直判断
	if (call->_lizhi())						//如果立直 
		goto rong_end;						//荣和判断
//------------------------------------------//否则判断加杠、暗杠
	last_ming = call->_jiaangang();
	if(last_ming)							//如果加杠、暗杠
		goto rong_middle;					//荣和判断
//------------------------------------------//否则打牌
da:
	call->_da();							//打牌 
//------------------------------------------
rong_end:
	if (call->_ronghe(last_ming))			//如果荣和 
		goto jiesuan;						//结算
//------------------------------------------//否则碰杠判断
	switch (call->_penggang())
	{
	case PENG:								//如果碰 
		goto da; break;						//打牌
	case DAMING:							//如果大明杠 
		goto mo; break;						//摸牌
	default:;
	}
//------------------------------------------//否则吃判断
	if (call->_chi())						//如果吃 
		goto da;							//打牌 
	else goto mo;							//否则(下家)摸牌
//------------------------------------------
jiesuan:									//运行析构函数并最终结算
	delete call;

此外,还需要明确数据间的决定关系(箭头指向决定对象)(流程的框也是瞎用的) :

至此,main 函数的内容基本成型,可以愉快地写里面的内容啦

规则参考

日麻百科

资深麻友

雀魂麻将

雀姬麻将