项目预备知识

导入两个头文件

#include <graphics.h> // 引入 EasyX 的图形库头文件
#include <conio.h>    // 引入 conio.h 以使用 getch()

窗口创建函数:小黑屏

initgraph(640, 480, SHOWCONSOLE);
closegraph();   //关闭一个窗口

设置背景颜色:这里设置完颜色之后,还需要清除一下设备,不然还是黑色的

setbkcolor(WHITE);  //设置背景颜色
cleardevice();  //清屏,把黑色清楚掉......每画一个东西,都需要清除一次

绘图函数:(这里以画圆为例),前缀是需要绘图的类型,后缀是种类

circle()无填充
fillcircle()有边框填充
solidcircle()无边框填充

下面是使用方式:

circle(50, 50, 50);
fillcircle(50, 150, 50);
solidcircle(50, 250, 50);

设置类:这个是窗口下的形状

setlinestyle(PS_SOLID, 5);   //设置线条样式    setlinestyle(样式,宽度)
setfillcolor(YELLOW);   //设置填充颜色    setfillcolor(颜色)
setlinecolor(BLUE);      //设置线条边框颜色 setlinecolor

设置文字的函数:

//设置文字颜色
settextcolor(RED);
//设置文字样式
settextstyle(20, 0, "楷体");
//设置背景模式
//变成透明TRANSPARENT
setbkmode(TRANSPARENT);

输出文字:

outtextxy(50, 50, "azlml");

文字居中的方法:

//把文字居中的操作,画图理解
fillrectangle(200, 50, 500, 100);   //画一个矩形
settextcolor(RGB(0, 0, 14));
char arr[] = "居中显示";
int width = 300 / 2 - textwidth(arr) / 2;
int hight = 50 / 2 - textheight(arr) / 2;
outtextxy(width + 200, hight + 50, arr);

有关图片的函数:

IMAGE img; //定义一个对象
//加载图片
//  用的是相对路径 ./表示当前文件夹下    ../当前文件夹的上一级目录
//绝对路径  C:\Users\傅\source\repos\项目\项目\小鸟游六花.jpg
//jpg支持背景透明,png不支持背景透明
loadimage(&img, "./小鸟游六花.jpg", 250, 250); //可以调整图片的大小,不是在输出的时候改
//输出图片
putimage(0, 0, &img);

有关键盘的函数:

kbhit()    //判断是有键盘有被按下
char key = _getch();    //读键盘的消息

键盘的操作:

if (kbhit())    //判断是否有键盘按下
{//键盘消息char key = _getch();printf("%d%c\n", key, key);switch (key){//上键case 'w':case 'W':yy--;printf("上键\n");break;case 's':case 'S':yy++;printf("下键\n");break;case 'a':case 'A':xx--;printf("左键\n");break;case 'd':case 'D':xx++;printf("右键\n");break;}
}

鼠标操作:

//鼠标消息
if (MouseHit())
{MOUSEMSG msg = GetMouseMsg();// 消息分发switch (msg.uMsg){case WM_LBUTTONDOWN:outtextxy(400, 400, "鼠标左键按下");if (msg.x > 200 && msg.x < 500 && msg.y>50 && msg.y < 200)  //在框框内{printf("在框框内\n");//输出鼠标点击的坐标printf("坐标(%d,%d)\n", msg.x, msg.y);}break;case WM_RBUTTONDOWN:outtextxy(400, 400, "鼠标右键按下");if (msg.x > 200 && msg.x < 500 && msg.y>50 && msg.y < 200)  //在框框内{printf("在框框内\n");//输出鼠标点击的坐标printf("坐标(%d,%d)\n", msg.x, msg.y);}break;}
}/*case  WM_MOUSEMOVE:       ……break;//鼠标移动消息case  WM_MOUSEWHEEL:      ……break;// 鼠标滚轮拨动消息case  WM_LBUTTONDOWN:     ……break;// 左键按下消息case  WM_MBUTTONDOWN:     ……break;// 中键按下消息case  WM_RBUTTONDOWN:     ……break;// 右键按下消息                        
*/

2048项目

