C語言實現掃雷游戲(有展開一片和標記雷的功能)

實現準備

分2個.c源文件和1個.h頭文件去寫代碼

  1. test.c 對掃雷游戲進行測試
  2. game.c 掃雷游戲功能的實現
  3. game.h 掃雷游戲功能的聲明

掃雷游戲

1.test.c對掃雷游戲進行測試

首先我們要先把玩游戲的框架寫出來,然后一步一步去完成其功能
跟著下面的代碼的節奏走一步一步來,我會標記步驟
需要理解的地方,我都會解釋,不理解的可以私信我

//scanf和printf需要用到該頭文件
#include <stdio.h>//3
//菜單
void menu()
{printf("***********************\n");printf("***     1. play     ***\n");printf("***     0. exit     ***\n");printf("***********************\n");
}//4
//掃雷游戲的實現
//這個掃雷游戲的具體功能下面再說
void game()
{printf("掃雷游戲\n");//這里只是為了測試邏輯
}//2
void test()
{int input = 0;//用do while循環是讓其上來就打印菜單以供我們選擇do{menu();//菜單printf("請選擇:");scanf("%d", &input);switch (input){case 1:game();//掃雷游戲的實現break;case 0:printf("退出游戲\n");break;default:printf("選擇錯誤\n");break;}} while (input);//while()中放input是因為游戲退出的條件就是input為0
}//1
int main()
{test();//測試掃雷游戲return 0;
}

這樣我們就搭建了一個掃雷游戲測試框架
下面我們對代碼進行測試
在這里插入圖片描述
接下來就是對掃雷游戲的實現

2.掃雷游戲的實現

接下來是test.c和game.c和game.h配合著實現掃雷游戲

在test.c的game()函數中

void game()
{char mine[11][11];//雷的信息char show[11][11];//展示界面
}

我們用兩個字符數組:一個表示雷的信息,另一個是展示給玩家看的界面
實現9×9的掃雷棋盤,至于為什么它們的行和列都是11排查雷的時候會解釋

因為11這個數字我們在這里會經常用到,而且為了使棋盤大小可以簡易
變換,這里我們用到了#define

在game.h中

#pragma once#include <stdio.h>#define ROW 9
#define COL 9#define ROWS ROW+2
#define COLS COL+2

這里為什么#define了ROW、ROWS和COL、COLS后面會說

那么在test.c的game()函數中

#include "game.h"void game()
{char mine[ROWS][COLS];//雷的信息char show[ROWS][COLS];//展示界面
}

在test.c中用了game.h的東西,要引用頭文件game.h

為什么用" “而不用< >
自己寫的用” " 編譯器提供的用< >

為了方便直接把這里所有要用到的庫函數的頭文件全部放在game.h中
而在test.c中只用include “game.h” 就行了

接下來是初始化棋盤

初始化棋盤InitBoard

test.c的game()中

void game()
{char mine[ROWS][COLS];//雷的信息char show[ROWS][COLS];//展示界面//初始化棋盤InitBoard(mine, ROWS, COLS, '0');//'0'InitBoard(show, ROWS, COLS, '*');//'*'
}

把字符數組mine全部初始化為字符零’0’
把字符數組show全部初始化為字符星號’*’

game.h中

//初始化棋盤
void InitBoard(char board[ROWS][COLS], int r, int c, char set);

對該函數進行聲明,set是要初始化的字符是什么

game.c中

#include "game.h"void InitBoard(char board[ROWS][COLS], int r, int c, char set)
{int i = 0;for (i = 0; i < r; i++){int j = 0;for (j = 0; j < c; j++){board[i][j] = set;}}
}

運用for循環把字符數組初始化

接下來是打印棋盤

打印棋盤DisplayBoard

test.c的game()中

