+class Card {
+ var $value; /* 0 - 39 card value */
+ var $stat; /* 'bunch', 'hand', 'table', 'take' */
+ var $owner; /* (table position 0-4) */
+ // var $pos; /* Pos in hand. */
+ var $x; /* When played the X position on the table of the owner. */
+ var $y; /* When played the Y position on the table of the owner. */
+
+ function Card($value, $stat, $owner)
+ {
+ $this->value = $value;
+ $this->stat = $stat; // Card stat
+ $this->owner = $owner;
+ }
+
+ function assign($stat,$owner)
+ {
+ $this->stat = $stat; // Card stat
+ $this->owner = $owner;
+ }
+
+ function setpos($pos)
+ {
+ $this->pos = $pos;
+ }
+
+ function play($x,$y)
+ {
+ $this->stat = 'table'; // Card stat
+ $this->x = $x;
+ $this->y = $y;
+ }
+
+ function take($newown)
+ {
+ $this->stat = 'take'; // Card stat
+ $this->owner = $newown;
+ }
+} // end class Card
+
+class Table_briskin5 extends Table {
+ var $card; // il mazzo di carte
+ var $mazzo; // chi e' di mazzo
+ var $gstart;
+ var $turn;
+
+ var $asta_pla;
+ var $asta_pla_n;
+ var $asta_card;
+ var $asta_pnt;
+
+ var $mult;
+ var $points; // points array
+ var $points_n; // number of row of points
+ var $total;
+
+ var $asta_win;
+ var $briscola;
+ var $friend;
+
+ var $old_reason;
+ var $old_asta_pnt;
+ var $old_pnt;
+ var $old_win;
+ var $old_friend;
+
+ function Table_briskin5()
+ {
+ }
+
+
+ /* CREATE() NOT USED
+ function &create($idx)
+ {
+ GLOBAL $G_false;
+
+ if (($thiz =& new Table_briskin5()) == FALSE)
+ return ($G_false);
+
+ $thiz->create($idx);
+
+ $thiz->card = FALSE;
+ $thiz->asta_pla = array(); // TRUE: in auction, FALSE: out of the auction
+ $thiz->asta_pla_n= -1;
+ $thiz->asta_card = -1;
+ $thiz->asta_pnt = -1;
+ $thiz->mult = 1;
+
+ $thiz->points = array( );
+ $thiz->points_n = 0;
+ $thiz->total = array( 0, 0, 0, 0, 0);
+ $thiz->asta_win = -1;
+ $thiz->briscola = -1;
+ $thiz->friend = -1;
+ $thiz->turn = 0;
+
+ $thiz->old_reason = "";
+ $thiz->old_asta_pnt = -1;
+ $thiz->old_pnt = -1;
+ $thiz->old_win = -1;
+ $thiz->old_friend = -1;
+
+ return ($thiz);
+ }
+ */
+
+ /* CLONE() NOT USED
+ function &clone(&$from)
+ {
+ GLOBAL $G_false;
+
+ if (($thiz =& new Table_briskin5()) == FALSE)
+ return ($G_false);
+
+ parent::copy($from);
+
+ $thiz->card = $from->card;
+ $thiz->mazzo = $from->mazzo; // REVIEW
+ $thiz->gstart = $from->gstart;
+ $thiz->turn = $from->turn;
+
+ $thiz->asta_pla = $from->asta_pla;
+ $thiz->asta_pla_n = $from->asta_pla_n;
+ $thiz->asta_card = $from->asta_card;
+ $thiz->asta_pnt = $from->asta_pnt;
+
+ $thiz->mult = $from->mult;
+ $thiz->points = $from->points;
+ $thiz->points_n = $from->points_n;
+ $thiz->total = $from->total;
+
+ $thiz->asta_win = $from->asta_win;
+ $thiz->briscola = $from->briscola;
+ $thiz->friend = $from->friend;
+
+ $thiz->old_reason = $from->old_reason;
+ $thiz->old_asta_pnt = $from->old_asta_pnt;
+ $thiz->old_pnt = $from->old_pnt;
+ $thiz->old_win = $from->old_win;
+ $thiz->old_friend = $from->old_friend;
+
+ return ($thiz);
+ }
+ */
+
+ function parentcopy(&$from)
+ {
+ parent::copy($from);
+ }
+
+ function &spawn(&$from)
+ {
+ GLOBAL $G_false;
+
+ if (($thiz =& new Table_briskin5()) == FALSE)
+ return ($G_false);
+
+ $thiz->parentcopy($from);
+
+ log_main("PLAYER_N - spawn.".$thiz->player_n);
+
+ $thiz->card = &$thiz->bunch_create();
+ $thiz->mazzo = rand(0,PLAYERS_N-1);
+ $thiz->points_n = 0;
+ $thiz->mult = 1;
+ $thiz->old_win = -1;
+ $thiz->old_reason = "";
+
+ // players are rearranged in an dedicated array
+ $thiz->player = array();
+ for ($i = 0 ; $i < $from->player_n ; $i++)
+ $thiz->player[$i] = $i;
+
+ log_main("TABLE_OLD_WIN - spawn:".$thiz->old_win);
+
+ return ($thiz);
+ }
+
+
+ function &bunch_create()
+ {
+ $ret = array();
+
+ for ($i = 0 ; $i < 40 ; $i++) {
+ $ret[$i] =& new Card($i, 'bunch', 'no_owner');
+ }
+
+ $oret = &$ret;
+ return ($oret);
+ }
+
+ function bunch_make()
+ {
+ $ct = array(0,0,0,0,0);
+
+ mt_srand(make_seed());
+
+ for ($i = 39 ; $i >= 0 ; $i--)
+ $rest[$i] = $i;
+
+ for ($i = 39 ; $i >= 0 ; $i--) {
+ $rn = rand(0, $i);
+
+ if ($rn == 0)
+ log_main("RND ZERO");
+
+ $id = $rest[$rn];
+
+ $owner = $i % PLAYERS_N;
+ $this->card[$id]->assign('hand', $owner);
+
+ $rest[$rn] = $rest[$i];
+ // $pubbpos[$rn2] = $pubbpos[$i];
+ }
+ }
+
+ function init(&$userarr)
+ {
+ /* MOVED INTO SPAWN
+ $this->mazzo = rand(0,PLAYERS_N-1);
+ $this->points_n = 0;
+ $this->mult = 1;
+ $this->old_win = -1;
+ $this->old_reason = "";
+ */
+ for ($i = 0 ; $i < PLAYERS_N ; $i++) {
+ $this->total[$i] = 0;
+ $user_cur = &$userarr[$this->player[$i]];
+ $user_cur->exitislock = TRUE;
+ }
+
+ log_main("table::init: ci siamo");
+ }
+
+ function game_init(&$userarr)
+ {
+ log_rd2("GSTART 4");
+
+ $this->gstart = ($this->mazzo+1) % PLAYERS_N;
+ $this->bunch_make();
+
+
+ $this->asta_pla_n = PLAYERS_N;
+ $this->asta_card = -1;
+ $this->asta_pnt = 60;
+ $this->asta_win = -1;
+ $this->briscola = -1;
+ $this->friend = -1;
+ $this->turn = 0;
+
+ for ($i = 0 ; $i < PLAYERS_N ; $i++) {
+ $this->asta_pla[$i] = TRUE;
+ $user_cur = &$userarr[$this->player[$i]];
+ $user_cur->subst = 'asta';
+ $user_cur->asta_card = -2;
+ $user_cur->asta_pnt = -1;
+ $user_cur->handpt = $this->hand_points($i);
+ // SEE function calculate_points(&$table)
+ }
+ }
+
+ function game_next()
+ {
+ $this->mazzo = ($this->mazzo + 1) % PLAYERS_N;
+ }
+
+
+ function hand_points($idx)
+ {
+ GLOBAL $G_all_points;
+
+ $tot = 0;
+
+ for ($i = 0 ; $i < 40 ; $i++) {
+ if ($this->card[$i]->owner != $idx)
+ continue;
+
+ $ctt = $this->card[$i]->value % 10;
+ $tot += $G_all_points[$ctt];
+ }
+
+ return ($tot);
+ }
+
+
+ function exitlock_show(&$userarr, $table_pos)
+ {
+ $ct = $this->exitlock_calc(&$userarr, $table_pos);
+
+ $ret = sprintf('exitlock_show(%d, %s);', $ct,
+ ($userarr[$this->player[$table_pos]]->exitislock ? 'true' : 'false'));
+ return ($ret);
+ }
+
+ function exitlock_calc(&$userarr, $table_pos)
+ {
+ $ct = 0;
+
+ for ($i = 0 , $ct = 0 ; $i < PLAYERS_N ; $i++) {
+ if ($userarr[$this->player[$i]]->exitislock == FALSE)
+ $ct++;
+ }
+
+ return ($ct);
+ }
+} // end class Table_briskin5
+
+
+
+
+
+
+class User_briskin5 extends User {
+ var $asta_card; //
+ var $asta_pnt; //
+ var $handpt; // Total card points at the beginning of the current hand.
+ var $exitislock; // Player can exit from the table ?
+
+ function User() {
+ }
+
+ /* CREATE NOT USED
+ function &create($name, $sess, $stat = "", $subst = "", $table = -1, $ip="0.0.0.0") {
+ GLOBAL $G_false;
+
+ if (($thiz =& new User()) == FALSE)
+ return ($G_false);
+
+ $thiz->asta_card = -2;
+ $thiz->asta_pnt = -1;
+ $thiz->handpt = -1;
+ $thiz->exitislock = TRUE;
+
+ return ($thiz);
+ }
+ */
+
+ function parentcopy(&$from)
+ {
+ parent::copy($from);
+ }
+
+ function copy(&$from)
+ {
+ $this->parentcopy($from);
+
+ $this->asta_card = $from->asta_card;
+ $this->asta_pnt = $from->asta_pnt;
+ $this->handpt = $from->handpt;
+ $this->exitislock = $from->exitislock;
+ }
+
+ /* CLONE NOT USED
+ function &clone(&$from)
+ {
+ GLOBAL $G_false;
+
+ if (($thiz =& new User()) == FALSE)
+ return ($G_false);
+
+ $thiz->copy($from);
+
+ return ($thiz);
+ }
+ */
+
+ function &spawn(&$from, $table, $table_pos)
+ {
+ GLOBAL $G_false;
+
+ if (($thiz =& new User_briskin5()) == FALSE)
+ return ($G_false);
+
+ $thiz->parentcopy($from);
+
+ $thiz->asta_card = -2;
+ $thiz->asta_pnt = -1;
+ $thiz->handpt = -1;
+ $thiz->exitislock = TRUE;
+
+ $thiz->table_orig = $table;
+ $thiz->table = 0;
+ $thiz->table_pos = $table_pos;
+
+ return ($thiz);
+ }
+} // end class User_briskin5
+
+