C++编写的麻将可以用了,哈哈,控制台下操作
#include "pch.h"
#include <iostream>
#include "mahjong.h"
#include "windows.h"
using namespace std;
int main()
{
using Fun = pair<string, bool> (Ma_desk::*)(const Player &)const;
Fun fun[] = { &Ma_desk::is_7double, &Ma_desk::is_ascol, &Ma_desk::is_pound,
&Ma_desk::is_gap, &Ma_desk::is_zfb, &Ma_desk::is_samecol,
&Ma_desk::is_catch5, &Ma_desk::is_dragon, &Ma_desk::is_bsfive,
&Ma_desk::is_no19, &Ma_desk::is_foursame, &Ma_desk::is_stuck,
&Ma_desk::is_high, &Ma_desk::is_side, &Ma_desk::is_drill,
&Ma_desk::is_doorclear, &Ma_desk::is_enough};
ifstream fin("mj.dat");
if (!fin)
{
MessageBox(NULL, TEXT("文件错误!"), TEXT("错误信息"), MB_DEFBUTTON1);
exit(EXIT_FAILURE);
}
Ma_desk m(fin);
string p[14] = { "A1-1","A1-2","A1-3", "A4-0","A4-1","A4-2","A6-0","A7-1","A7-2","A7-3","A8-0","A8-1","A9-2","A9-3" };
Player one(m, p);
m.del_this(one);
/*
for (auto s : one.getData())
cout << s.getName(s.getID()) << " ";
cout << endl;
cout << (m.is_win(one)?"成功":"失败")
Player one("玩家1");
for(int i=0;i<14;i++)
one.play_get(m.dispatch());
*/
LP:
try {
while(!m.is_win(one)&&!m.is_over())//没胜利,没流局
{
for (auto s : one.getData())
cout << s.getID() << " ";
cout << endl;
for (auto s : one.getData())
cout << s.getName(s.getID()) << " ";
string key;
cin >> key;
one.play_send(key);
one.play_get(m.dispatch());
}
cout << "胡了:";
for (auto s : one.getData())
cout << s.getName(s.getID()) << " ";
cout << endl;
for (int n = 0; n < 17; ++n)
if ((m.*fun[n])(one).second)
std::cout << (m.*fun[n])(one).first << endl;
}
catch (regex_error &r)
{
cout << r.what() << endl;
}
catch (exception &e)
{
cout << e.what() << endl;
goto LP;
}
}