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.mfbz.cn/a/440051.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python笔记|基础算数运算+数字类型(1)

重新整理记录一下python的基础知识 基础运算符 、-、*、/ &#xff1b;括号 ()用来分组。 >>>2 2 4 >>>50 - 5*6 20 >>>(50 - 5*6) / 4 5.0 >>>8 / 5 1.6向下取整除法&#xff1a;向下舍入到最接近的整数的数学除法。运算符是 //。比如1…

力扣面试经典150 —— 6-10题

力扣面试经典150题在 VScode 中安装 LeetCode 插件即可使用 VScode 刷题&#xff0c;安装 Debug LeetCode 插件可以免费 debug本文使用 python 语言解题&#xff0c;文中 “数组” 通常指 python 列表&#xff1b;文中 “指针” 通常指 python 列表索引 文章目录 6. [中等] 轮转…

谷歌浏览器打包扩展插件,提示清单文件缺失或不可读取

今天想把谷歌浏览器的扩展打包一下&#xff0c;放到我虚拟机的谷歌浏览器&#xff0c;但是一直打包不成功。 问题 打包扩展程序错误 提示‘清单文件缺失或不可读取’ 原因 路径没有选择正确&#xff01; 解决办法 1.首先找到google浏览器的安装路径。在谷歌浏览器地址栏输…

穷人想赚钱该怎么选打工VS创业?2024年如何把握新机遇?

在贫穷的困境中&#xff0c;打工与创业似乎成为了两条截然不同的道路&#xff0c;摆在每一个渴望改变命运的人面前。然而&#xff0c;这并非简单的选择题&#xff0c;而是一场关于勇气、智慧与机遇的较量。打工&#xff0c;对于许多人来说&#xff0c;是稳定且相对安全的收入来…

XSS靶场-DOM型初级关卡

一、环境 XSS靶场 二、闯关 1、第一关 先看源码 使用DOM型&#xff0c;获取h2标签&#xff0c;使用innerHTML将内容插入到h2中 我们直接插入<script>标签试一下 明显插入到h2标签中了&#xff0c;为什么不显示呢&#xff1f;看一下官方文档 尽管插入进去了&#xff0…

Java后端八股笔记

Java后端八股笔记 Redis八股 上两种都有可能导致脏数据 所以使用两次删除缓存的技术&#xff0c;延时是因为数据库有主从问题需要更新&#xff0c;无法达到完全的强一致性&#xff0c;只能达到控制一致性。 一般放入缓存中的数据都是读多写少的数据 业务逻辑代码&#x1f44…

双碳目标下DNDC模型建模方法及在土壤碳储量、温室气体排放、农田减排、土地变化、气候变化中的技术应用

原文链接&#xff1a;双碳目标下DNDC模型建模方法及在土壤碳储量、温室气体排放、农田减排、土地变化、气候变化中的技术应用https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&tempkeyMTI2MF9DVWNrMFpvV1d3RGxBZUE2QXJBRnI1NEJkcVhzRFZwakRqYXhhVFQzQnh1MVhJcy1laWh6Nmd4R…

[密码学]入门篇——加密方式

一、概述 加密方法主要分为两大类&#xff1a; 单钥加密&#xff08;private key cryptography&#xff09;&#xff1a;加密和解密过程都用同一套密码双钥加密&#xff08;public key cryptography&#xff09;&#xff1a;加密和解密过程用的是两套密码 历史上&#xff0c…

Redis与 Memcache区别

Redis与 Memcache区别 1 , Redis 和 Memcache 都是将数据存放在内存中&#xff0c;都是内存数据库。不过 Memcache 还可用于缓存 其他东西&#xff0c;例如图片、视频等等。 2 , Memcache 仅支持key-value结构的数据类型&#xff0c;Redis不仅仅支持简单的key-value类型的数据&…

vue2 element 实现表格点击详情,返回时保留查询参数

先直观一点&#xff0c;上图 列表共5条数据&#xff0c;准备输入Author过滤条件进行查询 进入查看详情页&#xff0c;就随便搞了个按钮&#xff0c;将就看吧 点击返回后 一开始准备用vuex做这个功能&#xff0c;后来放弃了&#xff0c;想到直接用路由去做可能也不错。有时间…

