C language zero-based project: whack-a-mole, detailed ideas + source code sharing

Program Introduction

Whack-a-mole, a small game of clicking moles. The game interface is modeled after the materials in the unity book. Drawn by hand, no pictures added.

I like the whack-a-mole game, because I know this game, and I have the material for the book, so my first thought is to make it.

Compared to before, this remake has updated some things.

Added the red-eyed mole, clicking the red-eyed mole will have a special effect of increasing or decreasing the score. The mole is painted by itself, so there are moles in various colors if you like. The original intention of adding this function is to replace the "bomb".

The game picture material is changed to "hand-painted", because the game material is not much and relatively simple. When encountering complex games, you must still use pictures to separate the program from the artist ^-^.

Code update, now compatible with vc2010

vc2010:_stscanf_s,vc6.0:_stscanf

vc2010:_stprintf_s,vc6.0:_stprintf

Program running display




// 游戏进程头文件 //


# include <graphics.h>
# include <string>
# include <time.h>
# include <stdlib.h>


// 头文件
// 头文件编译开始
#ifndef CIRCLE_H
#define CIRCLE_H


// 定义变量
static HWND hOut;                    // 画布


// 定义一个结构体,地洞
struct Node1
{
    int boxnum;                        // 地洞编号
    int posx_hole, posy_hole;        // 地洞坐标
    int posx_gopher, posy_gopher;    // 鼹鼠坐标
    int time_life;                    // 剩余时间
    int type;                        // 地洞状态
};


// 定义一个结构体,按钮
struct Node2
{
    int posx1, posy1, posx2, posy2;    // 坐标
    double r;                        // 圆按钮半径
    LPTSTR text;                    // 按钮文本
    int type;                        // 按钮激活状态
};


// 定义一个类,game
class game
{
public:
    int carry_main ();                                                    // 游戏进程主循函数
    void draw_button ();                                                // 按钮绘制函数
    void draw_word (double size, int posx, int posy, LPTSTR text);        // 标题绘制函数
    void creact_gopher ();                                                // 生成鼹鼠函数
    void draw_cloud (double posx, double posy, double size);            // 云朵绘制函数
    void draw_left_railing (double posx, double posy, double size);        // 左栏杆绘制函数
    void draw_left_fence (double posx, double posy, double size);        // 左栅栏绘制函数
    void draw_right_railing (double posx, double posy, double size);    // 右栏杆绘制函数
    void draw_right_fence (double posx, double posy, double size);        // 右栅栏绘制函数
    void draw_gopher (double posx, double posy, double size, int flag);    // 鼹鼠绘制函数
    void draw_hole (double posx, double posy, double size);                // 地洞绘制函数
    void carry_prepare ();                                                // 准备进程主循函数
    void initialization_prepare ();                                        // 准备进程初始化函数    
    void draw_scene_prepare ();                                            // 准备进程绘制函数
    void carry_start ();                                                // 开始进程主循函数
    void initialization_start ();                                        // 开始进程初始化函数
    void draw_scene_start ();                                            // 开始进程绘制函数
    Node1 box[10];                                                        // 地洞,预制
    Node2 boxm[20];                                                        // 按钮,预制
    int num_button;                                                        // 按钮数量
    int exit_carry;                                                        // 主进程主循函数控制参数
    int exit_start;                                                        // 开始进程主循函数控制参数
    int start_endtime;                                                    // 结束时间参数
    int start_point;                                                    // 分数参数
    int speed_creact;                                                    // 生成时间间隔参数
    int speed_gopher_life;                                                // 鼹鼠存在时间参数
    int speed_gopher_beaten;                                            // 鼹鼠被击打后僵直时间参数
    int hole_full_end;                                                    // 溢满是否结束控制参数
    int gopher_red_eye_num;                                                // 红眼数量参数
    int point_punishment;                                                // 点击红眼得分改变参数
    int every_creact_num;                                                // 每次生成数量        
    clock_t start_t1;                                                    // 游戏开始系统时间参数
    clock_t start_t2;                                                    // 游戏进行系统时间参数
};


// 头文件编译结束
#endif


// 主程序源文件 //


// 窗口初始化
void initialization ()
{
    // 窗口定义,整个程序仅定义一次
    hOut = initgraph (800, 480);
    // 窗口标题
    SetWindowText (hOut, _T ("打地鼠"));
}


// 总进程主循函数
void carry ()
{
    // 总进程参数初始化
    int exit_carry = 0;
    // 进程控制
    BeginBatchDraw ();
    // 创建游戏类对象
    game G;
    // 游戏进程
    while (exit_carry == 0)
    {
        // 执行游戏总进程,并接收游戏进程结束时返回值
        // 准备进程时,点击退出按钮结束返回 1
        // 开始进程时,点击返回按钮结束返回 0
        exit_carry = G.carry_main ();
    }
    EndBatchDraw ();
    // 关闭窗口
    closegraph ();
}


// 主函数
int main (void)
{
    // 初始化
    initialization ();
    // 总进程主循函数
    carry ();
    return 0;
}


// 游戏进程源文件 //



// 游戏进程主循函数
int game::carry_main ()
{
    // 游戏进程参数初始化
    exit_carry = 0;
    // 随机种子初始化
    srand ((unsigned)time (NULL));
    // 游戏难度参数初始化
    speed_creact = 5;
    speed_gopher_life = 30;
    speed_gopher_beaten = 10;
    gopher_red_eye_num = 5;
    point_punishment = -5;
    every_creact_num = 1;
    // 溢满参数初始化
    hole_full_end = 0;
    // 准备进程初始化函数
    initialization_prepare ();
    // 准备进程主循函数
    carry_prepare ();
    // 准备进程结束
    // 准备进程时,点击退出按钮结束,游戏进程参数为 1
    // 准备进程时,正常进入游戏,游戏进程参数为 0
    if (exit_carry == 0)
    {
        // 开始进程初始化函数
        initialization_start ();
        // 开始进程主循函数
        carry_start ();
    }
    // 开始进程结束
    // 点击返回按钮结束,或者正常游戏结束,游戏进程参数不变
    return exit_carry;
}


// 按钮绘制函数
void game::draw_button ()
{
    // 根据颜色结构体设置参数
    setlinecolor (RGB (125, 125, 125));
    setfillcolor (RGB (88, 88, 88));
    setbkcolor (RGB (88, 88, 88));
    settextcolor (RGB (250, 250, 250));
    settextstyle (30, 15, _T ("Consolas"));
    setlinestyle (PS_SOLID, 10);

    // 根据按钮数量参数绘制
    for (int i = 0; i < num_button; i++)
    {
        if (boxm[i].type == 0)
        {
            // 边框
            fillroundrect (boxm[i].posx1, boxm[i].posy1, boxm[i].posx2, boxm[i].posy2, 25, 25);
            // 文字
            outtextxy (boxm[i].posx1 + (boxm[i].posx2 - boxm[i].posx1) / 2 - textwidth (boxm[i].text) / 2, boxm[i].posy1 + 15, boxm[i].text);
        }
    }
    FlushBatchDraw ();
}


// 文字绘制函数
void game::draw_word (double size, int posx, int posy, LPTSTR text)
{
    int i, j;

    // 参数设置,填充透明
    setbkmode (TRANSPARENT);
    settextstyle (int (size), int (size / 5 * 2), _T ("Consolas"));

    // 背景色的反色
    settextcolor (BLACK);
    // 范围绘制,构造阴影
    for (i = posx - 3; i <= posx + 3; i++)
    {
        for (j = posy - 3; j <= posy + 3; j++)
        {
            outtextxy (i, j, text);
        }
    }

    // 背景色
    settextcolor (WHITE);
    // 在阴影中绘制
    outtextxy (posx, posy, text);

    // 恢复填充
    setbkmode (OPAQUE);
    FlushBatchDraw ();
}


// 地洞绘制函数
void game::draw_hole (double posx, double posy, double size)
{
    POINT pts[100];

    setlinestyle (PS_SOLID, 2);
    // 设置
    setlinecolor (RGB (137, 98, 49));
    setfillcolor (RGB (193, 139, 79));
    pts[0].x = long (-236 * size + posx);    pts[0].y = long (-204 * size + posy);
    pts[1].x = long (-220 * size + posx);    pts[1].y = long (-235 * size + posy);
    pts[2].x = long (-187 * size + posx);    pts[2].y = long (-249 * size + posy);
    pts[3].x = long (-154 * size + posx);    pts[3].y = long (-256 * size + posy);
    pts[4].x = long (-106 * size + posx);    pts[4].y = long (-247 * size + posy);
    pts[5].x = long (-51 * size + posx);    pts[5].y = long (-243 * size + posy);
    pts[6].x = long (-25 * size + posx);    pts[6].y = long (-250 * size + posy);
    pts[7].x = long (13 * size + posx);    pts[7].y = long (-282 * size + posy);
    pts[8].x = long (52 * size + posx);    pts[8].y = long (-292 * size + posy);
    pts[9].x = long (90 * size + posx);    pts[9].y = long (-285 * size + posy);
    pts[10].x = long (97 * size + posx);    pts[10].y = long (-267 * size + posy);
    pts[11].x = long (118 * size + posx);    pts[11].y = long (-248 * size + posy);
    pts[12].x = long (150 * size + posx);    pts[12].y = long (-238 * size + posy);
    pts[13].x = long (185 * size + posx);    pts[13].y = long (-256 * size + posy);
    pts[14].x = long (213 * size + posx);    pts[14].y = long (-276 * size + posy);
    pts[15].x = long (254 * size + posx);    pts[15].y = long (-287 * size + posy);
    pts[16].x = long (287 * size + posx);    pts[16].y = long (-279 * size + posy);
    pts[17].x = long (325 * size + posx);    pts[17].y = long (-264 * size + posy);
    pts[18].x = long (342 * size + posx);    pts[18].y = long (-209 * size + posy);
    pts[19].x = long (328 * size + posx);    pts[19].y = long (-199 * size + posy);
    pts[20].x = long (306 * size + posx);    pts[20].y = long (-202 * size + posy);
    pts[21].x = long (271 * size + posx);    pts[21].y = long (-213 * size + posy);
    pts[22].x = long (246 * size + posx);    pts[22].y = long (-209 * size + posy);
    pts[23].x = long (217 * size + posx);    pts[23].y = long (-199 * size + posy);
    pts[24].x = long (186 * size + posx);    pts[24].y = long (-196 * size + posy);
    pts[25].x = long (143 * size + posx);    pts[25].y = long (-197 * size + posy);
    pts[26].x = long (101 * size + posx);    pts[26].y = long (-204 * size + posy);
    pts[27].x = long (60 * size + posx);    pts[27].y = long (-228 * size + posy);
    pts[28].x = long (47 * size + posx);    pts[28].y = long (-241 * size + posy);
    pts[29].x = long (26 * size + posx);    pts[29].y = long (-223 * size + posy);
    pts[30].x = long (2 * size + posx);    pts[30].y = long (-204 * size + posy);
    pts[31].x = long (-14 * size + posx);    pts[31].y = long (-198 * size + posy);
    pts[32].x = long (-42 * size + posx);    pts[32].y = long (-192 * size + posy);
    pts[33].x = long (-74 * size + posx);    pts[33].y = long (-190 * size + posy);
    pts[34].x = long (-108 * size + posx);    pts[34].y = long (-195 * size + posy);
    pts[35].x = long (-139 * size + posx);    pts[35].y = long (-203 * size + posy);
    pts[36].x = long (-167 * size + posx);    pts[36].y = long (-192 * size + posy);
    pts[37].x = long (-194 * size + posx);    pts[37].y = long (-181 * size + posy);
    pts[38].x = long (-206 * size + posx);    pts[38].y = long (-163 * size + posy);
    pts[39].x = long (-227 * size + posx);    pts[39].y = long (-161 * size + posy);
    pts[40].x = long (-236 * size + posx);    pts[40].y = long (-169 * size + posy);
    pts[41].x = long (-231 * size + posx);    pts[41].y = long (-198 * size + posy);
    pts[42].x = long (-226 * size + posx);    pts[42].y = long (-208 * size + posy);
    // 绘制
    fillpolygon (pts, 43);

}


