【C语言】2048小游戏【附源码】

欢迎来到英杰社区icon-default.png?t=N7T8https://bbs.csdn.net/topics/617804998

一、游戏描述:

        2048是一款数字益智类游戏,玩家需要使用键盘控制数字方块的移动,合并相同数字的方块,最终达到数字方块上出现“2048”的目标。

        每次移动操作,所有数字方块会朝着指定方向同时滑动,并在靠近边界或其他数字方块时停止。如果两个相邻的数字方块数字相同,则它们会合并成一个方块,数字值为原先相同方块的数字值相加。

二、效果展示

三、代码讲解:

        实现了一个2048游戏的基本功能,包括初始化游戏界面、移动方块、放置新数字以及判定胜负等功能:

  1. DisplayBoard(int board[ROW][COL]):初始化并打印游戏界面。这个函数用于显示游戏的当前状态,包括棋盘上的数字和空格。

  2. init_num(int board[ROW][COL]):在游戏开始时随机生成两个数字2。这个函数用于初始化游戏棋盘,给棋盘上的两个随机位置赋值为2。

  3. put_num(int board[ROW][COL]):在每次移动后随机放置一个数字2或4。这个函数用于在每次玩家移动后,在空白的位置随机生成一个数字2或4。

  4. up(int board[ROW][COL])down(int board[ROW][COL])left(int board[ROW][COL])right(int board[ROW][COL]):分别实现了向上、向下、向左、向右移动的功能。这些函数用于处理玩家的移动操作,更新棋盘上的数字位置。

  5. is_win(int board[ROW][COL]):判断是否获胜。这个函数用于检查游戏是否达到了2048,如果有一个位置的值为2048,则游戏获胜。

  6. is_fail(int board[ROW][COL]):判断是否失败。这个函数用于检查游戏是否失败,即所有位置都被填满且无法进行有效的移动操作。

#pragma once#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <windows.h>
#include<conio.h>#define ROW 4
#define COL 4
const int copy[ROW][COL];//初始化并打印游戏界面
void DisplayBoard(int board[ROW][COL]);
//开局随机生成两个2
void init_num(int board[ROW][COL]);
//在移动后随机放置数字2或4
void put_num(int board[ROW][COL]);
//移动
void up(int board[ROW][COL]);
void down(int board[ROW][COL]);
void left(int board[ROW][COL]);
void right(int board[ROW][COL]);
//判定胜负
int is_win(int board[ROW][COL]);
int is_fail(int board[ROW][COL]);

显示2048游戏的棋盘界面

        

  1. 打印横向的分隔线,使用"+"和"-"来表示。
  2. 遍历每个格子,如果格子上有数字,则打印该数字并确保宽度为5个字符,右对齐;如果格子上没有数字,则打印5个空格。
  3. 在每行末尾打印"|"
  4. 再次打印横向的分隔线,使用"+"和"-"来表示。
void DisplayBoard(int board[ROW][COL])
{int i = 0;int j = 0;printf("tip:*方向键控制方块移动*ESC键返回菜单*\n");for (int j = 0; j < COL; j++)printf("+-----");printf("+\n");for (int i = 0; i < ROW; i++){for (int j = 0; j < COL; j++){printf("|");if (board[i][j] != 0)printf("%5d", board[i][j]);elseprintf("     ");}printf("|\n");for (int j = 0; j < COL; j++){printf("+-----");}printf("+\n");}
}

初始化游戏棋盘:

        

  1. 生成一个随机的行索引 x 和列索引 y,确保它们在棋盘范围内。
  2. 在随机选择的位置 (x, y) 上放置一个数字2。
  3. 再次生成一个随机的行索引 x 和列索引 y,确保它们与第一个位置不重复。
  4. 在新的随机选择的位置 (x, y) 上放置另一个数字2。
void init_num(int board[ROW][COL])
{int x, y;x = rand() % ROW;y = rand() % COL;board[x][y] = 2;//随机在一个位置生成2x = rand() % ROW;y = rand() % COL;while (board[x][y] == 2){x = rand() % ROW;y = rand() % COL;}board[x][y] = 2;return;
}

空白位置随机放置一个数字:

  1. 生成一个随机的行索引 x 和列索引 y,确保它们在棋盘范围内。
  2. 如果在选择的位置 (x, y) 上已经有数字,则继续随机选择位置,直到找到一个空白位置。
  3. 生成一个随机数 z,范围为0到9之间的整数。
  4. 如果 z 小于9,则在当前空白位置 (x, y) 放置数字2;如果 z 等于9,则放置数字4。
