C/C++图形化编程(2)

news2024/11/24 0:07:51

归纳编程学习的感悟,
记录奋斗路上的点滴,
希望能帮到一样刻苦的你!
如有不足欢迎指正!
共同学习交流!
🌎欢迎各位→点赞 👍+ 收藏⭐ + 留言​📝
站在巨人的肩上是为了超过巨人!

一起加油!

 

目录

五、实现EasyX按键交互功能:

六、 实现EasyX中鼠标交互功能:


五、实现EasyX按键交互功能:

1.阻塞按键交互        不按键就不运行,像C语言中的scanf函数,不输入,程序就不往下运行。

2.非阻塞按键交互        不按键程序仍在运行

案例:

1.小球移动:

2.按键控制移动:

  • 双缓冲贴图(解决闪烁问题)
    • 开始双缓冲        BeginBatchDraw();
    • 显示一帧           FlushBatchDraw();
    • 结束双缓冲       EndBatchDraw();
#include<stdio.h>
#include<graphics.h>
#include<time.h>
#include<conio.h>//_getch()函数	不需要回车确认函数,_kbhit()函数	判断存在按键再去处理
//定义球的结构体
struct Ball {
	int x;//球的坐标
	int y;
	int r;//球的半径
	int dx;//增量x
	int dy;//增量y
};
Ball ball = { 300,300,15,5,-4 };
Ball myball = {400,400,15,5,5};
void DrawBall(struct Ball ball) {//画球
	//给球填充颜色为红色
	setfillcolor(RED);
	//画出球
	solidcircle(ball.x, ball.y, ball.r);
}
void MoveBall() {//移动球
	if (ball.x - ball.r < 0 || ball.x + ball.r>=600) {
		ball.dx = -ball.dx;//撞左壁
	}
	if (ball.y - ball.r < 0 || ball.y + ball.r>=600) {
		ball.dy = -ball.dy;//撞右壁
	}
	ball.x += ball.dx;
	ball.y += ball.dy;
}
//定时器	去控制自动移动的东西
int Timer(int duration, int id) {
	static int startTime[10];//通过静态变量做10个定时器,静态变量自动被初始化
	int endTime = clock();//clock()函数统计程序运行到当前代码所需的时间
	if (endTime - startTime[id] > duration) {//触发定时器返回1
		startTime[id] = endTime;//开始时间改为上一次的结束时间
		return 1;
	}
	return 0;
}
void KeyDown() {//接收用户按键
	int useKey =_getch();
	switch (useKey) {
	case'w':
	case'W':
	case 72://小键盘的箭头上
		myball.y -= 5;
		break;
	case 's':
	case'S':
	case 80:
		myball.y += 5;
		break;
	case'a':
	case'A':
	case 75:
		myball.x -= 5;
		break;
	case'd':
	case'D':
	case 77:
		myball.x += 5;
		break;

	}
}
void KeyDown2() {//异步交互
	if (GetAsyncKeyState(VK_UP)) {
		myball.y -= 5;
	}
	if (GetAsyncKeyState(VK_DOWN)) {
		myball.y += 5;
	}
	if (GetAsyncKeyState(VK_LEFT)) {
		myball.x -= 5;
	}
	if (GetAsyncKeyState(VK_RIGHT)) {
		myball.x += 5;
	}
}
int main() {
	initgraph(600, 600);//创建800x800的窗口
	BeginBatchDraw();//双缓冲贴图,开始双缓冲
	while (1) {
		cleardevice();
		DrawBall(ball);
		DrawBall(myball);
		if (Timer(20, 0)) {
			MoveBall();
		}
		if (_kbhit()) {//判断存在按键再去处理
			KeyDown();
		}
		if (Timer(20, 1)) {
			KeyDown2();
		}
		FlushBatchDraw();//显示一帧
		//Sleep(20);//阻塞函数,做移动一般不用Sleep,他会阻塞整个程序,一般用定时器去做
	}
	EndBatchDraw();//结束双缓冲
	closegraph();
	return 0;
}

六、 实现EasyX中鼠标交互功能:

ExMassag类型的变量,去存储鼠标消息

获取鼠标消息:peekmassage(&变量)

讨论鼠标消息

  • msg.massage区分鼠标消息的类型
  • msg.x   msg.y鼠标的当前坐标
