亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? main.cpp

?? 機器人的行為控制模擬程序。用于機器人的環境識別。A robot action decision simulation used for robot enviroment recognition.
?? CPP
字號:
/* 
    Robot Simulator

    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License
    as published by the Free Software Foundation; either version 2
    of the License, or (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.

    (C) 2006 Jason Hunt
    nulluser@gmail.gom 
*/

#include <windows.h>

#include <stdio.h>
#include <time.h>

#include "resource.h"
#include "main.h"
#include "display.h"
#include "console.h"
#include "world.h"
#include "robot.h"


extern world_type world;


HDC memdc;                      // Device context for offscreen drawing
HBITMAP mem_bitmap;             // Bitmap for memdc

int display_x, display_y;       // Current Size of the client area

bool keys[256] = { false };     // Key array, true if pressed

int updates = 0;                // Number of updates since last second
int updates_per_second = 0;     // Number of updates per second


bool manual_mode = false;

int timer_val = 10;

HWND neuron_window;

bool neuron_window_active = false;


robot_type *cur_robot = NULL;


unsigned int mouse_x_start;
unsigned int mouse_y_start;

bool mouse_is_down = false;

bool right_mouse_down = false;

bool show_stats = false;

/* Init the entire system */
void system_startup( HWND hwnd )
{
    srand(time(NULL));
    
    memdc_setup(hwnd);

    world_setup();

    world_update();
    world_draw(memdc);    


    SetTimer(hwnd, UPDATE_ID, timer_val, NULL);        
    SetTimer(hwnd, SECOND_ID, 1000, NULL);        
}
/* End of system_startup */


/* De-Init the entire system */
void system_shutdown( void )
{
    world_destroy();            
            
    DeleteObject(mem_bitmap);
    DeleteDC(memdc);   
}
/* End of system_shutdown */


/* Called when a key is pressed */
void key_down(HWND hwnd, WPARAM w)
{
    // Mark key as pressed
    keys[w & 0xff] = true;  

    // Deal with single press events herex
    if (keys['N'])
    {
        world_free_markers();
        world_free_impacts();
    }
    
    if (keys['V']) robot.draw_vision = !robot.draw_vision;

    if (keys[27]) PostQuitMessage(0);


    if (keys[VK_DOWN])
    {
        timer_val++;
        
        SetTimer(hwnd, UPDATE_ID, timer_val, NULL);                     
    }
    
    if (keys[VK_UP])
    {
        timer_val --;
        
        if (timer_val < 0) timer_val = 0;
        
       SetTimer(hwnd, UPDATE_ID, timer_val, NULL);
    }
   

    if (keys['R']) world_setup(); 
                  
    if (keys['T']) world.show_walls = !world.show_walls;

    if (keys['M']) manual_mode = !manual_mode;
    

     if (keys['G']) world.draw_grad = !world.draw_grad;
     
     if (keys['1']) world.scale1 -= 0.01;
     if (keys['2']) world.scale1 += 0.01;

     if (keys['3']) world.scale2 -= 0.01;
     if (keys['4']) world.scale2 += 0.01;
     
      if (keys['5']) world.scale3 -= 0.001;
     if (keys['6']) world.scale3 += 0.001;
     
     if (keys[VK_SPACE]) show_stats = !show_stats;
     
     if (keys['P']) world_compute_map_grid();
        
     
      
}
/* End of key_down */


/* Deal with main menu commands */
void main_menu(HWND hwnd, unsigned int id)
{


    switch(id)
    {
        case ID_EXIT:
            DestroyWindow(hwnd);
            return;

        case ID_SAVE:
            world_save();
            return;

        case ID_OPEN:
            world_load();
            return;
            
    }    
    
}
/* End of main menu */




void mouse_down(LPARAM l)
{
    mouse_is_down = true; 
    
    double world_x1 = (LOWORD(l) / (double)display_x) * world.x_size;
    double world_y1 = (HIWORD(l) / (double)display_y) * world.y_size;

    world_add_wall(world_x1, world_y1, 0, 0);
}


void mouse_up(LPARAM l)
{
    mouse_is_down = false;
}



