コード例 #1
0
ファイル: game.c プロジェクト: joshdekock/jim-pspware
/* finalize a game and free anything allocated by init process */
void client_game_finalize()
{
	players_clear();

	if ( game && game->game_type == GT_LOCAL ) {
		game_delete( &local_game );
		levelset_delete( &game_set );
	}
	game_delete( &game );
}
コード例 #2
0
ファイル: player.c プロジェクト: arthurphilippe/zappy
Test(Player, look_up)
{
	player_t *pl = player_create_at((vector2d_t){9, 9});
	game_t *gm = game_create(20, 20, 7, 5);

	cr_assert(pl);
	cr_assert(gm);
	game_add_team(gm, "pandas");
	pl->p_teamname = strdup("pandas");
	cr_assert_neq(game_register_player(gm, pl), -1);
	pl->p_dir = (vector2d_t){0, -1};

	board_put_resource(gm->ga_board, (vector2d_t){9, 9}, SIBUR);
	board_put_resource(gm->ga_board, (vector2d_t){8, 8}, THYSTAME);
	board_put_resource(gm->ga_board, (vector2d_t){9, 8}, LINEMATE);
	board_put_resource(gm->ga_board, (vector2d_t){10, 8}, DERAUMERE);
	board_inc_food(gm->ga_board, (vector2d_t){10, 8});
	board_inc_food(gm->ga_board, (vector2d_t){10, 8});

	dynbuf_t *buf = player_look(pl, gm);
	cr_assert(buf);
	cr_log_info(buf->b_data);
	cr_assert(strstr(buf->b_data, "player"));
	cr_assert_eq(count_char(buf->b_data, ','), 3);
	cr_assert_str_eq(buf->b_data,
		"[sibur player,thystame,linemate,food food deraumere]");
	dynbuf_delete(buf);
	game_delete(gm);
}
コード例 #3
0
ファイル: player.c プロジェクト: arthurphilippe/zappy
Test(Player, look_empty)
{
	player_t *pl = player_create_at((vector2d_t){9, 9});
	game_t *gm = game_create(20, 20, 7, 5);

	cr_assert(pl);
	cr_assert(gm);
	game_add_team(gm, "pandas");
	pl->p_teamname = strdup("pandas");
	cr_assert_neq(game_register_player(gm, pl), -1);
	dynbuf_t *buf = player_look(pl, gm);
	cr_assert(buf);
	cr_log_info(buf->b_data);
	cr_assert(strstr(buf->b_data, "player"));
	cr_assert_eq(count_char(buf->b_data, ','), 3);
	pl->p_lvl = 2;
	dynbuf_delete(buf);
	buf = player_look(pl, gm);
	cr_log_info(buf->b_data);
	cr_assert(strstr(buf->b_data, "player"));
	cr_assert_eq(count_char(buf->b_data, ','), 8);
	dynbuf_delete(buf);
	pl->p_lvl = 3;
	buf = player_look(pl, gm);
	cr_log_info(buf->b_data);
	cr_assert(strstr(buf->b_data, "player"));
	cr_assert_eq(count_char(buf->b_data, ','), 15);
	dynbuf_delete(buf);
	game_delete(gm);
}
コード例 #4
0
ファイル: player.c プロジェクト: arthurphilippe/zappy
Test(Player, eject)
{
	player_t *pl1 = player_create_at((vector2d_t){9, 9});
	player_t *pl2 = player_create_at((vector2d_t){9, 9});
	player_t *pl3 = player_create_at((vector2d_t){9, 9});
	player_t *pl4 = player_create_at((vector2d_t){9, 15});
	game_t *gm = game_create(20, 20, 7, 5);

	cr_assert(pl1);
	cr_assert(pl2);
	cr_assert(pl2);
	cr_assert(gm);
	game_add_team(gm, "pandas");
	game_add_team(gm, "red-pandas");
	pl1->p_teamname = strdup("pandas");
	pl3->p_teamname = strdup("pandas");
	pl2->p_teamname = strdup("red-pandas");
	pl4->p_teamname = strdup("red-pandas");
	cr_assert_neq(game_register_player(gm, pl1), -1);
	cr_assert_neq(game_register_player(gm, pl2), -1);
	cr_assert_neq(game_register_player(gm, pl3), -1);
	cr_assert_neq(game_register_player(gm, pl4), -1);

	pl2->p_dir = (vector2d_t){-1, 0};

	player_eject(pl1, gm->ga_players, gm->ga_board);

	cr_expect_eq(pl2->p_pos.v_x, 8);
	cr_expect_eq(pl2->p_pos.v_y, 9);
	cr_expect_eq(pl3->p_pos.v_x, 10);
	cr_expect_eq(pl3->p_pos.v_y, 9);

	player_eject(pl1, gm->ga_players, gm->ga_board);
	cr_expect_eq(pl2->p_pos.v_x, 8);
	cr_expect_eq(pl2->p_pos.v_y, 9);
	cr_expect_eq(pl3->p_pos.v_x, 10);
	cr_expect_eq(pl3->p_pos.v_y, 9);

	player_delete(pl1);
	player_delete(pl2);
	player_delete(pl3);
	game_delete(gm);
}
コード例 #5
0
ファイル: adminproc.c プロジェクト: SKAcz/bics-current
/*
 * adjudicate
 *
 * Usage: adjudicate white_player black_player result
 *
 *   Adjudicates a saved (stored) game between white_player and black_player.
 *   The result is one of: abort, draw, white, black.  "Abort" cancels the game
 *   (no win, loss or draw), "white" gives white_player the win, "black" gives
 *   black_player the win, and "draw" gives a draw.
 */