void game()
{char mine[ROWS][COLS];//雷的信息char show[ROWS][COLS];//展示界面//初始化棋盤InitBoard(mine, ROWS, COLS, '0');//'0'InitBoard(show, ROWS, COLS, '*');//'*'//打印棋盤DisplayBoard(show, ROW, COL);DisplayBoard(mine, ROW, COL);
}

我們只是要打印9×9的棋盤所以傳參用ROW和COL

game.h中

//打印棋盤
void DisplayBoard(char board[ROWS][COLS], int r, int c);

game.c中

void DisplayBoard(char board[ROWS][COLS], int r, int c)
{printf("------掃雷游戲-------\n");int i = 0;for (i = 0; i <= c; i++){printf("%d ", i);//列}printf("\n");for (i = 1; i <= r; i++){printf("%d ", i);//行int j = 0;for (j = 1; j <= c; j++){printf("%c ", board[i][j]);}printf("\n");}
}

我們用圖來表示如何實現
我們要知道的是打印11×11中的9×9
因為我們要實現9×9的棋盤
在這里插入圖片描述
test.c的game()中

    //打印棋盤DisplayBoard(show, ROW, COL);//DisplayBoard(mine, ROW, COL);

這個mine數組的打印只是讓我們看看是否真的初始化了
實際游戲中是不會打印它的

布置雷SetMine

test.c的game()中

void game()
{char mine[ROWS][COLS];//雷的信息char show[ROWS][COLS];//展示界面//初始化棋盤InitBoard(mine, ROWS, COLS, '0');//'0'InitBoard(show, ROWS, COLS, '*');//'*'//打印棋盤DisplayBoard(show, ROW, COL);//布置雷  //布置雷也是在9×9的棋盤中布置,所以傳ROW和COLSetMine(mine, ROW, COL);DisplayBoard(mine, ROW, COL);//這里是布置完雷打印出來看看//是否真的布置雷了,真正玩游戲的時候是不可能把雷的位置打印出來的
}

game.h中

//布置雷
void SetMine(char mine[ROWS][COLS], int r, int c);

因為我們只會在mine數組中布置,所以這里的形參數組也直接用mine了
之前是因為兩個數組都要用,所以用的board數組,board意思就是棋盤

game.c中

void SetMine(char mine[ROWS][COLS], int r, int c)
{int x = 0;int y = 0;int count = 0;while (count < EASYCOUNT){x = rand() % r + 1;y = rand() % c + 1;if (mine[x][y] == '0'){mine[x][y] = '1';count++;}}
}

x和y是布置的雷的坐標
count起到計數的作用
EASYCOUNT是布置的雷的個數

在game.h中#define了

#define EASYCOUNT 10

簡單版本是10個雷

rand()函數是生成隨機數的函數
因為要讓電腦隨機布置雷
而rand()要配合srand()和time()使用
這三個函數我的猜數字游戲里講到了這里就不講怎么用了

	x = rand() % r + 1;y = rand() % c + 1;

因為要生成的坐標的范圍是(1,1) -> (9,9)
這里 r 和 c 都是9,rand() % 9生成0 ~ 8的隨機數 +1 就是1 ~ 9

在test.c的test()中

void test()
{srand((unsigned int)time(NULL));//生成一個隨機數的生成起點int input = 0;下面是之前的代碼,不展示了,占地方

在game.h中

#pragma once
#include <stdio.h>
#include <stdlib.h>//rand和srand要用的頭文件
#include <time.h>//time要用的頭文件#define ROW 9
#define COL 9#define ROWS ROW+2
#define COLS COL+2#define EASYCOUNT 10
下面的代碼也不展示了

game.c的SetMine中

if (mine[x][y] == '0'){mine[x][y] = '1';count++;}

這段代碼的意思的把mine數組中的 ‘0’ 改成 ‘1’
而 ‘0’ 表示不是雷,‘1’ 表示雷,直到布置10個雷。

下面圖片展示
在這里插入圖片描述
在這里插入圖片描述

排查雷FindMine

在test.c的game()中

void game()
{char mine[ROWS][COLS];//雷的信息char show[ROWS][COLS];//展示界面//初始化棋盤InitBoard(mine, ROWS, COLS, '0');//'0'InitBoard(show, ROWS, COLS, '*');//'*'//打印棋盤DisplayBoard(show, ROW, COL);//布置雷SetMine(mine, ROW, COL);DisplayBoard(mine, ROW, COL);//排查雷FindMine(mine, show, ROW, COL);
}

排查雷兩個數組都要用到
因為展示給玩家的是show數組
玩家在排查雷的時候,該函數要對照mine數組看看該坐標是不是雷

game.h中

//排查雷
void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int r, int c);

game.c中

void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int r, int c)
{int x = 0;//玩家輸入的橫坐標int y = 0;//玩家輸入的縱坐標int win = 0;//獲勝計數while (win < r * c - EASYCOUNT)//這里是有10個雷,那么獲勝的條件就是排查出71個不是雷的坐標//win == 71 時,出循環{printf("請輸入要排查的坐標:");scanf("%d%d", &x, &y);//輸入的坐標必須合法//輸入的坐標的合法性if (x >= 1 && x <= r && y >= 1 && y <= c)//合法條件{//排查過的坐標不能再次排查//判斷該坐標是否已經被排查過if (show[x][y] == '*' || show[x][y] == '!')//我們是在show數組中排查的//'*'表示還沒有排查過//'!'是標記雷,萬一標記的地方不是雷但是我們標記了//也可以排查{//判斷該坐標是否為雷if (mine[x][y] == '1')//是雷//用mine數組來看(x,y)坐標是不是雷{printf("很遺憾,你被炸死了\n");DisplayBoard(mine, r, c);//游戲結束,展示哪里是雷break;//游戲結束,跳出循環}else//不是雷{//我們知道網頁版的掃雷游戲,該坐標周圍有雷的話,會顯示雷的個數//這也就是mine和show為什么是11×11的原因//因為9×9的話,角落的坐標找周圍雷的個數會越界訪問//得到周圍8個坐標的雷的個數int count = GetMineCount(mine, x, y);show[x][y] = count + '0';//把數字轉為字符放在show數組中展示給玩家看if (count == 0){//展開一片win = UnfoldBoard(mine, show, x, y, win, r, c);}else{win++;}//得到雷得個數后進行展示DisplayBoard(show, r, c);//標記雷的位置MarkMine(show, r, c);}}else//排查過{printf("該坐標已經被排查過\n");}}else//不合法{printf("輸入的坐標不合法\n");}}if (win == r * c - EASYCOUNT)//獲勝條件{printf("恭喜你,排雷成功\n");}
}