// 云朵绘制函数
void game::draw_cloud (double posx, double posy, double size)
{
    POINT pts[100];
    setlinestyle (PS_SOLID, 1);
    // 设置
    setlinecolor (RGB (239, 250, 255));
    setfillcolor (RGB (239, 250, 255));
    pts[0].x = long (370 * size + posx);    pts[0].y = long (-230 * size + posy);
    pts[1].x = long (382 * size + posx);    pts[1].y = long (-241 * size + posy);
    pts[2].x = long (386 * size + posx);    pts[2].y = long (-243 * size + posy);
    pts[3].x = long (399 * size + posx);    pts[3].y = long (-241 * size + posy);
    pts[4].x = long (410 * size + posx);    pts[4].y = long (-240 * size + posy);
    pts[5].x = long (421 * size + posx);    pts[5].y = long (-236 * size + posy);
    pts[6].x = long (436 * size + posx);    pts[6].y = long (-240 * size + posy);
    pts[7].x = long (447 * size + posx);    pts[7].y = long (-242 * size + posy);
    pts[8].x = long (454 * size + posx);    pts[8].y = long (-238 * size + posy);
    pts[9].x = long (459 * size + posx);    pts[9].y = long (-231 * size + posy);
    pts[10].x = long (459 * size + posx);    pts[10].y = long (-222 * size + posy);
    pts[11].x = long (453 * size + posx);    pts[11].y = long (-216 * size + posy);
    pts[12].x = long (445 * size + posx);    pts[12].y = long (-212 * size + posy);
    pts[13].x = long (432 * size + posx);    pts[13].y = long (-212 * size + posy);
    pts[14].x = long (423 * size + posx);    pts[14].y = long (-212 * size + posy);
    pts[15].x = long (415 * size + posx);    pts[15].y = long (-212 * size + posy);
    pts[16].x = long (397 * size + posx);    pts[16].y = long (-215 * size + posy);
    pts[17].x = long (386 * size + posx);    pts[17].y = long (-211 * size + posy);
    pts[18].x = long (380 * size + posx);    pts[18].y = long (-211 * size + posy);
    pts[19].x = long (375 * size + posx);    pts[19].y = long (-219 * size + posy);
    pts[20].x = long (369 * size + posx);    pts[20].y = long (-229 * size + posy);
    // 绘制
    fillpolygon (pts, 21);
}


// 左栏杆绘制函数
void game::draw_left_railing (double posx, double posy, double size)
{
    POINT pts[100];
    setlinestyle (PS_SOLID, 1);
    // 绘制
    setlinecolor (RGB (238, 212, 89));
    setfillcolor (RGB (238, 212, 89));
    pts[0].x = long (-261 * size + posx);    pts[0].y = long (72 * size + posy);
    pts[1].x = long (-271 * size + posx);    pts[1].y = long (82 * size + posy);
    pts[2].x = long (-258 * size + posx);    pts[2].y = long (86 * size + posy);
    pts[3].x = long (-249 * size + posx);    pts[3].y = long (75 * size + posy);
    fillpolygon (pts, 4);

    setlinecolor (RGB (212, 189, 83));
    setfillcolor (RGB (212, 189, 83));
    pts[0].x = long (-271 * size + posx);    pts[0].y = long (83 * size + posy);
    pts[1].x = long (-271 * size + posx);    pts[1].y = long (151 * size + posy);
    pts[2].x = long (-258 * size + posx);    pts[2].y = long (159 * size + posy);
    pts[3].x = long (-258 * size + posx);    pts[3].y = long (85 * size + posy);
    fillpolygon (pts, 4);

    setlinecolor (RGB (243, 225, 135));
    setfillcolor (RGB (243, 225, 135));
    pts[0].x = long (-258 * size + posx);    pts[0].y = long (159 * size + posy);
    pts[1].x = long (-258 * size + posx);    pts[1].y = long (85 * size + posy);
    pts[2].x = long (-250 * size + posx);    pts[2].y = long (77 * size + posy);
    pts[3].x = long (-250 * size + posx);    pts[3].y = long (149 * size + posy);
    fillpolygon (pts, 4);
}


// 左栅栏绘制函数
void game::draw_left_fence (double posx, double posy, double size)
{
    POINT pts[100];
    setlinestyle (PS_SOLID, 1);

    setlinecolor (RGB (241, 217, 109));
    setfillcolor (RGB (241, 217, 109));
    pts[0].x = long (-173 * size + posx);    pts[0].y = long (-54 * size + posy);
    pts[1].x = long (-159 * size + posx);    pts[1].y = long (-75 * size + posy);
    pts[2].x = long (-156 * size + posx);    pts[2].y = long (-77 * size + posy);
    pts[3].x = long (-154 * size + posx);    pts[3].y = long (-75 * size + posy);
    pts[4].x = long (-155 * size + posx);    pts[4].y = long (-72 * size + posy);
    pts[5].x = long (-158 * size + posx);    pts[5].y = long (-67 * size + posy);
    pts[6].x = long (-170 * size + posx);    pts[6].y = long (-48 * size + posy);
    fillpolygon (pts, 7);
}


// 右栏杆绘制函数
void game::draw_right_railing (double posx, double posy, double size)
{
    POINT pts[100];
    setlinestyle (PS_SOLID, 1);
    // 绘制
    setlinecolor (RGB (238, 212, 89));
    setfillcolor (RGB (238, 212, 89));
    pts[0].x = long (494 * size + posx);    pts[0].y = long (132 * size + posy);
    pts[1].x = long (503 * size + posx);    pts[1].y = long (139 * size + posy);
    pts[2].x = long (515 * size + posx);    pts[2].y = long (135 * size + posy);
    pts[3].x = long (507 * size + posx);    pts[3].y = long (127 * size + posy);
    fillpolygon (pts, 4);

    setlinecolor (RGB (212, 189, 83));
    setfillcolor (RGB (212, 189, 83));
    pts[0].x = long (499 * size + posx);    pts[0].y = long (211 * size + posy);
    pts[1].x = long (502 * size + posx);    pts[1].y = long (139 * size + posy);
    pts[2].x = long (515 * size + posx);    pts[2].y = long (136 * size + posy);
    pts[3].x = long (512 * size + posx);    pts[3].y = long (209 * size + posy);
    fillpolygon (pts, 4);

    setlinecolor (RGB (243, 225, 135));
    setfillcolor (RGB (243, 225, 135));
    pts[0].x = long (493 * size + posx);    pts[0].y = long (132 * size + posy);
    pts[1].x = long (489 * size + posx);    pts[1].y = long (201 * size + posy);
    pts[2].x = long (499 * size + posx);    pts[2].y = long (211 * size + posy);
    pts[3].x = long (502 * size + posx);    pts[3].y = long (139 * size + posy);
    fillpolygon (pts, 4);
}


// 右栅栏绘制函数
void game::draw_right_fence (double posx, double posy, double size)
{
    POINT pts[100];
    // 绘制
    setlinestyle (PS_SOLID, 1);
    setlinecolor (RGB (241, 217, 109));
    setfillcolor (RGB (241, 217, 109));
    pts[0].x = long (405 * size + posx);    pts[0].y = long (-58 * size + posy);
    pts[1].x = long (393 * size + posx);    pts[1].y = long (-78 * size + posy);
    pts[2].x = long (394 * size + posx);    pts[2].y = long (-85 * size + posy);
    pts[3].x = long (398 * size + posx);    pts[3].y = long (-88 * size + posy);
    pts[4].x = long (402 * size + posx);    pts[4].y = long (-81 * size + posy);
    pts[5].x = long (411 * size + posx);    pts[5].y = long (-63 * size + posy);
    fillpolygon (pts, 6);
}


