当前位置: 首页 > news >正文

easyx--上半部分

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<iostream>
#include<bits/stdc++.h>
using namespace std;

//只能在c++上运行(文件为.cpp)
#include<easyx.h>//这个只包含最新的API(函数)
#include<graphics.h>//这个头文件包含了<easyx.h>,还包含了已经不推荐使用了的函数
//定义消息结构体变量
ExMessage msg = { 0 };
//绘制图形
void drawShape() {//更多可看easys文档或右击任意一个函数->转到定义
	//绘制一个点
	putpixel(50, 50, RGB(251, 249, 245));

	//设置线条颜色
	setlinecolor(RED);
	//设置线条样式
	setlinestyle(PS_SOLID, 3);//样式,宽度
	//绘制一条线//起点(x1,y1)->终点(x2,y2)
	line(0, 0, 666, 666);
	//line(0, 0, getwidth(), getheight());getwidth(), getheight() 获取窗口宽度,高度

	//绘制一个正矩形//左上角(x1,y1)->右下角(x2,y2)
	rectangle(50, 50, 100, 100);//无填充矩形
	//设置填充颜色
	setfillcolor(RGB(196, 151, 141));//在之前设置//会影响后面所有,要改变则在后面绘制时重设
	fillrectangle(50, 100, 100, 150);//填充矩形
	solidrectangle(50, 160, 100, 210);//无边框填充矩形

	//绘制一个圆角矩形左上角(x1,y1)->右下角(x2,y2)+圆角(椭圆)的高度,宽度
	roundrect(110, 110, 160, 160, 5, 6);//无填充 //fillroundrect填充 //solidroundrect无边框填充

	//绘制一个圆形//圆心(x,y)+半径(r)
	circle(150, 150, 30);//无填充 //fillcircle填充 //solidcircle无边框填充

	//绘制一个椭圆//将其放在矩形中的左上角(x1,y1)->右下角(x2,y2)
	ellipse(150, 180, 200, 210);//无填充 //fillellipse填充 //solidellipse无边框填充

	//绘制折线
	POINT points[] = { {0,0},{50,50},{666,666},{333,333} };
	polyline(points, 4);//points,几个点
}
//绘制文字
void drawText() {
	//设置文字大小//高度,宽度,字体名称
	//error:“settextstyle”: 没有重载函数可以转换所有参数类型:1.在字符串前面加大写的L;2:用TEXT()/_T把字符串包起来3:项目->属性->配置属性->常规(高级)->字符集->多字节
	settextstyle(38,0,"微软雅黑");
	//设置文字颜色
	settextcolor(GREEN);
	//设置背景模式(防止覆盖背景图形)
	setbkmode(TRANSPARENT);
	//绘制文字
	outtextxy(333, 333, "神经病");
	//整形的数输出
	int score = 666;
	char a[50];
	sprintf(a, "%d", score);
	outtextxy(0, 555, a);
}
//文字居中
void centerText() {
	int x = 30, y = 380, h = 60, w = 200;
	//绘制矩形
	setfillcolor(YELLOW);
	fillrectangle(x, y, x + w, y + h);
	//绘制文字
	settextcolor(WHITE);
	int hspace = (w - textwidth("I LOVE YOU")) / 2;//宽度,textwidth求文字宽度
	int vspace = (h - textheight("I LOVE YOU")) / 2;//高度,textheight求文字高度
	outtextxy(x + hspace, y+vspace, "I LOVE YOU");
}
//消息处理
void MESSage() {
	//定义消息结构体变量
	//ExMessage msg = { 0 };//全局变量
	while (true) {//不断获取消息
		//获取消息
		if (peekmessage(&msg, EX_MOUSE)) {//bool型
			switch (msg.message) {
			case WM_LBUTTONDOWN:         //左键按下
				printf("左键按下pos(%d,%d)\n", msg.x, msg.y);//点击坐标
				break;
			case WM_NCRBUTTONDOWN:       //右键按下
				break;
			case WM_MBUTTONDOWN:         //中键按下
				break;
			case WM_MOUSEWHEEL:          //滚轮按下
				printf("滚轮滚动 dir(%d)\n", msg.wheel);//正数->(向上)像屏幕滚动,负数->(向下)向自己滚动
				break;
			case WM_LBUTTONDBLCLK:       //左键双击//双击需要在打开窗口时加上EX_DBLCLKS
				break;
			case WM_MOUSEMOVE:           //鼠标移动
				break;
			}
		}
	}
}
/漂亮的按键+按键消息(上下左右)
//mx,my是否在指定的矩形区域
bool inArea(int mx, int my, int x, int y, int w, int h) {
	if (mx > x && mx<x + w && my>y && my < y + h) {
		return true;
	}
	return false;
}
bool button(int x, int y, int w, int h, const char* text) {
	//绘制按钮颜色
	if(inArea(msg.x, msg.y, x, y, w, h)) {
		setfillcolor(RGB(195, 153, 137));
	}
	else {
		setfillcolor(RGB(250, 250, 250));
	}
	//绘制按钮
	fillroundrect(x, y, x + w, y + h, 5, 5);
	//绘制按钮文本
	int hspace = (w - textwidth(text)) / 2;
	int vspace = (h - textheight(text)) / 2;
	settextcolor(BLACK);
	outtextxy(x + hspace, y + vspace, text);
	//判断按钮是否被点击
	if (msg.message == WM_LBUTTONDOWN && inArea(msg.x, msg.y, x, y, w, h)) {
		return true;
	}
	return false;
}
void buttlefull() {
	//设置背景模式
	setbkmode(TRANSPARENT);
	//定义小球的属性
	int x = 50, y = 50, r = 50, speep = 3, vx = 0, vy = 0;
	while (true) {
		//获取消息
		if (peekmessage(&msg, EX_MOUSE|EX_KEY)) {

		}
		//双缓冲绘图:防止绘图时文字一闪一闪//所有的绘图代码必须放在begin和end之间
		//判断按键消息//可放在双缓冲绘图外面
		if (msg.message == WM_KEYDOWN) {
			printf("keydown\n");
			//具体判断是哪个键按下
			switch (msg.vkcode) {//虚拟键值
			case VK_UP:
				printf("上键按下\n");
				vy = -1;
				break;
			case VK_DOWN:
				printf("下键按下\n");
				vy = 1;
				break;
			case VK_LEFT:
				printf("左键按下\n");
				vx = -1;
				break;
			case VK_RIGHT:
				printf("右键按下\n");
				vx = 1;
				break;
			case VK_SPACE:
				printf("空格\n");
				break;
			case 'A'://对字符键,字符‘’里面大写
				break;
			}
		}
		else if (msg.message == WM_KEYUP) {
			printf("keyup\n");
			switch (msg.vkcode) {//虚拟键值
			case VK_UP:
				printf("上键按下\n");
				vy = 0;
				break;
			case VK_DOWN:
				printf("下键按下\n");
				vy = 0;
				break;
			case VK_LEFT:
				printf("左键按下\n");
				vx = 0;
				break;
			case VK_RIGHT:
				printf("右键按下\n");
				vx = 0;
				break;
			case VK_SPACE:
				printf("空格\n");
				break;
			case 'A'://对字符键,字符‘’里面大写
				break;
			}

		}
		BeginBatchDraw();
		cleardevice();//清屏
		if (button(20, 20, 150, 35, "My friend!")) {
			printf("YES!\n");
		}
		if (button(200, 20, 150, 35, " NO my friend!")) {
			printf("OOOOOO!\n");
		}
		//绘制小球
		setfillcolor(RGB(138, 27, 255));
		solidcircle(x, y, r);
		x += speed * vx;
		y += speed * vy;
		EndBatchDraw();
		Sleep(10);//使程序延迟十秒
		outtextxy(0, 0, "NONONONONONO");//若不放在里面会一闪一闪(看不见)
		//把消息类型设置为0
		msg.message = 0;
	}
}
int main(){

	//创建一个图形窗口 宽度*高度
	//都使用用‘|’
	initgraph(666, 666,EX_SHOWCONSOLE|EX_NOMINIMIZE| EX_DBLCLKS);// EX_SHOWCONSOLE 为了显示控制台---可加可不加---不加的话控制台不显示//EX_NOCLOSE---无关闭按钮//EX_NOMINIMIZE---取消最小化按钮


	//设置窗口的背景颜色
	setbkcolor(RGB(20,134,21));//直接显示三原色的值
	//setbkcolor(WHITE);//或直接输入颜色
	
	//(清除之前颜色)用设置的颜色填充整个窗口
	cleardevice();


	//窗口的坐标体系:窗口左上角(不含标题栏)是坐标原点,x轴向右增大,y轴向下增大


	//绘制图形
	//drawShape();

	//绘制文字
	//drawText();

	//文字居中
	//centerText();

	//获取消息
	//MESSage();
	/漂亮按键
	buttlefull();
	getchar();//防止程序退出
    return 0;
}

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<iostream>
#include<bits/stdc++.h>
using namespace std;