void mouse_move(LPARAM l)
{
    if (mouse_is_down)
    {    
        wall_type *w = world.walls;
    
        if (w == NULL) return;

        double world_x2 = (LOWORD(l) / (double)display_x) * world.x_size;
        double world_y2 = (HIWORD(l) / (double)display_y) * world.y_size;

        if (world_x2 < w->x) return;
        if (world_y2 < w->y) return;
    
        w->x_size = world_x2 - w->x;
        w->y_size = world_y2 - w->y;
    }    
    
    if (right_mouse_down)
    {
            world_set_target(get_world_x(LOWORD(l)),
                             get_world_y(HIWORD(l))); 
    
    }
}








/* Called when a key is released */
void key_up(WPARAM w)
{
    keys[w & 0xff] = false;            
}
/* End of key up */


void manual_motion(double speed, double dir)
{
    if(!manual_mode) return;

    robot.speed = speed;
    robot.ddir = dir;
}



/* Process currently pressed keys */
void check_keys( void )
{
    // Decode WASD keys for manual override

    if (!manual_mode) return;

    // Forward
   if (keys['W']) 
    {
        if (keys['A']) manual_motion(0.03, -0.03); else     // Forward + left
        if (keys['D']) manual_motion(0.03, 0.03); else     // Forward + right
            manual_motion(0.03, 0.00);                      // Normal forward
                
    } else
    // Reverse
    if (keys['S'])
    {
        if (keys['A']) manual_motion(-0.015, 0.03); else   // Reverse + left
        if (keys['D']) manual_motion(-0.03, -0.03); else   // Reverse + right
            manual_motion(-0.03, 0);                    // Normal reverse
        
    } else
    if (keys['A']) manual_motion(0.0, -0.03); else         // Rotate left
    if (keys['D']) manual_motion(0.0, 0.03); else         // Rotate right
        manual_motion(0.0, 0.0);                           // No key, stop
}
/* End of check keys */


/* Deal with the system timer */
void timer_message(HWND hwnd, WPARAM wparam)
{
    if (wparam == UPDATE_ID)
    {
        check_keys();

        world_update();
        world_draw(memdc);
        
        updates++;
        InvalidateRect(hwnd, NULL, 0);                            
        return;
    }

    if (wparam == SECOND_ID)
    {
        updates_per_second = updates;
        updates = 0;

      //  world_debug_update();      
    }            
}
/* End of timer_message */


/* Deal with paint message */
void window_paint(HWND hwnd)
{
    PAINTSTRUCT ps;
    HDC hdc = BeginPaint(hwnd, &ps);

    char buff[400];

    if (show_stats)
    {
           
        sprintf(buff, "Update rate: %3d scale1 %f scale2 %f scale3: %f", 
                updates_per_second, world.scale1, world.scale2, world.scale3);
                       
        TextOut(memdc, 1, 1, buff, strlen(buff)); 
    }

    // Copy memory device context to display 
    BitBlt(hdc, 0, 0, display_x, display_y, memdc, 0, 0, SRCCOPY);
            
    EndPaint(hwnd, &ps); 
    
  // InvalidateRect(neuron_window, NULL, 0);      
}
/* Wnd of window_paint */



/* Setup the off screen drawing system */
void memdc_setup( HWND hwnd )
{
    RECT r;
    GetClientRect(hwnd, &r);

    // Update stored client area size
    display_x = r.right;
    display_y = r.bottom;

    HDC hdc = GetDC(hwnd);

    // Create memory device context and bitmap            
    memdc = CreateCompatibleDC(hdc);
    mem_bitmap = CreateCompatibleBitmap(hdc, r.right, r.bottom);
            
    // Select the bitmap into the memort dc
    SelectObject(memdc, mem_bitmap);
            
    ReleaseDC(hwnd, hdc);     
}
/* End of memdc_setup */


/* Chhose the correct brush color for the neuron */
void set_neuron_brush(HDC hdc, double val)
{
    if (val == 0)
        SelectObject(hdc, (HBRUSH)world.white_brush);
    else
    if (val > 0)
        SelectObject(hdc, (HBRUSH)world.blue_brush);
    else
        SelectObject(hdc, (HBRUSH)world.red_brush);     
}
/* End of set_neuron_brush */