// 鼹鼠绘制函数
void game::draw_gopher (double posx, double posy, double size, int flag)
{
    int i;
    POINT pts[100];
    setlinestyle (PS_SOLID, 2);
    // 外轮廓
    setlinecolor (BLACK);
    setfillcolor (RGB (165, 106, 50));
    pts[0].x = long (-232 * size + posx);    pts[0].y = long (292.00 * size + posy);
    pts[1].x = long (-232 * size + posx);    pts[1].y = long (235.00 * size + posy);
    pts[2].x = long (-245 * size + posx);    pts[2].y = long (252.00 * size + posy);
    pts[3].x = long (-255 * size + posx);    pts[3].y = long (250.00 * size + posy);
    pts[4].x = long (-259 * size + posx);    pts[4].y = long (241.00 * size + posy);
    pts[5].x = long (-274 * size + posx);    pts[5].y = long (245.00 * size + posy);
    pts[6].x = long (-274 * size + posx);    pts[6].y = long (232.00 * size + posy);
    pts[7].x = long (-288 * size + posx);    pts[7].y = long (234.00 * size + posy);
    pts[8].x = long (-297 * size + posx);    pts[8].y = long (217.00 * size + posy);
    pts[9].x = long (-282 * size + posx);    pts[9].y = long (202.00 * size + posy);
    pts[10].x = long (-296 * size + posx);    pts[10].y = long (186.00 * size + posy);
    pts[11].x = long (-285 * size + posx);    pts[11].y = long (179.00 * size + posy);
    pts[12].x = long (-269 * size + posx);    pts[12].y = long (178.00 * size + posy);
    pts[13].x = long (-269 * size + posx);    pts[13].y = long (153.00 * size + posy);
    pts[14].x = long (-191 * size + posx);    pts[14].y = long (50.00 * size + posy);
    pts[15].x = long (-189 * size + posx);    pts[15].y = long (-133.00 * size + posy);
    pts[16].x = long (-217 * size + posx);    pts[16].y = long (-187.00 * size + posy);
    pts[17].x = long (-218 * size + posx);    pts[17].y = long (-231.00 * size + posy);
    pts[18].x = long (-201 * size + posx);    pts[18].y = long (-262.00 * size + posy);
    pts[19].x = long (-167 * size + posx);    pts[19].y = long (-287.00 * size + posy);
    pts[20].x = long (-138 * size + posx);    pts[20].y = long (-287.00 * size + posy);
    pts[21].x = long (-134 * size + posx);    pts[21].y = long (-279.00 * size + posy);
    pts[22].x = long (-119 * size + posx);    pts[22].y = long (-279.00 * size + posy);
    pts[23].x = long (-105 * size + posx);    pts[23].y = long (-260.00 * size + posy);
    pts[24].x = long (-84 * size + posx);    pts[24].y = long (-273.00 * size + posy);
    pts[25].x = long (-75 * size + posx);    pts[25].y = long (-280.00 * size + posy);
    pts[26].x = long (-37 * size + posx);    pts[26].y = long (-278.00 * size + posy);
    pts[27].x = long (-23 * size + posx);    pts[27].y = long (-287.00 * size + posy);
    pts[28].x = long (26 * size + posx);    pts[28].y = long (-286.00 * size + posy);
    pts[29].x = long (37 * size + posx);    pts[29].y = long (-274.00 * size + posy);
    pts[30].x = long (58 * size + posx);    pts[30].y = long (-278.00 * size + posy);
    pts[31].x = long (69 * size + posx);    pts[31].y = long (-269.00 * size + posy);
    pts[32].x = long (100 * size + posx);    pts[32].y = long (-269.00 * size + posy);
    pts[33].x = long (129 * size + posx);    pts[33].y = long (-295.00 * size + posy);
    pts[34].x = long (166 * size + posx);    pts[34].y = long (-294.00 * size + posy);
    pts[35].x = long (182 * size + posx);    pts[35].y = long (-286.00 * size + posy);
    pts[36].x = long (205 * size + posx);    pts[36].y = long (-259.00 * size + posy);
    pts[37].x = long (212 * size + posx);    pts[37].y = long (-237.00 * size + posy);
    pts[38].x = long (210 * size + posx);    pts[38].y = long (-223.00 * size + posy);
    pts[39].x = long (217 * size + posx);    pts[39].y = long (-212.00 * size + posy);
    pts[40].x = long (211 * size + posx);    pts[40].y = long (-188.00 * size + posy);
    pts[41].x = long (189 * size + posx);    pts[41].y = long (-136.00 * size + posy);
    pts[42].x = long (193 * size + posx);    pts[42].y = long (-83.00 * size + posy);
    pts[43].x = long (193 * size + posx);    pts[43].y = long (-9.00 * size + posy);
    pts[44].x = long (189 * size + posx);    pts[44].y = long (-1.00 * size + posy);
    pts[45].x = long (191 * size + posx);    pts[45].y = long (42.00 * size + posy);
    pts[46].x = long (230 * size + posx);    pts[46].y = long (90.00 * size + posy);
    pts[47].x = long (236 * size + posx);    pts[47].y = long (108.00 * size + posy);
    pts[48].x = long (254 * size + posx);    pts[48].y = long (119.00 * size + posy);
    pts[49].x = long (265 * size + posx);    pts[49].y = long (149.00 * size + posy);
    pts[50].x = long (276 * size + posx);    pts[50].y = long (160.00 * size + posy);
    pts[51].x = long (301 * size + posx);    pts[51].y = long (188.00 * size + posy);
    pts[52].x = long (302 * size + posx);    pts[52].y = long (202.00 * size + posy);
    pts[53].x = long (295 * size + posx);    pts[53].y = long (209.00 * size + posy);
    pts[54].x = long (296 * size + posx);    pts[54].y = long (235.00 * size + posy);
    pts[55].x = long (273 * size + posx);    pts[55].y = long (240.00 * size + posy);
    pts[56].x = long (272 * size + posx);    pts[56].y = long (254.00 * size + posy);
    pts[57].x = long (251 * size + posx);    pts[57].y = long (249.00 * size + posy);
    pts[58].x = long (234 * size + posx);    pts[58].y = long (232.00 * size + posy);
    pts[59].x = long (235 * size + posx);    pts[59].y = long (290.00 * size + posy);
    fillpolygon (pts, 60);
    setlinestyle (PS_SOLID, 1);
    // 左耳廓
    setlinecolor (RGB (249, 230, 218));
    setfillcolor (RGB (249, 230, 218));
    pts[0].x = long (-193 * size + posx);    pts[0].y = long (-181.00 * size + posy);
    pts[1].x = long (-160 * size + posx);    pts[1].y = long (-214.00 * size + posy);
    pts[2].x = long (-122 * size + posx);    pts[2].y = long (-243.00 * size + posy);
    pts[3].x = long (-139 * size + posx);    pts[3].y = long (-267.00 * size + posy);
    pts[4].x = long (-163 * size + posx);    pts[4].y = long (-270.00 * size + posy);
    pts[5].x = long (-181 * size + posx);    pts[5].y = long (-260.00 * size + posy);
    pts[6].x = long (-199 * size + posx);    pts[6].y = long (-235.00 * size + posy);
    pts[7].x = long (-198 * size + posx);    pts[7].y = long (-188.00 * size + posy);
    pts[8].x = long (-185 * size + posx);    pts[8].y = long (-169.00 * size + posy);
    fillpolygon (pts, 9);
    // 右耳廓
    pts[0].x = long (121 * size + posx);    pts[0].y = long (-256.00 * size + posy);
    pts[1].x = long (139 * size + posx);    pts[1].y = long (-273.00 * size + posy);
    pts[2].x = long (169 * size + posx);    pts[2].y = long (-273.00 * size + posy);
    pts[3].x = long (188 * size + posx);    pts[3].y = long (-254.00 * size + posy);
    pts[4].x = long (197 * size + posx);    pts[4].y = long (-235.00 * size + posy);
    pts[5].x = long (201 * size + posx);    pts[5].y = long (-216.00 * size + posy);
    pts[6].x = long (190 * size + posx);    pts[6].y = long (-193.00 * size + posy);
    pts[7].x = long (178 * size + posx);    pts[7].y = long (-181.00 * size + posy);
    pts[8].x = long (119 * size + posx);    pts[8].y = long (-254.00 * size + posy);
    fillpolygon (pts, 9);
    // 左耳毛
    setlinecolor (RGB (54, 36, 19));
    setfillcolor (RGB (54, 36, 19));
    pts[0].x = long (-181 * size + posx);    pts[0].y = long (-163.00 * size + posy);
    pts[1].x = long (-191 * size + posx);    pts[1].y = long (-178.00 * size + posy);
    pts[2].x = long (-187 * size + posx);    pts[2].y = long (-192.00 * size + posy);
    pts[3].x = long (-194 * size + posx);    pts[3].y = long (-211.00 * size + posy);
    pts[4].x = long (-188 * size + posx);    pts[4].y = long (-233.00 * size + posy);
    pts[5].x = long (-183 * size + posx);    pts[5].y = long (-214.00 * size + posy);
    pts[6].x = long (-174 * size + posx);    pts[6].y = long (-202.00 * size + posy);
    pts[7].x = long (-170 * size + posx);    pts[7].y = long (-206.00 * size + posy);
    pts[8].x = long (-170 * size + posx);    pts[8].y = long (-223.00 * size + posy);
    pts[9].x = long (-153 * size + posx);    pts[9].y = long (-228.00 * size + posy);
    pts[10].x = long (-167 * size + posx);    pts[10].y = long (-235.00 * size + posy);
    pts[11].x = long (-161 * size + posx);    pts[11].y = long (-260.00 * size + posy);
    pts[12].x = long (-148 * size + posx);    pts[12].y = long (-253.00 * size + posy);
    pts[13].x = long (-147 * size + posx);    pts[13].y = long (-243.00 * size + posy);
    pts[14].x = long (-140 * size + posx);    pts[14].y = long (-251.00 * size + posy);
    pts[15].x = long (-125 * size + posx);    pts[15].y = long (-238.00 * size + posy);
    pts[16].x = long (-134 * size + posx);    pts[16].y = long (-232.00 * size + posy);
    pts[17].x = long (-139 * size + posx);    pts[17].y = long (-223.00 * size + posy);
    pts[18].x = long (-151 * size + posx);    pts[18].y = long (-225.00 * size + posy);
    pts[19].x = long (-147 * size + posx);    pts[19].y = long (-201.00 * size + posy);
    pts[20].x = long (-168 * size + posx);    pts[20].y = long (-191.00 * size + posy);
    pts[21].x = long (-177 * size + posx);    pts[21].y = long (-182.00 * size + posy);
    pts[22].x = long (-177 * size + posx);    pts[22].y = long (-165.00 * size + posy);
    fillpolygon (pts, 22);
    // 右耳毛
    pts[0].x = long (117 * size + posx);    pts[0].y = long (-254.00 * size + posy);
    pts[1].x = long (134 * size + posx);    pts[1].y = long (-265.00 * size + posy);
    pts[2].x = long (138 * size + posx);    pts[2].y = long (-253.00 * size + posy);
    pts[3].x = long (154 * size + posx);    pts[3].y = long (-254.00 * size + posy);
    pts[4].x = long (157 * size + posx);    pts[4].y = long (-245.00 * size + posy);
    pts[5].x = long (146 * size + posx);    pts[5].y = long (-238.00 * size + posy);
    pts[6].x = long (154 * size + posx);    pts[6].y = long (-226.00 * size + posy);
    pts[7].x = long (160 * size + posx);    pts[7].y = long (-233.00 * size + posy);
    pts[8].x = long (165 * size + posx);    pts[8].y = long (-232.00 * size + posy);
    pts[9].x = long (165 * size + posx);    pts[9].y = long (-217.00 * size + posy);
    pts[10].x = long (157 * size + posx);    pts[10].y = long (-214.00 * size + posy);
    pts[11].x = long (167 * size + posx);    pts[11].y = long (-206.00 * size + posy);
    pts[12].x = long (174 * size + posx);    pts[12].y = long (-213.00 * size + posy);
    pts[13].x = long (180 * size + posx);    pts[13].y = long (-232.00 * size + posy);
    pts[14].x = long (182 * size + posx);    pts[14].y = long (-243.00 * size + posy);
    pts[15].x = long (190 * size + posx);    pts[15].y = long (-224.00 * size + posy);
    pts[16].x = long (187 * size + posx);    pts[16].y = long (-201.00 * size + posy);
    pts[17].x = long (187 * size + posx);    pts[17].y = long (-190.00 * size + posy);
    pts[18].x = long (194 * size + posx);    pts[18].y = long (-191.00 * size + posy);
    pts[19].x = long (181 * size + posx);    pts[19].y = long (-178.00 * size + posy);
    pts[20].x = long (163 * size + posx);    pts[20].y = long (-179.00 * size + posy);
    pts[21].x = long (165 * size + posx);    pts[21].y = long (-191.00 * size + posy);
    pts[22].x = long (154 * size + posx);    pts[22].y = long (-195.00 * size + posy);
    pts[23].x = long (150 * size + posx);    pts[23].y = long (-201.00 * size + posy);
    pts[24].x = long (154 * size + posx);    pts[24].y = long (-216.00 * size + posy);
    pts[25].x = long (139 * size + posx);    pts[25].y = long (-215.00 * size + posy);
    pts[26].x = long (137 * size + posx);    pts[26].y = long (-224.00 * size + posy);
    pts[27].x = long (145 * size + posx);    pts[27].y = long (-225.00 * size + posy);
    pts[28].x = long (136 * size + posx);    pts[28].y = long (-235.00 * size + posy);
    pts[29].x = long (128 * size + posx);    pts[29].y = long (-232.00 * size + posy);
    pts[30].x = long (118 * size + posx);    pts[30].y = long (-251.00 * size + posy);
    fillpolygon (pts, 31);
    // 左眼
    // 正常状态
    if (flag == 1)
    {
        setlinecolor (RGB (5, 2, 1));
        setfillcolor (RGB (5, 2, 1));
    }
    // 僵直状态
    else if (flag == 2)
    {
        setlinecolor (RGB (251, 252, 251));
        setfillcolor (RGB (251, 252, 251));
    }
    // 红眼状态
    else if (flag == 3)
    {
        setlinecolor (LIGHTRED);
        setfillcolor (LIGHTRED);
    }
    pts[0].x = long (-112 * size + posx);    pts[0].y = long (-201.00 * size + posy);
    pts[1].x = long (-75 * size + posx);    pts[1].y = long (-201.00 * size + posy);
    pts[2].x = long (-61 * size + posx);    pts[2].y = long (-186.00 * size + posy);
    pts[3].x = long (-55 * size + posx);    pts[3].y = long (-157.00 * size + posy);
    pts[4].x = long (-46 * size + posx);    pts[4].y = long (-116.00 * size + posy);
    pts[5].x = long (-45 * size + posx);    pts[5].y = long (-88.00 * size + posy);
    pts[6].x = long (-71 * size + posx);    pts[6].y = long (-66.00 * size + posy);
    pts[7].x = long (-101 * size + posx);    pts[7].y = long (-65.00 * size + posy);
    pts[8].x = long (-121 * size + posx);    pts[8].y = long (-68.00 * size + posy);
    pts[9].x = long (-141 * size + posx);    pts[9].y = long (-80.00 * size + posy);
    pts[10].x = long (-160 * size + posx);    pts[10].y = long (-101.00 * size + posy);
    pts[11].x = long (-160 * size + posx);    pts[11].y = long (-113.00 * size + posy);
    pts[12].x = long (-151 * size + posx);    pts[12].y = long (-128.00 * size + posy);
    pts[13].x = long (-150 * size + posx);    pts[13].y = long (-164.00 * size + posy);
    pts[14].x = long (-135 * size + posx);    pts[14].y = long (-185.00 * size + posy);
    pts[15].x = long (-115 * size + posx);    pts[15].y = long (-200.00 * size + posy);
    pts[16].x = long (-114 * size + posx);    pts[16].y = long (-200.00 * size + posy);
    fillpolygon (pts, 17);
    // 右眼
    pts[0].x = long (71 * size + posx);    pts[0].y = long (-199.00 * size + posy);
    pts[1].x = long (109 * size + posx);    pts[1].y = long (-201.00 * size + posy);
    pts[2].x = long (127 * size + posx);    pts[2].y = long (-185.00 * size + posy);
    pts[3].x = long (134 * size + posx);    pts[3].y = long (-167.00 * size + posy);
    pts[4].x = long (144 * size + posx);    pts[4].y = long (-142.00 * size + posy);
    pts[5].x = long (146 * size + posx);    pts[5].y = long (-123.00 * size + posy);
    pts[6].x = long (152 * size + posx);    pts[6].y = long (-123.00 * size + posy);
    pts[7].x = long (151 * size + posx);    pts[7].y = long (-100.00 * size + posy);
    pts[8].x = long (148 * size + posx);    pts[8].y = long (-90.00 * size + posy);
    pts[9].x = long (130 * size + posx);    pts[9].y = long (-74.00 * size + posy);
    pts[10].x = long (108 * size + posx);    pts[10].y = long (-66.00 * size + posy);
    pts[11].x = long (86 * size + posx);    pts[11].y = long (-61.00 * size + posy);
    pts[12].x = long (69 * size + posx);    pts[12].y = long (-67.00 * size + posy);
    pts[13].x = long (47 * size + posx);    pts[13].y = long (-82.00 * size + posy);
    pts[14].x = long (38 * size + posx);    pts[14].y = long (-89.00 * size + posy);
    pts[15].x = long (40 * size + posx);    pts[15].y = long (-145.00 * size + posy);
    pts[16].x = long (48 * size + posx);    pts[16].y = long (-163.00 * size + posy);
    pts[17].x = long (57 * size + posx);    pts[17].y = long (-188.00 * size + posy);
    pts[18].x = long (71 * size + posx);    pts[18].y = long (-199.00 * size + posy);
    fillpolygon (pts, 19);
    // 左眼影
    setlinecolor (RGB (48, 123, 48));
    setfillcolor (RGB (48, 123, 48));
    pts[0].x = long (-132 * size + posx);    pts[0].y = long (-116.00 * size + posy);
    pts[1].x = long (-130 * size + posx);    pts[1].y = long (-116.00 * size + posy);
    pts[2].x = long (-117 * size + posx);    pts[2].y = long (-105.00 * size + posy);
    pts[3].x = long (-104 * size + posx);    pts[3].y = long (-94.00 * size + posy);
    pts[4].x = long (-84 * size + posx);    pts[4].y = long (-95.00 * size + posy);
    pts[5].x = long (-74 * size + posx);    pts[5].y = long (-106.00 * size + posy);
    pts[6].x = long (-68 * size + posx);    pts[6].y = long (-102.00 * size + posy);
    pts[7].x = long (-67 * size + posx);    pts[7].y = long (-92.00 * size + posy);
    pts[8].x = long (-80 * size + posx);    pts[8].y = long (-84.00 * size + posy);
    pts[9].x = long (-118 * size + posx);    pts[9].y = long (-85.00 * size + posy);
    pts[10].x = long (-137 * size + posx);    pts[10].y = long (-100.00 * size + posy);
    pts[11].x = long (-142 * size + posx);    pts[11].y = long (-106.00 * size + posy);
    fillpolygon (pts, 12);
    // 右眼影
    pts[0].x = long (61 * size + posx);    pts[0].y = long (-110.00 * size + posy);
    pts[1].x = long (59 * size + posx);    pts[1].y = long (-93.00 * size + posy);
    pts[2].x = long (78 * size + posx);    pts[2].y = long (-81.00 * size + posy);
    pts[3].x = long (102 * size + posx);    pts[3].y = long (-80.00 * size + posy);
    pts[4].x = long (127 * size + posx);    pts[4].y = long (-99.00 * size + posy);
    pts[5].x = long (131 * size + posx);    pts[5].y = long (-108.00 * size + posy);
    pts[6].x = long (121 * size + posx);    pts[6].y = long (-116.00 * size + posy);
    pts[7].x = long (120 * size + posx);    pts[7].y = long (-118.00 * size + posy);
    pts[8].x = long (118 * size + posx);    pts[8].y = long (-119.00 * size + posy);
    pts[9].x = long (107 * size + posx);    pts[9].y = long (-100.00 * size + posy);
    pts[10].x = long (90 * size + posx);    pts[10].y = long (-96.00 * size + posy);
    pts[11].x = long (77 * size + posx);    pts[11].y = long (-95.00 * size + posy);
    pts[12].x = long (64 * size + posx);    pts[12].y = long (-110.00 * size + posy);
    fillpolygon (pts, 13);
    // 肚白
    setlinecolor (RGB (255, 249, 240));
    setfillcolor (RGB (255, 249, 240));
    pts[0].x = long (-28 * size + posx);    pts[0].y = long (-97.00 * size + posy);
    pts[1].x = long (-53 * size + posx);    pts[1].y = long (-76.00 * size + posy);
    pts[2].x = long (-86 * size + posx);    pts[2].y = long (-50.00 * size + posy);
    pts[3].x = long (-126 * size + posx);    pts[3].y = long (-16.00 * size + posy);
    pts[4].x = long (-172 * size + posx);    pts[4].y = long (46.00 * size + posy);
    pts[5].x = long (-195 * size + posx);    pts[5].y = long (71.00 * size + posy);
    pts[6].x = long (-239 * size + posx);    pts[6].y = long (129.00 * size + posy);
    pts[7].x = long (-236 * size + posx);    pts[7].y = long (143.00 * size + posy);
    pts[8].x = long (-254 * size + posx);    pts[8].y = long (151.00 * size + posy);
    pts[9].x = long (-260 * size + posx);    pts[9].y = long (177.00 * size + posy);
    pts[10].x = long (-264 * size + posx);    pts[10].y = long (186.00 * size + posy);
    pts[11].x = long (-283 * size + posx);    pts[11].y = long (191.00 * size + posy);
    pts[12].x = long (-274 * size + posx);    pts[12].y = long (200.00 * size + posy);
    pts[13].x = long (-272 * size + posx);    pts[13].y = long (210.00 * size + posy);
    pts[14].x = long (-284 * size + posx);    pts[14].y = long (220.00 * size + posy);
    pts[15].x = long (-280 * size + posx);    pts[15].y = long (225.00 * size + posy);
    pts[16].x = long (-278 * size + posx);    pts[16].y = long (229.00 * size + posy);
    pts[17].x = long (-266 * size + posx);    pts[17].y = long (230.00 * size + posy);
    pts[18].x = long (-266 * size + posx);    pts[18].y = long (237.00 * size + posy);
    pts[19].x = long (-254 * size + posx);    pts[19].y = long (239.00 * size + posy);
    pts[20].x = long (-250 * size + posx);    pts[20].y = long (242.00 * size + posy);
    pts[21].x = long (-242 * size + posx);    pts[21].y = long (236.00 * size + posy);
    pts[22].x = long (-231 * size + posx);    pts[22].y = long (230.00 * size + posy);
    pts[23].x = long (-214 * size + posx);    pts[23].y = long (226.00 * size + posy);
    pts[24].x = long (-204 * size + posx);    pts[24].y = long (236.00 * size + posy);
    pts[25].x = long (-212 * size + posx);    pts[25].y = long (266.00 * size + posy);
    pts[26].x = long (-211 * size + posx);    pts[26].y = long (292.00 * size + posy);
    pts[27].x = long (205 * size + posx);    pts[27].y = long (292.00 * size + posy);
    pts[28].x = long (202 * size + posx);    pts[28].y = long (220.00 * size + posy);
    pts[29].x = long (239 * size + posx);    pts[29].y = long (225.00 * size + posy);
    pts[30].x = long (256 * size + posx);    pts[30].y = long (243.00 * size + posy);
    pts[31].x = long (267 * size + posx);    pts[31].y = long (237.00 * size + posy);
    pts[32].x = long (276 * size + posx);    pts[32].y = long (230.00 * size + posy);
    pts[33].x = long (287 * size + posx);    pts[33].y = long (230.00 * size + posy);
    pts[34].x = long (290 * size + posx);    pts[34].y = long (198.00 * size + posy);
    pts[35].x = long (260 * size + posx);    pts[35].y = long (160.00 * size + posy);
    pts[36].x = long (240 * size + posx);    pts[36].y = long (131.00 * size + posy);
    pts[37].x = long (192 * size + posx);    pts[37].y = long (74.00 * size + posy);
    pts[38].x = long (167 * size + posx);    pts[38].y = long (45.00 * size + posy);
    pts[39].x = long (169 * size + posx);    pts[39].y = long (34.00 * size + posy);
    pts[40].x = long (128 * size + posx);    pts[40].y = long (-12.00 * size + posy);
    pts[41].x = long (95 * size + posx);    pts[41].y = long (-41.00 * size + posy);
    pts[42].x = long (68 * size + posx);    pts[42].y = long (-60.00 * size + posy);
    pts[43].x = long (29 * size + posx);    pts[43].y = long (-88.00 * size + posy);
    pts[44].x = long (14 * size + posx);    pts[44].y = long (-95.00 * size + posy);
    pts[45].x = long (-17 * size + posx);    pts[45].y = long (-96.00 * size + posy);
    pts[46].x = long (-27 * size + posx);    pts[46].y = long (-97.00 * size + posy);
    fillpolygon (pts, 47);
    // 左手指
    setlinecolor (RGB (114, 103, 93));
    setfillcolor (RGB (114, 103, 93));
    pts[0].x = long (-261 * size + posx);    pts[0].y = long (191.00 * size + posy);
    pts[1].x = long (-261 * size + posx);    pts[1].y = long (204.00 * size + posy);
    pts[2].x = long (-240 * size + posx);    pts[2].y = long (208.00 * size + posy);
    pts[3].x = long (-240 * size + posx);    pts[3].y = long (194.00 * size + posy);
    pts[4].x = long (-258 * size + posx);    pts[4].y = long (190.00 * size + posy);
    fillpolygon (pts, 5);
    // 右手指
    pts[0].x = long (263 * size + posx);    pts[0].y = long (210.00 * size + posy);
    pts[1].x = long (276 * size + posx);    pts[1].y = long (215.00 * size + posy);
    pts[2].x = long (285 * size + posx);    pts[2].y = long (207.00 * size + posy);
    pts[3].x = long (286 * size + posx);    pts[3].y = long (200.00 * size + posy);
    pts[4].x = long (277 * size + posx);    pts[4].y = long (197.00 * size + posy);
    pts[5].x = long (271 * size + posx);    pts[5].y = long (191.00 * size + posy);
    pts[6].x = long (272 * size + posx);    pts[6].y = long (203.00 * size + posy);
    pts[7].x = long (266 * size + posx);    pts[7].y = long (207.00 * size + posy);
    fillpolygon (pts, 8);
    // 嘴巴
    setlinecolor (BLACK);
    setfillcolor (RGB (252, 252, 251));
    pts[0].x = long (0 * size + posx);    pts[0].y = long (-45.00 * size + posy);
    pts[1].x = long (-21 * size + posx);    pts[1].y = long (-31.00 * size + posy);
    pts[2].x = long (-31 * size + posx);    pts[2].y = long (-7.00 * size + posy);
    pts[3].x = long (-27 * size + posx);    pts[3].y = long (8.00 * size + posy);
    pts[4].x = long (-6 * size + posx);    pts[4].y = long (58.00 * size + posy);
    pts[5].x = long (8 * size + posx);    pts[5].y = long (55.00 * size + posy);
    pts[6].x = long (33 * size + posx);    pts[6].y = long (1.00 * size + posy);
    pts[7].x = long (30 * size + posx);    pts[7].y = long (-16.00 * size + posy);
    pts[8].x = long (2 * size + posx);    pts[8].y = long (-48.00 * size + posy);
    fillpolygon (pts, 9);
    // 胡须
    setlinecolor (BLACK);
    pts[0].x = long (-90 * size + posx);    pts[0].y = long (-49.00 * size + posy);
    pts[1].x = long (-160 * size + posx);    pts[1].y = long (-70.00 * size + posy);
    pts[2].x = long (-271 * size + posx);    pts[2].y = long (-71.00 * size + posy);
    pts[3].x = long (-294 * size + posx);    pts[3].y = long (-59.00 * size + posy);
    for (i = 0; i < 3; i++) { line (pts[i].x, pts[i].y, pts[i + 1].x, pts[i + 1].y); }
    // 胡须
    pts[0].x = long (-108 * size + posx);    pts[0].y = long (-34.00 * size + posy);
    pts[1].x = long (-194 * size + posx);    pts[1].y = long (-37.00 * size + posy);
    pts[2].x = long (-205 * size + posx);    pts[2].y = long (-30.00 * size + posy);
    pts[3].x = long (-251 * size + posx);    pts[3].y = long (-30.00 * size + posy);
    pts[4].x = long (-271 * size + posx);    pts[4].y = long (-21.00 * size + posy);
    pts[5].x = long (-292 * size + posx);    pts[5].y = long (-14.00 * size + posy);
    for (i = 0; i < 5; i++) { line (pts[i].x, pts[i].y, pts[i + 1].x, pts[i + 1].y); }
    // 胡须
    pts[0].x = long (89 * size + posx);    pts[0].y = long (-51.00 * size + posy);
    pts[1].x = long (215 * size + posx);    pts[1].y = long (-100.00 * size + posy);
    pts[2].x = long (304 * size + posx);    pts[2].y = long (-98.00 * size + posy);
    for (i = 0; i < 2; i++) { line (pts[i].x, pts[i].y, pts[i + 1].x, pts[i + 1].y); }
    // 胡须
    pts[0].x = long (110 * size + posx);    pts[0].y = long (-38.00 * size + posy);
    pts[1].x = long (158 * size + posx);    pts[1].y = long (-53.00 * size + posy);
    pts[2].x = long (264 * size + posx);    pts[2].y = long (-55.00 * size + posy);
    pts[3].x = long (311 * size + posx);    pts[3].y = long (-35.00 * size + posy);
    for (i = 0; i < 3; i++) { line (pts[i].x, pts[i].y, pts[i + 1].x, pts[i + 1].y); }
    // 鼻孔
    setlinecolor (BLACK);
    setfillcolor (RGB (145, 142, 126));
    pts[0].x = long (-14 * size + posx);    pts[0].y = long (-65.00 * size + posy);
    pts[1].x = long (-7 * size + posx);    pts[1].y = long (-81.00 * size + posy);
    pts[2].x = long (-2 * size + posx);    pts[2].y = long (-68.00 * size + posy);
    pts[3].x = long (9 * size + posx);    pts[3].y = long (-67.00 * size + posy);
    pts[4].x = long (14 * size + posx);    pts[4].y = long (-79.00 * size + posy);
    pts[5].x = long (21 * size + posx);    pts[5].y = long (-66.00 * size + posy);
    fillpolygon (pts, 6);
    // 眼球
    // 正常状态
    if (flag == 1)
    {
        setlinecolor (WHITE);
        setfillcolor (WHITE);
    }
    // 僵直状态
    else if (flag == 2)
    {
        setlinecolor (RGB (190, 190, 190));
        setfillcolor (WHITE);
    }
    // 红眼状态
    else if (flag == 3)
    {
        setlinecolor (WHITE);
        setfillcolor (WHITE);
    }

    pts[0].x = long (-123 * size + posx);    pts[0].y = long (-176 * size + posy);
    pts[1].x = long (-132 * size + posx);    pts[1].y = long (-165 * size + posy);
    pts[2].x = long (-129 * size + posx);    pts[2].y = long (-154 * size + posy);
    pts[3].x = long (-122 * size + posx);    pts[3].y = long (-146 * size + posy);
    pts[4].x = long (-113 * size + posx);    pts[4].y = long (-142 * size + posy);
    pts[5].x = long (-102 * size + posx);    pts[5].y = long (-142 * size + posy);
    pts[6].x = long (-92 * size + posx);    pts[6].y = long (-153 * size + posy);
    pts[7].x = long (-94 * size + posx);    pts[7].y = long (-168 * size + posy);
    pts[8].x = long (-98 * size + posx);    pts[8].y = long (-177 * size + posy);
    pts[9].x = long (-106 * size + posx);    pts[9].y = long (-181 * size + posy);
    pts[10].x = long (-118 * size + posx);    pts[10].y = long (-181 * size + posy);
    fillpolygon (pts, 11);

    pts[0].x = long (78 * size + posx);    pts[0].y = long (-178.00 * size + posy);
    pts[1].x = long (72 * size + posx);    pts[1].y = long (-171.00 * size + posy);
    pts[2].x = long (74 * size + posx);    pts[2].y = long (-151.00 * size + posy);
    pts[3].x = long (83 * size + posx);    pts[3].y = long (-141.00 * size + posy);
    pts[4].x = long (101 * size + posx);    pts[4].y = long (-142.00 * size + posy);
    pts[5].x = long (108 * size + posx);    pts[5].y = long (-154.00 * size + posy);
    pts[6].x = long (106 * size + posx);    pts[6].y = long (-170.00 * size + posy);
    pts[7].x = long (101 * size + posx);    pts[7].y = long (-181.00 * size + posy);
    pts[8].x = long (92 * size + posx);    pts[8].y = long (-185.00 * size + posy);
    pts[9].x = long (81 * size + posx);    pts[9].y = long (-184.00 * size + posy);
    fillpolygon (pts, 10);
}



