333333

#include <iostream>
#include <graphics.h>
#include <stdio.h>
#include <conio.h>
#include <vector>
#include <string>
using namespace std;

int idx_player_anim = 0;
const int player_anim_num = 6;//这里要把动画帧数定位const int才能放入数组括号中,int不行
POINT player_pos = { 500,500 };
int player_speed = 5;

#pragma comment(lib,"MSIMG32.LIB")//putimage不能处理透明度,要弄个能处理透明度的putimage函数
inline void putimage_alpha(int x, int y, IMAGE* img)
{
    int w = img->getwidth();
    int h = img->getheight();
    AlphaBlend(GetImageHDC(NULL), x, y, w, h, GetImageHDC(img), 0, 0, w, h, { AC_SRC_OVER,0,255,AC_SRC_ALPHA });
}


class Animation
{
public:
    Animation(LPCTSTR path, int num, int interval)//构造函数实现loadimage
    {
        interval_ms = interval;

        TCHAR path_file[256];
        for (size_t i = 0; i < num; i++)
        {
            _stprintf_s(path_file, path, i);
            IMAGE* frame = new IMAGE();
            loadimage(frame, path_file);
            frame_list.push_back(frame);
        }
    }
    ~Animation()
    {
        for (size_t i = 0; i < frame_list.size(); i++)
            delete frame_list[i];
    }
    void play(int x, int y, int delta)//实现putiamge
    {
        timer += delta;
        if (timer > interval_ms)
        {
            idx_frame = (idx_frame + 1) % player_anim_num;
            timer = 0;
        }
        putimage_alpha(x, y, frame_list[idx_frame]);
    }
private:
    int timer = 0;
    int idx_frame = 0;
    int interval_ms = 0;
    vector<IMAGE*> frame_list;
};//别漏;
Animation anim_left_player(_T("img/player_left_%d.png"), 6, 45);
Animation anim_right_player(_T("img/player_right_%d.png"), 6, 45);


int main()
{
    initgraph(1280, 720);
    IMAGE img_background;
    IMAGE img_shadow_player;
    loadimage(&img_background, _T("img/background.png"));
    loadimage(&img_shadow_player, _T("img/shadow_player.png"));
    

    bool running = true;
    bool is_up = false;
    bool is_down = false;
    bool is_left = false;
    bool is_right = false;
    bool turn_left = true;
    bool turn_right = false;

    ExMessage msg;
    BeginBatchDraw();
    while (running)
    {
        DWORD start_time = GetTickCount();
        while (peekmessage(&msg))
        {
            if (msg.message == WM_KEYDOWN)
            {
                switch (msg.vkcode)
                {
                case VK_UP:
                    is_up = true;
                    break;
                case VK_DOWN:
                    is_down = true;
                    break;
                case VK_LEFT:
                    is_left = true;
                    turn_left = true;
                    turn_right = false;
                    break;
                case VK_RIGHT:
                    is_right = true;
                    turn_left = false;
                    turn_right = true;
                    break;
                }
            }
            if (msg.message == WM_KEYUP)
            {
                switch (msg.vkcode)
                {
                case VK_UP:
                    is_up = false;
                    break;
                case VK_DOWN:
                    is_down = false;
                    break;
                case VK_LEFT:
                    is_left = false;
                    break;
                case VK_RIGHT:
                    is_right = false;
                    break;
                }
            }
        }
        if (is_up) player_pos.y -= player_speed;
        if (is_down) player_pos.y += player_speed;
        if (is_left) player_pos.x -= player_speed;
        if (is_right) player_pos.x += player_speed;

        cleardevice();

        static int counter = 0;
        if (++counter % 5 == 0)
            idx_player_anim++;
        idx_player_anim = idx_player_anim % player_anim_num;
        putimage_alpha(0, 0, &img_background);
        if(turn_left) anim_left_player.play(player_pos.x, player_pos.y, 10);
        if(turn_right)anim_right_player.play(player_pos.x, player_pos.y, 10);
        putimage_alpha(player_pos.x+30, player_pos.y+80, &img_shadow_player);
        

        FlushBatchDraw();

        DWORD end_time = GetTickCount();
        DWORD delta_time = end_time - start_time;
        if (delta_time < 1000 / 144)
        {
            Sleep(1000 / 144 - delta_time);
        }
    }
    EndBatchDraw();

    return 0;
}

在Vue中,你可以使用v-for指令来循环遍历对象。在HTML中,你可以使用v-for指令来循环遍历对象,具体的语法是:v-for="(value, key, index) in object",其中value是对象属性的值,key是对象属性的键,index是索引值。在JavaScript中,你可以使用for-in循环来遍历对象,具体的语法是:for (const key in object) {}。 例如,给每个对象中添加age属性,你可以使用forEach()函数遍历数组并执行相应的操作。具体的代码如下所示: ``` let forArr = [{name:'tom',sex:'man'},{name:'linda',sex:'woman'},] forArr.forEach((item,index) => { console.log("forEach循环==index==",index,item); item.age = 27 }) console.log("forArr==遍历后===",forArr) // forArr ---->[{name:'tom',sex:'man',age:27},{name:'linda',sex:'woman',age:27}] ``` 对于循环遍历字符串,你可以使用for循环,for-in循环,或者for-of循环。具体的代码如下所示: ``` let s = "abcd" // 使用for循环 for (let i = 0; i < s.length; i++) { console.log(i, typeof i, s[i]); //i为索引,s[i为值,typeof i 为number } // 输出结果:0 number a // 1 number b // 2 number c // 3 number d // 使用for-in循环 for (const key in s) { console.log("key", key, typeof key, s[key]); //key为索引,s[key为值,typeof key 为string } // 输出结果:0 string a // 1 string b // 2 string c // 3 string d // 使用for-of循环 for (const i of s) { console.log("i", i);//i为值 } // 输出结果:a // b // c // d ``` 总结起来,在Vue中,你可以使用v-for指令来循环遍历对象。在JavaScript中,你可以使用for-in循环来遍历对象,或者使用for循环、for-in循环、for-of循环来遍历字符串。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [vue 循环遍历对象、数组和字符串](https://blog.csdn.net/ingenuou_/article/details/122500455)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [vue 解决遍历对象显示的顺序不对问题](https://download.csdn.net/download/weixin_38639872/12932467)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值