项目预备知识
导入两个头文件
#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 每隔十分钟会自动进行刷新 在本地仓库…...
深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
Prompt Tuning、P-Tuning、Prefix Tuning的区别
一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...
【JVM】- 内存结构
引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...
SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...
分布式增量爬虫实现方案
之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...
站群服务器的应用场景都有哪些?
站群服务器主要是为了多个网站的托管和管理所设计的,可以通过集中管理和高效资源的分配,来支持多个独立的网站同时运行,让每一个网站都可以分配到独立的IP地址,避免出现IP关联的风险,用户还可以通过控制面板进行管理功…...
python爬虫——气象数据爬取
一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用: 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests:发送 …...