// 准备进程源文件 //


// 准备进程主循函数
void game::carry_prepare ()
{
    TCHAR s[25];
    int i, j;
    // 鼠标定义
    ExMessage m;
    // 准备进程控制参数初始化
    int    exit_prepare = 0;
    // 绘制界面
    draw_scene_prepare ();
    // 主循开始
    while (exit_prepare == 0)
    {
        if (peekmessage (&m, EM_MOUSE | EM_KEY))
        {
            // 左键单击判断
            if (m.message == WM_LBUTTONDOWN)
            {
                // 判断是否点击了按钮,按钮状态是否为激活
                for (i = 0; i < num_button; i++)
                {
                    if (m.x > boxm[i].posx1 && m.y > boxm[i].posy1 && m.x < boxm[i].posx2 && m.y < boxm[i].posy2 && boxm[i].type == 0)
                    {
                        break;
                    }
                }

                // 开始游戏按钮
                if (i == 0)
                {
                    // 开始进程控制参数置零
                    exit_start = 0;
                    // 准备进程控制参数置一,结束主循
                    exit_prepare = 1;
                }
                // 设置按钮
                else if (i == 1)
                {
                    // 按钮状态参数更新
                    boxm[0].type = 1;
                    boxm[1].type = 1;
                    boxm[2].type = 1;
                    boxm[3].type = 0;
                    boxm[4].type = 0;
                    boxm[5].type = 0;
                    boxm[6].type = 0;
                    boxm[7].type = 1;
                    boxm[8].type = 1;
                    boxm[9].type = 0;
                    boxm[10].type = 0;
                    boxm[11].type = 0;
                }
                // 退出按钮
                else if (i == 2)
                {
                    // 总进程控制参数置一,跳过开始进程
                    exit_carry = 1;
                    // 准备进程控制参数置一,结束主循
                    exit_prepare = 1;
                }
                // 设置生成间隔按钮
                else if (i == 3)
                {
                    InputBox (s, 10, _T ("设置生成间隔(0 ~ 30),0 等效为一次生成 9 个"));
                    _stscanf_s (s, _T ("%d"), &j);
                    if (j >= 0 && j <= 30)
                    {
                        speed_creact = j;
                    }
                    else
                    {
                        MessageBox (hOut, _T ("输入错误,不在范围内"), _T ("来自小豆子的提醒"), MB_OK);
                    }
                }
                // 设置存在时间按钮
                else if (i == 4)
                {
                    InputBox (s, 10, _T ("设置存在时间(0 ~ 200),0 为没有存在时间"));
                    _stscanf_s (s, _T ("%d"), &j);
                    if (j >= 0 && j <= 200)
                    {
                        speed_gopher_life = j;
                    }
                    else
                    {
                        MessageBox (hOut, _T ("输入错误,不在范围内"), _T ("来自小豆子的提醒"), MB_OK);
                    }
                }
                // 设置僵直时间按钮
                else if (i == 5)
                {
                    InputBox (s, 10, _T ("设置僵直时间(0 ~ 50),0 为没有僵直时间"));
                    _stscanf_s (s, _T ("%d"), &j);
                    if (j >= 0 && j <= 50)
                    {
                        speed_gopher_beaten = j;
                    }
                    else
                    {
                        MessageBox (hOut, _T ("输入错误,不在范围内"), _T ("来自小豆子的提醒"), MB_OK);
                    }
                }
                // 返回按钮
                else if (i == 6)
                {
                    // 按钮状态参数更新
                    boxm[0].type = 0;
                    boxm[1].type = 0;
                    boxm[2].type = 0;
                    boxm[3].type = 1;
                    boxm[4].type = 1;
                    boxm[5].type = 1;
                    boxm[6].type = 1;
                    if (hole_full_end == 0)
                    {
                        boxm[7].type = 0;
                        boxm[8].type = 1;
                    }
                    else if (hole_full_end == 1)
                    {
                        boxm[7].type = 1;
                        boxm[8].type = 0;
                    }
                    boxm[9].type = 1;
                    boxm[10].type = 1;
                    boxm[11].type = 1;
                }
                // 溢满结束状态切换按钮
                else if (i == 7 || i == 8)
                {
                    // 切换至开
                    if (hole_full_end == 0)
                    {
                        hole_full_end = 1;
                        boxm[7].type = 1;
                        boxm[8].type = 0;
                    }
                    // 切换至关
                    else if (hole_full_end == 1)
                    {
                        hole_full_end = 0;
                        boxm[7].type = 0;
                        boxm[8].type = 1;
                    }
                }
                // 设置红眼数量按钮
                else if (i == 9)
                {
                    InputBox (s, 10, _T ("设置红眼数量(0 ~ 10),0 为没有红眼,10 为全部是红眼"));
                    _stscanf_s (s, _T ("%d"), &j);
                    if (j >= 0 && j <= 10)
                    {
                        gopher_red_eye_num = j;
                    }
                    else
                    {
                        MessageBox (hOut, _T ("输入错误,不在范围内"), _T ("来自小豆子的提醒"), MB_OK);
                    }
                }
                // 设置红眼得分按钮
                else if (i == 10)
                {
                    InputBox (s, 10, _T ("设置红眼得分(-20 ~ 20),负数为惩罚,正数为奖励"));
                    _stscanf_s (s, _T ("%d"), &j);
                    if (j >= -20 && j <= 20)
                    {
                        point_punishment = j;
                    }
                    else
                    {
                        MessageBox (hOut, _T ("输入错误,不在范围内"), _T ("来自小豆子的提醒"), MB_OK);
                    }
                }
                // 设置生成数量按钮
                else if (i == 11)
                {
                    InputBox (s, 10, _T ("设置生成数量(0 ~ 10),0 为不生成鼹鼠"));
                    _stscanf_s (s, _T ("%d"), &j);
                    if (j >= 0 && j <= 10)
                    {
                        every_creact_num = j;
                    }
                    else
                    {
                        MessageBox (hOut, _T ("输入错误,不在范围内"), _T ("来自小豆子的提醒"), MB_OK);
                    }
                }
                if (i < num_button && exit_prepare == 0)
                {
                    // 点击按钮后,根据按钮激活参数,重新绘制界面
                    draw_scene_prepare ();
                    if (i == 1 || i == 3 || i == 4 || i == 5 || i == 9 || i == 10 || i == 11)
                    {
                        // 生成间隔
                        _stprintf_s (s, _T ("%0.1d"), speed_creact);
                        draw_word (30, 245, 125, s);

                        // 存在时间
                        _stprintf_s (s, _T ("%0.1d"), speed_gopher_life);
                        draw_word (30, 245, 225, s);

                        // 僵直时间
                        _stprintf_s (s, _T ("%0.1d"), speed_gopher_beaten);
                        draw_word (30, 245, 325, s);

                        // 红眼数量
                        _stprintf_s (s, _T ("%0.1d"), gopher_red_eye_num);
                        draw_word (30, 595, 125, s);

                        // 红眼得分
                        _stprintf_s (s, _T ("%0.1d"), point_punishment);
                        draw_word (30, 595, 225, s);

                        // 生成数量
                        _stprintf_s (s, _T ("%0.1d"), every_creact_num);
                        draw_word (30, 595, 325, s);

                    }
                    FlushBatchDraw ();
                }
            }
        }
    }
}