int com_adjudicate(int p, param_list param)
{
  int wp, wconnected, bp, bconnected, g, inprogress, confused = 0;

  if (!FindPlayer(p, param[0].val.word, &wp, &wconnected))
    return COM_OK;
  if (!FindPlayer(p, param[1].val.word, &bp, &bconnected)) {
    if (!wconnected)
     player_remove(wp);
    return COM_OK;
  }

  inprogress = ((player_globals.parray[wp].game >=0) &&(player_globals.parray[wp].opponent == bp));

  if (inprogress) {
    g = player_globals.parray[wp].game;
  } else {
    g = game_new();
    if (game_read(g, wp, bp) < 0) {
      confused = 1;
      pprintf(p, "There is no stored game %s vs. %s\n", player_globals.parray[wp].name, player_globals.parray[bp].name);
    } else {
      game_globals.garray[g].white = wp;
      game_globals.garray[g].black = bp;
    }
  }
  if (!confused) {
    if (strstr("abort", param[2].val.word) != NULL) {
      game_ended(g, WHITE, END_ADJABORT);

      pcommand(p, "message %s Your game \"%s vs. %s\" has been aborted.",
	       player_globals.parray[wp].name, player_globals.parray[wp].name, player_globals.parray[bp].name);

      pcommand(p, "message %s Your game \"%s vs. %s\" has been aborted.",
	       player_globals.parray[bp].name, player_globals.parray[wp].name, player_globals.parray[bp].name);
    } else if (strstr("draw", param[2].val.word) != NULL) {
      game_ended(g, WHITE, END_ADJDRAW);

      pcommand(p, "message %s Your game \"%s vs. %s\" has been adjudicated "
	       "as a draw", player_globals.parray[wp].name, player_globals.parray[wp].name, player_globals.parray[bp].name);

      pcommand(p, "message %s Your game \"%s vs. %s\" has been adjudicated "
	       "as a draw", player_globals.parray[bp].name, player_globals.parray[wp].name, player_globals.parray[bp].name);
    } else if (strstr("white", param[2].val.word) != NULL) {
      game_ended(g, WHITE, END_ADJWIN);

      pcommand(p, "message %s Your game \"%s vs. %s\" has been adjudicated "
	       "as a win", player_globals.parray[wp].name, player_globals.parray[wp].name, player_globals.parray[bp].name);

      pcommand(p, "message %s Your game \"%s vs. %s\" has been adjudicated "
	       "as a loss", player_globals.parray[bp].name, player_globals.parray[wp].name, player_globals.parray[bp].name);
    } else if (strstr("black", param[2].val.word) != NULL) {
      game_ended(g, BLACK, END_ADJWIN);
      pcommand(p, "message %s Your game \"%s vs. %s\" has been adjudicated "
	       "as a loss", player_globals.parray[wp].name, player_globals.parray[wp].name, player_globals.parray[bp].name);

      pcommand(p, "message %s Your game \"%s vs. %s\" has been adjudicated "
	       "as a win", player_globals.parray[bp].name, player_globals.parray[wp].name, player_globals.parray[bp].name);
    } else {
      confused = 1;
      pprintf(p, "Result must be one of: abort draw white black\n");
    }
  }
  if (!confused) {
    pprintf(p, "Game adjudicated.\n");
    if (!inprogress) {
      game_delete(wp, bp);
    } else {
      return (COM_OK);
    }
  }
  game_remove(g);
  if (!wconnected)
    player_remove(wp);
  if (!bconnected)
    player_remove(bp);
  return COM_OK;
}
コード例 #6
0
ファイル: matchproc.c プロジェクト: SKAcz/bics-current
int accept_match(struct pending *pend, int p, int p1)
{
	struct player *pp = &player_globals.parray[p];
	int wt, winc, bt, binc, rated, white;
	char category[50], board[50];
	char tmp[100];
	int bh = 0, partner = 0, pp1 = 0, g1;

	unobserveAll(p);              /* stop observing when match starts */
	unobserveAll(p1);
	wt = pend->wtime;
	winc = pend->winc;
	bt = pend->btime;
	binc = pend->binc;
	rated = pend->rated;
	strcpy (category, pend->category);
	strcpy (board, pend->board_type);
	white = (pend->seek_color == -1) ? -1 : 1 - pend->seek_color;

	pprintf(p, "You accept the challenge of %s.\n", player_globals.parray[p1].name);
	pprintf(p1, "\n%s accepts your challenge.\n", pp->name);


	if(!pend->status)
		delete_pending(pend);

	withdraw_seeks(p);
	withdraw_seeks(p1);

	pend_join_match (p,p1);




	player_globals.parray[p1].last_category = strdup(category);
	player_globals.parray[p1].last_board = strdup(board);
	player_globals.parray[p].last_category = strdup(category);
	player_globals.parray[p].last_board = strdup(board);

	if (game_isblitz(category,board) == TYPE_BUGHOUSE)
	{
		bh = 1;

		if ((partner = pp->partner) >= 0 &&
			(pp1 = player_globals.parray[p1].partner) >= 0)
		{
			unobserveAll(partner);         /* stop observing when match starts */
			unobserveAll(pp1);
			pprintf(partner, "\nYour partner accepts the challenge of %s.\n", player_globals.parray[p1].name);
			pprintf(pp1, "\n%s accepts your partner's challenge.\n", pp->name);
			pend_join_match (partner,pp1);
		} else
		{
			return COM_OK;
		}
	}

	g1 = game_new(); /* create a game structure */

	if (g1 < 0)
	{
		sprintf(tmp, "There was a problem creating the new match.\n");
		pprintf(p, tmp);
		pprintf_prompt(p1, tmp);
	}

	if (game_read(g1, p1, p) >= 0)
	{
		int swap;
		swap = p;
		p = p1;
		p1 = swap;
		pp = &player_globals.parray[p];
	} else if (game_read(g1, p, p1) < 0)
	{ /* so no adjourned game */

    // Alex Guo: this is creating the match too early. If we are doing bughouse,
    // we need to first create the other board, and THEN create the match
    //if (create_new_match(g1,p, p1, wt, winc, bt, binc, rated, category, board, white,0) == COM_FAILED) {
	//	return COM_OK;
    //}


	/* create first game */
	int g2=-1;

    int g1_white = white;

	if (bh)
	{ /* do bughouse creation */

		g2 = game_new();

        if (g2 < 0)
            return BugMatchErrorHandler(g1, pp1, partner);

		game_globals.garray[g1].link = g2; /* link the games */
		game_globals.garray[g2].link = g1;
		game_globals.garray[g1].databaseLink= g2;
		game_globals.garray[g2].databaseLink = g1;

        if (create_new_match(g1,p, p1, wt, winc, bt, binc, rated, category, board, g1_white,0)
            == COM_FAILED)
            return COM_OK;

		white = (pp->side == WHITE ? 0 : 1);

		player_globals.parray[partner].last_category = strdup(category);
		player_globals.parray[partner].last_board = strdup(board);
		player_globals.parray[pp1].last_category = strdup(category);
		player_globals.parray[pp1].last_board = strdup(board);

		if ((create_new_match(g2,partner, pp1, wt, winc, bt, binc, rated, category, board,white,0)
			== COM_FAILED))
            return BugMatchErrorHandler(g1, pp1, partner);

		sprintf(tmp, "\nYour partner is playing game %d (%s vs. %s).\n",
              g2 + 1, game_globals.garray[g2].white_name, game_globals.garray[g2].black_name);
		pprintf(p, tmp);
		pprintf(p1, tmp);

		sprintf(tmp, "\nYour partner is playing game %d (%s vs. %s).\n",
              g1 + 1, game_globals.garray[g1].white_name, game_globals.garray[g1].black_name);
		pprintf(partner, tmp);
		pprintf(pp1, tmp);

		pfollow_start(partner,  pp1);
		pfollow_start(p, p1);

	}
    else {
        if (create_new_match(g1,p, p1, wt, winc, bt, binc, rated, category, board, g1_white,0)
            == COM_FAILED)
            return COM_OK;
    }

    // Alex Guo: now here, send the information to the clients.
    //if (g1 >= 0) {
    //    gameinfo(p, g1);
    //    gameinfo(p1, g1);
    //    send_boards(g1);
    //}
    //if (g2 >= 0) {
    //    gameinfo(partner, g2);
    //    gameinfo(pp1, g2);
    //    send_boards(g2);
    //}

	return COM_OK;
  }

       /* resume adjourned game */

  game_delete(p, p1); /* remove the game from disk */

  sprintf(tmp, "{Game %d (%s vs. %s) Continuing %s %s match.}\n",
        g1+1, pp->name, player_globals.parray[p1].name,
        rstr[game_globals.garray[g1].rated], bstr[game_globals.garray[g1].type]);
  pprintf(p, tmp);
  pprintf(p1, tmp);
  output_match_messages(p, p1, g1, "Continuing");

  game_globals.garray[g1].white = p;
  game_globals.garray[g1].black = p1;
  game_globals.garray[g1].status = GAME_ACTIVE;
  game_globals.garray[g1].result = END_NOTENDED;
  game_globals.garray[g1].startTime = tenth_secs2();
  game_globals.garray[g1].lastMoveTime = game_globals.garray[g1].startTime;
  game_globals.garray[g1].lastDecTime = game_globals.garray[g1].startTime;
  pp->game = g1;
  pp->opponent = p1;
  pp->side = WHITE;
  player_globals.parray[p1].game = g1;
  player_globals.parray[p1].opponent = p;
  player_globals.parray[p1].side = BLACK;

  send_boards(g1);

  /* obey any 'follow' lists */
  //follow_start(p,p1);

  return COM_OK;
}