项目预备知识
导入两个头文件
#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;
}
相关文章:
项目预备知识
导入两个头文件 #include <graphics.h> // 引入 EasyX 的图形库头文件 #include <conio.h> // 引入 conio.h 以使用 getch() 窗口创建函数:小黑屏 initgraph(640, 480, SHOWCONSOLE); closegraph(); //关闭一个窗口 设置背景颜色:这…...
redis实战笔记汇总
文章目录 1 NoSQL入门概述1.1 能干嘛?1.2 传统RDBMS VS NOSQL1.3 NoSQL数据库的四大分类1.4 分布式数据库CAP原理 BASE原则1.5 分布式集群简介1.6 淘宝商品信息的存储方案 2 Redis入门概述2.1 是什么?2.2 能干嘛?2.3 怎么玩?核心…...
elment-ui table表格排序后 清除排序箭头/恢复默认排序 的高亮样式
问题描述: 1.默认排序是按照名称升序排列(图一) 2.在选择了筛选项以及其他排序方式之后,箭头高亮是这样的(图二) 3.当我点击清空按钮后,类型清空了,并且传给后端的排序方式是名称/升…...
MySQL数据库基本操作(二)
查询语句 1. 排序查询* 语法:order by 子句* order by 排序字段1 排序方式1 , 排序字段2 排序方式2... * 排序方式:* ASC:升序,默认的。* DESC:降序。 * 注意:* 如果有多个排序条件&#…...
Unity(第十部)时间函数和文件函数
时间函数 using System.Collections; using System.Collections.Generic; using UnityEngine;public class game : MonoBehaviour {// Start is called before the first frame updatefloat timer 0;void Start(){//游戏开始到现在所花的时间Debug.Log(Time.time);//时间缩放值…...
【Java学习笔记】
常见算法 查找算法 1.基本查找 public class BasicSearchDemo01 {public static void main(String[] args) {//基本查找//核心://从0索引开始挨个往后查找//需求:定一个方法利用基本查找,查询某个元素是否存在//数据如下:{131&…...
Python列表生成式你学会了吗
1.最基本的列表生成方式 生成 1-10 之间的整数的一个列表 list1 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] print(list1) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] list2 list(range(1, 11)) print(list2) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 2.通过程序的方式生成[4, 9, 16, 25,…...
【Mybatis】快速入门 基本使用 第一期
文章目录 Mybatis是什么?一、快速入门(基于Mybatis3方式)二、MyBatis基本使用2.1 向SQL语句传参2.1.1 mybatis日志输出配置2.1.2 #{}形式2.1.3 ${}形式 2.2 数据输入2.2.1 Mybatis总体机制概括2.2.2 概念说明2.2.3 单个简单类型参数2.2.4 实体…...
在 Rust 中实现 TCP : 1. 联通内核与用户空间的桥梁
内核-用户空间鸿沟 构建自己的 TCP栈是一项极具挑战的任务。通常,当用户空间应用程序需要互联网连接时,它们会调用操作系统内核提供的高级 API。这些 API 帮助应用程序 连接网络创建、发送和接收数据,从而消除了直接处理原始数据包的复杂性。…...
STM32-ADC一步到位学习手册
1.按部就班陈述概念 ADC 是 Analog-to-Digital Converter 的缩写,指的是模拟/数字转换器。它将连续变量的模拟信号转换为离散的数字信号。在 STM32 中,ADC 具有高达 12 位的转换精度,有多达 18 个测量通道,其中 16 个为外部通道&…...
【文件管理】关于上传下载文件的设计
这里主要谈论的是产品设计里面的文件管理,比如文件的上传交互及背后影响到的前后端设计。 上传文件 场景:一条记录,比如个人信息,有姓名,出生年月,性别等一般的字段,还可以允许用户上传附件作为…...
微服务架构 SpringCloud
didi单体应用架构 将项目所有模块(功能)打成jar或者war,然后部署一个进程--医院挂号系统; > 优点: > 1:部署简单:由于是完整的结构体,可以直接部署在一个服务器上即可。 > 2:技术单一:项目不需要复杂的技术栈,往往一套熟…...
前端 css 实现标签的效果
效果如下图 直接上代码: <div class"label-child">NEW</div> // css样式 // 父元素 class .border-radius { position: relative; overflow: hidden; } .label-child { position: absolute; width: 150rpx; height: 27rpx; text-align: cente…...
SLAM基础知识-卡尔曼滤波
前言: 在SLAM系统中,后端优化部分有两大流派。一派是基于马尔科夫性假设的滤波器方法,认为当前时刻的状态只与上一时刻的状态有关。另一派是非线性优化方法,认为当前时刻状态应该结合之前所有时刻的状态一起考虑。 卡尔曼滤波是…...
云时代【6】—— 镜像 与 容器
云时代【6】—— 镜像 与 容器 四、Docker(三)镜像 与 容器1. 镜像(1)定义(2)相关指令(3)实战演习镜像容器基本操作离线迁移镜像镜像的压缩与共享 2. 容器(1)…...
【QT+QGIS跨平台编译】之五十三:【QGIS_CORE跨平台编译】—【qgssqlstatementparser.cpp生成】
文章目录 一、Bison二、生成来源三、构建过程一、Bison GNU Bison 是一个通用的解析器生成器,它可以将注释的无上下文语法转换为使用 LALR (1) 解析表的确定性 LR 或广义 LR (GLR) 解析器。Bison 还可以生成 IELR (1) 或规范 LR (1) 解析表。一旦您熟练使用 Bison,您可以使用…...
JMeter性能测试基本过程及示例
jmeter 为性能测试提供了一下特色: jmeter 可以对测试静态资源(例如 js、html 等)以及动态资源(例如 php、jsp、ajax 等等)进行性能测试 jmeter 可以挖掘出系统最大能处理的并发用户数 jmeter 提供了一系列各种形式的…...
你知道什么是回调函数吗?
c语言中的小小白-CSDN博客c语言中的小小白关注算法,c,c语言,贪心算法,链表,mysql,动态规划,后端,线性回归,数据结构,排序算法领域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 给大家分享一句我很喜欢我话: 知不足而奋进,望远山而前行&am…...
mac苹果电脑c盘满了如何清理内存?2024最新操作教程分享
苹果电脑用户经常会遇到麻烦:内置存储器(即C盘)空间不断缩小,电脑运行缓慢。在这种情况下,苹果电脑c盘满了怎么清理?如何有效清理和优化存储空间,提高计算机性能?成了一个重要的问题。今天,我想给大家详细介…...
k8s-kubeapps图形化管理 21
结合harbor仓库 由于kubeapps不读取hosts解析,因此需要添加本地仓库域名解析(dns解析) 更改context为全局模式 添加repo仓库 复制ca证书 添加成功 图形化部署 更新部署应用版本 再次进行部署 上传nginx 每隔十分钟会自动进行刷新 在本地仓库…...
Qwen3-ASR-0.6B保姆级教程:5分钟搭建多语言语音识别Web界面
Qwen3-ASR-0.6B保姆级教程:5分钟搭建多语言语音识别Web界面 1. 教程概述 今天我们将一起探索如何快速部署Qwen3-ASR-0.6B语音识别模型的Web界面。这个由阿里云通义千问团队开发的开源模型,支持52种语言和方言的识别,包括30种主要语言和22种…...
基于74LS164与555定时器的四花样彩灯控制器设计与仿真
1. 四花样彩灯控制器设计概述 第一次接触彩灯控制器设计时,我被那些闪烁变换的灯光效果深深吸引。这种看似简单的电子装置,实际上蕴含着数字电路的精华。今天要介绍的这个基于74LS164与555定时器的四花样彩灯控制器,正是数字电路入门的绝佳实…...
漏洞扫描器:常见漏洞模式的自动化检测
漏洞扫描器:常见漏洞模式的自动化检测 在当今数字化时代,网络安全问题日益突出,企业和个人面临着来自黑客、恶意软件等各类威胁。漏洞扫描器作为一种自动化工具,能够高效检测系统中存在的常见漏洞模式,帮助用户提前发…...
Qwen2.5-Omni-3B本地部署实战:从环境配置到多模态对话生成
1. Qwen2.5-Omni-3B全模态模型简介 Qwen2.5-Omni-3B是阿里通义千问团队推出的轻量级全模态大模型,相比之前的7B版本,3B版本在保持多模态能力的同时大幅降低了硬件门槛。这个模型最吸引人的地方在于它能同时处理文本、音频、图像和视频输入,还…...
《4.1深入理解内存管理:从静态分配到动态分配》
内存管理概述:程序运行的基石 上周排查一个嵌入式系统的死机问题,现象很诡异——设备连续运行48小时后必然卡死。抓取崩溃现场的内存dump,发现堆区数据被踩得一塌糊涂。指针像脱缰野马般指向了代码段区域,栈回溯显示最后一次操作是某个结构体链表的插入。最终定位到问题:…...
保姆级 uPyPi 教程|从 到 :MicroPython 驱动包一键安装 + 分享全攻略赶
这个代码的核心功能是:基于输入词的长度动态选择反义词示例,并调用大模型生成反义词,体现了 “动态少样本提示(Dynamic Few-Shot Prompting)” 与 “上下文长度感知的示例选择” 的能力。 from langchain.prompts impo…...
AI开发-python-langchain框架(--自定义Tool )挪
起因是我想在搞一些操作windows进程的事情时,老是需要右键以管理员身份运行,感觉很麻烦。就研究了一下怎么提权,顺手瞄了一眼Windows下用户态权限分配,然后也是感谢《深入解析Windows操作系统》这本书给我偷令牌的灵感吧ÿ…...
2026届最火的六大降AI率方案横评
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 知网于近期推出的AIGC检测服务,其目的在于识别学术文本里由人工智能生成的内容&a…...
手把手教你定制Ubuntu安装镜像:集成autoinstall配置,打造开箱即用的系统U盘
深度定制Ubuntu安装镜像:从autoinstall集成到U盘封装实战指南 当我们需要为实验室批量部署开发环境、为企业客户预装专用系统,或是为嵌入式设备打造专属镜像时,传统的手动安装方式显然效率低下。本文将带您深入探索如何将Ubuntu的autoinstall…...
别再为加工发愁!手把手教你将HFSS的3D模型变成Altium可用的PCB封装(以定向耦合器为例)
高频PCB封装实战:从HFSS仿真到Altium可复用封装库的完整指南 在射频电路设计中,定向耦合器、滤波器等特殊结构往往需要先在HFSS中进行电磁仿真优化,再转化为实际PCB布局。传统做法是每次设计都重新绘制封装,既低效又容易引入误差。…...