//只能在c++上运行(文件为.cpp)
#include<easyx.h>//这个只包含最新的API(函数)
#include<graphics.h>//这个头文件包含了<easyx.h>,还包含了已经不推荐使用了的函数
//定义消息结构体变量
ExMessage msg = { 0 };
//绘制图形
void drawShape() {//更多可看easys文档或右击任意一个函数->转到定义
    //绘制一个点
    putpixel(50, 50, RGB(251, 249, 245));

    //设置线条颜色
    setlinecolor(RED);
    //设置线条样式
    setlinestyle(PS_SOLID, 3);//样式,宽度
    //绘制一条线//起点(x1,y1)->终点(x2,y2)
    line(0, 0, 666, 666);
    //line(0, 0, getwidth(), getheight());getwidth(), getheight() 获取窗口宽度,高度

    //绘制一个正矩形//左上角(x1,y1)->右下角(x2,y2)
    rectangle(50, 50, 100, 100);//无填充矩形
    //设置填充颜色
    setfillcolor(RGB(196, 151, 141));//在之前设置//会影响后面所有,要改变则在后面绘制时重设
    fillrectangle(50, 100, 100, 150);//填充矩形
    solidrectangle(50, 160, 100, 210);//无边框填充矩形

    //绘制一个圆角矩形左上角(x1,y1)->右下角(x2,y2)+圆角(椭圆)的高度,宽度
    roundrect(110, 110, 160, 160, 5, 6);//无填充 //fillroundrect填充 //solidroundrect无边框填充

    //绘制一个圆形//圆心(x,y)+半径(r)
    circle(150, 150, 30);//无填充 //fillcircle填充 //solidcircle无边框填充

    //绘制一个椭圆//将其放在矩形中的左上角(x1,y1)->右下角(x2,y2)
    ellipse(150, 180, 200, 210);//无填充 //fillellipse填充 //solidellipse无边框填充

    //绘制折线
    POINT points[] = { {0,0},{50,50},{666,666},{333,333} };
    polyline(points, 4);//points,几个点
}
//绘制文字
void drawText() {
    //设置文字大小//高度,宽度,字体名称
    //error:“settextstyle”: 没有重载函数可以转换所有参数类型:1.在字符串前面加大写的L;2:用TEXT()/_T把字符串包起来3:项目->属性->配置属性->常规(高级)->字符集->多字节
    settextstyle(38,0,"微软雅黑");
    //设置文字颜色
    settextcolor(GREEN);
    //设置背景模式(防止覆盖背景图形)
    setbkmode(TRANSPARENT);
    //绘制文字
    outtextxy(333, 333, "神经病");
    //整形的数输出
    int score = 666;
    char a[50];
    sprintf(a, "%d", score);
    outtextxy(0, 555, a);
}
//文字居中
void centerText() {
    int x = 30, y = 380, h = 60, w = 200;
    //绘制矩形
    setfillcolor(YELLOW);
    fillrectangle(x, y, x + w, y + h);
    //绘制文字
    settextcolor(WHITE);
    int hspace = (w - textwidth("I LOVE YOU")) / 2;//宽度,textwidth求文字宽度
    int vspace = (h - textheight("I LOVE YOU")) / 2;//高度,textheight求文字高度
    outtextxy(x + hspace, y+vspace, "I LOVE YOU");
}
//消息处理
void MESSage() {
    //定义消息结构体变量
    //ExMessage msg = { 0 };//全局变量
    while (true) {//不断获取消息
        //获取消息
        if (peekmessage(&msg, EX_MOUSE)) {//bool型
            switch (msg.message) {
            case WM_LBUTTONDOWN:         //左键按下
                printf("左键按下pos(%d,%d)\n", msg.x, msg.y);//点击坐标
                break;
            case WM_NCRBUTTONDOWN:       //右键按下
                break;
            case WM_MBUTTONDOWN:         //中键按下
                break;
            case WM_MOUSEWHEEL:          //滚轮按下
                printf("滚轮滚动 dir(%d)\n", msg.wheel);//正数->(向上)像屏幕滚动,负数->(向下)向自己滚动
                break;
            case WM_LBUTTONDBLCLK:       //左键双击//双击需要在打开窗口时加上EX_DBLCLKS
                break;
            case WM_MOUSEMOVE:           //鼠标移动
                break;
            }
        }
    }
}
/漂亮的按键+按键消息(上下左右)
//mx,my是否在指定的矩形区域
bool inArea(int mx, int my, int x, int y, int w, int h) {
    if (mx > x && mx<x + w && my>y && my < y + h) {
        return true;
    }
    return false;
}
bool button(int x, int y, int w, int h, const char* text) {
    //绘制按钮颜色
    if(inArea(msg.x, msg.y, x, y, w, h)) {
        setfillcolor(RGB(195, 153, 137));
    }
    else {
        setfillcolor(RGB(250, 250, 250));
    }
    //绘制按钮
    fillroundrect(x, y, x + w, y + h, 5, 5);
    //绘制按钮文本
    int hspace = (w - textwidth(text)) / 2;
    int vspace = (h - textheight(text)) / 2;
    settextcolor(BLACK);
    outtextxy(x + hspace, y + vspace, text);
    //判断按钮是否被点击
    if (msg.message == WM_LBUTTONDOWN && inArea(msg.x, msg.y, x, y, w, h)) {
        return true;
    }
    return false;
}
void buttlefull() {
    //设置背景模式
    setbkmode(TRANSPARENT);
    //定义小球的属性
    int x = 50, y = 50, r = 50, speep = 3, vx = 0, vy = 0;
    while (true) {
        //获取消息
        if (peekmessage(&msg, EX_MOUSE|EX_KEY)) {

        }
        //双缓冲绘图:防止绘图时文字一闪一闪//所有的绘图代码必须放在begin和end之间
        //判断按键消息//可放在双缓冲绘图外面
        if (msg.message == WM_KEYDOWN) {
            printf("keydown\n");
            //具体判断是哪个键按下
            switch (msg.vkcode) {//虚拟键值
            case VK_UP:
                printf("上键按下\n");
                vy = -1;
                break;
            case VK_DOWN:
                printf("下键按下\n");
                vy = 1;
                break;
            case VK_LEFT:
                printf("左键按下\n");
                vx = -1;
                break;
            case VK_RIGHT:
                printf("右键按下\n");
                vx = 1;
                break;
            case VK_SPACE:
                printf("空格\n");
                break;
            case 'A'://对字符键,字符‘’里面大写
                break;
            }
        }
        else if (msg.message == WM_KEYUP) {
            printf("keyup\n");
            switch (msg.vkcode) {//虚拟键值
            case VK_UP:
                printf("上键按下\n");
                vy = 0;
                break;
            case VK_DOWN:
                printf("下键按下\n");
                vy = 0;
                break;
            case VK_LEFT:
                printf("左键按下\n");
                vx = 0;
                break;
            case VK_RIGHT:
                printf("右键按下\n");
                vx = 0;
                break;
            case VK_SPACE:
                printf("空格\n");
                break;
            case 'A'://对字符键,字符‘’里面大写
                break;
            }

        }
        BeginBatchDraw();
        cleardevice();//清屏
        if (button(20, 20, 150, 35, "My friend!")) {
            printf("YES!\n");
        }
        if (button(200, 20, 150, 35, " NO my friend!")) {
            printf("OOOOOO!\n");
        }
        //绘制小球
        setfillcolor(RGB(138, 27, 255));
        solidcircle(x, y, r);
        x += speed * vx;
        y += speed * vy;
        EndBatchDraw();
        Sleep(10);//使程序延迟十秒
        outtextxy(0, 0, "NONONONONONO");//若不放在里面会一闪一闪(看不见)
        //把消息类型设置为0
        msg.message = 0;
    }
}
int main(){

    //创建一个图形窗口 宽度*高度
    //都使用用‘|’
    initgraph(666, 666,EX_SHOWCONSOLE|EX_NOMINIMIZE| EX_DBLCLKS);// EX_SHOWCONSOLE 为了显示控制台---可加可不加---不加的话控制台不显示//EX_NOCLOSE---无关闭按钮//EX_NOMINIMIZE---取消最小化按钮


    //设置窗口的背景颜色
    setbkcolor(RGB(20,134,21));//直接显示三原色的值
    //setbkcolor(WHITE);//或直接输入颜色
    
    //(清除之前颜色)用设置的颜色填充整个窗口
    cleardevice();


    //窗口的坐标体系:窗口左上角(不含标题栏)是坐标原点,x轴向右增大,y轴向下增大


    //绘制图形
    //drawShape();

    //绘制文字
    //drawText();

    //文字居中
    //centerText();

    //获取消息
    //MESSage();
    /漂亮按键
    buttlefull();
    getchar();//防止程序退出
    return 0;
}