#include<graphics.h>
int main() {
	initgraph(600, 600);
	ExMessage msg;
	//按左键画圆,右键画方
	while (1) {
		while (peekmessage(&msg)) {
			switch (msg.message) {
				//windows massage left button down
			case WM_LBUTTONDOWN:
				circle(msg.x, msg.y, 10);
				break;
				//windows massage right button down
			case WM_RBUTTONDOWN:
				rectangle(msg.x - 10, msg.y - 10, msg.x + 10, msg.y + 10);
				break;
			}
		}
	}
	closegraph();
	return 0;
}

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

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

相关文章

esp32使用lvgl,给图片取模显示图片

使用LVGL官方工具。 https://lvgl.io/tools/imageconverter 上传图片&#xff0c;如果想要透明效果&#xff0c;那么选择 输出格式C array&#xff0c;点击Convert进行转换。 下载.c文件放置到工程下使用即可。

Py之tensorflow-addons:tensorflow-addons的简介、安装、使用方法之详细攻略

Py之tensorflow-addons&#xff1a;tensorflow-addons的简介、安装、使用方法之详细攻略 目录 tensorflow-addons的简介 tensorflow-addons的安装 tensorflow-addons的使用方法 1、使用 TensorFlow Addons 中的功能&#xff1a; tensorflow-addons的简介 TensorFlow Addon…

本地搜索文件太慢怎么办?用Everything搜索秒出结果(附安装包)

每次用电脑本地的搜索都慢的一批&#xff0c;后来发现了一个搜索利器 基本上搜索任何文件都不用等待。 并且页面非常简洁&#xff0c;也没有任何广告&#xff0c;用起来非常舒服。 软件官网如下&#xff1a; voidtools 官网提供三个版本&#xff0c;用起来差别不大。 网盘链…

Javacv-利用Netty实现推流直播复用(flv)

前言 上一篇文章《JavaCV之rtmp推流&#xff08;FLV和M3U8&#xff09;》介绍了javacv的基本使用&#xff0c;今天来讲讲如何实现推流复用。 以监控摄像头的直播为例&#xff0c;通常分为三步&#xff1a; 从设备获取音视频流利用javacv进行解码&#xff08;例如flv或m3u8&am…

(2021|CoRR,AugCLIP,优化)FuseDream:通过改进的 CLIP+GAN 空间优化实现免训练文本到图像生成

FuseDream: Training-Free Text-to-Image Generation with Improved CLIPGAN Space Optimization 公众&#xff1a;EDPJ&#xff08;添加 VX&#xff1a;CV_EDPJ 或直接进 Q 交流群&#xff1a;922230617 获取资料&#xff09; 目录 0. 摘要 1. 简介 2. CLIPGAN 文本到图…

如何使用kali来进行一次ddos攻击

本文章用于记录自己的学习路线&#xff0c;不用于其他任何途径! ! ! 哈喽啊&#xff01;又是好久不见&#xff0c;本博主在之前发过一个ddos攻击的介绍。 emm…虽然那篇文章也提到了ddos攻击的方式&#xff0c;但太过于简陋&#xff0c;好像也没有什么用&#xff0c;so&#…

金蝶云星空权限项表结构

文章目录 金蝶云星空权限项表结构BOS平台【权限项】MSSQL脚本使用场景优点减少手工一个个创建的人工成本&#xff0c;还容易出错保留内码&#xff0c;可以在代码层级使用&#xff0c;方便 金蝶云星空权限项表结构 BOS平台【权限项】 MSSQL脚本 --权限项主表 SELECT * FROM db…

快速学习 webpack

目录 1. webpack基本概念 webpack能做什么&#xff1f; 2. webpack的使用步骤 2.1_webpack 更新打包 3. webpack的配置 3.1_打包流程图 3.2_案例-webpack隔行变色 3.3_插件-自动生成html文件 3.4_加载器 - 处理css文件问题 3.5_加载器 - 处理css文件 3.6_加载器 - 处…

大数据----基于sogou.500w.utf8数据的MapReduce编程

目录 一、前言二、准备数据三、编程实现3.1、统计出搜索过包含有“仙剑奇侠传”内容的UID及搜索关键字记录3.2、统计rank<3并且order>2的所有UID及数量3.3、上午7-9点之间&#xff0c;搜索过“赶集网”的用户UID3.4、通过Rank&#xff1a;点击排名 对数据进行排序 四、参…

jQuery: 整理4---创建元素和添加元素

