24/03/07总结

esayx:

贪吃蛇:

#include "iostream"
#include "cmath"
#include "conio.h"
#include "easyx.h"
#include "time.h"
#define NODE_WIDTH	40
using namespace std;
typedef struct {int x;int y;
}node; enum direction		//蛇的方向,上下左右
{eUP,eDown,eLeft,eRight
};void paintGrid(){	//封装函数:绘制直线for (int x = 0; x < 800; x += NODE_WIDTH) {line(x, 0, x, 600);}for (int y = 0; y < 600; y += NODE_WIDTH) {line(0, y, 800, y);}
}void paintsnake(node* snake, int n) {int left, right, top, bottom;for (int i = 0; i < n; i++) {left = snake[i].x * NODE_WIDTH;top = snake[i].y * NODE_WIDTH;right = (snake[i].x+1) * NODE_WIDTH;bottom = (snake[i].y + 1) * NODE_WIDTH;solidrectangle(left, top, right, bottom);}
}node snakeMove(node* snake, int length, int direction) {node tail = snake[length - 1];for (int i = length - 1; i > 0; i--) {snake[i] = snake[i - 1];}node newhead;newhead= snake[0];if (direction == 0) {newhead.y--;}else if (direction == 1) {newhead.y++;}else if (direction == 2) {newhead.x--;}else if (direction == 3) {newhead.x++;}snake[0] = newhead;return tail;
}void changeDirection(enum direction* pD) {if (_kbhit()!=0) {char c = _getch();if (c == 'w') {if (*pD != eDown)*pD = eUP;}else if (c == 's') {if (*pD != eUP)*pD = eDown;}else if (c == 'a') {if (*pD != eRight)*pD = eLeft;}else if (c == 'd') {if (*pD != eLeft)*pD = eRight;}}
}node createFood(node* snake, int length) {node food;int i;while (1) {food.x = rand() % (800 / NODE_WIDTH);	//[0,19]food.y = rand() % (600 / NODE_WIDTH);	//[0,14]for (i = 0; i < length; i++) {if (snake[i].x == food.x && snake[i].y == food.y)	//判断食物是否与蛇重叠break;}if (i < length)continue;		//重叠else break;				//不重叠跳出}return food;
}void paintfood(node food) {int left, right, top, bottom;left = food.x * NODE_WIDTH;top = food.y * NODE_WIDTH;right = (food.x + 1) * NODE_WIDTH;bottom = (food.y + 1) * NODE_WIDTH;setfillcolor(YELLOW);solidrectangle(left, top, right, bottom);setfillcolor(WHITE);}bool isGameOver(node* snake, int length) {		//判断输赢if (snake[0].x < 0 || snake[0].x>800/NODE_WIDTH)return true;if (snake[0].y < 0 || snake[0].y>600 / NODE_WIDTH)return true;for (int i = 1; i < length; i++){if (snake[i].x == snake[0].x && snake[i].y == snake[0].y)return true;}return false;
}void reset(node* snake, int* plength, enum direction* d) {snake[0] = { 5,7 };snake[1] = { 4,7 };snake[2] = { 3,7 };snake[3] = { 2,7 };snake[4] = { 1,7 };*plength = 5;*d = eRight;
}
int main() {enum direction d = eRight;node snake[100] = { {5,7},{4,7},{3,7},{2,7},{1,7} };int length = 5;initgraph(800, 600);setbkcolor(RGB(164, 225, 202));cleardevice();srand(unsigned int(time(NULL)));	//食物随机node food = createFood(snake, length);while(1){cleardevice();paintGrid();paintsnake(snake, length);paintfood(food);Sleep(150);changeDirection(&d);node lastTail=snakeMove(snake, length, d);if (snake[0].x == food.x && snake[0].y == food.y) {if (length < 100) {snake[length] = lastTail;length++;}food = createFood(snake, length);}if (isGameOver(snake, length) == true){reset(snake, &length, &d);food = createFood(snake, length);}}getchar();closegraph();}

图像处理:

#include "iostream"
#include "cmath"
#include "conio.h"
#include "easyx.h"
#include "time.h"
#include "stdlib.h"
using namespace std;void putransparentImage(int x, int y, const IMAGE* mask, const IMAGE *img) {putimage(x, y, mask, SRCAND);putimage(x, y, img, SRCPAINT);//绘制透明图片的封装函数
}
int main() {//IMAGE对象:保存图片的各种信息//loadimage(		//加载一个图片文件,将图片信息填充至IMAGE对象中//IMAGE* pDstImg,	待填充的IMAGE对象指针//LPCTSTR pImgFile,	图片的路径			// int nWidth=0,	图片的拉伸宽度,如果参数为0,使用原图宽度// int nHeight=0,	图片的拉伸高度,如果参数为0,使用原图高度// bool bResize=false	是否调整IMAGE的大小以适应图片 // );//putimage(	//将image对象中的图片显示在窗体上//int dstX,		//绘制位置的xy坐标//int dstY,//IMAGE *pSrcImg,	//要绘制的IMAGE对象指针//DWORD dwRop =SRCCOPY		//三元光栅操作码// );//三元光栅常用://SRCAND:目标图像=目标图像and源图像//SRCPAINT:目标图像=目标图像or源图像//默认情况下会用SRCCOPY:目标图像=源图像initgraph(1200, 480);setbkcolor(WHITE);cleardevice();IMAGE img;IMAGE img2;IMAGE img3;loadimage(&img, "./background.jpg");loadimage(&img2, "./mask.jpg");loadimage(&img3, "./bear.jpg");putimage(0, 0, &img);putimage(530, 180, &img2, SRCAND);putimage(530, 180, &img3, SRCPAINT);getchar();closegraph();//三元光栅操作码:剪影图片and绿色背景or黑背景熊主体=熊主题与背景	//(通过这样的方式就可以绘制出透明图片了)//剪影图片称为掩码
}

 

按键处理:

#include "iostream"
#include "cmath"
#include "conio.h"
#include "easyx.h"
#include "time.h"
#include "stdlib.h"
int main() {//EX_MOUSE;		鼠标消息//EX_KEY;		按键消息//EX_CHAR;		字符消息//EX_WINDOW;	窗口消息//ExMessage函数,创建消息容器//ExMessage msg;//如果两种及以上都想要:msg=getmessage(EX_MOUSE|EX_KEY);// ExMessage函数内部://鼠标消息交互://bool ctrl	 :1		ctrl是否按下//bool shift : 1    shift是否按下//bool lbutton :1   鼠标左键是否按下//bool mbutton :1   鼠标中键是否按下//bool rbutton :1   鼠标右键是否按下//short x;			鼠标的x轴坐标//short y;			鼠标的y轴坐标//short wheel;		鼠标滚轮滚动值,为120的倍数//键盘消息交互://BYTE vkcode;		//按键的虚拟键码//BYTE scancode;	//按键的扫描码//bool extended		:1		//按键是否为扩充位//bool prevdown		:1		//按键的前一个状态是否按下//字符消息的数据//	TCHAR ch;//窗口消息的数据//WPARAM wParam//LPARAM lParam//鼠标:/*WM_MOUSEMOVE	EX_MOUSE	鼠标移动消息。WM_MOUSEWHEEL	鼠标滚轮拨动消息。WM_LBUTTONDOWN	左键按下消息。WM_LBUTTONUP	左键弹起消息。WM_LBUTTONDBLCLK	左键双击消息。WM_MBUTTONDOWN	中键按下消息。WM_MBUTTONUP	中键弹起消息。WM_MBUTTONDBLCLK	中键双击消息。WM_RBUTTONDOWN	右键按下消息。WM_RBUTTONUP	右键弹起消息。WM_RBUTTONDBLCLK	右键双击消息。WM_KEYDOWN	EX_KEY	按键按下消息WM_KEYUP	按键弹起消息。WM_CHAR	EX_CHAR	字符消息。WM_ACTIVATE	EX_WINDOW	窗口激活状态改变消息。WM_MOVE	窗口移动消息。WM_SIZE	窗口大小改变消息。*///键盘://WM_KEYDOWN;	按键按下消息//WM_KEYUP;		按键弹起消息initgraph(800, 600, EX_DBLCLKS);	//EX_DBLCLKS:支持双击setbkcolor(WHITE);cleardevice();ExMessage msg;while (1) {msg = getmessage(EX_MOUSE);switch (msg.message){case WM_MOUSEMOVE:setfillcolor(BLACK);solidcircle(msg.x, msg.y, 2);break;case WM_LBUTTONDOWN:setfillcolor(RED);if (msg.ctrl == true)solidrectangle(msg.x - 10, msg.y - 10, msg.x + 10, msg.y + 10);else solidcircle(msg.x, msg.y, 10);break;case WM_RBUTTONDOWN:setfillcolor(BLUE);if (msg.ctrl == true)solidrectangle(msg.x - 10, msg.y - 10, msg.x + 10, msg.y + 10);else solidcircle(msg.x, msg.y, 10);break;}}}

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

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

相关文章

C++ Lambda函数

lambda语法 [capture list] (parameter list) specifiers exception -> type { function body }[capture list]是捕获列表&#xff0c;在应用中必填。 (parameter list)是参数列表&#xff0c;在应用中选填。 specifiers是限定符&#xff0c;在应用中选填。 exception是…

Java对接腾讯云直播示例

首先是官网的文档地址 云直播 新手指南 可以发现它这个主要是按流量和功能收费的 价格总览 流量这里还只收下行的费用&#xff0c;就是只收观看消耗的流量费 其它的收费就是一些增值业务费 &#xff08;包括直播转码、直播录制、直播截图、直播审核、智能鉴黄、实时监播、移动直…

【性能测试】Jmeter性能压测-阶梯式/波浪式场景总结(详细)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、阶梯式场景&am…

学习JAVA的第十四天(基础)

目录 Collection集合 迭代器遍历 增强for遍历 Lambda表达式遍历 List集合 遍历 数据结构 栈 队列 数组 链表 前言&#xff1a; 学习JAVA的第十三天 Collection集合 Collection的遍历方式&#xff1a; 迭代器&#xff08;不依赖索引&#xff09;遍…

爱普生宣布开发出独特的宽幅度LVDS输出 —可灵活选择与LSI

爱普生宣布开发出独特的宽幅度LVDS输出 —可灵活选择与LSI -相匹配的低噪声输出 精工爱普生公司(TSE: 6724&#xff0c;“爱普生”)开发了一种新的晶体振荡器差分输出方案。新方案&#xff0c;宽幅低压差分信号(WA-LVDS)&#xff0c;可以灵活选择最适合LSI所需的幅值水平的输出…

浅谈碳化硅MOSFET TO-247封装单管引入开尔文管脚必要性

相较于传统的硅MOSFET和硅IGBT 产品&#xff0c;基于宽禁带碳化硅材料设计的碳化硅 MOSFET 具有耐压高、导通电阻低&#xff0c;开关损耗小的特点&#xff0c;可降低器件损耗、减小产品尺寸&#xff0c;从而提升系统效率。而在实际应用中&#xff0c;我们发现&#xff1a;带辅助…

外包干了一个月,技术退步明显。。。

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 关注公众号【互联网杂货铺】&#xff0c;回复 1 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 这次来聊一个大家可能也比较关心的问题&#xff0c;那就是就业城…

Sora的双重边缘:视频生成的革新与就业的再思考

随着科技的日新月异&#xff0c;人工智能&#xff08;AI&#xff09;和机器学习&#xff08;ML&#xff09;技术如潮水般涌入我们的日常生活&#xff0c;为各个领域带来了翻天覆地的变化。在这一浪潮中&#xff0c;Sora作为一款前沿的AI视频生成工具&#xff0c;凭借其高度逼真…

MindOpt优化器: 浅谈版本0.x和1.x之间API的差异

Mindopt 是一个优化求解器&#xff0c;如果它有两个主要版本——0.xx和1.x.x&#xff08;最新版本1.1.1&#xff09;&#xff0c;它们代表着软件开发的两个不同阶段。版本1.0.0表示软件的一个大的里程碑&#xff0c;代表着软件第一个正式的“成熟”发布版本&#xff0c;而0.25是…

MySQL--优化(索引--索引失效场景)

MySQL–优化&#xff08;索引–索引失效场景&#xff09; 定位慢查询SQL执行计划索引 存储引擎索引底层数据结构聚簇和非聚簇索引索引创建原则索引失效场景 SQL优化经验 常见的索引失效场景 1、场景准备&#xff1a; 给 tb_user 表创建联合索引&#xff0c;字段为&#xff1…

消息队列-Kafka-消费方如何分区与分区重平衡

消费分区 资料来源于网络 消费者订阅的入口&#xff1a;KafkaConsumer#subscribe 消费者消费的入口&#xff1a;KafkaConsumer#poll 处理流程&#xff1a; 对元数据重平衡处理&#xff1a;KafkaConsumer#updateAssignmentMetadataIfNeeded 协调器的拉取处理&#xff1a;onsum…

linux下改变主机名,永久生效的方法

hostnamectl set-hostname test 例子 #支持大写必须就要这样写 hostnamectl set-hostname 名称 --static

缩放算法优化步骤详解

添加链接描述 背景 假设数据存放在在unsigned char* m_pData 里面&#xff0c;宽和高分别是&#xff1a;m_nDataWidth m_nDataHeight 给定缩放比例&#xff1a;fXZoom fYZoom&#xff0c;返回缩放后的unsigned char* dataZoom 这里采用最简单的缩放算法即&#xff1a; 根据比…

代理IP以及动态拨号VPS的关系是什么?

在数字时代&#xff0c;网络安全和隐私保护已成为全球关注的热点话题。代理IP和动态拨号VPS作为提升网络匿名性和安全的重要技术&#xff0c;它们在维护网络隐私中扮演着至关重要的角色。虽然这两种技术在表面上看似相似&#xff0c;实际上它们在功能、应用场景以及用户需求满足…

react + antdesign table组件合并行,展开子表格

假如你有这样的一个数据&#xff1a; [{"bigClass":"吃的","smallClass":"水果","item":"苹果"},{"bigClass":"吃的","smallClass":"水果","item":"香蕉…

这些养老难题,只能靠AI来解决了

3 月 5 日刚召开的两会&#xff0c;AI 这个话题妥妥站上了 C 位。不仅政府工作报告首次提出要开展“人工智能”行动&#xff0c;各路科技大佬和人大代表也是围绕着 AI 大模型的技术创新、应用落地和政策法规&#xff0c;展开了热烈积极的建言献策。甚至有互联网大佬建议将人工智…

创建RAID0,RAID5并管理,热备盘,模拟故障

目录 1. RAID介绍以及mdadm安装 1.1 安装mdadm工具 2. 创建raid0 2.1 环境准备 2.2 使用两个磁盘创建RAID0 2.3 查看RAID0信息 2.4 对创建的RAID0进行格式化并挂载 2.5 设置成开机挂载 2.6 删除RAID0 3. 创建raid5 3.1 环境准备 3.2 用3个磁盘来模拟R…

ERC20学习

ERC20简介 ERC20是一种代币标准&#xff0c;用于创建可替代的代币。 ERC20是在以太坊网络上实现的代币标准&#xff0c;它为数字资产或代币定义了一套规则和接口。这些符合ERC20标准的代币在性质上是完全相同的。即每一个代币都可以被另一个同类型的代币替代&#xff0c;这种属…

社区店选址评估的关键指标:确保商业成功的重要因素

对于想开实体店或创业的人来说&#xff0c;选址是决定商业成功的关键因素之一。作为一名开鲜奶吧5年的创业者&#xff0c;我在网上持续分享开店的干货和见解。 在这篇文章中&#xff0c;我将详细介绍社区店选址评估的关键指标&#xff0c;帮助你确保商业成功。 1、人流量&…

2.DOM-事件基础(注册事件、tab栏切换)(案例:注册、轮播图)

案例 注册事件 <!-- //disabled默认情况用户不能点击 --><input type"button" value"我已阅读用户协议(5)" disabled><script>// 分析&#xff1a;// 1.修改标签中的文字内容// 2.定时器// 3.修改标签的disabled属性// 4.清除定时器// …