// 准备进程初始化函数    
void game::initialization_prepare ()
{
    // 按钮设置初始化
    // 按钮数量参数初始化
    num_button = 12;

    // 按钮结构体参数初始化
    boxm[0].posx1 = 300; boxm[0].posy1 = 110; boxm[0].posx2 = 500; boxm[0].posy2 = 170; boxm[0].text = _T ("普通模式"); boxm[0].type = 0;
    boxm[1].posx1 = 300; boxm[1].posy1 = 210; boxm[1].posx2 = 500; boxm[1].posy2 = 270; boxm[1].text = _T ("设置");        boxm[1].type = 0;
    boxm[2].posx1 = 300; boxm[2].posy1 = 410; boxm[2].posx2 = 500; boxm[2].posy2 = 470; boxm[2].text = _T ("退出");        boxm[2].type = 0;

    boxm[3].posx1 = 100; boxm[3].posy1 = 110; boxm[3].posx2 = 300; boxm[3].posy2 = 170; boxm[3].text = _T ("生成间隔___"); boxm[3].type = 1;
    boxm[4].posx1 = 100; boxm[4].posy1 = 210; boxm[4].posx2 = 300; boxm[4].posy2 = 270; boxm[4].text = _T ("存在时间___");    boxm[4].type = 1;
    boxm[5].posx1 = 100; boxm[5].posy1 = 310; boxm[5].posx2 = 300; boxm[5].posy2 = 370; boxm[5].text = _T ("僵直时间___");    boxm[5].type = 1;
    boxm[6].posx1 = 300; boxm[6].posy1 = 410; boxm[6].posx2 = 500; boxm[6].posy2 = 470; boxm[6].text = _T ("返回");        boxm[6].type = 1;
    boxm[9].posx1 = 450; boxm[9].posy1 = 110; boxm[9].posx2 = 650; boxm[9].posy2 = 170; boxm[9].text = _T ("红眼数量___"); boxm[9].type = 1;
    boxm[10].posx1 = 450; boxm[10].posy1 = 210; boxm[10].posx2 = 650; boxm[10].posy2 = 270; boxm[10].text = _T ("红眼得分___");    boxm[10].type = 1;
    boxm[11].posx1 = 450; boxm[11].posy1 = 310; boxm[11].posx2 = 650; boxm[11].posy2 = 370; boxm[11].text = _T ("生成数量___");    boxm[11].type = 1;

    boxm[7].posx1 = 300; boxm[7].posy1 = 310; boxm[7].posx2 = 500; boxm[7].posy2 = 370; boxm[7].text = _T ("溢满结束:关");    boxm[7].type = 0;
    boxm[8].posx1 = 300; boxm[8].posy1 = 310; boxm[8].posx2 = 500; boxm[8].posy2 = 370; boxm[8].text = _T ("溢满结束:开");    boxm[8].type = 1;
    // 得分
    start_point = 0;

}


