easyX实践上手操作小项目

easyX实践上手操作小项目

  • 效果展示
  • 主菜单的装饰
  • 玩法介绍界面
  • 开始游戏界面
  • 制作团队界面
  • 排行榜界面
  • 注:main()函数
  • 拓展数据库
  • 小结

在这里插入图片描述

这里我们学习过easyX的基础知识后,看看是否能实践操作一下,制作一个属于自己的游戏界面呢?

基础知识入口:
链接: 基础知识哦

效果展示

在这里插入图片描述
点击选项也可以进入其对应的界面

注意:这里只是实现了点击切换界面以及一点装饰的功能

主菜单的装饰

这是总的函数
在这里插入图片描述
其中png图片我是放在了该项目文件夹里

// 主菜单界面渲染
void menu()
{//设置背景颜色,清屏setbkcolor(WHITE);cleardevice();//加载背景图片IMAGE img_bk,img_kunkun,img_kun1;loadimage(&img_bk, "./kun_bk.png", 800, 640);putimage(0, 0, &img_bk);loadimage(&img_kunkun, "./kunkun.png", 200, 300);putimage(100, 100,&img_kunkun);loadimage(&img_kun1, "./kun1.png", 250, 500);putimage(300, 120, &img_kun1);// 绘制开始界面,菜单setfillcolor(LIGHTGRAY);setlinecolor(BLACK);setbkmode(TRANSPARENT);fillrectangle(500, 110, 720, 180); // 220  70fillrectangle(500, 210, 720, 280);fillrectangle(500, 310, 720, 380);fillrectangle(500, 410, 720, 480);fillrectangle(500, 510, 720, 580);char arr1[] = "开始游戏";char arr2[] = "玩法介绍";char arr3[] = "排行榜";char arr4[] = "制作团队";char arr5[] = "退出游戏";// 文字居中int width = 220 / 2 - textwidth(arr1) / 2;int heigh = 70 / 2 - textheight(arr1) / 2;//打印文字settextcolor(BLACK);outtextxy(width + 500, heigh + 110, arr1);outtextxy(width + 500, heigh + 210, arr2);outtextxy(width + 500, heigh + 310, arr3);outtextxy(width + 500, heigh + 410, arr4);outtextxy(width + 500, heigh + 510, arr5);//音乐开关的按钮setfillcolor(LIGHTRED);fillcircle(80, 70, 30);settextcolor(YELLOW);settextstyle(20, 0, "楷体");outtextxy(55, 65, "音乐");//鼠标键位操作while (1){if (MouseHit()){MOUSEMSG msg = GetMouseMsg();// 左键点击播放音乐  右键停止播放if (msg.x > 65 && msg.x < 95 && msg.y> 55 && msg.y < 85){switch (msg.uMsg){case WM_LBUTTONDOWN://左键mciSendString("open giegie.mp3 alias BGM", 0, 0, 0);mciSendString("play BGM repeat", 0, 0, 0);break;case WM_RBUTTONDOWN://右键mciSendString("pause BGM", 0, 0, 0);break;}}// 制作团队界面if (msg.x > 500 && msg.x < 720 && msg.y> 410 && msg.y < 480){switch (msg.uMsg){case WM_LBUTTONDOWN://左键make_team();break;}}// 开始游戏界面if (msg.x > 500 && msg.x < 720 && msg.y> 110 && msg.y < 180){switch (msg.uMsg){case WM_LBUTTONDOWN://左键game_begin();break;}}// 玩法介绍界面if (msg.x > 500 && msg.x < 720 && msg.y> 210 && msg.y < 280){switch (msg.uMsg){case WM_LBUTTONDOWN://左键game_introduce();break;}}// 排行榜界面if (msg.x > 500 && msg.x < 720 && msg.y> 310 && msg.y < 380){switch (msg.uMsg){case WM_LBUTTONDOWN://左键ranking();break;}}// 退出游戏if (msg.x > 500 && msg.x < 720 && msg.y> 510 && msg.y < 580){switch (msg.uMsg){case WM_LBUTTONDOWN://左键closegraph();exit(0);}}}}getchar();closegraph;
}

玩法介绍界面

void game_introduce()
{// 设置背景颜色为白色,清屏setbkcolor(WHITE);cleardevice();// 返回 框的创建setfillcolor(LIGHTGRAY);setlinecolor(BLACK);setbkmode(TRANSPARENT);fillrectangle(500, 510, 720, 580);char arr3[] = "返回";// 文字居中int width = 220 / 2 - textwidth(arr3) / 2;int heigh = 70 / 2 - textheight(arr3) / 2;// 打印文字settextcolor(BLACK);outtextxy(width + 500, heigh + 510, arr3);// 返回 框的点击操作while (1){if (MouseHit()){MOUSEMSG msg = GetMouseMsg();if (msg.x > 500 && msg.x < 720 && msg.y> 510 && msg.y < 580){switch (msg.uMsg){case WM_LBUTTONDOWN://左键menu();break;}}}}
}

