淮安掼蛋网页版-源码头文件总结



原文: 淮安掼蛋网页版-源码头文件总结

客户端程序很多时候都可以做出网页版的(WEB版),以下是项目之我是掼蛋王头文件-总结。

A,写好每个类的头文件后,要进行分类,比如:网页版掼蛋,写上SourceInclude.h和BasicInclude.h等头文件

定义3个vector,来存入我们已经发了的牌的坐标。

vector<card_coor>  player_a;

vector<card_coor>  player_b;

vector<card_coor>  player_c;

 具体的代码实现:
void CGame::calculateTwoPoint(float  x1,float  y1,float  x2,float  y2)//计算两点间的线段
{

 m_k=(y1-y2)/(x1-x2);
 m_b=y1-x1*m_k;
}

根据2点的坐标,来计算出K和b的值。

绘制使将X坐标用Y坐标来表示,这样的好处是,当我们更新Y坐标时X坐标也随之更新,从而达到我们想要实现的效果。
m_dcBuffer.TransparentBlt((m_coor_y-m_b)/m_k,m_coor_y,80,105,&m_dcImage,80*2,4*105,80,105,RGB(255,0,255));

最后我们只需要设置一个定时器,每隔一段时间来更新Y值就可以了。

当在更新的时候P点到达A,B,C任何一个点时,将牌的坐标存入相应的vector中,绘制的时候根据VECTOR的值来绘制3方的牌就可以了。

从而可以把所有用到的头文件只需要包含这两个就OK了,所以将会非常简单.

B,尽量少出现字面值常量,而要将这些常亮枚举到一个头文件BaseType.h中,比如一些牌型,

牌值,要播放的音乐路径,动画路径等等都专门写到一个文件中.当然了这个枚举的头文件最后也要写到SourceInclude中,从而,一个头文件搞定一切.

因此我想我以后不会再给tag直接写上一个常量,比如:99, 100, 250等值.而会把这些值全部都弄到一个枚举的文件中.

总结:一切文件的包含都只用SourceInclude和BasicInclude两个头文件即可。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
淮安是一种流行的扑克牌游戏,可以用C++语言编写。以下是一个简单的示例,仅供参考: ```c++ #include <iostream> #include <vector> #include <algorithm> #include <ctime> using namespace std; // 定义牌的种和值 const vector<string> card_types {"♠", "♥", "♦", "♣"}; const vector<string> card_values {"2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"}; // 定义牌的结构体 struct Card { string type; string value; int point; Card(string t, string v, int p) : type(t), value(v), point(p) {} }; // 定义玩家结构体 struct Player { string name; vector<Card> cards; int score; Player(string n) : name(n), score(0) {} }; // 创建一副牌 vector<Card> create_deck() { vector<Card> deck; for (auto t : card_types) { for (int i = 0; i < card_values.size(); i++) { int point = i < 9 ? i + 2 : 10; deck.push_back(Card(t, card_values[i], point)); } } return deck; } // 洗牌 void shuffle_deck(vector<Card>&amp; deck) { srand(time(NULL)); // 以时间为种子生成随机数 random_shuffle(deck.begin(), deck.end()); } // 发牌 void deal_cards(vector<Card>&amp; deck, vector<Player>&amp; players) { for (int i = 0; i < players.size(); i++) { for (int j = 0; j < 13; j++) { players[i].cards.push_back(deck.back()); deck.pop_back(); } } } // 排序函数 bool cmp(Card c1, Card c2) { if (c1.type != c2.type) { return c1.type < c2.type; } else { return c1.point < c2.point; } } // 玩家出牌 Card play_card(Player&amp; player, Card&amp; card) { auto it = find(player.cards.begin(), player.cards.end(), card); if (it != player.cards.end()) { player.cards.erase(it); return card; } else { cout << "你没有这张牌!" << endl; return Card("", "", 0); } } // 计算得分 int calculate_score(vector<Card> cards) { int score = 0; for (auto c : cards) { if (c.value == "10" || c.value == "K" || c.value == "A") { score += 10; } else if (c.value == "5") { score += 5; } } return score; } // 判断是否为炸弹 bool is_bomb(vector<Card> cards) { if (cards.size() != 4) { return false; } for (int i = 1; i < cards.size(); i++) { if (cards[i].value != cards[0].value) { return false; } } return true; } // 判断胜负 bool is_win(vector<Card> cards1, vector<Card> cards2) { int score1 = calculate_score(cards1); int score2 = calculate_score(cards2); if (is_bomb(cards1)) { score1 *= 2; } if (is_bomb(cards2)) { score2 *= 2; } return score1 > score2; } int main() { vector<Player> players; players.push_back(Player("玩家1")); players.push_back(Player("玩家2")); vector<Card> deck = create_deck(); shuffle_deck(deck); deal_cards(deck, players); sort(players[0].cards.begin(), players[0].cards.end(), cmp); sort(players[1].cards.begin(), players[1].cards.end(), cmp); while (players[0].cards.size() > 0 &amp;&amp; players[1].cards.size() > 0) { // 玩家1出牌 cout << players[0].name << "的手牌:"; for (auto c : players[0].cards) { cout << c.type << c.value << " "; } cout << endl; string type, value; cout << "请" << players[0].name << "出牌(输入牌的花色和点数):"; cin >> type >> value; Card card(type, value, 0); Card played_card = play_card(players[0], card); if (played_card.value != "") { // 玩家2出牌 cout << players[1].name << "的手牌:"; for (auto c : players[1].cards) { cout << c.type << c.value << " "; } cout << endl; int index = rand() % players[1].cards.size(); played_card = play_card(players[1], players[1].cards[index]); if (played_card.value != "") { if (is_win({card}, {played_card})) { cout << players[0].name << "赢了这一轮!" << endl; players[0].score++; } else { cout << players[1].name << "赢了这一轮!" << endl; players[1].score++; } } } } if (players[0].score > players[1].score) { cout << players[0].name << "赢了游戏!" << endl; } else if (players[0].score < players[1].score) { cout << players[1].name << "赢了游戏!" << endl; } else { cout << "平局!" << endl; } return 0; } ``` 这个示例程序只是一个简单的框架,还有很多地方需要完善。例如: - 玩家出牌的逻辑需要更加灵活,可以考虑加入提示、判断牌是否符合规则等功能。 - 计分规则可以根据实际情况进行修改,比如加入对炸弹的特殊处理。 - 程序没有图形界面,需要在命令行中输入数据,可以考虑使用QT等GUI库进行开发。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值