?? c++ (2).html
字號:
1 #include <allegro.h>
2 vector<Point> g_points; //aka球上點的列表
3 vector<Joint> g_joints; //物理對象列表,如車輪和緩沖器
4 kVec g_accControl;
6 int main(void)
7 {
8 allegro_init(); // 初始化allegro.
9 install_keyboard(); // 啟動鍵盤.
10 install_mouse(); // 啟動鼠標.
11 install_timer(); //過程show_mouse()所需要;
13 // 創建一個800x600的非全屏窗口.
14 set_gfx_mode(GFX_AUTODETECT_WINDOWED, 800, 600, 0, 0);
16 set_window_title("Kee-Yip Chan’s Snooker Clone");
17 text_mode(-1); // 文本將被畫在透明的背景之上
19 BITMAP* buffer = create_bitmap(SCREEN_W, SCREEN_H);
//創建一張位圖用于雙緩沖.
21 // 初始化數據.
22 create_joints(g_joints); //注冊車輪、地板和緩沖器的硬編碼的屏幕位置
25 // 創建頂點以組成aka球: 玩家所用球和三個藍球
26 // 的位置, 速度, 大小和質量.
27 g_points.push_back(Point(kVec(100, 300),kVec(0, 0),16, 10));
// 玩家.
28 g_points.push_back(Point(kVec(50, 40), kVec(0, 0),12, 5));
// 中等的球.
29 g_points.push_back(Point(kVec(80, 40), kVec(0, 0) 12, 5));
//中等的球.
30 g_points.push_back(Point(kVec(110, 40),kVec(0, 0),6, 1));
// 小球.
32 //主循環,在按ESC鍵后退出
33 while(!key[KEY_ESC]) { //檢查輸入.
34 if(key[KEY_UP])
35 g_accControl.y = -0.07; //Jet pack.向上加速
36 if(key[KEY_LEFT])
37 g_accControl.x = -0.07; //左走.向左加速
38 if(key[KEY_RIGHT])
39 g_accControl.x = 0.07; //右走.向右加速
41 static bool leftMousePressed = false,
rightMousePressed = false;
42 if(mouse_b & 1) { //鼠標左鍵按下
43 if(!leftMousePressed){
44 leftMousePressed = true; // 創建一個新球.
45 g_points.push_back(Point(kVec(mouse_x, mouse_y),kVec(0, 0), 12, 5));
46 }
47 }
48 if(!(mouse_b & 1))
49 //保證不重復鼠標按鍵
50 //否則,就會出現許多的新球
51 leftMousePressed = false;
52 if(mouse_b & 2) { //鼠標右鍵按下
53 if(!rightMousePressed){
54 rightMousePressed = true; // 創建一個新球
55 g_points.push_back(Point(kVec(mouse_x, mouse_y),kVec(0, 0), 6, 1));
56 }
57 }
58 if(!(mouse_b & 2))
59 //保證不重復鼠標按鍵
60 //否則,就會出現許多的新球.
61 rightMousePressed = false;
63 doPhysics();
65 // 著色:如果我們能再次使用緩沖區,則清除它;
//否則,舊圖像將滯留顯示
66 //用白色進行清除.
67 clear_to_color(buffer, makecol(255, 255, 255));
68 for(unsigned i = 0; i < g_points.size(); i++) {
//畫點.
69 //畫一個實心球
70 circlefill(buffer, //畫向緩沖區
71 g_points[i].position.x,g_points[i].position.y,// aka 球的中心點的位置
72 g_points[i].size, // 半徑.
73 (i == 0) ? makecol(255, 0, 0) : makecol(0, 0, 255)); //紅色如果是玩家;否則為藍色
75 // 畫一個輪廓球.
76 circle(buffer, //畫向緩沖區
77 g_points[i].position.x,g_points[i].position.y, // aka 球的中心點的位置.
78 g_points[i].size, // 半徑.
79 makecol(0, 0, 0)); //紅色如果是玩家;否則為藍色.
81 }
83 // 畫接合點
84 for (unsigned i = 0; i < g_joints.size(); i++)
85 line(buffer, //畫向緩沖區
86 g_joints[i].p1.x, g_joints[i].p1.y, // 點 1.
87 g_joints[i].p2.x, g_joints[i].p2.y, // 點 2.
88 makecol(0, 0, 0)); // 黑顏色.
89 );
91 // 打印指令.
92 textout(buffer, font, "Left Mouse Button - new big ball Right Mouse Button - new small ball",
93 125, 1, makecol(0, 0, 0));
95 textout(buffer, font, "Arrow Keys - move red ball",
96 300, 592, makecol(0, 0, 0));
98 show_mouse(buffer); // 畫鼠標光標.
100 draw_sprite(screen, buffer, 0, 0);// 把緩沖區中的數據畫向屏幕.
101 } // while循環結束
103 return 0;
105 }END_OF_MAIN();
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -