加载图形库和移动的升级

2023/3/7的草稿,怕数据丢失

#include<graphics.h>
#include<iostream>
#include<string>
#include<vector>//使用这个为图片动态的分配内存
using namespace std;//减少透明度的,用于输出png文件
#pragma comment(lib, "MSIMG32.LIB")
inline void putimage_alpha(int x, int y, IMAGE* img)
{int w = img->getheight();int h = img->getwidth();AlphaBlend(GetImageHDC(NULL), x, y, w, h,GetImageHDC(img), 0, 0, w, h, { AC_SRC_OVER,0,225,AC_SRC_ALPHA });
}//封装了一个动画播放
class Animation
{
public:Animation(LPCTSTR path, int num, int interval)//图片所来源的路径,图片的数量,图片播放之间的间隔 LP的含义使长指针, C的含义是const ,{interval_ms = interval;TCHAR path_file[256];//TCHAR就是相当于根据我们系统在自己分配的字符串类型 这个自定义的含义是道路的文件for (int i = 0; i < num; i++)//通过一个for循环将所有我们下载的图片都加载到一个图片数组中{_stprintf_s(path_file, path, i);//将文件名字打印在loadimage中IMAGE* frame = new IMAGE();//定义一个图片指针 并且开辟这个图片指针loadimage(frame, path_file);//加载这个图片frame_list.push_back(frame);//有点类似于出队,或者出栈,就是数组向后移的意思}}~Animation()//析构函数{for (int i = 0; i < frame_list.size(); i++)delete frame_list[i];}void play(int x, int y, int delta)//动画播放{timer += delta;if (timer >= interval_ms){idx_frame = (idx_frame + 1) % frame_list.size();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;//frame是图形的意思,图形列表
};//当前的动
int idx_current_anim = 0;//表示播放的总数  anim代表动的意思
const int PLAYER_ANIM_NUM = 6;//玩家图片的数据
const int PLATER_WIDTH = 80;
const int PLAYER_HEIGHT = 80;
const int SHADOW_WIDTH = 32;//窗口大小
const int WINDOW_WIDTH = 1280;
const int WINDOW_HIGHT = 720;//用来存放玩家动画的图片数组
IMAGE img_player_left[PLAYER_ANIM_NUM];
IMAGE img_player_right[PLAYER_ANIM_NUM];//放玩家的初始位置
POINT player_pos = { 500,500 };//POINT就使相当于一个点const int PLAYER_SPEED = 3;//加载玩家动画函数
//void loadAnimation()
//{
//	for (int i = 0; i < PLAYER_ANIM_NUM; i++)
//	{
//		wstring path = L"img/player_Left_" + to_wstring(i) + L".png";
//		loadimage(&img_player_left[i], path.c_str());
//	}
//
//	for (int i = 0; i < PLAYER_ANIM_NUM; i++)
//	{
//		wstring path = L"img/player_right_" + to_wstring(i) + L".png";
//		loadimage(&img_player_right[i], path.c_str());
//	}
//}//绘制玩家动画函数,所以我觉得这个ainm有绘制的意思
Animation anim_left_player(_T("img/player_left_%d.png"), 6, 45);
Animation anim_right_player(_T("img/player_right_%d.png"), 6, 45);IMAGE img_shadow;//绘制玩家
void drawplayer(int delta,int dir_x)
{int pos_shadow_x = player_pos.x + (PLATER_WIDTH / 2 - SHADOW_WIDTH / 2);int pos_shadow_y = player_pos.y + PLAYER_HEIGHT - 8;putimage_alpha(pos_shadow_x, pos_shadow_y, &img_shadow);static bool facing_left = false;if (dir_x < 0)facing_left = true;else if (dir_x > 0)facing_left = false;if (facing_left)anim_left_player.play(player_pos.x, player_pos.y, delta);elseanim_right_player.play(player_pos.x, player_pos.y, delta);
}
//主函数
int main()
{initgraph(WINDOW_WIDTH, WINDOW_HIGHT);bool runing = true;//void loadAnimation();ExMessage msg;//获取数据IMAGE img_background;loadimage(&img_background, _T("img/background.png"));loadimage(&img_shadow, _T("img/shadow_player.png"));bool is_move_up = false;bool is_move_down = false;bool is_move_right = false;bool is_move_left = false;BeginBatchDraw();//加载玩家的图片//loadAnimation();while (runing){DWORD s_t = GetTickCount();//优化时间函数,放在主循环中while (peekmessage(&msg)){if (msg.message == WM_KEYDOWN){switch (msg.vkcode)//这个表示使用键盘对目标进行操作{case VK_UP:is_move_up = true;break;case VK_DOWN:is_move_down = true;break;case VK_RIGHT:is_move_right = true;break;case VK_LEFT:is_move_left = true;break;}}else if (msg.message == WM_KEYUP){switch (msg.vkcode){case VK_UP:is_move_up = false;break;case VK_DOWN:is_move_down = false;break;case VK_RIGHT:is_move_right = false;break;case VK_LEFT:is_move_left = false;break;}}}if (is_move_up) player_pos.y -= PLAYER_SPEED;if (is_move_down)player_pos.y += PLAYER_SPEED;if (is_move_right)player_pos.x += PLAYER_SPEED;if (is_move_left)player_pos.x -= PLAYER_SPEED;static int counter = 0;if (++counter % 5 == 0)//每5个游戏帧播放一个动画帧{idx_current_anim++;}//使动画循环播放idx_current_anim %= PLAYER_ANIM_NUM;int dir_x = is_move_right - is_move_left;int dir_y = is_move_down - is_move_up;double len_dir = sqrt(dir_x * dir_x + dir_y * dir_y);if (len_dir != 0){double normalized_x = dir_x / len_dir;double normalized_y = dir_y / len_dir;player_pos.x += (int)(PLAYER_SPEED * normalized_x);player_pos.y += (int)(PLAYER_SPEED * normalized_y);}if (player_pos.x < 0)player_pos.x = 0;if (player_pos.y < 0)player_pos.y = 0;if(player_pos.x + PLATER_WIDTH > WINDOW_WIDTH)player_pos.x = WINDOW_WIDTH - PLATER_WIDTH;if (player_pos.y + PLAYER_HEIGHT > WINDOW_HIGHT)player_pos.y = WINDOW_HIGHT - PLAYER_HEIGHT;cleardevice();putimage(0, 0, &img_background);//putimage_alpha(player_pos.x, player_pos.y, &img_player_left[idx_current_anim]);drawplayer(1000 / 400, is_move_right - is_move_left);//优化过程,包括缓冲区,减少cpu占存FlushBatchDraw();DWORD e_t = GetTickCount();DWORD d_t = s_t - e_t;if (d_t < 1000 / 144){Sleep(1000 / 144 - d_t);}}EndBatchDraw();return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/727400.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

博客系统测试

文章目录 1.项目背景介绍2.功能介绍3.手动测试3.1编写测试用例3.2项目测试3.2.1登录测试3.2.2查看详情页面3.2.3编辑页面3.2.4删除博客3.2.5注销用户 大家好&#xff0c;我是晓星航。今天为大家带来的是 博客系统测试 相关的讲解&#xff01;&#x1f600; 1.项目背景介绍 项…

探讨倒排索引Elasticsearch面试与实战:从理论到实践

在当前大数据时代&#xff0c;Elasticsearch&#xff08;以下简称为ES&#xff09;作为一种强大的搜索和分析引擎&#xff0c;受到了越来越多企业的青睐。因此&#xff0c;对于工程师来说&#xff0c;掌握ES的面试准备和实战经验成为了必备技能之一。本文将从ES的面试准备和实际…

KL散度和交叉熵的应用介绍

深度学习 文章目录 深度学习前言KL散度和交叉熵KL散度与交叉熵的关系KL散度与交叉熵的应用总结 前言 KL散度&#xff08;Kullback-Leibler Divergence&#xff09;和交叉熵&#xff08;Cross Entropy&#xff09;是在机器学习中广泛使用的概念。这两者都用于比较两个概率分布之…

day14_异常

今日内容 零、 复习昨日 一、日期类 二、异常 零、 复习昨日 1为什么要重写toString Object类toString返回的是对象名字地址,无意义子类重写toString() 返回的对象属性内容 2为什么要重写equals Object类equals判断是对象的地址值是否相等,无意义子类重写equals,为了判断对象的…

969. 志愿者招募(网络流,费用流,无源汇上下界可行流)#困难,想不到

活动 - AcWing 申奥成功后&#xff0c;布布经过不懈努力&#xff0c;终于成为奥组委下属公司人力资源部门的主管。 布布刚上任就遇到了一个难题&#xff1a;为即将启动的奥运新项目招募一批短期志愿者。 经过估算&#xff0c;这个项目需要 N 天才能完成&#xff0c;其中第 i…

神经网络算法——反向传播 Back Propagation

文章目录 前言 1、反向传播的本质 &#xff08;1&#xff09;前向传播&#xff08;Forward Propagation&#xff09; &#xff08;2&#xff09;反向传播&#xff08;Back Propagation&#xff09; 2、反向传播的原理 &#xff08;1&#xff09;链式法则&#xff08;Chain Rule…

GB 2312字符集:中文编码的基石

title: GB 2312字符集&#xff1a;中文编码的基石 date: 2024/3/7 19:26:00 updated: 2024/3/7 19:26:00 tags: GB2312编码中文字符集双字节编码区位码规则兼容性问题存储空间优化文档处理应用 一、GB 2312字符集的背景 GB 2312字符集是中国国家标准委员会于1980年发布的一种…

低代码测试自动化

每个企业都希望将产品快速推向市场。虽然低代码无代码测试自动化可以帮助组织实现这一目标&#xff0c;但测试人员必须牢记几件事&#xff0c;才能通过低代码无代码来推进他们的组织。 低代码测试自动化的重要性是什么&#xff1f; 低代码测试自动化加速了测试生命周期。借助简…

成都正信:亲戚借了钱一直不还怎么委婉的说

在中国传统文化中&#xff0c;亲情关系往往被视为最为重要和敏感的部分。当亲戚间发生借贷时&#xff0c;若出现拖欠不还的情形&#xff0c;处理起来尤为棘手。面对这样的尴尬局面&#xff0c;采取委婉而有效的沟通方式至关重要。 张华最近就遇到了这样的困扰。他的表弟去年因急…

【Python刷题】环形链表

问题描述 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置&a…

Extend继承

继承的作用 当我们定义了一个Person类&#xff1a; class Person{private Stirng name;private int age;public String getName(){....}public int getAge(){...}public void setName(String name){...}public void setAge(int age){...} }现在&#xff0c;假设还需要定义一个…

多目标粒子群(MOPSO)算法原理及其MATLAB实现

粒子群算法(PSO)是Eberhart和Kennedy于1995年提出的一种模拟鸟类觅食行为的算法[1]&#xff0c;具有操作简单、速度快等特点。但在实际应用中&#xff0c;许多决策问题都是多目标优化问题&#xff0c;采用粒子群算法来处理多目标优化问题是一种有效方法&#xff0c;Coello 等人…

URL输入到页面渲染过程详解

当我们在浏览器中输入一个URL并按下回车键时&#xff0c;浏览器会执行一系列步骤来解析URL、发送请求、接收响应&#xff0c;并最终渲染页面。这个过程涉及到多个阶段&#xff0c;包括DNS解析、TCP握手、发送HTTP请求、服务器处理请求、返回HTTP响应、浏览器解析和渲染等。下面…

面视题之——ThreadLocal作用

面视题之——ThreadLocal作用&#xff08;学习中&#xff0c;欢迎纠正&#xff09; 概念 ThreadLocal 是Java中的一个类&#xff0c;它提供了线程局部变量。这些变量与普通变量的区别在于&#xff0c;每个访问该变量的线程都有一个独立的副本&#xff0c;互不干扰。 每一个线…

《Java架构巨头面对全球用户:超大规模系统架构师面试宝典》

随着科技的迅猛发展&#xff0c;Java架构师在构建全球用户服务的大规模系统中扮演着举足轻重的角色。招聘一位卓越的Java架构师&#xff0c;不仅需要深厚的技术功底&#xff0c;更需要面对全球用户和超大规模系统的独特经验。为助您招聘到理想的人才&#xff0c;以下是一份超实…

Jmeter高效组织接口自动化用例

1、善用“逻辑控制器”中的“简单控制器”。可以把简单控制器像文件夹一样使用&#xff0c;通过它来对用例进行分类归档&#xff0c;方便后续用例的调试和执行。 2、同编写测试用例一样&#xff0c;这里的接口测试用例应该进行唯一性编号&#xff0c;这样在运行整个用例计划出现…

批处理(Batch Processing)概念

批处理&#xff08;Batch Processing&#xff09;这一概念在不同上下文中可有不同的含义&#xff1a; 传统操作系统层面&#xff1a; 在早期的操作系统中&#xff0c;批处理是指一种处理模式&#xff0c;用户将一系列作业&#xff08;job&#xff09;按照一定的顺序组织起来&am…

Python算法100例-3.8 黑洞数

1.问题描述2.问题分析3.算法设计4.比较三个数的大小并将其重组5.寻找“黑洞数”6.完整的程序 1&#xff0e;问题描述 编程求三位数中的“黑洞数”。 黑洞数又称陷阱数&#xff0c;是指任何一个数字不全相同的整数&#xff0c;在经过有限次“重排求差”操作后&#xff0c;总会…

【Yarn】error Command failed. Exit code: 1

报错代码 success Installed "create-vue3.9.2" with binaries:- create-vue C:\Program 不是内部或外部命令&#xff0c;也不是可运行的程序 或批处理文件。 error Command failed. Exit code: 1 Command: C:\Program Files\nodejs\node_global\bin\create-vuelate…