📄 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 + -