int main(void) { TRISA = 0xFC; /* A 0,1:output, 2,3,4:input */ TRISB = 0xC7; /* B0,1,2:input, B3,4,5:LEDoutput, other bits input */ PORTB = 0; /* PORTB clear */ PORTA = 0; /* PORTA clear */ last_time=STRAIGHT; while(RA4==1){ led_sens(); } while(1){/* 無限ループ */ led_sens(); if(RB0==1 && RB1==1 && RB2==1 && last_time==LEFT_DOWN){ left_down(); /*"White White White" and "LEFT_DOWN last time"*/ last_time=LEFT_DOWN; /* turn left */ } else if(RB0==1 && RB1==1 && RB2==1 && last_time==RIGHT_DOWN){ right_down(); /*"White White White" and "RIGHT_DOWN last time"*/ last_time=RIGHT_DOWN; /* turn right */ } else if(RB0==0 && RB1==0 && RB2==1){ /* Black Black White */ small_left_down(); /* turn left a little */ last_time=LEFT_DOWN; } else if(RB0==0 && RB1==1 && RB2==1){ /* Black White White */ left_down(); /* turn left */ last_time=LEFT_DOWN; } else if(RB0==1 && RB1==0 && RB2==0){ /* White Black Black */ small_right_down(); /* turn right a little */ last_time=RIGHT_DOWN; } else if(RB0==1 && RB1==1 && RB2==0){ /* White White Black */ right_down(); /* turn right */ last_time=RIGHT_DOWN; } else{ /* The other case */ straight(); /* go to straight */ last_time=STRAIGHT; } } }
static void interpret_message(broadcast_message_t *message) { if (message->type == MOVE) { move_mouse(&message->delta_point.from_point, &message->delta_point.to_point); } else if (message->type == LEFT_DOWN_CLICK) { left_down(); } else if (message->type == RIGHT_DOWN_CLICK) { right_down(); } else if (message->type == LEFT_UP_CLICK) { left_up(); } else if (message->type == RIGHT_UP_CLICK) { right_up(); } }
//judge computer chess a pos score and save to player win table void get_computer_win_table_max(void) { char *msg = "black win!"; reset(computer_win_table); for(i = 0; i < NUM; i++) { for(j = 0; j < NUM; j++) { if(pos_flag[j][i] == 0) { left(i, j, 2, 1, msg, F); right(i, j, 2, 1, msg, F); up(i, j, 2, 1, msg, F); down(i, j, 2, 1, msg, F); left_up(i, j, 2, 1, msg, F); right_up(i, j, 2, 1, msg, F); left_down(i, j, 2, 1, msg, F); right_down(i, j, 2, 1, msg, F); } computer_win_table[j][i] = left_score + right_score + up_score + down_score + left_up_score + right_up_score + left_down_score + right_down_score; } } computer_max = computer_win_table[0][0]; for(i = 0; i < NUM; i++) { for(j = 0; j < NUM; j++) { if(computer_max < computer_win_table[j][i]) { computer_max_x = j; computer_max_y = i; computer_max = computer_win_table[j][i]; } } } return; }
//judge player chess a pos score and save to player win table void get_player_win_table_max(void) { char *msg = "white win!"; reset(player_win_table); for(i = 0; i < NUM; i++) { for(j = 0; j < NUM; j++) { if(pos_flag[j][i] == 0) { left(i, j, 1, 2, msg, L); right(i, j, 1, 2, msg, L); up(i, j, 1, 2, msg, L); down(i, j, 1, 2, msg, L); left_up(i, j, 1, 2, msg, L); right_up(i, j, 1, 2, msg, L); left_down(i, j, 1, 2, msg, L); right_down(i, j, 1, 2, msg, L); } player_win_table[j][i] = left_score + right_score + up_score + down_score + left_up_score + right_up_score + left_down_score + right_down_score; } } player_max = player_win_table[0][0]; for(i = 0; i < NUM; i++) { for(j = 0; j < NUM; j++) { if(player_max < player_win_table[j][i]) { player_max_x = j; player_max_y = i; player_max = player_win_table[j][i]; } } } return; }
void defineGameMap() { VALUE cCollisionType = defClass<CollisionType>("CollisionType"); defMethod(cCollisionType, "initialize", CollisionType_initialize, -1); defMethod(cCollisionType, "left", CollisionType_left, 0); defMethod(cCollisionType, "right", CollisionType_right, 0); defMethod(cCollisionType, "up", CollisionType_up, 0); defMethod(cCollisionType, "down", CollisionType_down, 0); defMethod(cCollisionType, "content", CollisionType_content, 0); defMethod(cCollisionType, "left=", CollisionType_setLeft, 1); defMethod(cCollisionType, "right=", CollisionType_setRight, 1); defMethod(cCollisionType, "up=", CollisionType_setUp, 1); defMethod(cCollisionType, "down=", CollisionType_setDown, 1); defMethod(cCollisionType, "content=", CollisionType_setContent, 1); VALUE cTile = defClass<GameMap::Tile>("Tile"); defMethod(cTile, "initialize", GameMap_Tile_initialize, -1); defMethod(cTile, "x", Tile_x, 0); defMethod(cTile, "y", Tile_y, 0); defMethod(cTile, "tileset", Tile_tileset, 0); defMethod(cTile, "tileX", Tile_tileX, 0); defMethod(cTile, "tileY", Tile_tileY, 0); defMethod(cTile, "type", Tile_type, 0); defMethod(cTile, "x=", Tile_setX, 1); defMethod(cTile, "y=", Tile_setY, 1); defMethod(cTile, "tileset=", Tile_setTileset, 1); defMethod(cTile, "tileX=", Tile_setTileX, 1); defMethod(cTile, "tileY=", Tile_setTileY, 1); defMethod(cTile, "type=", Tile_setType, 1); VALUE cMap = defClass<GameMap>("GameMap", "Drawable"); defMethod(cMap, "initialize", GameMap_initialize, -1); defMethod(cMap, "addTileset", GameMap_addTileset, 1); defMethod(cMap, "setTileSize", GameMap_setTileSize, 2); defMethod(cMap, "tileWidth", GameMap_tileWidth, 0); defMethod(cMap, "tileHeight", GameMap_tileHeight, 0); defMethod(cMap, "collisionH=", GameMap_setCollisionH, 1); defMethod(cMap, "collisionH", GameMap_collisionH, 0); defMethod(cMap, "absToRel", GameMap_absToRel, 2); defMethod(cMap, "relToAbs", GameMap_relToAbs, 2); defMethod(cMap, "centerOn", GameMap_centerOn, 2); defMethod(cMap, "addElem", GameMap_addElem, -1); defMethod(cMap, "<<", GameMap_push, 1); defMethod(cMap, "clear", GameMap_clear, 0); defMethod(cMap, "clearTiles", GameMap_clearTiles, 0); defMethod(cMap, "clear_between", GameMap_clearBetween, 0); defMethod(cMap, "tiles", GameMap_tiles, 0); defMethod(cMap, "tilesets", GameMap_tilesets, 0); defMethod(cMap, "each_tile", GameMap_each_tile, 0); defMethod(cMap, "each_tileset", GameMap_each_tileset, 0); defMethod(cMap, "reject_tiles", GameMap_reject_tiles, 0); defMethod(cMap, "addBetween", GameMap_addBetween, 1); defAlias(cMap, "addTileset", "add_tileset"); defAlias(cMap, "setTileSize", "set_tile_size"); defAlias(cMap, "tileWidth", "tile_width"); defAlias(cMap, "tileHeight", "tile_height"); defAlias(cMap, "collisionH", "collision_h"); defAlias(cMap, "collisionH=", "collision_h="); defAlias(cMap, "absToRel", "abs2rel"); defAlias(cMap, "relToAbs", "rel2abs"); defAlias(cMap, "centerOn", "center_on"); defAlias(cMap, "addElem", "add_elem"); defAlias(cMap, "clearTiles", "clear_tiles"); CollisionType full(true, false, false, false, false); CollisionType left(false, true, false, false, false); CollisionType right(false, false, true, false, false); CollisionType up(false, false, false, true, false); CollisionType down(false, false, false, false, true); CollisionType no(false, false, false, false, false); CollisionType left_right(false, true, true, false, false); CollisionType left_up(false, true, false, true, false); CollisionType left_down(false, true, false, false, true); CollisionType right_up(false, false, true, true, false); CollisionType right_down(false, false, true, false, true); CollisionType up_down(false, false, false, true, true); /* Document-const: COL_FULL Joyau::CollisionType.new(true, false, false, false, false): Collision with everything. */ /* Document-const: COL_LEFT Joyau::CollisionType.new(false, true, false, false, false): Collision with the left side. */ /* Document-const: COL_RIGHT Joyau::CollisionType.new(false, false, true, false, false): Collision with the right side. */ /* Document-const: COL_UP Joyau::CollisionType.new(false, false, false, true, false): Collision with the upper side. */ /* Document-const: COL_DOWN Joyau::CollisionType.new(false, false, false, false, true): Collision with the downer side. */ /* Document-const: COL_NO Joyau::CollisionType.new(false, false, false, false, false): Collision with nothing. */ /* Document-const: COL_LEFT_RIGHT Joyau::CollisionType.new(false, true, true, false, false): Collision with the left and right sides. */ /* Document-const: COL_LEFT_UP Joyau::CollisionType.new(false, true, false, true, false): Collision with the left and the upper sides. */ /* Document-const: COL_LEFT_DOWN Joyau::CollisionType.new(false, true, false, false, true): Collision with the left and the downer sides. */ /* Document-const: COL_RIGHT_UP Joyau::CollisionType.new(false, false, true, true, false): Collision with the right and the upper sides. */ /* Document-const: COL_RIGHT_DOWN Joyau::CollisionType.new(false, false, true, false, true): Collision with the right and the downer sides. */ /* Document-const: COL_UP_DOWN Joyau::CollisionType.new(false, false, false, true, true): Collision with the upper and the downer sides. */ defConst(cMap, "COL_FULL", createObject(cCollisionType, full)); defConst(cMap, "COL_LEFT", createObject(cCollisionType, left)); defConst(cMap, "COL_RIGHT", createObject(cCollisionType, right)); defConst(cMap, "COL_UP", createObject(cCollisionType, up)); defConst(cMap, "COL_DOWN", createObject(cCollisionType, down)); defConst(cMap, "COL_NO", createObject(cCollisionType, no)); defConst(cMap, "COL_LEFT_RIGHT", createObject(cCollisionType, left_right)); defConst(cMap, "COL_LEFT_UP", createObject(cCollisionType, left_up)); defConst(cMap, "COL_LEFT_DOWN", createObject(cCollisionType, left_down)); defConst(cMap, "COL_RIGHT_UP", createObject(cCollisionType, right_up)); defConst(cMap, "COL_RIGHT_DOWN", createObject(cCollisionType, right_down)); defConst(cMap, "COL_UP_DOWN", createObject(cCollisionType, up_down)); }