/* Window function */
LRESULT CALLBACK main_win_proc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)
{
    switch(message)
    {
        case WM_TIMER: timer_message(hwnd, wparam); return(0);

        case WM_CREATE: system_startup(hwnd); return(0);

        case WM_PAINT: window_paint(hwnd); return(0);

        case WM_DESTROY: 
            system_shutdown();            
            PostQuitMessage(0);
            return(0);
                                        
        case WM_SIZE:               // Process size message
            // These are alreadt setup, delete them
            DeleteObject(mem_bitmap);
            DeleteDC(memdc);
            
            // Setup again with the new size
            memdc_setup(hwnd);
            return(0);
                
        case WM_KEYDOWN:            // Process keydown
            key_down(hwnd, wparam);
            return(0);
    
        case WM_KEYUP:              // Process keyup
            key_up(wparam);
            return(0);
                
        case WM_LBUTTONDOWN:
            mouse_down(lparam);
            return(0);
               
        case WM_LBUTTONUP:
            mouse_up(lparam);
            return(0);
                          
        case WM_MOUSEMOVE:
            mouse_move(lparam);
            return(0);
             
            
        case WM_RBUTTONDOWN:
            world_set_target(get_world_x(LOWORD(lparam)),
                             get_world_y(HIWORD(lparam))); 
            right_mouse_down = true;
            return(0);
                                      
        case WM_RBUTTONUP:
            right_mouse_down = false;
            return(0);
                                
        case WM_COMMAND:
            main_menu(hwnd, LOWORD(wparam));
            return(0);
                
        default:
            return(DefWindowProc(hwnd, message, wparam, lparam));    
    }
    return(0);
}
/* Wnd of window function */




/* Winmain */
int WINAPI WinMain(HINSTANCE hinst, HINSTANCE pinst, LPSTR args, int mode)
{
    char name[] = "Robot Simulator";
    
    WNDCLASS wc;
    
    wc.hInstance = hinst;
    wc.lpszClassName = name;
    wc.lpfnWndProc = main_win_proc;
    wc.style = 0;
    
    wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    wc.lpszMenuName = "MAINMENU";
    wc.cbClsExtra = 0;
    wc.cbWndExtra = 0;
    
    wc.hbrBackground = NULL;
    
    if (!RegisterClass(&wc)) return(0);
    
    HWND hwnd = CreateWindow(name, name, WS_OVERLAPPEDWINDOW, 
                            120, 120, // x, y
                            640,480, // height, width
                            HWND_DESKTOP, NULL, hinst, NULL);
                            
    ShowWindow( hwnd, mode);
    UpdateWindow( hwnd );

    MSG msg;

    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
        
    return (msg.wParam);
}
/* End of winmain */









