1 #include "play-gamble.h"
2 #include "core/asking-player.h"
3 #include "core/show-file.h"
4 #include "io/input-key-acceptor.h"
5 #include "market/building-actions-table.h"
6 #include "market/building-util.h"
7 #include "market/poker.h"
8 #include "player/avatar.h"
9 #include "term/term-color-types.h"
10 #include "view/display-fruit.h"
11 #include "view/display-messages.h"
14 * @brief カジノ1プレイごとのメインルーチン / gamble_comm
15 * @param player_ptr プレーヤーへの参照ポインタ
16 * @param cmd プレイするゲームID
17 * @return プレイ成立やルール説明のみ等ならTRUE、賭け金不足で不成立ならFALSE
19 bool gamble_comm(player_type *player_ptr, int cmd)
22 int roll1, roll2, roll3, choice, odds, win;
27 char out_val[160], tmp_str[80], again;
32 if (cmd == BACT_GAMBLE_RULES)
34 (void)show_file(player_ptr, TRUE, _("jgambling.txt", "gambling.txt"), NULL, 0, 0);
39 if (player_ptr->au < 1)
41 msg_print(_("おい!おまえ一文なしじゃないか!こっから出ていけ!",
42 "Hey! You don't have gold - get out of here!"));
49 maxbet = player_ptr->lev * 200;
50 maxbet = MIN(maxbet, player_ptr->au);
53 sprintf(tmp_str, _("賭け金 (1-%ld)?", "Your wager (1-%ld) ? "), (long int)maxbet);
57 * Use get_string() because we may need more than
58 * the s16b value returned by get_quantity().
60 if (!get_string(tmp_str, out_val, 32))
67 for (p = out_val; *p == ' '; p++);
70 if (wager > player_ptr->au)
72 msg_print(_("おい!金が足りないじゃないか!出ていけ!", "Hey! You don't have the gold - get out of here!"));
77 else if (wager > maxbet)
79 msg_format(_("%ldゴールドだけ受けよう。残りは取っときな。",
80 "I'll take %ld gold of that. Keep the rest."), (long int)maxbet);
85 msg_print(_("OK、1ゴールドからはじめよう。", "Ok, we'll start with 1 gold."));
91 oldgold = player_ptr->au;
93 sprintf(tmp_str, _("ゲーム前の所持金: %9ld", "Gold before game: %9ld"), (long int)oldgold);
95 sprintf(tmp_str, _("現在の掛け金: %9ld", "Current Wager: %9ld"), (long int)wager);
100 player_ptr->au -= wager;
103 case BACT_IN_BETWEEN: /* Game of In-Between */
104 c_put_str(TERM_GREEN, _("イン・ビトイーン", "In Between"), 5, 2);
108 roll1 = randint1(10);
109 roll2 = randint1(10);
110 choice = randint1(10);
111 sprintf(tmp_str, _("黒ダイス: %d 黒ダイス: %d", "Black die: %d Black Die: %d"), roll1, roll2);
114 sprintf(tmp_str, _("赤ダイス: %d", "Red die: %d"), choice);
116 prt(tmp_str, 11, 14);
117 if (((choice > roll1) && (choice < roll2)) ||
118 ((choice < roll1) && (choice > roll2)))
121 case BACT_CRAPS: /* Game of Craps */
122 c_put_str(TERM_GREEN, _("クラップス", "Craps"), 5, 2);
128 roll3 = roll1 + roll2;
130 sprintf(tmp_str, _("1振りめ: %d %d Total: %d",
131 "First roll: %d %d Total: %d"), roll1, roll2, roll3);
133 if ((roll3 == 7) || (roll3 == 11))
135 else if ((roll3 == 2) || (roll3 == 3) || (roll3 == 12))
141 msg_print(_("なにかキーを押すともう一回振ります。", "Hit any key to roll again"));
146 roll3 = roll1 + roll2;
147 sprintf(tmp_str, _("出目: %d %d 合計: %d",
148 "Roll result: %d %d Total: %d"), roll1, roll2, roll3);
154 } while ((win != TRUE) && (win != FALSE));
159 case BACT_SPIN_WHEEL: /* Spin the Wheel Game */
162 c_put_str(TERM_GREEN, _("ルーレット", "Wheel"), 5, 2);
164 prt("0 1 2 3 4 5 6 7 8 9", 7, 5);
165 prt("--------------------------------", 8, 3);
167 get_string(_("何番? (0-9): ", "Pick a number (0-9): "), out_val, 32);
169 for (p = out_val; iswspace(*p); p++);
173 msg_print(_("0番にしとくぜ。", "I'll put you down for 0."));
178 msg_print(_("OK、9番にしとくぜ。", "Ok, I'll put you down for 9."));
182 roll1 = randint0(10);
183 sprintf(tmp_str, _("ルーレットは回り、止まった。勝者は %d番だ。",
184 "The wheel spins to a stop and the winner is %d"), roll1);
187 prt("*", 9, (3 * roll1 + 5));
192 case BACT_DICE_SLOTS: /* The Dice Slots */
193 c_put_str(TERM_GREEN, _("ダイス・スロット", "Dice Slots"), 5, 2);
194 c_put_str(TERM_YELLOW, _("レモン レモン 2", ""), 6, 37);
195 c_put_str(TERM_YELLOW, _("レモン レモン レモン 5", ""), 7, 37);
196 c_put_str(TERM_ORANGE, _("オレンジ オレンジ オレンジ 10", ""), 8, 37);
197 c_put_str(TERM_UMBER, _("剣 剣 剣 20", ""), 9, 37);
198 c_put_str(TERM_SLATE, _("盾 盾 盾 50", ""), 10, 37);
199 c_put_str(TERM_VIOLET, _("プラム プラム プラム 200", ""), 11, 37);
200 c_put_str(TERM_RED, _("チェリー チェリー チェリー 1000", ""), 12, 37);
203 roll1 = randint1(21);
204 for (i = 6; i > 0; i--)
213 roll2 = randint1(21);
214 for (i = 6; i > 0; i--)
223 choice = randint1(21);
224 for (i = 6; i > 0; i--)
226 if ((choice - i) < 1)
233 put_str("/--------------------------\\", 7, 2);
234 prt("\\--------------------------/", 17, 2);
235 display_fruit(8, 3, roll1 - 1);
236 display_fruit(8, 12, roll2 - 1);
237 display_fruit(8, 21, choice - 1);
238 if ((roll1 == roll2) && (roll2 == choice))
257 else if ((roll1 == 1) && (roll2 == 1))
266 if (odds) win = TRUE;
272 prt(_("あなたの勝ち", "YOU WON"), 16, 37);
274 player_ptr->au += odds * wager;
275 sprintf(tmp_str, _("倍率: %d", "Payoff: %d"), odds);
277 prt(tmp_str, 17, 37);
281 prt(_("あなたの負け", "You Lost"), 16, 37);
285 sprintf(tmp_str, _("現在の所持金: %9ld", "Current Gold: %9ld"), (long int)player_ptr->au);
288 prt(_("もう一度(Y/N)?", "Again(Y/N)?"), 18, 37);
295 if (wager > player_ptr->au)
297 msg_print(_("おい!金が足りないじゃないか!ここから出て行け!",
298 "Hey! You don't have the gold - get out of here!"));
304 } while ((again == 'y') || (again == 'Y'));
307 if (player_ptr->au >= oldgold)
309 msg_print(_("「今回は儲けたな!でも次はこっちが勝ってやるからな、絶対に!」",
310 "You came out a winner! We'll win next time, I'm sure."));
311 chg_virtue(player_ptr, V_CHANCE, 3);
315 msg_print(_("「金をスッてしまったな、わはは!うちに帰った方がいいぜ。」", "You lost gold! Haha, better head home."));
316 chg_virtue(player_ptr, V_CHANCE, -3);