如何获取国外信用卡?需要国外银行卡支付怎么解决?如何订阅国外产品?

当国内的用户想要使用国外的产品时&#xff0c;很多产品是需要订阅付费的。其中有些产品还没有引入国内&#xff0c;只能用国外的信用卡支付&#xff0c;对于在国内的朋友&#xff0c;如何获取一张国外的信用卡呢&#xff1f; 这里推荐一个平台&#xff1a;wildCard waildCard…

基于SpringBoot的在线拍卖系统

目录 1、 前言介绍 2、主要技术 3、系统流程和逻辑 4、系统结构设计 5、数据库设计表 6、运行截图(部分) 6.1管理员功能模块 6.2用户功能模块 6.3前台首页功能模块 7、源码获取 基于SpringBoot的在线拍卖系统录像 1、 前言介绍 随着社会的发展&#xff0c;社会的各行…

力扣大厂热门面试算法题 6-8

6. Z 字形变换&#xff0c;7. 整数反转&#xff0c;8. 字符串转换整数 (atoi)&#xff0c;每题做详细思路梳理&#xff0c;配套Python&Java双语代码&#xff0c; 2024.03.08 可通过leetcode所有测试用例。 目录 6. Z 字形变换 解题思路 边界条件 完整代码 Python Ja…

【手游联运平台搭建】游戏平台的作用

随着科技的不断发展&#xff0c;游戏行业也在不断壮大&#xff0c;而游戏平台作为连接玩家与游戏的桥梁&#xff0c;发挥着越来越重要的作用。游戏平台不仅为玩家提供了便捷的游戏体验&#xff0c;还为游戏开发者提供了广阔的市场和推广渠道。本文将从多个方面探讨游戏平台的作…

AWTK-MVVM 文件模型

AWTK-MVVM 文件模型 名称&#xff1a;file 功能&#xff1a;用于读写文件内容&#xff0c;浏览&#xff08;打开/保存&#xff09;文件。 内置属性 属性类型说明filenamestring文件名contentstring文件内容sizenumber文件大小auto_loadboolean是否自动加载文件内容is_dirtyb…

QT:用opencv的KNN识别图片中的LED数字(一)

前言 一款功能测试的软件demo,使用了QT作为界面,主要使用了opencv的KNN识别,使用gstreamer作为管道,用来打开图片。后期会写一篇打开摄像头实时识别的文章。 (正在写,未完成,稍候) 效果一预览: 效果二预览: 效果三预览: 正在写。。。 设计思路 1. 软件UI设…

关于阿里云服务器地域的选择方法,看这一篇就够了

阿里云服务器地域和可用区怎么选择&#xff1f;地域是指云服务器所在物理数据中心的位置&#xff0c;地域选择就近选择&#xff0c;访客距离地域所在城市越近网络延迟越低&#xff0c;速度就越快&#xff1b;可用区是指同一个地域下&#xff0c;网络和电力相互独立的区域&#…

亚洲股市下一步的关键:中国看财报、日本看汇率、韩国看治理、印度看基建

汇丰认为财报将是驱动中国股市走势的关键因素。目前市场预计2024年中国企业每股收益将增长16%。 日本央行转向、A股业绩复苏、印度基建、韩国市场改革......最近这段时间&#xff0c;亚洲各大市场涌现出了不同的交易主题。 汇丰银行指出&#xff0c;中国受到本土企业盈利能力…

直播美颜SDK开发:如何应对不同场景下的挑战?

直播美颜SDK的开发&#xff0c;便是为了满足这一需求&#xff0c;但面对不同场景下的挑战&#xff0c;开发者们需要克服各种技术难题&#xff0c;以确保美颜效果的稳定和自然。 首先&#xff0c;我们需要了解直播美颜SDK在不同场景下可能面临的挑战。这些挑战主要包括&#xff…

牛客论坛笔记~

文章目录 Redisspring整合redis实现点赞帖子的赞用户的赞 关注功能热帖排行redis存储验证码、登录凭证、用户信息 kafka阻塞队列kafka![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/d35be55986344b548710985cd8ecbd87.png)触发事件处理事件 Redis高级网站数据统计…
最新文章