added blackjack game
[NeonServV5.git] / src / modules / NeonFun.mod / game_blackjack.h
diff --git a/src/modules/NeonFun.mod/game_blackjack.h b/src/modules/NeonFun.mod/game_blackjack.h
new file mode 100644 (file)
index 0000000..0e643ae
--- /dev/null
@@ -0,0 +1,102 @@
+/* game_blackjack.h - NeonServ v5.6
+ * Copyright (C) 2011-2012  Philipp Kreil (pk910)
+ * 
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License 
+ * along with this program. If not, see <http://www.gnu.org/licenses/>. 
+ */
+#ifndef _game_blackjack_h
+#define _game_blackjack_h
+#include "../../timeq.h"
+
+#define BJ_STATE_WAITING 1
+#define BJ_STATE_RUNNING 2
+
+#define BJ_CTYPE_HEARTS   0
+#define BJ_CTYPE_SPADES   1
+#define BJ_CTYPE_DIAMONDS 2
+#define BJ_CTYPE_CLUBS    3
+
+#define BJ_CTYPE_COUNT    4
+
+#define BJ_CARD_NUMBER_2  0
+#define BJ_CARD_NUMBER_3  1
+#define BJ_CARD_NUMBER_4  2
+#define BJ_CARD_NUMBER_5  3
+#define BJ_CARD_NUMBER_6  4
+#define BJ_CARD_NUMBER_7  5
+#define BJ_CARD_NUMBER_8  6
+#define BJ_CARD_NUMBER_9  7
+#define BJ_CARD_NUMBER_10 8
+#define BJ_CARD_JACK      9
+#define BJ_CARD_QUEEN     10
+#define BJ_CARD_KING      11
+#define BJ_CARD_ACE       12
+
+struct UserNode;
+struct ChanNode;
+struct ChanUser;
+struct ClientSocket;
+extern struct bj_game *bj_active_games;
+
+struct bj_card {
+    unsigned char type;
+    unsigned char card;
+    struct bj_card *prev, *next;
+};
+
+struct bj_card_deck {
+    struct bj_card *cards;
+    int count;
+};
+
+struct bj_player {
+    struct ChanUser *chanuser;
+    struct bj_card *cards;
+    int count;
+    struct bj_player *prev, *next;
+};
+
+struct bj_game {
+    struct ChanNode *channel;
+    struct ClientSocket *textbot;
+    int state : 3;
+    struct bj_card_deck *deck;
+    struct bj_player *player;
+    struct bj_player *active_player;
+    int players;
+    
+    struct timeq_entry *timer;
+    struct bj_game *next;
+};
+
+struct bj_card_deck *bj_shuffle_deck();
+struct bj_card *bj_get_card(struct bj_card_deck *deck);
+void bj_free_deck(struct bj_card_deck *deck);
+void bj_free_player(struct bj_player *player, struct bj_card_deck *deck);
+void bj_free_game(struct bj_game *game);
+struct bj_player *bj_get_next_player(struct bj_game *game);
+int bj_get_player_card_points(struct bj_player *player);
+void bj_show_player_cards(struct bj_game *game, struct bj_player *player);
+
+TIMEQ_CALLBACK(bj_game_wait_timeout);
+TIMEQ_CALLBACK(bj_player_timeout);
+
+void bj_action_take_card(struct bj_game *game, struct bj_player *player);
+void bj_action_next_player(struct bj_game *game, struct bj_player *player);
+
+void bj_event_part(struct ChanUser *chanuser);
+void bj_event_freechan(struct ChanNode *chan);
+
+void bj_game_end(struct bj_game *game);
+
+#endif