开始游戏界面

void game_begin()
{// 设置背景颜色为白色,清屏setbkcolor(WHITE);cleardevice();// 三个 框的创建setfillcolor(LIGHTGRAY);setlinecolor(BLACK);setbkmode(TRANSPARENT);fillrectangle(500, 110, 720, 180); // 220  70fillrectangle(500, 210, 720, 280);fillrectangle(500, 510, 720, 580);char arr1[] = "新的游戏";char arr2[] = "读取文档";char arr3[] = "返回";// 文字居中int width = 220 / 2 - textwidth(arr3) / 2;int heigh = 70 / 2 - textheight(arr3) / 2;// 打印文字settextcolor(BLACK);outtextxy(width + 500, heigh + 110, arr1);outtextxy(width + 500, heigh + 210, arr2);outtextxy(width + 500, heigh + 510, arr3);// 返回 框的点击操作while (1){if (MouseHit()){MOUSEMSG msg = GetMouseMsg();//返回 操作if (msg.x > 500 && msg.x < 720 && msg.y> 510 && msg.y < 580){switch (msg.uMsg){case WM_LBUTTONDOWN://左键menu();break;}}// 新的游戏界面if (msg.x > 500 && msg.x < 720 && msg.y> 110 && msg.y < 180){switch (msg.uMsg){case WM_LBUTTONDOWN://左键role_select();break;}}}}
}

制作团队界面