1.创建元素&#xff1a;$("内容") const p "<p>这是一个p标签</p>" console.log(p)console.log($(p)) 2. 添加元素 2.1 前追加子元素 1. 指定元素.prepend(内容) -> 在指定元素的内部的最前面追加内容&#xff0c;内容可以是字符串、…

代码随想录算法训练营 | day60 单调栈 84.柱状图中最大的矩形

刷题 84.柱状图中最大的矩形 题目链接 | 文章讲解 | 视频讲解 题目&#xff1a;给定 n 个非负整数&#xff0c;用来表示柱状图中各个柱子的高度。每个柱子彼此相邻&#xff0c;且宽度为 1 。 求在该柱状图中&#xff0c;能够勾勒出来的矩形的最大面积。 1 < heights.len…

动态规划系列 | 最长上升子序列模型(上)

文章目录 最长上升子序列回顾题目描述问题分析程序代码复杂度分析 怪盗基德的滑翔翼题目描述输入格式输出格式 问题分析程序代码复杂度分析 登山题目描述输入格式输出格式 问题分析程序代码复杂度分析 合唱队形题目描述输入格式输出格式 问题分析程序代码复杂度分析 友好城市题…

基于Java SSM框架实现医院挂号上班打卡系统项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架实现医院挂号上班打卡系统演示 摘要 在网络发展的时代&#xff0c;国家对人们的健康越来越重视&#xff0c;医院的医疗设备更加先进&#xff0c;医生的医术、服务水平也不断在提高&#xff0c;给用户带来了很大的选择余地&#xff0c;而且人们越来越追求更个…

Linux与Bash 编程——Linux文件处理命令-L1

目录&#xff1a; linux系统与shell环境准备 Linux系统简介操作系统简史Linux的发行版&#xff1a;Linux与Windows比较&#xff1a;Linux安装安装包下载Linux的访问方式远程登录方式远程登录软件&#xff1a;mobaxterm的使用&#xff1a;使用电脑命令行连接&#xff1a;sshd的…

系列十四、SpringBoot + JVM参数配置实战调优

一、SpringBoot JVM参数配置实战调优 1.1、概述 前面的系列文章大篇幅的讲述了JVM的内存结构以及各种参数&#xff0c;今天就使用SpringBoot项目实战演示一下&#xff0c;如何进行JVM参数调优&#xff0c;如果没有阅读过前面系列文章的朋友&#xff0c;建议先阅读后再看本篇文…

python库win32gui,windows的API管理及自动化

使用了python实现了打开windows的鼠标属性页面并更改鼠标的主键的功能&#xff0c;今天主要是针对使用的库进行一个讲解&#xff0c;也即是win32gui库的详细讲解。 对于windows的打开的窗口中&#xff0c;可以通过窗口的类型和名字来进行窗口的具体查找&#xff0c;使用的win3…

Topaz Video AI 视频修复工具(内附安装压缩包win+Mac)

目录 一、Topaz Video AI 简介 二、Topaz Video AI 安装下载 三、Topaz Video AI 使用 最近玩上了pika1.0和runway的图片转视频&#xff0c;发现生成出来的视频都是有点糊的&#xff0c;然后就找到这款AI修复视频工具 Topaz Video AI。 一、Topaz Video AI 简介 Topaz Video…

外贸多语言电商系统的运作流程

外贸多语言电商系统的运作流程通常包括以下几个步骤&#xff1a; 1. 网站搭建和设计&#xff1a;首先需要搭建一个多语言电商网站&#xff0c;可以选择现有的电商平台或自行开发。网站设计应考虑不同语言和文化背景的用户需求&#xff0c;包括界面布局、导航结构、语言切换等。…

在线简历制作!这3个简历模板网站超好用

马上就要到一年一度的金九银十&#xff0c;找工作的季节啦。如何制作一份优质的简历&#xff0c;是每位找工作人都想探询的问题&#xff0c;如何才能让自己的简历脱颖而出&#xff0c;选择一个优质的简历制作网站十分重要&#xff0c;下面就来推荐3款超好用的在线简历制作网站&…

4.7 【共享源】流的生产者(二)

七,模式 流的模式决定了Screen如何使前台缓冲区可用。生产者通过调用screen_set_stream_property_iv()并设置SCREEN_PROPERTY_MODE属性来设置模式。有效模式如下: 7.1 SCREEN_STREAM_MODE_DEFAULT 如果生产者应用程序没有在流上明确设置 SCREEN_PROPERTY_MODE 属性,则 Sc…