相关文章:

  • DeepSeek写连连看手机小游戏
  • 算法题(80):环形链表II
  • 002 docker安装rocketmq
  • C#上位机--二级运算符
  • unity学习61:UI布局layout
  • 如何实现某短视频平台批量作品ID的作品详情采集
  • 图数据库Neo4j面试内容整理-Neo4j 数据库模型设计
  • React + TypeScript 数据模型驱动数据字典生成示例
  • PR 安装包 2018-2024(Win,Mac)文中为使用技巧和教程
  • Python毕业设计选题:基于协同过滤算法的儿童图书推荐系统_django
  • ‌KNN算法优化实战分享——基于空间数据结构的工业级实战指南
  • 【HarmonyOS Next】鸿蒙TaskPool和Worker详解 (一)
  • HAProxy的ACL
  • linux vim 撤销 回退操作
  • 【第十节】C++设计模式(结构型模式)-Flyweight( 享元)模式
  • mysql --- 相关基础知识整理
  • 【Linux】TCP 全连接队列与 tcpdump 抓包
  • iOS开发之GCD信号量dispatch_semaphore_t源码分析和使用
  • JavaScript 系列之:垃圾回收机制
  • zotero:如何快捷使用硅基流动(siliconflow)的deepseek?
  • 专业网站建设价格最优/哪里有网站推广优化
  • 科泉网站/百度的合作网站有哪些
  • wordpress DUX商店模式/百度首页排名优化服务
  • 电子商务的网站建设的可用性/网站seo排名公司
  • 传统网站怎么做前端模块/网站空间
  • 做美工参考网站/企业线上培训课程