void make_team()
{// 设置背景颜色为白色,清屏setbkcolor(WHITE);cleardevice();// kunkun图片加载IMAGE img_kunkun2;loadimage(&img_kunkun2, "./kunkun2.png", 200, 200);putimage(50, 70, &img_kunkun2);// 返回 框的创建setfillcolor(LIGHTGRAY);setlinecolor(BLACK);setbkmode(TRANSPARENT);fillrectangle(500, 510, 720, 580);char arr[] = "返回";// 文字居中int width = 220 / 2 - textwidth(arr) / 2;int heigh = 70 / 2 - textheight(arr) / 2;// 打印文字settextcolor(BLACK);outtextxy(width + 500, heigh + 510, arr);// 返回 框的点击操作while (1){if (MouseHit()){MOUSEMSG msg = GetMouseMsg();if (msg.x > 500 && msg.x < 720 && msg.y> 510 && msg.y < 580){switch (msg.uMsg){case WM_LBUTTONDOWN://左键menu();break;}}}}}

排行榜界面

void ranking()
{// 设置背景颜色为白色,清屏setbkcolor(WHITE);cleardevice();// 返回 框的创建setfillcolor(LIGHTGRAY);setlinecolor(BLACK);setbkmode(TRANSPARENT);fillrectangle(500, 510, 720, 580);char arr3[] = "返回";// 文字居中int width = 220 / 2 - textwidth(arr3) / 2;int heigh = 70 / 2 - textheight(arr3) / 2;// 打印文字settextcolor(BLACK);outtextxy(width + 500, heigh + 510, arr3);// 返回 框的点击操作while (1){if (MouseHit()){MOUSEMSG msg = GetMouseMsg();if (msg.x > 500 && msg.x < 720 && msg.y> 510 && msg.y < 580){switch (msg.uMsg){case WM_LBUTTONDOWN://左键menu();break;}}}}
}

注:main()函数

int main()
{initgraph(800, 640);//创建一个窗口800×640menu();closegraph();return 0;
}

注:
若你的窗口每次点击就会发生窗口闪动,就是因为每个函数之内都有一个创建窗口操作
在整个程序中,只能有一个创建窗口的操作

拓展数据库

举例:展示排行榜信息 第一关

void rank_mysql()
{setbkcolor(BROWN);cleardevice();setbkmode(TRANSPARENT);settextcolor(BLACK);settextstyle(25, 0, "宋体");MYSQL mysql;//一个数据库结构体MYSQL_RES* res;//一个结果集结构体MYSQL_ROW row;//char** 二维数组,存放一条记录//初始化数据库mysql_init(&mysql);mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, "gbk");;//设置编码方式//连接数据库//判断 如果连接失败就输出连接失败if (mysql_real_connect(&mysql, "localhost", "root", "xie123123", "c_mysql", 3306, NULL, 0)){                               //伍什凯电脑ip  数据库名   密码         printf("连接成功\n");}else{printf("连接失败:%s\n", mysql_error(&mysql));}//步数排行榜//执行sql语句  查询整张表的信息//以下,username,step,rank是我建立的steps_rank1表单的列if (mysql_query(&mysql, "SELECT username,step, @rank:=@rank+1 `rank` from steps_rank1 s,(select @rank:=0) q ORDER BY step ;")) {printf("%s\n", mysql_error(&mysql));//return -1;}//得到结果集res = mysql_use_result(&mysql);//一行一行的将数据读出来while ((row = mysql_fetch_row(res)) != NULL) {int count = res->field_count;//得到一行中,有多少列int rows = mysql_num_rows(res);for (int i = 0; i < count; i++) {outtextxy(100 + i * 150, 130 + rows * 30, row[i]);}outtextxy(0, 130 + rows * 30, "");}//打印到easyX创建的窗口上outtextxy(100, 110, "用户名");outtextxy(240, 110, "步数");outtextxy(380, 110, "排行");int q = mysql_num_rows(res) + 1;rectangle(95, 105, 435, 130 + q * 30);//释放结果集mysql_free_result(res);//关闭数据库mysql_close(&mysql);//停留等待system("pause");
}

小结

通过这些练习,我们可以感觉到:

  • easyX渲染的代码重复率较高
    我们可以创建一个函数,每次都去调用这个函数,省去好多重复的操作
  • 几乎所以都是以基础知识为支撑,看着知识讲解就可以

之后,自己就可以尝试着做一款基础easyX窗口的游戏了

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

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

相关文章

Verilog初级教程(13)Verilog中的块语句

文章目录 前言正文串行语句并行语句并行块内包含串行块的情况块名称 往期文章回顾 前言 所谓的块语句&#xff0c;无非就是一组语句&#xff0c;例如在initial或者always中&#xff0c;使用begin…end或者fork…join包裹的语句&#xff0c;都可以称为块语句。块语句有两种&…

Verilog初级教程(11)Verilog中的initial块

文章目录 前言正文语法格式initial块是用来干什么的&#xff1f;initial块何时开始又何时结束&#xff1f;一个模块中允许有多少个initial块&#xff1f; 参考资料写在最后 前言 仿真中通常会依次执行一组Verilog语句。这些语句被放置在一个程序块中。在Verilog中主要有两种类…

Verilog初级教程(8)Verilog中的assign语句

博文目录 写在前面正文赋值语法reg类型变量赋值隐性连续赋值组合逻辑设计举例说明 参考资料交个朋友 写在前面 本系列相关博文链接&#xff1a; Verilog初级教程&#xff08;7&#xff09;Verilog模块例化以及悬空端口的处理 Verilog初级教程&#xff08;6&#xff09;Veril…

夏宇闻《Verilog数字系统设计教程》 - 第1章 Verilog的基本知识

第1章 Verilog的基础知识 1.1 硬件描述语言HDL 硬件描述语言&#xff08;HDL&#xff0c;hardware description language&#xff09;是一种用形式化方法来描述数字电路和系统的语言。 设计者使用HDL设计数字系统后&#xff0c;通过电子设计自动化工具&#xff08;EDA&#…

Verilog初级教程(12)Verilog中的generate块

文章目录 前言正文generate forgenerate ifgenerate case 参考资料本系列博文 前言 verilog中的generate块可以称为生成块&#xff0c;所谓生成&#xff0c;可以理解为复制。如果不太好理解&#xff0c;下面我们继续使用generate块。 generate块应用的场合通常是对模块进行批…

Verilog初级教程(17)Verilog中的case语句

文章目录 前言正文语法例子硬件原理图case与if-else有什么不同&#xff1f; 往期回顾参考资料及推荐关注 前言 case语句检查给定的表达式是否与列表中的其他表达式之一相匹配&#xff0c;并据此进行分支。它通常用于实现一个多路复用器。 如果要检查的条件很多&#xff0c;if…

Verilog初级教程(3)Verilog 数据类型

文章目录 前言正文变量可以取什么样的值&#xff1f;变量的取值意味着什么&#xff1f;主要的数据类型其他数据类型integertime / realtimereal例子 Verilog的字符串 写在最后 前言 这是本系列的第三篇博文&#xff0c;依然很基础&#xff0c;这个系列文章&#xff0c;主要是在…

Verilog初级教程(10)Verilog的always块

博文目录 写在前面正文语法什么是敏感列表&#xff1f;always块是用来干什么的&#xff1f;如果没有敏感列表怎么办&#xff1f;时序逻辑实例组合逻辑实例注意事项 参考资料 写在前面 由于刚毕业&#xff0c;又发生了很多事&#xff0c;在进入工作的准备期&#xff0c;就这样一…

verilog 入门教程

verilog 入门教程 1.1 什么是Verilog HDL? 1.2 Verilog的历史 1.3 Verilog的主要描述能力 2.1 Verilog-模块 2.2 Verilog-时延 2.3 Verilog-assign语句 2.4 Verilog-initial语句 2.5 Verilog-always语句 2.6 Verilog的结构化描述形式 2.7 Verilog-混合设计描述方式 2.8 Veri…

Verilog初级教程(14)Verilog中的赋值语句

文章目录 前言正文合理的左值过程性赋值&#xff08;Procedural assignment&#xff09;连续赋值过程连续性赋值 往期回顾 前言 何为赋值语句&#xff1f;即将值放到线网或者变量上&#xff0c;这种操作称为赋值&#xff0c;英文&#xff1a;assignment. 它有三种基本形式&…

嵌入式开发Verilog教程(二)——Verilog HDL设计方法概述

嵌入式开发Verilog教程&#xff08;二&#xff09;——Verilog HDL设计方法概述 前言一、Verilog HDL语言简介1.1 Verilog HDL语言是什么1.2 Verilog HDL设计复杂数字电路的优点1.2.1 传统设计方法——电路原理图输入法1.2.2 Verilog HDL设计方法与传统设计方法相比较的优势1.2…

嵌入式开发Verilog教程(三)——Verilog HDL基本语法汇总(上)

嵌入式开发Verilog教程&#xff08;三&#xff09;——Verilog HDL基本语法汇总&#xff08;上&#xff09; 前言一、简单的Verilog HDL模块1.1 Verilog HDL程序简单模块1.2 Verilog HDL程序模块结构1.3 Verilog HDL程序模块端口定义1.4 Verilog HDL程序模块内容 二、Verilog H…

SANXIN-B01开发板verilog教程V3电子版

今天给大侠带来“SANXIN-B01开发板verilog教程V3-郝旭帅团队电子版”,V3版本更新了后几章节的高级设计部分,获取电子版资料,请点击左下角阅读原文,跳转叁芯智能科技官方技术论坛下载,或者登录网址www.sxznfpga.com下载。 叁芯智能科技-郝旭帅团队打造“FPGA 设计与研发”学…

Verilog 教程

第一章&#xff1a;Verilog 简介 1.1 Verilog 教程 1.2 Verilog 简介 1.3 Verilog 环境搭建 1.4 Verilog 设计方法第二章&#xff1a;语法要素 2.1 Verilog 基础语法 2.2 Verilog 数值表示 2.3 Verilog 数据类型 2.4 Verilog 表达式 2.5 Verilog 编译指令 第三章…

ol中不同区域加载不同底图

概述 写一篇水文&#xff0c;讲讲如果在openlayers中实现不同的区域加载不同的底图。 效果 实现 通过tileUrlFunction实现不同切片地址的请求。 <!DOCTYPE html> <html><head><title>XYZ</title><link rel"stylesheet" href&qu…

数电/数字电子技术期末考前突击复习(小白稳过,看这一篇就够了)

博主&#xff1a;命运之光 专栏&#xff1a;期末考试必过and不挂科and争高分&#x1f636;‍&#x1f32b;️还有其他科目的考试突击日后会陆续更新 ✨✨✨✨✨点赞&#xff0c;关注&#xff0c;收藏不迷路✨✨✨✨✨ &#x1f984;前言&#xff1a;总结了期末数电大概率可能…

windows 10下载安装mysql5.7

MySQL数据库在日常使用是非常的频繁的&#xff0c;不管是线上还是线下。下面我就分享出我安装MySQL5.7的一步一脚印的教程&#xff0c;本教程只针对windows版本。 下载 MySQL官网下载地址&#xff1a;https://downloads.mysql.com/archives/community/ 选择对应的系统和版本…

【明解STM32】中断系统理论基础知识篇之中断寄存器功能原理

目录 一、前言 二、寄存器概述 三、NVIC寄存器组 四、SCB寄存器组 五、中断屏蔽寄存器组 六、总结 一、前言 在之前的STM32的中断系统理论基础知识之基本原理及NVIC中&#xff0c;分别中断的基本原理&#xff0c;中断的管理机制和中断的处理流程进行了较为详细的论述&…

mysql.exe下载_mysql8 windows 下载安装

一. 下载 点击download 可以注册登录&#xff0c;嫌麻烦的话直接点击NO&#xff0c;thanks… 开始下载 二. 安装 下载完成后得到一个zip包 我是安装板和解压即用版都下了&#xff0c;但用的解压即用版本&#xff0c;比较方便 解压mysql-8.0.17-winx64.zip&#xff0c;得到mysql…

MySQL 64位安装教程,不需要配置my.ini文件

一、下载安装包&#xff0c;官网下载 下载网址&#xff1a;https://dev.mysql.com/downloads/mysql/ 2、MySQLWorkbench 8.0.25下载 二、进行MySql压缩包安装方式配置。 不需要配置环境变量&#xff0c;不需要配置mini文件。下载是这些&#xff0c;自己改一下文件夹名字&…