#include <graphics.h> // 引入 EasyX 的图形库头文件
#include <conio.h>    // 引入 conio.h 以使用 getch()
#include<iostream>
#include<stdlib.h>
#include<time.h>
#include<math.h>
using namespace std;#define GRID_W 100//格子的宽度 100
#define MAX_SIZE 4//每行列,格子的数量
#define INTERVAL 15//格子的间距
#define WIN_SIZE MAX_SIZE * GRID_W + INTERVAL*5 // 矩形窗口
//定义一个数组,用来存储数据
int map[MAX_SIZE][MAX_SIZE];
int flag = 0;
enum Color {zero = RGB(205, 193, 180),two1 = RGB(238, 228, 218),two2 = RGB(237, 224, 200),two3 = RGB(242, 177, 121),two4 = RGB(245, 149, 99),two5 = RGB(246, 124, 95),two6 = RGB(246, 94, 59),two7 = RGB(242, 177, 121),two8 = RGB(237, 204, 97),two9 = RGB(255, 0, 128),two10 = RGB(145, 0, 72),two11 = RGB(242, 17, 158),back = RGB(187, 173, 160),
};
Color arr[13] = { zero,two1,two2, two3, two4, two5, two6, two7, two8, two9, two10,two11,back };
//随机产生一个整数2 or 4 ,产生2的概率大于4
int creatnum()
{//随机数 rand 需要加上头文件//直接用rand是不会产生随机数的,在此之前,需要设置随机数种子//需要获取时间,需要加上time.h头文件srand((unsigned)time(NULL) + clock());printf("%d",rand());if (rand()%6 ==0){return 4;}else{return 2;}
}
//初始化数据,随机产生两个数
void gameinit()
{for (int i=0; i<2 ;){//随机生成两个下标int r = rand() % 4;int c = rand() % 4; if (!map[r][c]){map[r][c] = creatnum();++i;}}
}
void gamenew()
{for (int i = 0; i < 1;){//随机生成两个下标int r = rand() % 4;int c = rand() % 4;if (!map[r][c]){map[r][c] = creatnum();++i;}}
}
//绘制主界面
void gamedraw()
{//设置背景颜色setbkcolor(RGB(186, 173, 160));cleardevice();	//设置颜色的时候需要清除背景for (int i = 0; i < MAX_SIZE; ++i){for (int j = 0; j < MAX_SIZE; ++j){//找到对应格子的左上角坐标int x1 = INTERVAL * (j+1) + GRID_W * j, y1=INTERVAL* (i + 1) + GRID_W * i;int x2 = x1 + GRID_W, y2 = y1 + GRID_W;int index = log2(map[i][j]);//设置格子填充颜色COLORREF tcolor = arr[index] ;setfillcolor(tcolor);//绘制格子solidroundrect(x1, y1, x2, y2,10,10);//把数组里面的数据绘制到图形窗口上面if (map[i][j] != 0)	//去0{//设置文字样式settextstyle(50, 0, "黑体");//设置文字背景透明setbkmode(TRANSPARENT);settextcolor(RGB(119, 110, 101));//把整形转化为字符串char str[10] = "";sprintf_s(str, "%d", map[i][j]);//居中int width = textwidth(str);int height = textheight(str);int xx = x1 + (GRID_W - width) / 2;int yy = y1 + (GRID_W - height) / 2;outtextxy(xx, yy, str);}}}
}//移动方格,移动数组里面的数
void moveup()
{for (int i = 0; i < MAX_SIZE; ++i){int temp = 0;for (int j = 1; j < MAX_SIZE; ++j){if (map[j][i]){if (!map[temp][i])	//上方元素为0{map[temp][i] = map[j][i];map[j][i] = 0;}else if (map[temp][i] == map[j][i])	//上方元素与当前元素相同{map[temp][i] *= 2;map[j][i] = 0;temp++ ;}else	//有距离{map[temp + 1][i] = map[j][i];if (temp + 1 != j){map[j][i] = 0;}temp++;}flag = 1;}}}
}void movedown()
{for (int i = MAX_SIZE-1; i >=0; --i){int temp = MAX_SIZE - 1;for (int j = MAX_SIZE - 2; j >=0; --j){if (map[j][i]){if (!map[temp][i]){map[temp][i] = map[j][i];map[j][i] = 0;}else if (map[temp][i] == map[j][i]){map[temp][i] *= 2;map[j][i] = 0;temp--;}else{map[temp - 1][i] = map[j][i];if (temp - 1 != j){map[j][i] = 0;}temp--;}flag = 1;}}}
}void moveleft()
{for (int i = 0 ; i < MAX_SIZE ; ++i){int temp = 0;for (int j = 1; j <MAX_SIZE; ++j){if (map[i][j]){if (!map[i][temp]){map[i][temp] = map[i][j];map[i][j] = 0;}else if (map[i][temp] == map[i][j]){map[i][temp] *= 2;map[i][j] = 0;temp++;}else{map[i][temp +1] = map[i][j];if (temp + 1 != j){map[i][j] = 0;}temp++;}flag = 1;}}}
}void moveright()
{for (int i = MAX_SIZE-1; i >=0; --i){int temp = MAX_SIZE-1;for (int j = MAX_SIZE - 2; j >=0; --j){if (map[i][j]){if (!map[i][temp]){map[i][temp] = map[i][j];map[i][j] = 0;}else if (map[i][temp] == map[i][j]){map[i][temp] *= 2;map[i][j] = 0;temp--;}else{map[i][temp -1] = map[i][j];if (temp - 1 != j){map[i][j] = 0;}temp--;}flag = 1;}}}
}   //按键处理
void keydeal()
{char key = _getch();switch (key){case 'w':case 'W':moveup();break;case 's':case 'S':movedown();break;case 'a':case 'A':moveleft();break;case 'd':case 'D':moveright();break;}
}int main()
{//创建窗口initgraph(WIN_SIZE, WIN_SIZE);gameinit();while (1){gamedraw();keydeal();if (flag){gamenew();flag = 0;}}_getch();closegraph();	//关闭窗口return 0;
}

球球大作战:

#include <graphics.h> // 引入 EasyX 的图形库头文件
#include <conio.h>    // 引入 conio.h 以使用 getch()
#include<time.h>
#include<stdlib.h>
#include<math.h>
#define FOOD_NUM 100
#define MAX_WIDTH 640
#define MAX_HIGHT 480
#define eatting(x1,y1,x2,y2) sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))struct vector2d
{int x;int y;
};struct player
{vector2d pos;	//球的位置int r;	//球的半径vector2d v = { 0 };COLORREF color;	//角色球的颜色
};struct Food
{vector2d pos;	//球的位置int r;	//球的半径COLORREF color;	//球的颜色
};
//初始化玩家
void play_init(player *players)
{players->pos.x = rand() % MAX_HIGHT;players->pos.y = rand() % MAX_WIDTH;players->r = rand() % 10+5;players->v = { 0 };players->color = RGB(rand() % 256, rand() % 256, rand() % 256);
}
//绘制玩家
void player_drew(player* players)
{setfillcolor(players->color);//创建一个球solidcircle(players->pos.x, players->pos.y, players->r);
}void food_init(Food* food)
{food->pos.x = rand() % MAX_HIGHT;food->pos.y = rand() % MAX_WIDTH;food->r = rand() % 10 + 1;food->color = RGB(rand() % 256, rand() % 256, rand() % 256);
}void Food_drew(Food* food)
{setfillcolor(food->color);//创建一个球solidcircle(food->pos.x, food->pos.y, food->r);
}void move(player* players,ExMessage* msg)
{//按下消息if (msg->message == WM_KEYDOWN){switch (msg->vkcode){case VK_UP:players->v.y = -1;break;case VK_DOWN:players->v.y = 1;break;case VK_LEFT:players->v.x = -1;break;case VK_RIGHT:players->v.x = 1;break;}}else if (msg->message == WM_KEYUP)	//放开消息{switch (msg->vkcode){case VK_UP:players->v.y = 0;break;case VK_DOWN:players->v.y = 0;break;case VK_LEFT:players->v.x = 0;break;case VK_RIGHT:players->v.x = 0;break;}}
}void update(player* players)
{int tx = players->pos.x;int ty = players->pos.y;players->pos.x += players->v.x, players->pos.y += players->v.y;if (players->pos.x<0 || players->pos.x>MAX_WIDTH){players->pos.x = tx;}if (players->pos.y<0 || players->pos.y>MAX_HIGHT){players->pos.y = ty;}
}int main()
{//初始化界面initgraph(640, 480);	//建立一个矩形setbkcolor(RGB(214, 214, 214));	//设置背景颜色cleardevice();//设置了随机数种子srand(time(NULL));player players;play_init(&players);player_drew(&players);//产生可以吃的小球Food food[FOOD_NUM] = { 0 };//初始化每个小球的信息for (int i = 0; i < FOOD_NUM; ++i){food_init(food + i);}while (1){BeginBatchDraw();cleardevice();//绘制食物for (int i = 0; i < FOOD_NUM; ++i){Food_drew(food + i);}player_drew(&players);EndBatchDraw();for (int i = 0; i < FOOD_NUM; ++i){//如果被吃了,那么就更新球的位置,半径加1if (eatting(players.pos.x, players.pos.y, food[i].pos.x, food[i].pos.y) < players.r){food_init(food+i);players.r++;}}update(&players);//消息处理(按键  鼠标)ExMessage msg = { 0 };//获取消息if (peekmessage(&msg)){move(&players, &msg);}Sleep(1);                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  }                                                                                                                                                                                             _getch();closegraph();	//关闭界面return 0;
}

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

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

相关文章

10.7、华为数通HCIP-DataCom H12-821单选题:121-140

121、关于OSPF特性描述错误的是:D A、OSPF采用链路状态算法。 B、每个路由器通过泛洪 LSA 向外发布本地链路状态信息 C、每台 OSPF 设备都会收集其它路由器发来的LSA 所有的LSA 放在一起便组成了链路状态数据库LSDB, D、OSPF 区域0中所有路由器的 LSDB 都相同。 E、每台…

【无标题】TMGM官网平台切尔西足球俱乐部合作

TMGM作为一家在三大洲均设有办事处的行业领导者&#xff0c;TMGM 被视为可靠的差价合约交易提供商&#xff0c;其重点是监管合规、技术创新与他联系➕&#x1f6f0;️TMGM818卓越的客户服务。 切尔西足球俱乐部在亚太地区拥有庞大的球迷群体&#xff0c;并在该地区建立了多种亚…

2024年腾讯云优惠政策_腾讯云TOP10优惠活动

腾讯云服务器多少钱一年&#xff1f;62元一年起&#xff0c;2核2G3M配置&#xff0c;腾讯云2核4G5M轻量应用服务器218元一年、756元3年&#xff0c;4核16G12M服务器32元1个月、312元一年&#xff0c;8核32G22M服务器115元1个月、345元3个月&#xff0c;腾讯云服务器网txyfwq.co…

AOP案例(黑马学习笔记)

需求 需求&#xff1a;将案例中增、删、改相关接口的操作日志记录到数据库表中 ● 就是当访问部门管理和员工管理当中的增、删、改相关功能接口时&#xff0c;需要详细的操作日志&#xff0c;并保存在数据表中&#xff0c;便于后期数据追踪。 操作日志信息包含&#xff1a; ●…

IO多路转接

1.select 初识select 系统提供 select 函数来实现多路复用输入 / 输出模型 . select 系统调用是用来让我们的程序监视多个文件描述符的状态变化的 ; 程序会停在 select 这里等待&#xff0c;直到被监视的文件描述符有一个或多个发生了状态改变 ; select函数模型 select的函…

服务器硬件得基础知识介绍

服务器硬件是计算机硬件的一种&#xff0c;专门用于构建服务器系统。服务器硬件通常具有高性能、高可靠性和可扩展性等特点&#xff0c;以满足企业级应用的需求。本文将从以下几个方面介绍服务器硬件的基础知识&#xff1a;服务器概述、CPU、内存、存储、网络、电源和散热、服务…

【机器学习】CIFAR-10数据集简介、下载方法(自动)

【机器学习】CIFAR-10数据集简介、下载方法(自动) &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&#x1f448; 希望得到您的订阅和支…

0904多元复合函数求导-多元函数微分法及其应用

文章目录 1 复习一元函数复合函数求导2 一元函数与多元函数复合的情形3 多元函数与多元函数复合的情形4 其他情形5 抽象复合函数求导6 全微分不变性结语 1 复习一元函数复合函数求导 y f ( u ) , u ϕ ( x ) ⇒ f [ ϕ ( x ) ] d y d x d y d u ⋅ d u d x f ′ ( u ) ⋅ ϕ…

Python正则表达式:从基础到高级应用的全面总结与实战【第103篇—JSON模块】

Python正则表达式&#xff1a;从基础到高级应用的全面总结与实战 正则表达式是一种强大的文本匹配和处理工具&#xff0c;广泛应用于文本处理、数据抽取、表单验证等领域。本文将从正则表达式的基础知识出发&#xff0c;逐步深入&#xff0c;最终结合代码实战&#xff0c;带你…

赵文彬将出席无磷锅炉工艺助剂在锅炉水节水节能应用

演讲嘉宾&#xff1a;赵文彬 集团副总/技术总监 上远未来水务集团有限公司 演讲题目&#xff1a;无磷锅炉工艺助剂在锅炉水节水节能方面的应用 会议简介 “十四五”规划中提出&#xff0c;提高工业、能源领城智能化与信息化融合&#xff0c;明确“低碳经济”新的战略目标&a…

mac 安装hbuilderx

下载 HBuilderX下载地址: 下载地址 选额mac版本点击下载 安装 如图&#xff0c;将HBuilderX拖到Applications&#xff0c;才是正确的安装姿势。 MacOSX&#xff0c;软件必须安装到/Applications目录&#xff0c;如未安装到此目录&#xff0c;可能会出现插件安装失败、项目创建…

基于BERTopic模型的中文文本主题聚类及可视化

文章目录 BERTopic简介模型加载地址文本加载数据处理BERTopic模型构建模型结果展示主题可视化总结BERTopic简介 BERTopic论文地址:BERTopic: Neural topic modeling with a class-based TF-IDF procedure BERTopic是一种结合了预训练模型BERT和主题建模的强大工具。它允许我…

Linux中的动静态库

目录 一、静态库 &#xff08;1&#xff09;静态库的优缺点&#xff1a; &#xff08;2&#xff09;Linux下静态库的创建和执行 1.直接编译​编辑 2.指定路径和库名 3.用LIBRARY_PATH环境变量来配置路径 二、动态库 &#xff08;1&#xff09;动态库的优缺点 &#xff…

javaweb请求与响应

前言 前面介绍了对应的服务器端的相关代码。这里开始学习服务器端与客户端的数据请求与响应 这里的仅仅是一个简单的调用&#xff0c;并没有经过servelert接口来进行调用&#xff0c;同前面的一样&#xff0c;我们介绍对应的本地服务器进行的部署项目。 代码 //属于简单的不…

Java学习—线程的创建

Java 中的多线程是一种强大的机制&#xff0c;允许程序同时执行两个或两个以上的部分。这些同时执行的部分被称为线程&#xff0c;它们可以使程序的执行更加高效&#xff0c;特别是在进行大量计算或等待资源&#xff08;比如网络资源或文件系统&#xff09;时。Java 提供了在程…

Scratch 第十三课-飞机大战游戏

第十三课-飞机大战游戏 学习目标 这节课我们做一款大家都爱玩的飞机大战游戏&#xff0c;学习重点&#xff1a; 如何导入外部角色如何让飞机发射子弹鼠标控制角色移动 程序设计 程序分析 &#xff1a; 飞机大战游戏相信很多小朋友都玩过&#xff0c;我方飞机在下方&#xf…

LabVIEW石油钻机提升系统数字孪生技术

LabVIEW石油钻机提升系统数字孪生技术 随着数字化、信息化、智能化的发展&#xff0c;石油钻采过程中的石油钻机数字化技术提升成为了提高钻井效率、降低生产成本的重要途径。基于中石油云平台提供的数据&#xff0c;采用数字孪生技术&#xff0c;对石油钻机提升系统进行数字化…

[Redis]——初识Redis

一、Redis为非关系型数据库 ❓我们常见的MySQL、SQLServer都是关系型数据库&#xff0c;那他们之间有什么区别与联系呢&#xff1f; &#x1f4d5;关系型数据库与非关系型数据库的区别&#xff08;面试题&#xff09; 解释&#xff1a; SQL数据库中的表是有结构的&#xff0c;包…

腾讯云学生云服务器_学生云主机_学生云数据库_云+校园特惠套餐

2024年腾讯云学生服务器优惠活动「云校园」&#xff0c;学生服务器优惠价格&#xff1a;轻量应用服务器2核2G学生价30元3个月、58元6个月、112元一年&#xff0c;轻量应用服务器4核8G配置191.1元3个月、352.8元6个月、646.8元一年&#xff0c;CVM云服务器2核4G配置842.4元一年&…

小程序和页面生命周期详解

目录 小程序的生命周期 创建&#xff08;onLoad&#xff09;&#xff1a; 显示&#xff08;onShow&#xff09;&#xff1a; 隐藏&#xff08;onHide&#xff09;&#xff1a; 卸载&#xff08;onUnload&#xff09;&#xff1a; 错误监听&#xff08;onError&#xff09;…