// 准备进程绘制函数
void game::draw_scene_prepare ()
{
    // 画布绘制
    setbkcolor (WHITE);
    cleardevice ();
    // 按钮绘制
    draw_button ();
    // 标题绘制
    draw_word (50, 340, 20, _T ("打地鼠"));
    FlushBatchDraw ();
}


// 开始进程源文件 //



// 开始进程主循函数
void game::carry_start ()
{
    // 鼠标定义
    ExMessage m;
    int i;
    // 绘制
    draw_scene_start ();
    // 时间初始化
    start_t1 = clock ();
    start_t2 = clock ();
    // 结束时间初始化
    start_endtime = 30000;
    // 特殊情况处理
    // 生成时间间隔为 0,将等效为每次生成数量为 9
    if (speed_creact == 0)
    {
        speed_creact = 1;
        every_creact_num = 9;
    }
    // 普通模式
    while (exit_start == 0)
    {
        if (peekmessage (&m, EM_MOUSE | EM_KEY))
        {
            // 左键单击判断
            if (m.message == WM_LBUTTONDOWN)
            {
                // 单击在田地范围
                if (m.x < 639 && m.x > 256 && m.y > 124 && m.y < 475)
                {
                    // 判断是否点击了地洞
                    for (i = 0; i < 9; i++)
                    {
                        // 矩形范围判断
                        if (m.x > box[i].posx_hole - 25 && m.y > box[i].posy_hole - 85 && m.x < box[i].posx_hole + 35 && m.y < box[i].posy_hole - 20
                            && (box[i].type == 1 || box[i].type == 3))
                        {
                            // 正常鼹鼠
                            if (box[i].type == 1)
                            {
                                // 增加得分
                                start_point++;
                            }
                            // 红眼鼹鼠
                            else if (box[i].type == 3)
                            {
                                // 减少得分
                                start_point += point_punishment;
                            }
                            // 更改为僵直状态
                            box[i].type = 2;
                            // 重置为僵直时间
                            box[i].time_life = speed_gopher_beaten;
                            break;
                        }
                    }
                }
                else
                {
                    // 判断是否点击了按钮
                    for (i = 0; i < num_button; i++)
                    {
                        if (m.x > boxm[i].posx1 && m.y > boxm[i].posy1 && m.x < boxm[i].posx2 && m.y < boxm[i].posy2 && boxm[i].type == 0)
                        {
                            break;
                        }
                    }
                    // 返回按钮
                    if (i == 0)
                    {
                        exit_start = 1;
                    }
                }
                // 绘制                    
                draw_scene_start ();
            }
        }

        // 时间更新,以及退出判断
        start_t2 = clock ();
        if ((start_t2 - start_t1) % 100 <= 10)
        {
            // 达到时间间隔,生成新鼹鼠
            if ((start_t2 - start_t1) % (speed_creact * 100) <= 10)
            {
                // 根据每次生成数量参数进行生成
                for (i = 0; i < every_creact_num; i++)
                {
                    creact_gopher ();
                    // 某次生成完已结束,直接结束循环,退出,避免生成多个结束提示框
                    if (exit_start != 0)
                    {
                        break;
                    }
                }
            }
            // 鼹鼠状态更新
            for (i = 0; i < 9; i++)
            {
                // 存在时间减少
                if (box[i].type != 0)
                {
                    box[i].time_life--;
                }
                // 时间减少至零,鼹鼠消失,修改地洞参数
                if (box[i].time_life <= 0)
                {
                    box[i].type = 0;
                }
            }
            draw_scene_start ();
            Sleep (10);
        }
        if ((start_t2 - start_t1) >= start_endtime)
        {
            draw_scene_start ();
            // 退出提示
            MessageBox (hOut, _T ("时间到了,结束啦"), _T ("来自小豆子的提醒"), MB_OK);
            exit_start = 1;
        }
    }
}


// 开始进程初始化函数
void game::initialization_start ()
{
    int i;
    // 按钮设置初始化
    num_button = 1;

    boxm[0].posx1 = 710; boxm[0].posy1 = 130;    boxm[0].posx2 = 790; boxm[0].posy2 = 190;    boxm[0].text = _T ("返回"); boxm[0].type = 0;

    // 地洞参数初始化
    i = 0; box[i].posx_hole = 300; box[i].posy_hole = 250;
    i = 1; box[i].posx_hole = 420; box[i].posy_hole = 250;
    i = 2; box[i].posx_hole = 540; box[i].posy_hole = 250;
    i = 3; box[i].posx_hole = 280; box[i].posy_hole = 350;
    i = 4; box[i].posx_hole = 420; box[i].posy_hole = 350;
    i = 5; box[i].posx_hole = 560; box[i].posy_hole = 350;
    i = 6; box[i].posx_hole = 260; box[i].posy_hole = 450;
    i = 7; box[i].posx_hole = 420; box[i].posy_hole = 450;
    i = 8; box[i].posx_hole = 580; box[i].posy_hole = 450;

    for (i = 0; i < 9; i++)
    {
        box[i].type = 0;
        box[i].posx_gopher = box[i].posx_hole + 5;
        box[i].posy_gopher = box[i].posy_hole - 52;
    }

    // 绘制
    draw_scene_start ();
}


