void snake_auto_move(char temp)//实现蛇的自动移动 { int x,y,speed; do{ clear_snake_tail(); drow_snake(1);//画蛇身 x = snake.rear->x; y = snake.rear->y; switch(temp){ case 'w': x--;break; case 's': x++;break; case 'a': y--;break; case 'd': y++; } enqueue(x,y);//新蛇头入队 if(snake.front->x == x && snake.front->y == y){//蛇捕捉到食物后,食物重新随机化 game_info(); show_food(); } else{ dequeue(); }//旧蛇尾出队 drow_snake(0);//画蛇头 speed = -2.3 * snake.length + 157; Sleep(speed);//程序暂停speed个单位毫秒 }while(!_kbhit() && judge());//_kbhit为检测键盘输入 }
int main() { help_info(); snake_init(); show_food(); drow_wall(); game_info(); while(judge()){ snake_move(); } return 0; }
void CGameSpawnConstructor::load_spawns (LPCSTR name, bool no_separator_check) { m_spawn_id = 0; // init spawn graph m_spawn_graph = xr_new<SPAWN_GRAPH>(); // init ini file m_game_info = xr_new<CInifile>(INI_FILE); R_ASSERT (m_game_info->section_exist("levels")); // init patrol path storage m_patrol_path_storage = xr_new<CPatrolPathStorage>(); xr_vector<LPCSTR> needed_levels; string4096 levels_string; xr_strcpy (levels_string,name); strlwr (levels_string); fill_needed_levels (levels_string,needed_levels); // fill level info read_levels ( &game_info(), m_levels, false, &needed_levels ); // init game graph generate_temp_file_name ("game_graph","",m_game_graph_id); xrMergeGraphs (m_game_graph_id,name,false); m_game_graph = xr_new<CGameGraph>(m_game_graph_id); // load levels GameGraph::SLevel level; LEVEL_INFO_STORAGE::const_iterator I = m_levels.begin(); LEVEL_INFO_STORAGE::const_iterator E = m_levels.end(); for ( ; I != E; ++I) { level.m_offset = (*I).m_offset; level.m_name = (*I).m_name; level.m_id = (*I).m_id; Msg ("%9s %2d %s","level",level.id(),*(*I).m_name); m_level_spawns.push_back (xr_new<CLevelSpawnConstructor>(level,this,no_separator_check)); } string256 temp; xr_sprintf (temp,"There are no valid levels (with AI-map and graph) in the section 'levels' in the '%s' to build spawn file from!",GAME_CONFIG); R_ASSERT2 (!m_level_spawns.empty(),temp); }
bool lobby_info::process_gamelist_diff(const config& data) { SCOPE_LB; if(!gamelist_initialized_) return false; DBG_LB << "prediff " << dump_games_config(gamelist_.child("gamelist")); try { gamelist_.apply_diff(data, true); } catch(config::error& e) { ERR_LB << "Error while applying the gamelist diff: '" << e.message << "' Getting a new gamelist.\n"; network::send_data(config("refresh_lobby"), 0); return false; } DBG_LB << "postdiff " << dump_games_config(gamelist_.child("gamelist")); DBG_LB << dump_games_map(games_by_id_); config::child_itors range = gamelist_.child("gamelist").child_range("game"); for(config::child_iterator i = range.first; i != range.second; ++i) { config& c = *i; DBG_LB << "data process: " << c["id"] << " (" << c[config::diff_track_attribute] << ")\n"; int game_id = c["id"]; if(game_id == 0) { ERR_LB << "game with id 0 in gamelist config" << std::endl; network::send_data(config("refresh_lobby"), 0); return false; } game_info_map::iterator current_i = games_by_id_.find(game_id); const std::string& diff_result = c[config::diff_track_attribute]; if(diff_result == "new" || diff_result == "modified") { if(current_i == games_by_id_.end()) { games_by_id_.insert(std::make_pair( game_id, new game_info(c, game_config_))); } else { // had a game with that id, so update it and mark it as such *(current_i->second) = game_info(c, game_config_); current_i->second->display_status = game_info::UPDATED; } } else if(diff_result == "deleted") { if(current_i == games_by_id_.end()) { WRN_LB << "Would have to delete a game that I don't have: " << game_id << "\n"; } else { if(current_i->second->display_status == game_info::NEW) { // this means the game never made it through to the user // interface // so just deleting it is fine games_by_id_.erase(current_i); } else { current_i->second->display_status = game_info::DELETED; } } } } DBG_LB << dump_games_map(games_by_id_); try { gamelist_.clear_diff_track(data); } catch(config::error& e) { ERR_LB << "Error while applying the gamelist diff (2): '" << e.message << "' Getting a new gamelist.\n"; network::send_data(config("refresh_lobby"), 0); return false; } DBG_LB << "postclean " << dump_games_config(gamelist_.child("gamelist")); process_userlist(); return true; }
int game(int where, int where_num) { MOUSEMSG m; int temp_x, temp_y, i, j, flag = 0, num = 480/where; int step = 0; while (1) { m = GetMouseMsg(); if (m.uMsg == WM_LBUTTONDOWN && m.x < 480) { if (m.x == num || m.y == num) { continue; } mciSendString("open audio/change.mp3 alias change", NULL, 0, NULL); mciSendString("play change", NULL, 0, NULL); step += 1; temp_x = m.x/num; temp_y = m.y/num; if (map_check[temp_y][temp_x] == 0) { setfillstyle(RED); floodfill(m.x, m.y , GREEN); map_check[temp_y][temp_x] = 1; } else { setfillstyle(BLACK); floodfill(m.x, m.y, GREEN); map_check[temp_y][temp_x] = 0; } if (temp_x - 1 >= 0) { if (map_check[temp_y][temp_x-1]) { setfillstyle(BLACK); floodfill(m.x - num, m.y, GREEN); map_check[temp_y][temp_x-1] = 0; } else { setfillstyle(RED); floodfill(m.x - num, m.y, GREEN); map_check[temp_y][temp_x-1] = 1; } } if (temp_y - 1 >= 0) { if (map_check[temp_y-1][temp_x]) { setfillstyle(BLACK); floodfill(m.x, m.y - num, GREEN); map_check[temp_y-1][temp_x] = 0; } else { setfillstyle(RED); floodfill(m.x, m.y - num, GREEN); map_check[temp_y-1][temp_x] = 1; } } if (temp_x + 1 < where) { if (map_check[temp_y][temp_x+1]) { setfillstyle(BLACK); floodfill(m.x + num, m.y, GREEN); map_check[temp_y][temp_x+1] = 0; } else { setfillstyle(RED); floodfill(m.x + num, m.y , GREEN); map_check[temp_y][temp_x+1] = 1; } } if (temp_y + 1 < where) { if (map_check[temp_y+1][temp_x]) { setfillstyle(BLACK); floodfill(m.x, m.y + num, GREEN); map_check[temp_y+1][temp_x] = 0; } else { setfillstyle(RED); floodfill(m.x, m.y + num, GREEN); map_check[temp_y+1][temp_x] = 1; } } Sleep(200); mciSendString("stop change", NULL, 0, NULL); mciSendString("close change", NULL, 0, NULL); } for (i = 0; i < where && !flag; i++) { for (j = 0; j < where && !flag; j++) { if (map_check[i][j] == 0) { flag = 1; } } } game_info(flag, step, where_num); if (flag == 0) { break; } flag = 0; } return 0; }