玩转数字与运算:用C语言实现24点游戏的扑克牌魅力
✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。
🍎个人主页:Java Fans的博客
🍊个人信条:不迁怒,不贰过。小知识,大智慧。
💞当前专栏:C、C++学习分享专栏
✨特色专栏:国学周更-心性养成之路
🥭本文内容:玩转数字与运算:用C语言实现24点游戏的扑克牌魅力
文章目录
- 引言
- 1. 随机生成数字
- 1.1 使用 `rand()` 函数
- 1.2 生成1到10的随机数
- 1.3 初始化随机数种子
- 1.4 完整的随机数字生成函数
- 1.5 代码解释
- 2. 定义扑克牌花色
- 2.1 扑克牌花色的种类
- 2.2 使用字符串数组定义花色
- 2.3 随机选择花色
- 2.4 完整的花色定义与生成示例
- 2.5 代码解释
- 3. 显示扑克牌
- 3.1 显示扑克牌的基本思路
- 3.2 使用格式化输出
- 3.3 实现显示扑克牌的函数
- 3.4 完整的示例代码
- 3.5 代码解释
- 3.6 美化输出
- 4. 扩展功能
- 4.1 检查是否能组成24点
- 4.2 用户输入
- 4.3 图形界面
- 4.4 计时和得分系统
- 4.5 多人模式
- 结论
引言
在数字的世界里,24点游戏以其简单却富有挑战性的规则吸引了无数玩家。这个游戏不仅是对数学运算能力的考验,更是对逻辑思维和创造力的挑战。玩家需要灵活运用加、减、乘、除等基本运算,将四个随机生成的数字组合成24,过程中的每一步都充满了思考与探索的乐趣。
随着编程技术的不断发展,许多经典游戏也逐渐被移植到计算机上。本文将带你走进C语言的世界,展示如何实现一个简单而有趣的24点游戏。我们将通过随机生成四个1到10的数字,并以扑克牌的形式展示它们,增加游戏的趣味性和视觉吸引力。无论你是编程新手还是经验丰富的开发者,这个项目都将为你提供一个锻炼思维和编程技能的绝佳机会。让我们一起开始这段数字与运算的奇妙旅程吧!
1. 随机生成数字
在24点游戏中,随机生成四个数字是游戏的第一步,也是至关重要的一步。我们希望生成的数字在1到10之间,以确保游戏的可玩性和挑战性。
1.1 使用 rand()
函数
C语言提供了一个标准库函数 rand()
,用于生成伪随机数。这个函数每次调用时都会返回一个在0到RAND_MAX之间的整数。为了生成我们所需范围内的数字(1到10),我们需要对 rand()
的结果进行一些数学运算。
1.2 生成1到10的随机数
为了将 rand()
生成的随机数映射到1到10的范围,我们可以使用以下公式:
random_number = ( rand() % 10 ) + 1 \text{random\_number} = (\text{rand()} \% 10) + 1 random_number=(rand()%10)+1
这里的 %
是取模运算符,它返回 rand()
结果除以10的余数。这样,我们可以得到一个范围在0到9之间的数字。通过加1,我们将范围调整为1到10。
1.3 初始化随机数种子
为了确保每次运行程序时生成的随机数都是不同的,我们需要初始化随机数种子。可以使用 srand()
函数来设置种子,通常我们会使用当前时间作为种子,这样可以确保每次运行程序时生成的随机数序列都是独特的。以下是初始化随机数种子的代码示例:
#include <stdlib.h>
#include <time.h>srand(time(NULL)); // 使用当前时间作为随机数种子
1.4 完整的随机数字生成函数
结合上述步骤,我们可以编写一个函数来生成四个随机数字。以下是一个示例代码,展示了如何实现这一功能:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>#define NUM_CARDS 4
#define MAX_NUMBER 10void generateRandomNumbers(int numbers[NUM_CARDS]) {for (int i = 0; i < NUM_CARDS; i++) {numbers[i] = (rand() % MAX_NUMBER) + 1; // 生成1到10的随机数字}
}int main() {srand(time(NULL)); // 初始化随机数种子int numbers[NUM_CARDS];generateRandomNumbers(numbers);// 打印生成的随机数字printf("生成的随机数字是:");for (int i = 0; i < NUM_CARDS; i++) {printf("%d ", numbers[i]);}printf("\n");return 0;
}
1.5 代码解释
- 头文件:引入了
stdio.h
、stdlib.h
和time.h
,分别用于输入输出、随机数生成和时间获取。 - 常量定义:定义了常量
NUM_CARDS
表示生成的数字数量,MAX_NUMBER
表示数字的最大值。 - 生成随机数字:
generateRandomNumbers
函数使用循环生成四个1到10之间的随机数字,并存储在数组中。 - 主函数:在
main
函数中,首先初始化随机数种子,然后调用生成函数并打印生成的随机数字。
2. 定义扑克牌花色
在扑克牌中,花色是构成扑克牌的重要元素之一。每种花色不仅代表了不同的符号,还在游戏中起到了区分和识别的作用。在24点游戏中,我们可以通过随机选择花色来增加游戏的趣味性和视觉效果。接下来,我们将详细阐述如何在C语言中定义和使用扑克牌的花色。
2.1 扑克牌花色的种类
扑克牌通常有四种基本花色:
- 红心(♥)
- 黑桃(♠)
- 方块(♦)
- 梅花(♣)
这四种花色各具特色,能够为游戏增添多样性。在我们的24点游戏中,我们将使用这些花色来与随机生成的数字相结合,形成完整的扑克牌。
2.2 使用字符串数组定义花色
在C语言中,我们可以使用字符串数组来存储这些花色。每种花色可以用一个字符串表示,方便后续的随机选择和显示。以下是定义扑克牌花色的示例代码:
const char *suits[] = {"♥", "♠", "♦", "♣"};
在这个数组中,suits[0]
表示红心,suits[1]
表示黑桃,suits[2]
表示方块,suits[3]
表示梅花。通过这种方式,我们可以轻松地访问和使用这些花色。
2.3 随机选择花色
为了在生成扑克牌时随机选择花色,我们可以使用 rand()
函数生成一个0到3之间的随机索引,然后用这个索引来访问 suits
数组中的元素。以下是随机选择花色的示例代码:
int suitsIndex[NUM_CARDS];
for (int i = 0; i < NUM_CARDS; i++) {suitsIndex[i] = rand() % 4; // 随机选择花色索引
}
在这个代码片段中,我们使用 % 4
来确保生成的索引在0到3之间,从而随机选择四种花色中的一种。
2.4 完整的花色定义与生成示例
结合之前的随机数字生成部分,我们可以将扑克牌花色的定义和随机选择整合到一个完整的示例中。以下是实现的代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>#define NUM_CARDS 4
#define MAX_NUMBER 10// 定义扑克牌花色
const char *suits[] = {"♥", "♠", "♦", "♣"};void generateRandomCards(int numbers[NUM_CARDS], int suitsIndex[NUM_CARDS]) {for (int i = 0; i < NUM_CARDS; i++) {numbers[i] = (rand() % MAX_NUMBER) + 1; // 生成1到10的随机数字suitsIndex[i] = rand() % 4; // 随机选择花色索引}
}void displayCards(int numbers[NUM_CARDS], int suitsIndex[NUM_CARDS]) {for (int i = 0; i < NUM_CARDS; i++) {printf("%d%s ", numbers[i], suits[suitsIndex[i]]);}printf("\n");
}int main() {srand(time(NULL)); // 初始化随机数种子int numbers[NUM_CARDS];int suitsIndex[NUM_CARDS];generateRandomCards(numbers, suitsIndex);printf("随机生成的扑克牌是:\n");displayCards(numbers, suitsIndex);return 0;
}
2.5 代码解释
- 花色定义:使用字符串数组
suits
存储四种扑克牌花色。 - 生成扑克牌:在
generateRandomCards
函数中,生成随机数字和随机花色索引。 - 显示扑克牌:在
displayCards
函数中,将数字和对应的花色组合并打印到控制台。 - 主函数:在
main
函数中,初始化随机数种子,调用生成和显示函数。
3. 显示扑克牌
在24点游戏中,显示扑克牌是一个重要的环节,它不仅让玩家直观地看到生成的数字和花色,还增强了游戏的趣味性和互动性。接下来,我们将详细阐述如何在C语言中实现扑克牌的显示,包括格式化输出和实现细节。
3.1 显示扑克牌的基本思路
显示扑克牌的基本思路是将随机生成的数字与对应的花色组合在一起,并以易于阅读的格式输出。我们可以使用循环遍历生成的数字和花色数组,将它们逐一打印到控制台。
3.2 使用格式化输出
在C语言中,我们可以使用 printf
函数进行格式化输出。通过在字符串中使用格式控制符,我们可以灵活地控制输出的格式。例如,我们可以使用 %d
来输出整数,使用 %s
来输出字符串。
3.3 实现显示扑克牌的函数
我们可以定义一个名为 displayCards
的函数,专门用于显示扑克牌。该函数接受两个参数:一个整数数组(存储扑克牌的数字)和一个整数数组(存储扑克牌的花色索引)。以下是实现的代码示例:
void displayCards(int numbers[NUM_CARDS], int suitsIndex[NUM_CARDS]) {for (int i = 0; i < NUM_CARDS; i++) {printf("%d%s ", numbers[i], suits[suitsIndex[i]]);}printf("\n");
}
在这个函数中,我们使用一个 for
循环遍历每一张扑克牌。对于每一张牌,我们通过 printf
输出数字和对应的花色。最后,我们在输出完成后打印一个换行符,以便于格式的整齐。
3.4 完整的示例代码
结合之前的随机数字生成和花色定义部分,我们可以将扑克牌的显示功能整合到一个完整的示例中。以下是实现的代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>#define NUM_CARDS 4
#define MAX_NUMBER 10// 定义扑克牌花色
const char *suits[] = {"♥", "♠", "♦", "♣"};void generateRandomCards(int numbers[NUM_CARDS], int suitsIndex[NUM_CARDS]) {for (int i = 0; i < NUM_CARDS; i++) {numbers[i] = (rand() % MAX_NUMBER) + 1; // 生成1到10的随机数字suitsIndex[i] = rand() % 4; // 随机选择花色索引}
}void displayCards(int numbers[NUM_CARDS], int suitsIndex[NUM_CARDS]) {printf("随机生成的扑克牌是:\n");for (int i = 0; i < NUM_CARDS; i++) {printf("%d%s ", numbers[i], suits[suitsIndex[i]]);}printf("\n");
}int main() {srand(time(NULL)); // 初始化随机数种子int numbers[NUM_CARDS];int suitsIndex[NUM_CARDS];generateRandomCards(numbers, suitsIndex);displayCards(numbers, suitsIndex); // 显示扑克牌return 0;
}
3.5 代码解释
- 花色定义:使用字符串数组
suits
存储四种扑克牌花色。 - 生成扑克牌:在
generateRandomCards
函数中,生成随机数字和随机花色索引。 - 显示扑克牌:在
displayCards
函数中,将数字和对应的花色组合并打印到控制台。 - 主函数:在
main
函数中,初始化随机数种子,调用生成和显示函数。
3.6 美化输出
为了使输出更加美观,我们可以在显示扑克牌时添加一些格式化元素,例如:
- 在每张牌之间添加空格或制表符,以便于阅读。
- 在输出前添加标题或说明,明确显示内容。
例如,我们可以在 displayCards
函数中添加标题:
void displayCards(int numbers[NUM_CARDS], int suitsIndex[NUM_CARDS]) {printf("随机生成的扑克牌是:\n");for (int i = 0; i < NUM_CARDS; i++) {printf("%d%s ", numbers[i], suits[suitsIndex[i]]);}printf("\n");
}
4. 扩展功能
在实现了基本的24点游戏框架后,我们可以通过添加一些扩展功能来提升游戏的趣味性和挑战性。
4.1 检查是否能组成24点
24点游戏的核心在于利用给定的四个数字,通过加、减、乘、除等运算组合出24。我们可以编写一个算法,尝试所有可能的运算组合和数字排列。我们可以使用递归生成四个数字的所有排列。以下是实现的代码:
#include <stdbool.h>void swap(int *a, int *b) {int temp = *a;*a = *b;*b = temp;
}void permute(int numbers[], int l, int r, bool *found) {if (l == r) {// 在这里调用计算函数if (canMake24(numbers)) {*found = true;}} else {for (int i = l; i <= r; i++) {swap(&numbers[l], &numbers[i]);permute(numbers, l + 1, r, found);swap(&numbers[l], &numbers[i]); // backtrack}}
}
我们需要实现 canMake24
函数来检查是否能通过运算得到24。以下是一个简单的实现:
bool calculate(float a, float b, char op) {switch (op) {case '+': return a + b;case '-': return a - b;case '*': return a * b;case '/': return b != 0 ? a / b : 0; // 避免除以零default: return 0;}
}bool canMake24(int numbers[4]) {char ops[] = {'+', '-', '*', '/'};float results[4];// 生成所有运算符组合并计算结果for (int i = 0; i < 4; i++) {for (int j = 0; j < 4; j++) {// 这里需要实现运算逻辑// 计算结果并检查是否等于24}}return false; // 默认返回false
}
4.2 用户输入
为了增加游戏的互动性,我们可以允许用户输入自己的四个数字。以下是获取用户输入的代码:
void getUserInput(int numbers[NUM_CARDS]) {printf("请输入四个数字(1到10之间):\n");for (int i = 0; i < NUM_CARDS; i++) {scanf("%d", &numbers[i]);while (numbers[i] < 1 || numbers[i] > 10) {printf("输入无效,请输入1到10之间的数字:");scanf("%d", &numbers[i]);}}
}
4.3 图形界面
为了提升用户体验,我们可以考虑使用图形库(如SDL、GTK或Qt)来创建图形用户界面(GUI)。可以使用按钮和文本框来显示扑克牌和输入数字。以下是一个伪代码示例,展示如何使用SDL库创建一个简单的窗口:
#include <SDL2/SDL.h>void createWindow() {SDL_Init(SDL_INIT_VIDEO);SDL_Window *window = SDL_CreateWindow("24点游戏", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 480, SDL_WINDOW_SHOWN);SDL_Renderer *renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);// 在这里绘制扑克牌和按钮SDL_DestroyRenderer(renderer);SDL_DestroyWindow(window);SDL_Quit();
}
4.4 计时和得分系统
为了增加游戏的挑战性,我们可以引入计时和得分系统。可以使用系统时间来实现计时器,记录玩家从开始到找到结果所用的时间。
#include <time.h>void startTimer() {time_t start = time(NULL);// 游戏逻辑time_t end = time(NULL);printf("用时: %ld秒\n", end - start);
}
根据玩家的表现(如用时、找到的组合数量等)计算得分:
int calculateScore(int timeTaken) {return 100 - timeTaken; // 示例得分计算
}
4.5 多人模式
为了增加游戏的趣味性,我们可以实现多人模式,让多个玩家轮流进行游戏。在多人模式下,玩家可以轮流进行游戏:
void multiplayerMode() {int playerCount;printf("请输入玩家人数:");scanf("%d", &playerCount);for (int i = 0; i < playerCount; i++) {printf("玩家 %d 的回合:\n", i + 1);// 生成扑克牌并检查}
}
结论
通过本文的详细阐述,我们成功构建了一个基本的24点游戏框架,并探讨了多种扩展功能,以提升游戏的趣味性和挑战性。从随机生成扑克牌的数字和花色,到实现运算组合的检查,再到用户输入、图形界面、计时和得分系统,以及多人模式的设计,这些功能不仅丰富了游戏的玩法,还增强了玩家的互动体验。
实现这些功能的过程,不仅让我们深入理解了C语言的基本语法和编程逻辑,还锻炼了我们的算法思维和问题解决能力。希望通过这些扩展,玩家能够在享受游戏的同时,提升自己的数学能力和逻辑思维。
未来,我们可以继续探索更多的功能和优化,例如引入更复杂的算法、改进用户界面设计,甚至将游戏移植到移动平台上。无论如何,24点游戏将始终是一个充满乐趣和挑战的经典游戏,期待你在实现和扩展的过程中,收获更多的乐趣与成就感!
码文不易,本篇文章就介绍到这里,如果想要学习更多Java系列知识,点击关注博主,博主带你零基础学习Java知识。与此同时,对于日常生活有困扰的朋友,欢迎阅读我的第四栏目:《国学周更—心性养成之路》,学习技术的同时,我们也注重了心性的养成。
相关文章:

玩转数字与运算:用C语言实现24点游戏的扑克牌魅力
✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...

前端入门之VUE--基础与核心
前言 VUE是前端用的最多的框架;这篇文章是本人大一上学习前端的笔记;欢迎点赞 收藏 关注,本人将会持续更新。 Vue学习笔记 用于构建用户界面的渐进式框架 构建用户界面:基于数据动态渲染页面渐进式:循序渐近的学…...

logback 初探学习
logback 三大模块 记录器(Logger)、追加器(Appender)和布局(Layout) 配置文件外层最基本的标签如图示 xml中定义的就是这个三个东西下面进入学习 包引入参考springboot 官方文档 Logging :: Spring Boo…...

在Elasticsearch中,是怎么根据一个词找到对应的倒排索引的?
大家好,我是锋哥。今天分享关于【在Elasticsearch中,是怎么根据一个词找到对应的倒排索引的?】面试题。希望对大家有帮助; 在Elasticsearch中,是怎么根据一个词找到对应的倒排索引的? 在 Elasticsearch 中…...

1992-2021年 各省市县经过矫正的夜间灯光数据(GNLD、VIIRS)区域汇总:省份、城市、区县面板数据
1992-2021年 各省市县经过矫正的夜间灯光数据(GNLD、VIIRS)区域汇总:省份、城市、区县面板数据 .r.rar https://download.csdn.net/download/2401_84585615/90001905 从1992年至2021年,中国各省份、城市及区县的夜间灯光数据经过…...

linux实战-黑链——玄机靶场
黑链的特征: 隐藏链接:黑链通常隐藏在网站页面中,使用CSS、JavaScript或其他手段使其对普通用户不可见,但仍然能被搜索引擎爬虫检测到。恶意内容:这些链接指向的内容可能包含恶意软件、钓鱼页面或其他不良内容&#x…...

鸿蒙NEXT开发案例:字数统计
【引言】 本文将通过一个具体的案例——“字数统计”组件,来探讨如何在鸿蒙NEXT框架下实现这一功能。此组件不仅能够统计用户输入文本中的汉字、中文标点、数字、以及英文字符的数量,还具有良好的用户界面设计,使用户能够直观地了解输入文本…...

uniapp vue2项目迁移vue3项目
uniapp vue2项目迁移vue3项目,必须适配的部分 一、main.js 创建应用实例 // 之前 - Vue 2 import Vue from vue import App from ./App Vue.config.productionTip false // vue3 不再需要 App.mpType app // vue3 不再需要 const app new Vue({ ...App }) …...

16.C++STL 3(string类的模拟,深浅拷贝问题)
⭐本篇重点:string类的模拟,自己实现一个简单的string类 ⭐本篇代码:c学习/05.string类的学习 橘子真甜/c-learning-of-yzc - 码云 - 开源中国 (gitee.com) 目录 一. 经典string类的模拟 1.1 深浅拷贝问题 1.2 使用深拷贝完成经典string类的…...

神经网络10-Temporal Fusion Transformer (TFT)
Temporal Fusion Transformer (TFT) 是一种专为时序数据建模而设计的深度学习模型,它结合了Transformer架构和其他技术,旨在有效地处理和预测时序数据中的复杂模式。TFT 于 2020 年由 Google Research 提出,旨在解决传统模型在时序预测中的一…...

“iOS profile文件与私钥证书文件不匹配”总结打ipa包出现的问题
目录 文件和证书未加载或特殊字符问题 证书过期或Profile文件错误 确认开发者证书和私钥是否匹配 创建证书选择错误问题 申请苹果 AppId时勾选服务不全问题 总结 在上线ios平台的时候,在Hbuilder中打包遇见了问题,生成ipa文件时候,一…...

《图像梯度与常见算子全解析:原理、用法及效果展示》
简介:本文深入探讨图像梯度相关知识,详细介绍图像梯度是像素灰度值在不同方向的变化速度,并以 “pig.JPG” 图像为例,通过代码展示如何选取图像部分区域并分析其像素值以论证图像梯度与边缘信息的关联。接着全面阐述了 Sobel 算子,…...

【c++篇】:探索c++中的std::string类--掌握字符串处理的精髓
✨感谢您阅读本篇文章,文章内容是个人学习笔记的整理,如果哪里有误的话还请您指正噢✨ ✨ 个人主页:余辉zmh–CSDN博客 ✨文章所属专栏:c篇–CSDN博客 文章目录 前言一.std::string对象的创建二.std::string对象的访问三.std::str…...

LlamaIndex ollama 搭建本地RAG应用,建立本地知识库
目录 简介安装前的准备下载ollama创建llamaindex conda环境,为后面编码作准备 环境变量迁移ollama到其他盘运行ollama方式一方式二禁止ollama开机自启动运行第一个模型 Chatbox聊天下载Chatbox配置ollama地址和模型验证 建立自身特定知识数据搭配大语言模型创建项目…...

draggable的el-dialog实现对话框标题可以选择
请看图 这个对话框使用了el-dialog并且draggable属性设置成了true,所以标题栏这里就可以拖动,现在用户想选中标题栏的文本进而复制。我看到这个需求头都大了。 我能想到的方案有三个:1. 取消draggable为true 2. 标题文案后面加一个复制按钮 …...

2024年Android面试总结
2024年Android面试总结 1.动画类型有哪些?插值器原理? 2.StringBuffer和StringBuilder区别? 3.jvm内存模型? 4.线程池7大核心参数及原理? 5.Android多进程通信方式有哪些?各自的优缺点? 6…...

树莓派3:64位系统串口(UART)使用问题的解决方法
前言 当我们要使用串口进行zigbee的短距离通信时,发现无法使用串口. 原因 树莓派3bCPU内部有两个串口,一个硬件串口(就是我们平时使用的UART),还有一个迷你串口(mini-uart),在老版本的树莓派中把硬件串口分配在GPIO上,可以单独使用.但是在新的树莓派中官方把硬件串口给了蓝牙…...

SemiDrive E3 硬件设计系列---唤醒电路设计
一、前言 E3 系列芯片是芯驰半导体高功能安全的车规级 MCU,对于 MCU 的硬件设计部分,本系列将会分模块进行讲解,旨在介绍 E3 系列芯片在硬件设计方面的注意事项与经验,本文主要讲解 E3 硬件设计中唤醒电路部分的设计。 二、RTC 模…...

淘宝接口高并发采集核心要点解读,开启电商数据智能应用新纪元
一、引言 在电商蓬勃发展的今天,淘宝作为全球知名的电商巨头,其平台上的数据犹如一座蕴藏无限价值的宝藏。准确且高效地采集淘宝接口数据,并通过高并发技术实现大规模数据获取,对于电商企业的精准营销、市场趋势分析、竞品监测以及…...

C#里怎么样快速使用LINQ实现查询?
C#里怎么样快速使用LINQ实现查询? 在C#里使用LINQ,是一个方便的功能, 不过,要学会使用这部分的功能,需要比较多的学习时间,否则,使用起就比较难。 因为它的表现方式,与编程语言通用的功能,还是差别比较大。 当数据量比较小,没有特定的顺序时,使用LINQ访问会比较好…...

2024新版微软edge浏览器输入百度网址时自动补全tn=68018901……小尾巴的解决
以前一直是Windows11 21h2版本,浏览器内输入baidu不会自动补全tnxx的百度推广小尾巴。然后前几天在BIOS内开启了tpm2.0,升级Windows11到了24h2版本。 发现在edge浏览器内只要输入b,就会自动补全为baidu.com?tnXXX的这么一个百度推广形式。开…...

uni-app打包H5自定义微信分享
1、配置分享信息 修改uni-app的index.html,添加Open Graph(OG)标签来配置分享信息。 <!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8" /><meta name="description" content="标题"/>…...

大模型专栏--大模型应用场景
紧接着第一篇,什么是大模型,这篇文章讨论一下大模型的应用场景和应用方式有哪些? 基础使用 随着 GPT 的出现,AI 大模型已经越来越多得出现在日常生活和学术研究,工作中。 按照使用方向有以下几种: 自然语…...

骑砍2霸主MOD开发(29)-顶点动画
一.定制化顶点动画(MorphAnimation) 定制化顶点动画用于人物Agent的面部表情. 1.创建MorphAnimation对应静态资源morph_animation.tpac 2.Agent设置对应MorphAnimation [EngineMethod("set_agent_facial_animation", false)] void SetAgentFacialAnimation(UIntPtr …...

-Dspring.profiles.active=dev与--spring.profiles.active=dev的区别
在Spring Boot应用程序中,-Dspring.profiles.activedev和--spring.profiles.activedev都用于指定要激活的Spring配置文件(profile),但它们在不同的环境中使用,并且有不同的作用域。 -Dspring.profiles.activedev&#…...

面向对象高级(2)单例设计对象与代码块
面向对象高级(2) 单例设计模式、main方法与代码块 引言; 设计模式:特定环境下特定问题的处理方法。可理解为一种经典的可以参照的模板。单例设计模式则是只存在单个对象实例、且只有一种方法获取对象实例的一种设计模式。 单例设…...

47小型项目的规划与实施
每天五分钟学Linux | 第四十七课:小型项目的规划与实施 大家好!欢迎再次来到我们的“每天五分钟学Linux”系列教程。在前面的课程中,我们学习了并发编程的知识,包括如何管理和使用进程与线程。今天,我们将探讨如何规划…...

堤防安全监测系统方案
一、背景情况 堤防是开发利用水资源和防治水灾害的重要工程措施之一,对防洪、供水、生态、发电、航运等至关重要。我国现有堤防9.8万多座,其中大中型堤防4700多座、小型堤防9.4万座,80%以上修建于上世纪50至70年代。由于堤防管护力量薄弱&am…...

聊聊Flink:这次把Flink的window分类(滚动、滑动、会话、全局)、窗口函数讲透
一、窗口 窗口(Window)是处理无界流的关键所在。窗口将流分成有限大小的“桶”,我们可以在其上应用算子计算。Flink可以使用window()和windowAll()定义一个窗口,二者都需要传入一个窗口分配器WindowAssigner,WindowAs…...

mysql-分析MVCC原理
一、MVCC简介 MVCC是一种用来解决读写冲读的无锁并发控制,也就是为事务分配单增长的时间戳,为每个修改保存一个版本,版本与事务时间戳关联,读操作只读该事务开始前的数据库的快照,所以MVCC可以为数据库解决一些问题。…...