得到周圍雷得個數GetMineCount

game.c中

static int GetMineCount(char mine[ROWS][COLS], int x, int y)
{return mine[x - 1][y - 1] + mine[x - 1][y] + mine[x - 1][y + 1] +mine[x][y - 1] + mine[x][y + 1] + mine[x + 1][y - 1] +mine[x + 1][y] + mine[x + 1][y + 1] - (8 * '0');
}

周圍有8個坐標
已知:
‘0’ - ‘0’ -> 0
‘1’ - ‘0’ -> 1

‘8’ - ‘0’ -> 8
所以把周圍8個坐標的字符全部加起來再減去8個字符零就是周圍雷的個數

展開一片UnfoldBoard

game.c中

static int UnfoldBoard(char mine[ROWS][COLS], char show[ROWS][COLS], int x, int y, int win, int r, int c,)
{//遞歸條件:遞歸的坐標必須合法if(x >= 1 && x <= r && y >= 1 && y <= c){if(mine[x - 1][y - 1] + mine[x - 1][y] + mine[x - 1][y - 1] +mine[x][y - 1] + mine[x][y + 1] + mine[x + 1][y - 1] +mine[x + 1][y] + mine[x + 1][y + 1] - (8 * '0') == 0)//達到展開條件才遞歸{win++;//勝利計數show[x][y] = ' ';//將要遞歸的坐標改為空格int i = -1;int j = -1;for (i = -1; i <= 1; i++){for (j = -1; j <= 1; j++){if(show[x+i][y+i] == '*'){win = UnfoldBoard(mine, show, x + i, y + i, win, r, c);//遞歸 返回win 勝利計數}}}}else{win++;//勝利計數int count = GetMineCount(mine, x, y);show[x][y] = count + '0';}}return win;//返回勝利計數
}