?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品亚洲午夜一区二区三区 | 一区二区在线观看免费视频播放| 国模一区二区三区白浆| 欧美va亚洲va在线观看蝴蝶网| 日韩精品电影在线观看| 日韩久久久精品| 福利91精品一区二区三区| 欧美国产激情一区二区三区蜜月| 丁香激情综合五月| 亚洲乱码中文字幕综合| 欧美高清视频一二三区| 韩国av一区二区| 专区另类欧美日韩| 精品视频资源站| 国产一区二区在线电影| 国产精品久久久爽爽爽麻豆色哟哟| 色综合中文字幕国产| 一区二区三区在线视频观看| 欧美日本视频在线| 狠狠色狠狠色合久久伊人| 中文字幕一区二区三区四区不卡| 欧美中文字幕一区二区三区亚洲| 免费观看在线色综合| 欧美国产精品中文字幕| 欧美日韩亚洲国产综合| 国产美女一区二区| 一区二区三区在线视频免费观看| 精品精品国产高清一毛片一天堂| 97国产一区二区| 精品影视av免费| 亚洲乱码国产乱码精品精98午夜| 日韩精品一区二| 日本韩国精品在线| 极品少妇xxxx偷拍精品少妇| 亚洲靠逼com| 精品国产伦一区二区三区免费| av亚洲产国偷v产偷v自拍| 五月激情综合网| 中文字幕中文字幕在线一区| 制服丝袜亚洲播放| 91麻豆成人久久精品二区三区| 日本va欧美va精品发布| 亚洲免费毛片网站| 久久中文娱乐网| 欧美日本一道本在线视频| 99免费精品视频| 国产精品一品二品| 日韩av成人高清| 亚洲与欧洲av电影| 国产精品人成在线观看免费| 精品福利在线导航| 欧美日韩成人综合在线一区二区| 99久免费精品视频在线观看| 国产激情一区二区三区桃花岛亚洲| 午夜电影久久久| 亚洲综合色成人| 亚洲乱码国产乱码精品精小说| 日本一区二区免费在线| 日韩精品专区在线影院观看| 欧美丰满嫩嫩电影| 欧美色中文字幕| 欧美亚洲国产一区在线观看网站| 99精品偷自拍| aaa亚洲精品| 91视频观看视频| 99久久久精品免费观看国产蜜| 国产成人在线观看| 国产一区二区三区四区五区美女 | 中文字幕va一区二区三区| 欧美成人精品福利| 欧美一区二区成人6969| 8v天堂国产在线一区二区| 欧美在线视频日韩| 色综合久久六月婷婷中文字幕| 成人国产精品免费网站| 国产成人av一区| 成人激情开心网| 99国产一区二区三精品乱码| 91蝌蚪porny| 91福利视频久久久久| 在线观看免费一区| 欧美日本不卡视频| 在线综合视频播放| 日韩视频一区二区三区在线播放| 69久久夜色精品国产69蝌蚪网| 91精品国产综合久久小美女| 欧美一级在线视频| 26uuu色噜噜精品一区| 久久亚洲捆绑美女| 国产欧美精品一区| 成人免费在线观看入口| 夜夜夜精品看看| 日韩高清电影一区| 国产专区综合网| 不卡欧美aaaaa| 欧美主播一区二区三区美女| 91麻豆精品国产91久久久| 日韩午夜激情视频| 国产清纯白嫩初高生在线观看91| 国产精品色哟哟| 亚洲影院理伦片| 日本美女一区二区三区| 国产精品中文字幕一区二区三区| 成人自拍视频在线观看| 色爱区综合激月婷婷| 91精品国产一区二区人妖| www欧美成人18+| 亚洲精品亚洲人成人网| 日本在线不卡视频| 国产成人午夜精品5599| 欧美在线观看一区二区| 欧美xxxxxxxx| 亚洲免费在线看| 国产一区二区三区最好精华液| 91丨九色丨黑人外教| 91精品国产综合久久香蕉的特点 | 亚洲三级在线看| 日韩影院精彩在线| 国产精品69毛片高清亚洲| 91国产成人在线| 国产色产综合色产在线视频| 午夜国产精品影院在线观看| 成人18视频日本| 日韩欧美卡一卡二| 一区二区三区四区av| 韩国精品主播一区二区在线观看 | 久久精品一区二区三区不卡| 亚洲一区二区三区美女| 国产成人自拍在线| 欧美日韩国产天堂| 亚洲欧洲日韩在线| 国产真实乱偷精品视频免| 欧美中文字幕一区二区三区亚洲| 久久久久久久久久久久久夜| 五月婷婷另类国产| 99久久精品国产毛片| 精品免费日韩av| 视频一区在线播放| 日本韩国欧美国产| 国产精品久久久久精k8| 裸体在线国模精品偷拍| 精品视频在线免费观看| 国产精品成人一区二区艾草| 国产黄人亚洲片| 久久综合资源网| 蜜臀av性久久久久av蜜臀妖精| 欧美唯美清纯偷拍| 亚洲男帅同性gay1069| caoporm超碰国产精品| 久久亚洲影视婷婷| 久久成人精品无人区| 56国语精品自产拍在线观看| 亚洲一区二区三区视频在线播放 | 亚洲成在线观看| www.亚洲国产| 国产人久久人人人人爽| 九九在线精品视频| 日韩欧美国产精品一区| 日韩精品成人一区二区三区| 欧美日韩国产bt| 亚洲成人一二三| 欧美猛男超大videosgay| 亚洲免费av网站| 在线观看成人小视频| 亚洲一区二区三区在线看| 日本韩国一区二区三区| 亚洲欧美日韩一区| 99在线精品一区二区三区| 中文字幕av一区 二区| 国产·精品毛片| 国产精品嫩草影院com| 不卡的电视剧免费网站有什么| 国产精品色哟哟| 色欲综合视频天天天| 一二三区精品福利视频| 欧美三级欧美一级| 午夜精品福利视频网站| 日韩一级大片在线观看| 国内精品视频666| 中文一区二区在线观看| 99热在这里有精品免费| 亚洲一线二线三线视频| 欧美日韩午夜在线| 免费在线视频一区| 久久亚洲综合色| 99这里只有精品| 亚洲成人综合在线| 日韩你懂的在线播放| 国产精品66部| 亚洲欧美激情在线| 欧美系列在线观看| 奇米亚洲午夜久久精品| 久久久久久久久久久电影| 成人黄色小视频| 亚洲自拍偷拍麻豆| 91麻豆精品91久久久久同性| 高清成人免费视频| 亚洲一区二区不卡免费| 日韩免费电影网站| 波多野结衣在线一区|