void put_num(int board[ROW][COL])
{int x = 0;int y = 0;int z = 0;x = rand() % ROW;y = rand() % COL;while (board[x][y] != 0){x = rand() % ROW;y = rand() % COL;}z = rand() % 10;if (z < 9)board[x][y] = 2;elseboard[x][y] = 4;return;
}

简单的 2048 游戏的移动和合并操作

        上下左右四个方向的移动操作:up、down、left、right

每个函数都按照相应的方向进行移动并合并相同的数字。

在每个函数中,首先进行移动操作,然后进行合并操作,再次进行移动操作,并最后检查游戏是否可以继续进行(通过contrast(board)函数判断)。如果游戏可以继续,则调用put_num(board)函数来生成新的数字;否则直接返回。

void up(int board[ROW][COL])
{int i = 0;int j = 0;int x = 0;int y = 0;for (i = 0; i < ROW; i++){//移动j = 0;y = 0;while (j < COL - 1 && y < COL - 1){if (board[j][i] == 0){for (x = j; x < ROW - 1; x++)board[x][i] = board[x + 1][i];board[ROW - 1][i] = 0;y++;}elsej++;}//合并for (j = 0; j < COL - 1; j++)if (board[j][i] == board[j + 1][i] && board[j][i] != 0){board[j][i] = board[j][i] * 2;board[j + 1][i] = 0;}//再次移动补空j = 0;y = 0;while (j < COL - 1 && y < COL - 1){if (board[j][i] == 0){for (x = j; x < ROW - 1; x++)board[x][i] = board[x + 1][i];board[ROW - 1][i] = 0;y++;}elsej++;}}if (contrast(board) == 0)put_num(board);elsereturn;
}void down(int board[ROW][COL])
{int i = 0;int j = 0;int x = 0;int y = 0;for (i = 0; i < ROW; i++){j = COL - 1;y = 0;while (j > 0 && y < COL - 1){if (board[j][i] == 0){for (x = j; x > 0; x--)board[x][i] = board[x - 1][i];board[0][i] = 0;y++;}elsej--;}for (j = COL - 1; j > 0; j--)if (board[j][i] == board[j - 1][i] && board[j][i] != 0){board[j][i] = board[j][i] * 2;board[j - 1][i] = 0;}j = COL - 1;y = 0;while (j > 0 && y < COL - 1){if (board[j][i] == 0){for (x = j; x > 0; x--)board[x][i] = board[x - 1][i];board[0][i] = 0;y++;}elsej--;}}if (contrast(board) == 0)put_num(board);elsereturn;
}void left(int board[ROW][COL])
{int i = 0;int j = 0;int x = 0;int y = 0;for (i = 0; i < ROW; i++){j = 0;y = 0;while (j < 3 && y < 3){if (board[i][j] == 0){for (x = j; x < ROW - 1; x++)board[i][x] = board[i][x + 1];board[i][COL - 1] = 0;y++;}elsej++;}for (j = 0; j < 3; j++)if (board[i][j] == board[i][j + 1] && board[i][j] != 0){board[i][j] = board[i][j] * 2;board[i][j + 1] = 0;}j = 0;y = 0;while (j < 3 && y < 3){if (board[i][j] == 0){for (x = j; x < ROW - 1; x++)board[i][x] = board[i][x + 1];board[i][COL - 1] = 0;y++;}elsej++;}}if (contrast(board) == 0)put_num(board);elsereturn;
}void right(int board[ROW][COL])
{int i = 0;int j = 0;int x = 0;int y = 0;for (i = 0; i < 4; i++){j = COL - 1;y = 0;while (j > 0 && y < COL - 1){if (board[i][j] == 0){for (x = j; x > 0; x--)board[i][x] = board[i][x - 1];board[i][0] = 0;y++;}else j--;}for (j = 3; j > 0; j--)if (board[i][j] == board[i][j - 1] && board[i][j] != 0){board[i][j] = board[i][j] * 2;board[i][j - 1] = 0;}j = COL - 1;y = 0;while (j > 0 && y < COL - 1){if (board[i][j] == 0){for (x = j; x > 0; x--)board[i][x] = board[i][x - 1];board[i][0] = 0;y++;}else j--;}}if (contrast(board) == 0)put_num(board);elsereturn;
}

判断在 2048 游戏中是否无法继续移动

  1. 游戏板上还有空格(值为0),即游戏可以继续;
  2. 相邻的方块(上下或左右相邻)有相同的值,即游戏可以继续合并。

如果以上任意情况成立,函数将返回0,表示游戏可以继续;否则,如果所有方块都被填满且没有相邻方块的值相同,函数将返回1,表示游戏无法继续移动,游戏结束。

int is_fail(int board[ROW][COL])
{int i = 0;int j = 0;for (i = 0; i < ROW; i++){for (j = 0; j < COL; j++){if (board[i][j] == 0)return 0;if (i > 0){if (board[i - 1][j] == board[i][j])return 0;}if (j > 0){if (board[i][j - 1] == board[i][j])return 0;}}}return 1;
}

检查在2048游戏中是否获胜

该函数遍历整个游戏板,找到其中的最大值。如果最大值达到或超过2048,函数将返回1,表示玩家已经获胜;否则返回0,表示游戏尚未获胜。

在2048游戏中,玩家的目标是通过合并方块使得其中一个方块的值达到2048。一旦某个方块的值达到2048,玩家就获胜了。

这个函数的作用是在每一步移动后检查游戏是否已经达到了获胜条件。如果返回1,通常会触发游戏获胜的逻辑,比如显示获胜信息或者终止游戏等。

int is_win(int board[ROW][COL])
{int i = 0;int j = 0;int num = 0;for (i = 0; i < ROW; i++)for (j = 0; j < COL; j++){if (board[i][j] > num)num = board[i][j];}if (num >= 2048)return 1;elsereturn 0;
}

        copyboard 函数的作用是将一个二维数组 board 中的元素复制到另一个二维数组 copy 中。通常在编程中,这样的函数用于保存一个数组的副本,以便后续的比较或者其他操作而不影响原始数组。

void copyboard(int board[ROW][COL], int copy[ROW][COL])
{int i = 0;int j = 0;for (i = 0; i < ROW; i++)for (j = 0; j < COL; j++)copy[i][j] = board[i][j];
}

菜单功能:

void menu()
{printf("**************************\n");printf("**************************\n");printf("**************************\n");printf("*****按 1 开 始 游 戏*****\n");printf("*****按 0 退 出 游 戏*****\n");printf("**************************\n");printf("**************************\n");printf("**************************\n");
}

主函数:

int main()
{int input = 0;srand((unsigned int)time(NULL));do{menu();printf("请选择:");scanf("%d", &input);switch (input){case 1:game2048();break;case 0:printf("退出游戏)\n");break;default:printf("再次进入游戏\n");break;}} while (input);return 0;
}

完整代码:

        Test.c

#define _CRT_SECURE_NO_WARNINGS 1
#include "game2048.h"void menu()
{printf("**************************\n");printf("**************************\n");printf("**************************\n");printf("*****按 1 开 始 游 戏*****\n");printf("*****按 0 退 出 游 戏*****\n");printf("**************************\n");printf("**************************\n");printf("**************************\n");
}void game2048()
{int board[ROW][COL] = { {0} };int control = 0;DisplayBoard(board);init_num(board);system("cls"); //清屏,美观界面DisplayBoard(board);while ((control = _getch()) != 0x1b){switch (control){case 0xe0:switch (control = getch()){case 72:copyboard(board, copy);up(board);break;case 80:copyboard(board, copy);down(board);break;case 75:copyboard(board, copy);left(board);break;case 77:copyboard(board, copy);right(board);break;default:break;}system("cls");DisplayBoard(board);if (is_win(board) == 1){printf("恭喜你赢了!\n");}if (is_fail(board) == 1){printf("抱歉,您未能通关\n");}}}
}int main()
{int input = 0;srand((unsigned int)time(NULL));do{menu();printf("请选择:");scanf("%d", &input);switch (input){case 1:game2048();break;case 0:printf("退出游戏)\n");break;default:printf("再次进入游戏\n");break;}} while (input);return 0;
}

game.c

#define _CRT_SECURE_NO_WARNINGS 1
#define _CRT_SECURE_NO_WARNINGS 1
#include "game2048.h"void DisplayBoard(int board[ROW][COL])
{int i = 0;int j = 0;printf("tip:*方向键控制方块移动*ESC键返回菜单*\n");for (int j = 0; j < COL; j++)printf("+-----");printf("+\n");for (int i = 0; i < ROW; i++){for (int j = 0; j < COL; j++){printf("|");if (board[i][j] != 0)printf("%5d", board[i][j]);elseprintf("     ");}printf("|\n");for (int j = 0; j < COL; j++){printf("+-----");}printf("+\n");}
}void init_num(int board[ROW][COL])
{int x, y;x = rand() % ROW;y = rand() % COL;board[x][y] = 2;//随机在一个位置生成2x = rand() % ROW;y = rand() % COL;while (board[x][y] == 2){x = rand() % ROW;y = rand() % COL;}board[x][y] = 2;return;
}void put_num(int board[ROW][COL])
{int x = 0;int y = 0;int z = 0;x = rand() % ROW;y = rand() % COL;while (board[x][y] != 0){x = rand() % ROW;y = rand() % COL;}z = rand() % 10;if (z < 9)board[x][y] = 2;elseboard[x][y] = 4;return;
}void up(int board[ROW][COL])
{int i = 0;int j = 0;int x = 0;int y = 0;for (i = 0; i < ROW; i++){//移动j = 0;y = 0;while (j < COL - 1 && y < COL - 1){if (board[j][i] == 0){for (x = j; x < ROW - 1; x++)board[x][i] = board[x + 1][i];board[ROW - 1][i] = 0;y++;}elsej++;}//合并for (j = 0; j < COL - 1; j++)if (board[j][i] == board[j + 1][i] && board[j][i] != 0){board[j][i] = board[j][i] * 2;board[j + 1][i] = 0;}//再次移动补空j = 0;y = 0;while (j < COL - 1 && y < COL - 1){if (board[j][i] == 0){for (x = j; x < ROW - 1; x++)board[x][i] = board[x + 1][i];board[ROW - 1][i] = 0;y++;}elsej++;}}if (contrast(board) == 0)put_num(board);elsereturn;
}void down(int board[ROW][COL])
{int i = 0;int j = 0;int x = 0;int y = 0;for (i = 0; i < ROW; i++){j = COL - 1;y = 0;while (j > 0 && y < COL - 1){if (board[j][i] == 0){for (x = j; x > 0; x--)board[x][i] = board[x - 1][i];board[0][i] = 0;y++;}elsej--;}for (j = COL - 1; j > 0; j--)if (board[j][i] == board[j - 1][i] && board[j][i] != 0){board[j][i] = board[j][i] * 2;board[j - 1][i] = 0;}j = COL - 1;y = 0;while (j > 0 && y < COL - 1){if (board[j][i] == 0){for (x = j; x > 0; x--)board[x][i] = board[x - 1][i];board[0][i] = 0;y++;}elsej--;}}if (contrast(board) == 0)put_num(board);elsereturn;
}void left(int board[ROW][COL])
{int i = 0;int j = 0;int x = 0;int y = 0;for (i = 0; i < ROW; i++){j = 0;y = 0;while (j < 3 && y < 3){if (board[i][j] == 0){for (x = j; x < ROW - 1; x++)board[i][x] = board[i][x + 1];board[i][COL - 1] = 0;y++;}elsej++;}for (j = 0; j < 3; j++)if (board[i][j] == board[i][j + 1] && board[i][j] != 0){board[i][j] = board[i][j] * 2;board[i][j + 1] = 0;}j = 0;y = 0;while (j < 3 && y < 3){if (board[i][j] == 0){for (x = j; x < ROW - 1; x++)board[i][x] = board[i][x + 1];board[i][COL - 1] = 0;y++;}elsej++;}}if (contrast(board) == 0)put_num(board);elsereturn;
}void right(int board[ROW][COL])
{int i = 0;int j = 0;int x = 0;int y = 0;for (i = 0; i < 4; i++){j = COL - 1;y = 0;while (j > 0 && y < COL - 1){if (board[i][j] == 0){for (x = j; x > 0; x--)board[i][x] = board[i][x - 1];board[i][0] = 0;y++;}else j--;}for (j = 3; j > 0; j--)if (board[i][j] == board[i][j - 1] && board[i][j] != 0){board[i][j] = board[i][j] * 2;board[i][j - 1] = 0;}j = COL - 1;y = 0;while (j > 0 && y < COL - 1){if (board[i][j] == 0){for (x = j; x > 0; x--)board[i][x] = board[i][x - 1];board[i][0] = 0;y++;}else j--;}}if (contrast(board) == 0)put_num(board);elsereturn;
}int is_fail(int board[ROW][COL])
{int i = 0;int j = 0;for (i = 0; i < ROW; i++){for (j = 0; j < COL; j++){if (board[i][j] == 0)return 0;if (i > 0){if (board[i - 1][j] == board[i][j])return 0;}if (j > 0){if (board[i][j - 1] == board[i][j])return 0;}}}return 1;
}int is_win(int board[ROW][COL])
{int i = 0;int j = 0;int num = 0;for (i = 0; i < ROW; i++)for (j = 0; j < COL; j++){if (board[i][j] > num)num = board[i][j];}if (num >= 2048)return 1;elsereturn 0;
}void copyboard(int board[ROW][COL], int copy[ROW][COL])
{int i = 0;int j = 0;for (i = 0; i < ROW; i++)for (j = 0; j < COL; j++)copy[i][j] = board[i][j];
}int contrast(int board[ROW][COL])
{int i = 0;int j = 0;for (i = 0; i < 4; i++)for (j = 0; j < 4; j++)if (copy[i][j] != board[i][j])return 0;return 1;
}

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

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

相关文章

GitLab 新项目创建和使用

一、下载 Git 客户端 Git - Downloading Package (git-scm.com) 二、打开 Git Bash 配置 gitlab 账户 下面的信息可以登录gitlab查看 git config --global user.name "yourname"git config --global user.email "youremailXX.com" 生成ssh_key ssh-k…

BioTech - AlphaFlow 项目 PyTorch Lightning + DeepSpeed 的分布式配置

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/137348092 GitHub: https://github.com/bjing2016/alphaflow 步骤如下: 安装 DeepSpeed:需要安装 DeepSpeed。配置 Trainer:在 PyTorch Lightning 中,需要…

ELK报错,索引变成只读状态。

问题描述 今天发现当天的索引在ES中并没有创建&#xff0c;logstash中不停的报错&#xff1a; [2021-05-24T05:47:51,904][INFO ][logstash.outputs.elasticsearch] retrying failed action with response code: 403 ({“type”>“cluster_block_exception”, “reason”&g…

3D检测:从pointnet,voxelnet,pointpillar到centerpoint

记录centerpoint学习笔记。目前被引用1275次&#xff0c;非常高。 地址&#xff1a;Center-Based 3D Object Detection and Tracking (thecvf.com) GitHub - tianweiy/CenterPoint CenterPoint&#xff1a;三维点云目标检测算法梳理及最新进展&#xff08;CVPR2021&#xff…

STM32 TIM DMA burst 输出变频 PWM 波形

1. 问题背景 客户需要 MCU 输出一组变频的 PWM 波形来控制外围器件&#xff0c;并且不同频率脉冲的个数也不同。STM32U5 芯片拥有 TIM1/TIM8 高级定时器&#xff0c;还有通用定时器TIM2/TIM3/TIM4/TIM5 以及 TIM15/TIM16/TIM17。TIM 模块中&#xff0c;可通过修改 ARR 寄存器的…

一文让你彻底理解 AdaBoost 自适应提升算法 | AdaBoost 的关键要点、基本原理、优缺点和实际应用

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 一、关键要点 AdaBoost&#xff0c;即自适应提升&#xff08;Adaptive Boosting&#xff09;算法的缩写&#xff0c;是一种基于 Boosting 策略的集成学习方法&#xff0c;旨在降低偏差。AdaBoost 的 “…

Vue和FastAPI实现前后端分离

前言 近期接触了一些开源大模型应用服务&#xff0c;发现很多用的都是FastAPI web框架&#xff0c;于是乎研究了一下它的优势&#xff0c;印象最深有两个&#xff1a;一个是它的异步处理性能比较好&#xff0c;二是它可以类似java swagger的API交互文档&#xff0c;这个对应前…

【快捷部署】013_Podman(3.4.4)

&#x1f4e3;【快捷部署系列】013期信息 编号选型版本操作系统部署形式部署模式复检时间013podman3.4.4Ubuntu 22.04apt-2024-04-03 一、快捷部署 注意! 必须满足&#xff1a;Ubuntu 20.10 and newer #由于本期安装脚本较为简单&#xff0c;所以不制作一键安装脚本&#xf…

【Django学习笔记(三)】BootStrap介绍

BootStrap介绍 前言正文1、BootStrap 快速了解2、初识BootStrap2.1 下载地址2.2 创建目录2.3 引入BootStrap2.4 使用BootStrap 3、BootStrap 组件&样式3.1 导航条3.2 栅格系统3.3 container3.3.1 container3.3.2 container-fluid 3.4 面板3.5 媒体对象3.6 分页3.7 图标3.7.…

SAP-CO主数据之作业类型创建-<KL01>

公告&#xff1a;周一至周五每日一更&#xff0c;周六日存稿&#xff0c;请您点“关注”和“在看”&#xff0c;后续推送的时候不至于看不到每日更新内容&#xff0c;感谢。 目录 一、背景&#xff1a; 成本中心主数据创建&#xff1a; 成本要素主数据创建&#xff1a; 二…

氟化氢冷凝装置PFA反应烧瓶可应用半导体行业

PFA多颈烧瓶是一种高品质的实验室器皿&#xff0c;它具有多个颈口&#xff0c;可以在同一容器内进行多种化学反应。PFA多颈烧瓶能够耐受高温和强酸、强碱等腐蚀性介质&#xff0c;是化学实验中不可或缺的物品。多颈烧瓶可以配合搅拌桨、温度计、恒压分液漏斗、冷凝管等使用&…

golang语言系列:学习路线图

云原生学习路线导航页&#xff08;持续更新中&#xff09; 本文是 golang语言系列 文章&#xff0c;主要展示golang语言学习的全路线图 参考&#xff1a;https://github.com/darius-khll/golang-developer-roadmap/blob/master/i18n/zh-CN/ReadMe-zh-CN.md

本地Windows打包启动前端后台

本地Windows打包启动前端后台 1、安装jdk Windows JDK安装 2、Nginx 2.1、将 nginx-1.16.1文件夹复制到D:\home\jisapp目录下 2.2、域名证书配置&#xff1a; 将域名证书放到D:\home\jisapp\ssl\2023目录下->配置nginx.conf文件&#xff08;D:\home\jisapp\nginx-1.22.0…

通过nvtx和Nsight Compute分析pytorch算子的耗时

通过nvtx和Nsight Compute分析pytorch算子的耗时 一.效果二.代码 本文演示了如何借助nvtx和Nsight Compute分析pytorch算子的耗时 一.效果 第一次执行,耗时很长 小规模的matmul,调度耗时远大于算子本身 大规模的matmul,对资源的利用率高小规模matmul,各层调用的耗时 二.代码…

【Linux】Vim编辑器

专栏文章索引&#xff1a;Linux 目录 在Vim编辑器中&#xff0c;一个Tab键相当于几个空格&#xff1f; 在Vim编辑器中&#xff0c;一个Tab键相当于几个空格&#xff1f; 在Vim编辑器中&#xff0c;默认情况下&#xff0c;一个Tab键相当于8个空格。 这是Vim的默认设置&#x…

【C++】二分查找算法(模板)

重点 只需要记住两点&#xff1a; 1.left right 时&#xff0c;一定就是最终结果&#xff08;包括找不到目标值&#xff09;&#xff0c;无需再次判断&#xff0c;如果判断就会死循环 2.求中点如果是求左端点 mid left (right - left)/2 如果是求右端点 mid left (right -…

物联网实战--入门篇之(四)嵌入式-UART驱动

目录 一、串口简介 二、串口驱动设计 三、串口发送 四、串口接收处理 五、PM2.5数据接收处理 六、printf重定义 七、总结 一、串口简介 串口在单片机的开发中属于非常常用的外设&#xff0c;最基本的都会预留一个调试串口用来输出调试信息&#xff0c;串口时序这里就不谈…

洛谷-P1706 全排列问题(DFS)

目录 题目链接&#xff1a; 思路&#xff1a; 代码&#xff1a; 题目链接&#xff1a; P1706 全排列问题 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 思路&#xff1a; 如果n比较小&#xff0c;可以写n个for循环输出全排列。但是这种简单方法只能用于较小的n&#xff0…

代码随想录算法训练营第三十六天|435. 无重叠区间,763. 划分字母区间

435. 无重叠区间 题目 给定一个区间的集合 intervals &#xff0c;其中 intervals[i] [starti, endi] 。返回 需要移除区间的最小数量&#xff0c;使剩余区间互不重叠 。 示例 1: 输入: intervals [[1,2],[2,3],[3,4],[1,3]] 输出: 1 解释: 移除 [1,3] 后&#xff0c;剩下…

基于opencv的SVM算法的车牌识别系统设计与实现

基于opencv的SVM算法的车牌识别系统设计与实现 车牌识别技术是智能交通系统中的一项关键技术&#xff0c;它能够自动识别车辆的车牌号码。本文将详细介绍如何使用Python编程语言结合OpenCV库和SVM算法来实现车牌识别系统。 系统架构 车牌识别系统主要包括以下几个模块&…