因為我們這里勝利的條件是win == 71,所以展開一片的時候必須記錄win
否則win就到不了71了
展開一片的遞歸這里沒法細講,如果不理解可以私信我

標記雷的位置MarkMine

game.c中

static void MarkMine(char show[ROWS][COLS], int r, int c)
{printf("是否標記雷的位置: 1.標記  0.不標記\n");int input = 0;scanf("%d". &input);while(input){printf("請輸入要標記的坐標:");int x = 0;int y = 0;scanf("%d %d", &x, &y);show[x][y] = '!';//'!'表示要標記的雷的位置DisplayBoard(show, r, c);//標記后展示printf("繼續標記請輸入:“1”,否則輸入“0”\n");scanf("%d", &input);}
}

到了這里整個掃雷游戲就結束了
這里我們把雷的數量設置為2來測驗一下
在這里插入圖片描述

掃雷游戲完整代碼

test.c的代碼

#define _CRT_SECURE_NO_WARNINGS 1
#include "game.h"void menu()
{printf("***********************\n");printf("***     1. play     ***\n");printf("***     0. exit     ***\n");printf("***********************\n");
}void game()
{char mine[ROWS][COLS];//雷的信息char show[ROWS][COLS];//展示界面//初始化棋盤InitBoard(mine, ROWS, COLS, '0');//'0'InitBoard(show, ROWS, COLS, '*');//'*'//打印棋盤DisplayBoard(show, ROW, COL);//布置雷SetMine(mine, ROW, COL);//DisplayBoard(mine, ROW, COL);//排查雷FindMine(mine, show, ROW, COL);
}void test()
{srand((unsigned int)time(NULL));int input = 0;do{menu();printf("請選擇:");scanf("%d", &input);switch (input){case 1:game();break;case 0:printf("退出游戲\n");break;default:printf("選擇錯誤\n");break;}} while (input);
}int main()
{test();return 0;
}

game.h的代碼

#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <time.h>#define ROW 9
#define COL 9#define ROWS ROW+2
#define COLS COL+2#define EASYCOUNT 10//初始化棋盤
void InitBoard(char board[ROWS][COLS], int r, int c, char set);//打印棋盤
void DisplayBoard(char board[ROWS][COLS], int r, int c);//布置雷
void SetMine(char mine[ROWS][COLS], int r, int c);//排查雷
void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int r, int c);

game.c的代碼