// 开始进程绘制函数
void game::draw_scene_start ()
{
    int i;

    // 绘制主背景
    float posx, posy, size;
    POINT pts[100];

    setlinestyle (PS_SOLID, 1);
    // 天空
    setlinecolor (RGB (199, 234, 255));
    setfillcolor (RGB (199, 234, 255));
    fillrectangle (0, 0, 800, 120);
    // 土地
    setlinecolor (RGB (184, 147, 69));
    setfillcolor (RGB (184, 147, 69));
    fillrectangle (0, 120, 800, 480);

    setlinecolor (RGB (195, 152, 58));
    setfillcolor (RGB (195, 152, 58));
    pts[0].x = 240;    pts[0].y = 120;
    pts[1].x = 50;    pts[1].y = 480;
    pts[2].x = 780;    pts[2].y = 480;
    pts[3].x = 620;    pts[3].y = 120;
    fillpolygon (pts, 4);

    setlinecolor (RGB (152, 109, 58));
    setfillcolor (RGB (152, 109, 58));
    pts[0].x = 255;    pts[0].y = 120;
    pts[1].x = 75;    pts[1].y = 480;
    pts[2].x = 755;    pts[2].y = 480;
    pts[3].x = 605;    pts[3].y = 120;
    fillpolygon (pts, 4);

    // 树叶
    posx = 300; posy = 300; size = 1;
    setlinecolor (RGB (38, 153, 0));
    setfillcolor (RGB (38, 153, 0));
    pts[0].x = long (178 * size + posx);    pts[0].y = long (-231 * size + posy);
    pts[1].x = long (174 * size + posx);    pts[1].y = long (-225 * size + posy);
    pts[2].x = long (170 * size + posx);    pts[2].y = long (-220 * size + posy);
    pts[3].x = long (162 * size + posx);    pts[3].y = long (-214 * size + posy);
    pts[4].x = long (156 * size + posx);    pts[4].y = long (-214 * size + posy);
    pts[5].x = long (148 * size + posx);    pts[5].y = long (-214 * size + posy);
    pts[6].x = long (140 * size + posx);    pts[6].y = long (-217 * size + posy);
    pts[7].x = long (139 * size + posx);    pts[7].y = long (-221 * size + posy);
    pts[8].x = long (133 * size + posx);    pts[8].y = long (-217 * size + posy);
    pts[9].x = long (125 * size + posx);    pts[9].y = long (-216 * size + posy);
    pts[10].x = long (120 * size + posx);    pts[10].y = long (-220 * size + posy);
    pts[11].x = long (117 * size + posx);    pts[11].y = long (-219 * size + posy);
    pts[12].x = long (111 * size + posx);    pts[12].y = long (-217 * size + posy);
    pts[13].x = long (107 * size + posx);    pts[13].y = long (-217 * size + posy);
    pts[14].x = long (99 * size + posx);    pts[14].y = long (-221 * size + posy);
    pts[15].x = long (97 * size + posx);    pts[15].y = long (-228 * size + posy);
    pts[16].x = long (96 * size + posx);    pts[16].y = long (-229 * size + posy);
    pts[17].x = long (90 * size + posx);    pts[17].y = long (-229 * size + posy);
    pts[18].x = long (84 * size + posx);    pts[18].y = long (-227 * size + posy);
    pts[19].x = long (78 * size + posx);    pts[19].y = long (-230 * size + posy);
    pts[20].x = long (74 * size + posx);    pts[20].y = long (-233 * size + posy);
    pts[21].x = long (65 * size + posx);    pts[21].y = long (-241 * size + posy);
    pts[22].x = long (69 * size + posx);    pts[22].y = long (-251 * size + posy);
    pts[23].x = long (64 * size + posx);    pts[23].y = long (-251 * size + posy);
    pts[24].x = long (58 * size + posx);    pts[24].y = long (-254 * size + posy);
    pts[25].x = long (56 * size + posx);    pts[25].y = long (-260 * size + posy);
    pts[26].x = long (59 * size + posx);    pts[26].y = long (-267 * size + posy);
    pts[27].x = long (61 * size + posx);    pts[27].y = long (-269 * size + posy);
    pts[28].x = long (56 * size + posx);    pts[28].y = long (-274 * size + posy);
    pts[29].x = long (52 * size + posx);    pts[29].y = long (-277 * size + posy);
    pts[30].x = long (52 * size + posx);    pts[30].y = long (-284 * size + posy);
    pts[31].x = long (56 * size + posx);    pts[31].y = long (-287 * size + posy);
    pts[32].x = long (51 * size + posx);    pts[32].y = long (-294 * size + posy);
    pts[33].x = long (52 * size + posx);    pts[33].y = long (-300 * size + posy);
    pts[34].x = long (350 * size + posx);    pts[34].y = long (-300 * size + posy);
    pts[35].x = long (361 * size + posx);    pts[35].y = long (-295 * size + posy);
    pts[36].x = long (365 * size + posx);    pts[36].y = long (-288 * size + posy);
    pts[37].x = long (360 * size + posx);    pts[37].y = long (-278 * size + posy);
    pts[38].x = long (358 * size + posx);    pts[38].y = long (-276 * size + posy);
    pts[39].x = long (365 * size + posx);    pts[39].y = long (-269 * size + posy);
    pts[40].x = long (368 * size + posx);    pts[40].y = long (-261 * size + posy);
    pts[41].x = long (363 * size + posx);    pts[41].y = long (-257 * size + posy);
    pts[42].x = long (360 * size + posx);    pts[42].y = long (-251 * size + posy);
    pts[43].x = long (358 * size + posx);    pts[43].y = long (-247 * size + posy);
    pts[44].x = long (356 * size + posx);    pts[44].y = long (-245 * size + posy);
    pts[45].x = long (356 * size + posx);    pts[45].y = long (-241 * size + posy);
    pts[46].x = long (355 * size + posx);    pts[46].y = long (-238 * size + posy);
    pts[47].x = long (349 * size + posx);    pts[47].y = long (-234 * size + posy);
    pts[48].x = long (344 * size + posx);    pts[48].y = long (-233 * size + posy);
    pts[49].x = long (340 * size + posx);    pts[49].y = long (-226 * size + posy);
    pts[50].x = long (336 * size + posx);    pts[50].y = long (-222 * size + posy);
    pts[51].x = long (329 * size + posx);    pts[51].y = long (-220 * size + posy);
    pts[52].x = long (320 * size + posx);    pts[52].y = long (-220 * size + posy);
    pts[53].x = long (314 * size + posx);    pts[53].y = long (-222 * size + posy);
    pts[54].x = long (312 * size + posx);    pts[54].y = long (-225 * size + posy);
    pts[55].x = long (306 * size + posx);    pts[55].y = long (-220 * size + posy);
    pts[56].x = long (297 * size + posx);    pts[56].y = long (-218 * size + posy);
    pts[57].x = long (285 * size + posx);    pts[57].y = long (-216 * size + posy);
    pts[58].x = long (279 * size + posx);    pts[58].y = long (-220 * size + posy);
    pts[59].x = long (271 * size + posx);    pts[59].y = long (-222 * size + posy);
    pts[60].x = long (270 * size + posx);    pts[60].y = long (-226 * size + posy);
    pts[61].x = long (267 * size + posx);    pts[61].y = long (-220 * size + posy);
    pts[62].x = long (262 * size + posx);    pts[62].y = long (-215 * size + posy);
    pts[63].x = long (258 * size + posx);    pts[63].y = long (-213 * size + posy);
    pts[64].x = long (251 * size + posx);    pts[64].y = long (-214 * size + posy);
    pts[65].x = long (248 * size + posx);    pts[65].y = long (-217 * size + posy);
    pts[66].x = long (247 * size + posx);    pts[66].y = long (-218 * size + posy);
    pts[67].x = long (237 * size + posx);    pts[67].y = long (-228 * size + posy);
    pts[68].x = long (227 * size + posx);    pts[68].y = long (-235 * size + posy);
    pts[69].x = long (217 * size + posx);    pts[69].y = long (-242 * size + posy);
    pts[70].x = long (204 * size + posx);    pts[70].y = long (-244 * size + posy);
    pts[71].x = long (190 * size + posx);    pts[71].y = long (-242 * size + posy);
    pts[72].x = long (179 * size + posx);    pts[72].y = long (-239 * size + posy);
    fillpolygon (pts, 73);
    // 树枝
    posx = 300; posy = 295; size = 1;
    setlinecolor (RGB (122, 71, 18));
    setfillcolor (RGB (122, 71, 18));
    pts[0].x = long (174 * size + posx);    pts[0].y = long (-172 * size + posy);
    pts[1].x = long (171 * size + posx);    pts[1].y = long (-178 * size + posy);
    pts[2].x = long (173 * size + posx);    pts[2].y = long (-185 * size + posy);
    pts[3].x = long (187 * size + posx);    pts[3].y = long (-191 * size + posy);
    pts[4].x = long (196 * size + posx);    pts[4].y = long (-207 * size + posy);
    pts[5].x = long (192 * size + posx);    pts[5].y = long (-221 * size + posy);
    pts[6].x = long (188 * size + posx);    pts[6].y = long (-229 * size + posy);
    pts[7].x = long (183 * size + posx);    pts[7].y = long (-233 * size + posy);
    pts[8].x = long (180 * size + posx);    pts[8].y = long (-231 * size + posy);
    pts[9].x = long (176 * size + posx);    pts[9].y = long (-229 * size + posy);
    pts[10].x = long (172 * size + posx);    pts[10].y = long (-233 * size + posy);
    pts[11].x = long (153 * size + posx);    pts[11].y = long (-232 * size + posy);
    pts[12].x = long (134 * size + posx);    pts[12].y = long (-233 * size + posy);
    pts[13].x = long (116 * size + posx);    pts[13].y = long (-237 * size + posy);
    pts[14].x = long (110 * size + posx);    pts[14].y = long (-241 * size + posy);
    pts[15].x = long (107 * size + posx);    pts[15].y = long (-246 * size + posy);
    pts[16].x = long (113 * size + posx);    pts[16].y = long (-248 * size + posy);
    pts[17].x = long (119 * size + posx);    pts[17].y = long (-253 * size + posy);
    pts[18].x = long (123 * size + posx);    pts[18].y = long (-248 * size + posy);
    pts[19].x = long (128 * size + posx);    pts[19].y = long (-248 * size + posy);
    pts[20].x = long (134 * size + posx);    pts[20].y = long (-249 * size + posy);
    pts[21].x = long (136 * size + posx);    pts[21].y = long (-252 * size + posy);
    pts[22].x = long (146 * size + posx);    pts[22].y = long (-253 * size + posy);
    pts[23].x = long (147 * size + posx);    pts[23].y = long (-255 * size + posy);
    pts[24].x = long (157 * size + posx);    pts[24].y = long (-249 * size + posy);
    pts[25].x = long (163 * size + posx);    pts[25].y = long (-245 * size + posy);
    pts[26].x = long (171 * size + posx);    pts[26].y = long (-242 * size + posy);
    pts[27].x = long (178 * size + posx);    pts[27].y = long (-241 * size + posy);
    pts[28].x = long (175 * size + posx);    pts[28].y = long (-248 * size + posy);
    pts[29].x = long (173 * size + posx);    pts[29].y = long (-253 * size + posy);
    pts[30].x = long (173 * size + posx);    pts[30].y = long (-259 * size + posy);
    pts[31].x = long (174 * size + posx);    pts[31].y = long (-262 * size + posy);
    pts[32].x = long (178 * size + posx);    pts[32].y = long (-264 * size + posy);
    pts[33].x = long (179 * size + posx);    pts[33].y = long (-260 * size + posy);
    pts[34].x = long (183 * size + posx);    pts[34].y = long (-247 * size + posy);
    pts[35].x = long (186 * size + posx);    pts[35].y = long (-242 * size + posy);
    pts[36].x = long (192 * size + posx);    pts[36].y = long (-240 * size + posy);
    pts[37].x = long (197 * size + posx);    pts[37].y = long (-242 * size + posy);
    pts[38].x = long (199 * size + posx);    pts[38].y = long (-247 * size + posy);
    pts[39].x = long (197 * size + posx);    pts[39].y = long (-250 * size + posy);
    pts[40].x = long (193 * size + posx);    pts[40].y = long (-253 * size + posy);
    pts[41].x = long (191 * size + posx);    pts[41].y = long (-256 * size + posy);
    pts[42].x = long (190 * size + posx);    pts[42].y = long (-259 * size + posy);
    pts[43].x = long (196 * size + posx);    pts[43].y = long (-265 * size + posy);
    pts[44].x = long (198 * size + posx);    pts[44].y = long (-266 * size + posy);
    pts[45].x = long (203 * size + posx);    pts[45].y = long (-261 * size + posy);
    pts[46].x = long (208 * size + posx);    pts[46].y = long (-251 * size + posy);
    pts[47].x = long (206 * size + posx);    pts[47].y = long (-247 * size + posy);
    pts[48].x = long (208 * size + posx);    pts[48].y = long (-246 * size + posy);
    pts[49].x = long (219 * size + posx);    pts[49].y = long (-245 * size + posy);
    pts[50].x = long (223 * size + posx);    pts[50].y = long (-248 * size + posy);
    pts[51].x = long (226 * size + posx);    pts[51].y = long (-254 * size + posy);
    pts[52].x = long (228 * size + posx);    pts[52].y = long (-261 * size + posy);
    pts[53].x = long (227 * size + posx);    pts[53].y = long (-263 * size + posy);
    pts[54].x = long (234 * size + posx);    pts[54].y = long (-263 * size + posy);
    pts[55].x = long (233 * size + posx);    pts[55].y = long (-258 * size + posy);
    pts[56].x = long (232 * size + posx);    pts[56].y = long (-246 * size + posy);
    pts[57].x = long (236 * size + posx);    pts[57].y = long (-245 * size + posy);
    pts[58].x = long (241 * size + posx);    pts[58].y = long (-247 * size + posy);
    pts[59].x = long (250 * size + posx);    pts[59].y = long (-252 * size + posy);
    pts[60].x = long (248 * size + posx);    pts[60].y = long (-248 * size + posy);
    pts[61].x = long (248 * size + posx);    pts[61].y = long (-243 * size + posy);
    pts[62].x = long (259 * size + posx);    pts[62].y = long (-244 * size + posy);
    pts[63].x = long (270 * size + posx);    pts[63].y = long (-250 * size + posy);
    pts[64].x = long (272 * size + posx);    pts[64].y = long (-250 * size + posy);
    pts[65].x = long (272 * size + posx);    pts[65].y = long (-248 * size + posy);
    pts[66].x = long (270 * size + posx);    pts[66].y = long (-243 * size + posy);
    pts[67].x = long (266 * size + posx);    pts[67].y = long (-240 * size + posy);
    pts[68].x = long (259 * size + posx);    pts[68].y = long (-236 * size + posy);
    pts[69].x = long (250 * size + posx);    pts[69].y = long (-234 * size + posy);
    pts[70].x = long (248 * size + posx);    pts[70].y = long (-234 * size + posy);
    pts[71].x = long (244 * size + posx);    pts[71].y = long (-221 * size + posy);
    pts[72].x = long (246 * size + posx);    pts[72].y = long (-213 * size + posy);
    pts[73].x = long (246 * size + posx);    pts[73].y = long (-200 * size + posy);
    pts[74].x = long (250 * size + posx);    pts[74].y = long (-188 * size + posy);
    pts[75].x = long (253 * size + posx);    pts[75].y = long (-183 * size + posy);
    pts[76].x = long (255 * size + posx);    pts[76].y = long (-179 * size + posy);
    pts[77].x = long (259 * size + posx);    pts[77].y = long (-177 * size + posy);
    pts[78].x = long (262 * size + posx);    pts[78].y = long (-174 * size + posy);
    fillpolygon (pts, 79);
    // 树帽
    posx = 300; posy = 295; size = 1;
    setlinecolor (RGB (40, 176, 0));
    setfillcolor (RGB (40, 176, 0));
    pts[0].x = long (98 * size + posx);    pts[0].y = long (-255 * size + posy);
    pts[1].x = long (102 * size + posx);    pts[1].y = long (-250 * size + posy);
    pts[2].x = long (108 * size + posx);    pts[2].y = long (-245 * size + posy);
    pts[3].x = long (118 * size + posx);    pts[3].y = long (-253 * size + posy);
    pts[4].x = long (122 * size + posx);    pts[4].y = long (-247 * size + posy);
    pts[5].x = long (128 * size + posx);    pts[5].y = long (-245 * size + posy);
    pts[6].x = long (136 * size + posx);    pts[6].y = long (-253 * size + posy);
    pts[7].x = long (144 * size + posx);    pts[7].y = long (-254 * size + posy);
    pts[8].x = long (149 * size + posx);    pts[8].y = long (-260 * size + posy);
    pts[9].x = long (170 * size + posx);    pts[9].y = long (-271 * size + posy);
    pts[10].x = long (176 * size + posx);    pts[10].y = long (-264 * size + posy);
    pts[11].x = long (181 * size + posx);    pts[11].y = long (-266 * size + posy);
    pts[12].x = long (189 * size + posx);    pts[12].y = long (-276 * size + posy);
    pts[13].x = long (194 * size + posx);    pts[13].y = long (-268 * size + posy);
    pts[14].x = long (198 * size + posx);    pts[14].y = long (-270 * size + posy);
    pts[15].x = long (207 * size + posx);    pts[15].y = long (-268 * size + posy);
    pts[16].x = long (209 * size + posx);    pts[16].y = long (-264 * size + posy);
    pts[17].x = long (213 * size + posx);    pts[17].y = long (-264 * size + posy);
    pts[18].x = long (222 * size + posx);    pts[18].y = long (-264 * size + posy);
    pts[19].x = long (240 * size + posx);    pts[19].y = long (-262 * size + posy);
    pts[20].x = long (247 * size + posx);    pts[20].y = long (-257 * size + posy);
    pts[21].x = long (260 * size + posx);    pts[21].y = long (-251 * size + posy);
    pts[22].x = long (267 * size + posx);    pts[22].y = long (-258 * size + posy);
    pts[23].x = long (276 * size + posx);    pts[23].y = long (-256 * size + posy);
    pts[24].x = long (285 * size + posx);    pts[24].y = long (-254 * size + posy);
    pts[25].x = long (291 * size + posx);    pts[25].y = long (-256 * size + posy);
    pts[26].x = long (292 * size + posx);    pts[26].y = long (-259 * size + posy);
    pts[27].x = long (289 * size + posx);    pts[27].y = long (-263 * size + posy);
    pts[28].x = long (282 * size + posx);    pts[28].y = long (-261 * size + posy);
    pts[29].x = long (276 * size + posx);    pts[29].y = long (-260 * size + posy);
    pts[30].x = long (272 * size + posx);    pts[30].y = long (-264 * size + posy);
    pts[31].x = long (266 * size + posx);    pts[31].y = long (-262 * size + posy);
    pts[32].x = long (260 * size + posx);    pts[32].y = long (-260 * size + posy);
    pts[33].x = long (253 * size + posx);    pts[33].y = long (-261 * size + posy);
    pts[34].x = long (249 * size + posx);    pts[34].y = long (-264 * size + posy);
    pts[35].x = long (245 * size + posx);    pts[35].y = long (-266 * size + posy);
    pts[36].x = long (238 * size + posx);    pts[36].y = long (-264 * size + posy);
    pts[37].x = long (214 * size + posx);    pts[37].y = long (-266 * size + posy);
    pts[38].x = long (213 * size + posx);    pts[38].y = long (-269 * size + posy);
    pts[39].x = long (209 * size + posx);    pts[39].y = long (-272 * size + posy);
    pts[40].x = long (193 * size + posx);    pts[40].y = long (-280 * size + posy);
    pts[41].x = long (185 * size + posx);    pts[41].y = long (-277 * size + posy);
    pts[42].x = long (182 * size + posx);    pts[42].y = long (-273 * size + posy);
    pts[43].x = long (178 * size + posx);    pts[43].y = long (-271 * size + posy);
    pts[44].x = long (175 * size + posx);    pts[44].y = long (-271 * size + posy);
    pts[45].x = long (170 * size + posx);    pts[45].y = long (-273 * size + posy);
    pts[46].x = long (147 * size + posx);    pts[46].y = long (-262 * size + posy);
    pts[47].x = long (149 * size + posx);    pts[47].y = long (-267 * size + posy);
    pts[48].x = long (148 * size + posx);    pts[48].y = long (-269 * size + posy);
    pts[49].x = long (145 * size + posx);    pts[49].y = long (-265 * size + posy);
    pts[50].x = long (139 * size + posx);    pts[50].y = long (-259 * size + posy);
    pts[51].x = long (132 * size + posx);    pts[51].y = long (-258 * size + posy);
    pts[52].x = long (123 * size + posx);    pts[52].y = long (-260 * size + posy);
    pts[53].x = long (119 * size + posx);    pts[53].y = long (-256 * size + posy);
    pts[54].x = long (110 * size + posx);    pts[54].y = long (-255 * size + posy);
    pts[55].x = long (103 * size + posx);    pts[55].y = long (-257 * size + posy);
    pts[56].x = long (100 * size + posx);    pts[56].y = long (-258 * size + posy);


    fillpolygon (pts, 57);
    // 栏杆和栅栏
    for (i = 0; i < 7; i++)
    {
        draw_left_railing (450 - i * 23, 10 + i * 43, 0.9);
        draw_left_fence (366 - i * 23, 200 + i * 43, 1);

        draw_right_railing (190 + i * 19, -40 + i * 43, 0.9);
        draw_right_fence (250 + i * 19, 213 + i * 43, 1);
    }
    i = 7;
    draw_left_railing (450 - i * 23, 10 + i * 43, 0.9);
    draw_right_railing (190 + i * 19, -40 + i * 43, 0.9);
    // 云朵
    draw_cloud (300, 300, 1);
    draw_cloud (-10, 200, 0.7);
    draw_cloud (-360, 350, 1.2);

    // 绘制鼹鼠
    for (i = 0; i < 9; i++)
    {
        if (box[i].type != 0) { draw_gopher (box[i].posx_gopher, box[i].posy_gopher, 0.1, box[i].type); }
        draw_hole (box[i].posx_hole, box[i].posy_hole, 0.1);
    }

    // 绘制按钮
    draw_button ();

    // 绘制得分和时间
    TCHAR s[20];

    // 时间
    draw_word (30, 05, 125, _T ("时间:"));
    _stprintf_s (s, _T ("%0.1f"), float ((start_endtime - (start_t2 - start_t1))) / 1000.0);
    draw_word (30, 10, 165, s);
    draw_word (30, 70, 165, _T ("秒"));

    // 得分
    draw_word (30, 10, 225, _T ("得分:"));
    _stprintf_s (s, _T ("%0.1d"), start_point);
    draw_word (30, 10, 265, s);

    FlushBatchDraw ();
}


// 鼹鼠生成函数
void game::creact_gopher ()
{
    int i, j, k;
    // 空位检测
    k = 0;
    for (i = 0; i < 9; i++)
    {
        if (box[i].type == 0)
        {
            k = 1;
            break;
        }
    }
    // 溢满退出检测
    if (hole_full_end == 1 && k == 0)
    {
        // 退出提示
        exit_start = 1;
        draw_scene_start ();
        MessageBox (hOut, _T ("没有位置了,结束啦"), _T ("来自小豆子的提醒"), MB_OK);
    }
    // 有空位,则随机生成一只鼹鼠
    if (k == 1)
    {
        do
        {
            i = rand () % 9;
        } while (box[i].type != 0);
        // 是否是红眼
        j = rand () % (11 - gopher_red_eye_num);
        // 地洞状态更新
        // 正常鼹鼠
        if (j != 0 || gopher_red_eye_num == 0)
        {
            box[i].type = 1;
        }
        // 红眼鼹鼠
        else if (j == 0)
        {
            box[i].type = 3;
        }
        // 存在时间更新
        box[i].time_life = speed_gopher_life + 1;
    }
}

Guess you like

Origin blog.csdn.net/xiangxin1030/article/details/128695968