#define _CRT_SECURE_NO_WARNINGS 1
#include "game.h"void InitBoard(char board[ROWS][COLS], int r, int c, char set)
{int i = 0;for (i = 0; i < r; i++){int j = 0;for (j = 0; j < c; j++){board[i][j] = set;}}
}void DisplayBoard(char board[ROWS][COLS], int r, int c)
{printf("------掃雷游戲-------\n");int i = 0;for (i = 0; i <= c; i++){printf("%d ", i);//列}printf("\n");for (i = 1; i <= r; i++){printf("%d ", i);//行int j = 0;for (j = 1; j <= c; j++){printf("%c ", board[i][j]);}printf("\n");}
}void SetMine(char mine[ROWS][COLS], int r, int c)
{int x = 0;int y = 0;int count = 0;while (count < EASYCOUNT){x = rand() % r + 1;y = rand() % c + 1;if (mine[x][y] == '0'){mine[x][y] = '1';count++;}}
}static int GetMineCount(char mine[ROWS][COLS], int x, int y)
{return mine[x - 1][y - 1] + mine[x - 1][y] + mine[x - 1][y + 1] +mine[x][y - 1] + mine[x][y + 1] + mine[x + 1][y - 1] +mine[x + 1][y] + mine[x + 1][y + 1] - (8 * '0');
}static void MarkMine(char show[ROWS][COLS], int r, int c)
{printf("是否標記雷的位置: 1.標記  0.不標記\n");int input = 0;scanf("%d", &input);while (input){printf("請輸入要標記的坐標:");int x = 0;int y = 0;scanf("%d %d", &x, &y);show[x][y] = '!';//標記'!'DisplayBoard(show, r, c);printf("繼續標記請輸入:“1”,否則輸入“0”\n");scanf("%d", &input);}}static int UnfoldBoard(char mine[ROWS][COLS], char show[ROWS][COLS], int x, int y, int win, int r, int c)
{//遞歸x,y范圍合法if (x >= 1 && x <= r && y >= 1 && y <= c){if (mine[x - 1][y - 1] + mine[x - 1][y] + mine[x - 1][y + 1] +mine[x][y - 1] + mine[x][y + 1] + mine[x + 1][y - 1] +mine[x + 1][y] + mine[x + 1][y + 1] - (8 * '0') == 0){show[x][y] = ' ';win++;int i = -1;int j = -1;for (i = -1; i <= 1; i++){for (j = -1; j <= 1; j++){if (show[x + i][y + j] == '*'){win = UnfoldBoard(mine, show, x + i, y + j, win, r, c);}}}}else{win++;int count = GetMineCount(mine, x, y);show[x][y] = count + '0';}}return win;
}void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int r, int c)
{int x = 0;int y = 0;int win = 0;while (win < r * c - EASYCOUNT){printf("請輸入要排查的坐標:");scanf("%d%d", &x, &y);//輸入的坐標的合法性if (x >= 1 && x <= r && y >= 1 && y <= c){//判斷該坐標是否已經被排查過if (show[x][y] == '*' || show[x][y] == '!'){//判斷該坐標是否為雷if (mine[x][y] == '1'){printf("很遺憾,你被炸死了\n");DisplayBoard(mine, r, c);break;}else{//得到周圍8個坐標的雷的個數int count = GetMineCount(mine, x, y);show[x][y] = count + '0';//展開一片if (count == 0){win = UnfoldBoard(mine, show, x, y, win, r, c);}else{win++;}DisplayBoard(show, r, c);//標記雷的位置MarkMine(show, r, c);}}else{printf("該坐標已經被排查過\n");}}else{printf("輸入的坐標不合法\n");}}if (win == r * c - EASYCOUNT){printf("恭喜你,排雷成功\n");}
}

覺得不錯的話給個三連哦!
請添加圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/67335.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/67335.shtml
英文地址,請注明出處:http://en.pswp.cn/web/67335.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

GitHub 倉庫的 Archived 功能詳解:中英雙語

GitHub 倉庫的 Archived 功能詳解 一、什么是 GitHub 倉庫的 “Archived” 功能&#xff1f; 在 GitHub 上&#xff0c;“Archived” 是一個專門用于標記倉庫狀態的功能。當倉庫被歸檔后&#xff0c;它變為只讀模式&#xff0c;所有的功能如提交代碼、創建 issue 和 pull req…

基礎IO(2)

基礎IO&#xff08;2&#xff09; 理解“?切皆?件” ?先&#xff0c;在windows中是?件的東西&#xff0c;它們在linux中也是?件&#xff1b;其次?些在windows中不是?件的東西&#xff0c;?如進程、磁盤、顯?器、鍵盤這樣硬件設備也被抽象成了?件&#xff0c;你可以使…

Transformation,Animation and Viewing

4 Transformation&#xff0c;Animation and Viewing 聲明&#xff1a;該代碼來自&#xff1a;Computer Graphics Through OpenGL From Theory to Experiments&#xff0c;僅用作學習參考 4.1 Modeling Transformations 平移、縮放和旋轉&#xff0c;即 OpenGL 的建模轉換&…

Deepseek的RL算法GRPO解讀

在本文中&#xff0c;我們將深入探討Deepseek采用的策略優化方法GRPO&#xff0c;并順帶介紹一些強化學習&#xff08;Reinforcement Learning, RL&#xff09;的基礎知識&#xff0c;包括PPO等關鍵概念。 策略函數&#xff08;policy&#xff09; 在強化學習中&#xff0c; a…

【python】python基于機器學習與數據分析的二手手機特性關聯與分類預測(源碼+數據集)【獨一無二】

&#x1f449;博__主&#x1f448;&#xff1a;米碼收割機 &#x1f449;技__能&#x1f448;&#xff1a;C/Python語言 &#x1f449;專__注&#x1f448;&#xff1a;專注主流機器人、人工智能等相關領域的開發、測試技術。 python基于機器學習與數據分析的二手手機特性關聯與…

手撕Diffusion系列 - 第十一期 - lora微調 - 基于Stable Diffusion(代碼)

手撕Diffusion系列 - 第十一期 - lora微調 - 基于Stable Diffusion&#xff08;代碼&#xff09; 目錄 手撕Diffusion系列 - 第十一期 - lora微調 - 基于Stable Diffusion&#xff08;代碼&#xff09;Stable Diffusion 原理圖Stable Diffusion的原理解釋Stable Diffusion 和Di…

前端【8】HTML+CSS+javascript實戰項目----實現一個簡單的待辦事項列表 (To-Do List)

目錄 一、功能需求 二、 HTML 三、CSS 四、js 1、綁定事件與初始設置 2.、綁定事項 &#xff08;1&#xff09;添加操作&#xff1a; &#xff08;2&#xff09;完成操作 &#xff08;3&#xff09;刪除操作 &#xff08;4&#xff09;修改操作 3、完整js代碼 總結…

C++標準線程庫實現優雅退出的方式

目錄 1.通過設置共享退出標記 2.使用std::jthread創建線程 3.定義消息類型的方式 4.注意事項 1.通過設置共享退出標記 定義一個退出變量bool stop false; 表示線程是否應該停止。在主線程中設置標記stoptrue,然后join一直等待&#xff0c;然后線程循環檢測到stop是否為tru…

Java學習教程,從入門到精通,JDBC插入記錄語法及案例(104)

JDBC插入記錄語法及案例 一、JDBC插入記錄語法 在JDBC中&#xff0c;插入記錄主要通過執行SQL的INSERT語句來實現。其基本語法如下&#xff1a; INSERT INTO 表名 (列1, 列2, ..., 列n) VALUES (值1, 值2, ..., 值n);表名&#xff1a;需要插入記錄的表的名稱。列1, 列2, …,…

vue事件總線(原理、優缺點)

目錄 一、原理二、使用方法三、優缺點優點缺點 四、使用注意事項具體代碼參考&#xff1a; 一、原理 在Vue中&#xff0c;事件總線&#xff08;Event Bus&#xff09;是一種可實現任意組件間通信的通信方式。 要實現這個功能必須滿足兩點要求&#xff1a; &#xff08;1&#…

圖像處理之HSV顏色空間

目錄 1 RGB 的局限性 2 HSV 顏色空間 3 RGB與HSV相互轉換 4 HSV顏色模型對圖像的色相、飽和度和明度進行調節 5 演示Demo 5.1 開發環境 5.2 功能介紹 5.3 下載地址 參考 1 RGB 的局限性 RGB 是我們接觸最多的顏色空間&#xff0c;由三個通道表示一幅圖像&#xff0c;分…

DeepSeek是由杭州深度求索人工智能基礎技術研究有限公司(簡稱“深度求索”)發布的一系列人工智能模型

DeepSeek是由杭州深度求索人工智能基礎技術研究有限公司&#xff08;簡稱“深度求索”&#xff09;發布的一系列人工智能模型&#xff0c;其在知識類任務上展現出了卓越的性能。以下是對DeepSeek的詳細介紹&#xff0c;內容雖無法達到10000字&#xff0c;但會盡可能全面且深入地…

【C++高并發服務器WebServer】-9:多線程開發

本文目錄 一、線程概述1.1 線程和進程的區別1.2 線程之間共享和非共享資源1.3 NPTL 二、線程操作2.1 pthread_create2.2 pthread_exit2.3 pthread_join2.4 pthread_detach2.5 patch_cancel2.6 pthread_attr 三、實戰demo四、線程同步五、死鎖六、讀寫鎖七、生產消費者模型 一、…

14-6-1C++STL的list

(一&#xff09;list容器的基本概念 list容器簡介&#xff1a; 1.list是一個雙向鏈表容器&#xff0c;可高效地進行插入刪除元素 2.list不可以隨機存取元素&#xff0c;所以不支持at.(pos)函數與[ ]操作符 &#xff08;二&#xff09;list容器頭部和尾部的操作 list對象的默…

在sortablejs的拖拽排序情況下阻止input拖拽事件

如題 問題 在vue3的elementPlus的table中&#xff0c;通過sortablejs添加了行拖拽功能&#xff0c;但是在行內會有輸入框&#xff0c;此時拖拽輸入框會觸發sortablejs的拖拽功能 解決 基于這個現象&#xff0c;我懷疑是由于拖拽事件未綁定而冒泡到后面的行上從而導致的拖拽…

21.Word:小趙-畢業論文排版?【39】

目錄 題目? NO1.2 NO3.4 NO5.6 NO7.8.9 NO10.11.12 題目 NO1.2 自己的論文當中接收老師的修改&#xff1a;審閱→比較→源文檔&#xff1a;考生文件夾&#xff1a;Word.docx→修訂的文檔&#xff1a;考生文件夾&#xff1a;教師修改→確定→接收→接收所有修訂將合并之…

leetcode_鏈表 876.鏈表的中間節點

876.鏈表的中間節點 給你單鏈表的頭結點 head &#xff0c;請你找出并返回鏈表的中間結點。如果有兩個中間結點&#xff0c;則返回第二個中間結點。思路&#xff1a;快慢指針&#xff0c;創建兩個指針fast和slow&#xff0c;fast指針每次移動兩步&#xff0c;slow指針每次移動…

深度學習 DAY3:NLP發展史及早期的前饋神經網絡(ANN)及多任務學習

NLP發展史 NLP發展脈絡簡要梳理如下&#xff1a; 2001 - Neural language models&#xff08;神經語言模型&#xff09; 2008 - Multi-task learning&#xff08;多任務學習&#xff09; 2013 - Word embeddings&#xff08;詞嵌入&#xff09; 2013 - Neural networks for NL…

全面了解 Web3 AIGC 和 AI Agent 的創新先鋒 MelodAI

不管是在傳統領域還是 Crypto&#xff0c;AI 都是公認的最有前景的賽道。隨著數字內容需求的爆炸式增長和技術的快速迭代&#xff0c;Web3 AIGC&#xff08;AI生成內容&#xff09;和 AI Agent&#xff08;人工智能代理&#xff09;正成為兩大關鍵賽道。 AIGC 通過 AI 技術生成…

54.數字翻譯成字符串的可能性|Marscode AI刷題

1.題目 問題描述 小M獲得了一個任務&#xff0c;需要將數字翻譯成字符串。翻譯規則是&#xff1a;0對應"a"&#xff0c;1對應"b"&#xff0c;依此類推直到25對應"z"。一個數字可能有多種翻譯方法。小M需要一個程序來計算一個數字有多少種不同的…