主頁 >  其他 > 【C語言游戲】超詳解掃雷游戲完整版,細節滿滿!!

【C語言游戲】超詳解掃雷游戲完整版,細節滿滿!!

2021-05-04 18:23:00 其他

目錄

掃雷

掃雷游戲規則介紹

如何將掃雷游戲實作代碼

基本思路

分步代碼實作

創建和列印游戲選單

初始化棋盤

列印棋盤

布置雷

排查雷

游戲主體——game()函式

總代碼實作

game.h

test.c

game.c

總結


掃雷

實作掃雷的演算法有很多種,我在這里給大家最詳細的代碼介紹以及思考方法,細節滿滿哦!!


掃雷游戲規則介紹

每個格子有兩種狀態,有地雷或者沒有地雷,玩家點到地雷游戲結束,玩家標記出所有地雷游戲勝利,

每個沒有地雷的格子點開后顯示相鄰8個格子里面存在地雷的數目,周邊沒有地雷則可以遞回地打開與空相鄰的方塊;如果不幸觸雷,則游戲結束,

如何將掃雷游戲實作代碼

與上次三子棋游戲模塊一致,分類創建:

game.h:相關游戲函式的宣告,變數的宏定義等;

game.c:游戲相關函式的功能實作;

test.c:游戲的測驗,游戲的主題體;


基本思路

1.創建和列印游戲選單

2.創建兩個棋盤陣列,一個是布置雷的棋盤陣列,一個是排查雷的棋盤陣列

3.初始化兩個棋盤,為了防止后期統計排查雷的個數出現矛盾,所以我這里把布置雷的那個棋盤全部初始為'0',把排查雷的棋盤全部初始化為'*'

4.列印棋盤

5.布置雷,由電腦自主完成隨機布置雷的個數,個數可以自己在頭檔案中定義

6.排查雷,在布置雷的陣列里排查,如果是雷則列印被炸死,并退出游戲,列印排查雷的棋盤;如果不是雷,則統計雷的個數,是0則展開空白,不是0則將雷的個數傳給排查雷的那個陣列

7.判斷輸贏,如果空格的總的個數于行和列的乘積減去布雷的個數,則表示排雷成功


分步代碼實作

創建和列印游戲選單

void menu()
{
	printf("**********************\n");
	printf("******* 1.play *******\n");
	printf("******* 0.exit *******\n");
	printf("**********************\n");
}
int main()
{
	int input = 0;
	srand((unsigned int)time(NULL));//用于隨機函式rand的呼叫
	do
	{
		menu();
		scanf_s("%d", &input);
		switch (input)
		{
		case 1:
			printf("掃雷游戲開始\n");
			game();
			break;
		case 0:
			printf("退出游戲\n");
			break;
		default:
			printf("輸入錯誤,請重新選擇!\n");

		}

	} while (input);
	return 0;
}

初始化棋盤

	//兩個陣列初始化陣列的實作,char board[ROWS][COLS]接收mine陣列和show陣列
	//這里設定一個字符set接收mine和show陣列傳參過來的‘0’和‘*’
void Initboard(char board[ROWS][COLS], int rows, int cols,char set)
{
	int i = 0;
	int j = 0;
	for (i = 0; i < rows; i++)
	{
		for (j = 0; j < cols; j++)
		{
			board[i][j] = set;
		}
	}
}

這里的初始化函式呼叫兩次,分別初始化布雷陣列和排雷陣列,字符set分別接收'0'和'*';

列印棋盤

void Displayboard(char board[ROWS][COLS], int row, int col)
{
	int i = 0;
	int j = 0;
	printf("————掃雷游戲 ————\n");
	for (i = 0; i <= col; i++)
	{
		printf("%d ", i);     //為了方便用戶判斷行數和列數,將列數列印出來
	}
	printf("\n");
	for (i = 1; i <= row; i++)
	{
		printf("%d ", i);        //每行開頭列印行數
		for (j = 1; j <=col; j++)
		{
			printf("%c ", board[i][j]);
		}
		printf("\n");
	}
	printf("————掃雷游戲————\n");
}

列印棋盤結果如下:

這樣列印出來的棋盤好看也方便用戶寫入坐標

布置雷

void Setmine(char mine[ROWS][COLS], int row, int col)
{
	int count = SETCOUNT;	//為了靈活變通,可以自己設定布置雷的個數,在頭檔案中自定義個數
	
     while (count)           //直到count為0才退出回圈,并且每次都是隨機坐標布置雷,count是幾,
    {                          x和y就要隨機幾次
                       
		
		int x = rand() % row + 1;//用戶輸入的坐標的范圍就是行數列數的范圍,應該是row+1才是正確 
                                   的坐標范圍
		int y = rand() % col + 1;
		if (mine[x][y] == '0')
		{
			mine[x][y] = '1';
			count--;//每布置一個,雷的個數就減一;
		}
	}
}

排查雷

void Findmine(char mine[ROWS][COLS],char show[ROWS][COLS], int row, int col)
{
	int x = 0;
	int y = 0;
	int win = 0;//記錄不是雷的個數,總數
	while (win < row * col - SETCOUNT)
	{
		int count_blank = 0;//空白個數,每次進入回圈都要重置,如果放在回圈外面依舊是上一次的值會重復疊加空白;
		printf("請輸入排查雷的坐標:\n");

		scanf_s("%d%d", &x, &y);
		if (x >= 1 && x <= row && y >= 1 && y <= col)		//判斷坐標合法性
		{
			if (mine[x][y] == '1')		//遍歷到了雷
			{
				printf("很遺憾,你被炸死了!\n");
				Displayboard(mine, row, col);
				break;

			}
			else
			{
				int count_mine = get_mine_count(mine, x, y);
				
				if (count_mine == 0 && show[x][y]=='*')//周圍雷的個數為0,且沒有被遍歷
				{
					count_blank=get_showblank(mine, show, x, y);//遞回展開空白,回傳空白個數
					win += count_blank;//空白的個數加到不是雷個數的總數中
				}
				else if(show[x][y]=='*')//這里用else不太合適,這里控制的條件是當周圍個數不是0,但是沒有被遍歷
				{
                    show[x][y] = count_mine + '0';//不是雷,則統計周圍有幾個雷,放入show陣列對應坐標
					win++;//他統計了周圍雷的個數,但本身不是雷,加1
					
				}
				
				Displayboard(show, row, col);
				
			}
		}
		else
		{
			printf("坐標不合法,請重新輸入!\n");
		}
	}
	if (win== row * col - SETCOUNT)
	{
		printf("恭喜你,排雷成功!\n");
		Displayboard(show, row, col);
	}

		
}

當排查雷時,(x,y)處不是雷且周圍雷的個數不為0則需要統計周圍雷的個數:

static int  get_mine_count(char mine[ROWS][COLS], int x,int y)  //static修飾函式,那這個函式 
                                                                  就只能在當前源檔案里使用了

{   //統計這些坐標周圍有幾個雷
	return mine[x][y - 1] +
		mine[x - 1][y - 1] +
		mine[x + 1][y - 1] +
		mine[x - 1][y] +
		mine[x - 1][y + 1] +
		mine[x][y + 1] +
		mine[x + 1][y + 1] +
		mine[x + 1][y] - 8 * '0';  //這里回傳的是數字,num+'0'='num';即一個數字加上字符0等于數字代表的字符

}

當(x,y)周圍雷的個數為0時展開為空格,去遞回遍歷周圍四個坐標雷的個數,并且統計空格的個數:

int get_showblank(char mine[ROWS][COLS], char show[ROWS][COLS], int x , int y)//當雷的個數為0時計算展開的空白個數
{
	
	int count_mine = get_mine_count(mine, x,y);
    int count_blank = 0;//初始化空白的個數
	if(count_mine == 0)
	{
		show[x][y] = ' ';
		count_blank++;//只要是空白就加1;下次遞回也一樣

	    //判斷周圍四個坐標合法性,并且要滿足沒有被遍歷,依舊是*號,以防重復遍歷
		if (x - 1 >= 1 && x - 1 <= ROW && y >= 1 && y <= COL && show[x - 1][y] == '*')
		{
			count_blank+=get_showblank(mine, show, x - 1, y);//每遞回一次,空白個數要累加,包括了x,y的空白和周圍四個坐標的空白;
			

		}
		if (x >= 1 && x <= ROW && y - 1 >= 1 && y - 1 <= COL && show[x][y - 1] == '*')
		{
			count_blank += get_showblank(mine, show, x, y - 1);
			
		}
		if (x + 1 >= 1 && x + 1 <= ROW && y >= 1 && y <= COL && show[x + 1][y] == '*')
		{
			count_blank += get_showblank(mine, show, x + 1, y);
			
		}
		if (x >= 1 && x <= ROW && y + 1 >= 1 && y + 1 <= COL && show[x][y + 1] == '*')
		{
			count_blank += get_showblank(mine, show, x, y + 1);
		}
			
	}
	return count_blank;//回傳空白個數
   
	



	
}

游戲主體——game()函式

void game()
{
	char mine[ROWS][COLS] = { 0 };	//創建存放布置雷的陣列
	char show[ROWS][COLS] = { 0 };	//創建存放排查雷的陣列
	Initboard(mine, ROWS, COLS,'0');	//初始化布置雷的棋盤,mine表示布置雷陣列的首地址
	Initboard(show, ROWS, COLS, '*');	//初始化排查雷的陣列,show表示排查雷陣列的首地址
	//Displayboard(mine, ROW, COL);	//列印布置雷的棋盤,這里不用列印擴展的兩行兩列,只需在中間的棋盤布雷,掃雷也同樣
	Displayboard(show, ROW, COL);
	Setmine(mine, ROW, COL);	//布置雷
	//Displayboard(mine, ROW, COL);
	Findmine(mine,show, ROW, COL);	//排查雷
}

掃雷游戲主體函式則相比三子棋簡單,只需要呼叫游戲相關函式即可,這里需要注意的是在呼叫這些函式進行陣列傳參時,要注意引數的順序,這里創建mine和show陣列都是用的ROWS和COLS,所以在實作相關函式的功能時用的依然是ROWS和COLS,


總代碼實作

game.h

#pragma once
#define ROW 9
#define COL 9	
#define SETCOUNT 10

#define ROWS ROW+2		//為了能成功遍歷邊界的棋盤,所以需要創建兩個擴展的陣列將布雷和掃雷一一對應,初始化時也一樣要擴展
#define COLS COL+2		
void Initboard(char board[ROWS][COLS], int rows, int cols,char set);
void Displayboard(char board[ROWS][COLS], int row, int col);		//列印棋盤只列印中間的棋盤,不需要列印擴列的
void Setmine(char mine[ROWS][COLS], int row, int col);
void Findmine(char mine[ROWS][COLS],char show[ROWS][COLS], int row, int col);

test.c

#include<stdio.h>
#include"game.h"
#include<stdlib.h>
#include<time.h>
void game()
{
	char mine[ROWS][COLS] = { 0 };	//創建存放布置雷的陣列
	char show[ROWS][COLS] = { 0 };	//創建存放排查雷的陣列
	Initboard(mine, ROWS, COLS,'0');	//初始化布置雷的棋盤,mine表示布置雷陣列的首地址
	Initboard(show, ROWS, COLS, '*');	//初始化排查雷的陣列,show表示排查雷陣列的首地址
	//Displayboard(mine, ROW, COL);	//列印布置雷的棋盤,這里不用列印擴展的兩行兩列,只需在中間的棋盤布雷,掃雷也同樣
	Displayboard(show, ROW, COL);
	Setmine(mine, ROW, COL);	//布置雷
	//Displayboard(mine, ROW, COL);
	Findmine(mine,show, ROW, COL);	//排查雷
}
void menu()
{
	printf("**********************\n");
	printf("******* 1.play *******\n");
	printf("******* 0.exit *******\n");
	printf("**********************\n");
}
int main()
{
	int input = 0;
	srand((unsigned int)time(NULL));//用于隨機函式rand的呼叫
	do
	{
		menu();
		scanf_s("%d", &input);
		switch (input)
		{
		case 1:
			printf("掃雷游戲開始\n");
			game();
			break;
		case 0:
			printf("退出游戲\n");
			break;
		default:
			printf("輸入錯誤,請重新選擇!\n");

		}

	} while (input);
	return 0;
}

game.c

#include<stdio.h>
#include"game.h"
	//兩個陣列初始化陣列的實作,char board[ROWS][COLS]接收mine陣列和show陣列
	//這里設定一個字符set接收mine和show陣列傳參過來的‘0’和‘*’
void Initboard(char board[ROWS][COLS], int rows, int cols,char set)
{
	int i = 0;
	int j = 0;
	for (i = 0; i < rows; i++)
	{
		for (j = 0; j < cols; j++)
		{
			board[i][j] = set;
		}
	}
}
void Displayboard(char board[ROWS][COLS], int row, int col)
{
	int i = 0;
	int j = 0;
	printf("————掃雷游戲 ————\n");
	for (i = 0; i <= col; i++)
	{
		printf("%d ", i); //為了方便用戶判斷行數和列數,將列數列印出來
	}
	printf("\n");
	for (i = 1; i <= row; i++)
	{
		printf("%d ", i); //每行開頭列印行數
		for (j = 1; j <=col; j++)
		{
			printf("%c ", board[i][j]);
		}
		printf("\n");
	}
	printf("————掃雷游戲————\n");
}
void Setmine(char mine[ROWS][COLS], int row, int col)
{
	int count = SETCOUNT;	//為了靈活變通,可以自己設定布置雷的個數,在頭檔案中自定義個數
	while (count)
	{	//直到count為0才退出回圈,并且每次都是隨機坐標布置雷,count是幾,x和y就要隨機幾次
		int x = rand() % row + 1;//用戶輸入的坐標的范圍就是行數列數的范圍,應該是row+1才是正確的坐標范圍
		int y = rand() % col + 1;
		if (mine[x][y] == '0')
		{
			mine[x][y] = '1';
			count--;//每布置一個,雷的個數就減一;
		}
	}
}
static int  get_mine_count(char mine[ROWS][COLS], int x,int y)  //static修飾函式,那這個函式就只能在當前源檔案里使用了

{   //統計這些坐標周圍有幾個雷
	return mine[x][y - 1] +
		mine[x - 1][y - 1] +
		mine[x + 1][y - 1] +
		mine[x - 1][y] +
		mine[x - 1][y + 1] +
		mine[x][y + 1] +
		mine[x + 1][y + 1] +
		mine[x + 1][y] - 8 * '0';  //這里回傳的是數字,num+'0'='num';即一個數字加上字符0等于數字代表的字符

}
int get_showblank(char mine[ROWS][COLS], char show[ROWS][COLS], int x , int y)//當雷的個數為0時計算展開的空白個數
{
	
	int count_mine = get_mine_count(mine, x,y);
    int count_blank = 0;//初始化空白的個數
	if(count_mine == 0)
	{
		show[x][y] = ' ';
		count_blank++;//只要是空白就加1;下次遞回也一樣

	    //判斷周圍四個坐標合法性,并且要滿足沒有被遍歷,依舊是*號,以防重復遍歷
		if (x - 1 >= 1 && x - 1 <= ROW && y >= 1 && y <= COL && show[x - 1][y] == '*')
		{
			count_blank+=get_showblank(mine, show, x - 1, y);//每遞回一次,空白個數要累加,包括了x,y的空白和周圍四個坐標的空白;
			

		}
		if (x >= 1 && x <= ROW && y - 1 >= 1 && y - 1 <= COL && show[x][y - 1] == '*')
		{
			count_blank += get_showblank(mine, show, x, y - 1);
			
		}
		if (x + 1 >= 1 && x + 1 <= ROW && y >= 1 && y <= COL && show[x + 1][y] == '*')
		{
			count_blank += get_showblank(mine, show, x + 1, y);
			
		}
		if (x >= 1 && x <= ROW && y + 1 >= 1 && y + 1 <= COL && show[x][y + 1] == '*')
		{
			count_blank += get_showblank(mine, show, x, y + 1);
		}
			
	}
	return count_blank;//回傳空白個數
   
	



	
}
void Findmine(char mine[ROWS][COLS],char show[ROWS][COLS], int row, int col)
{
	int x = 0;
	int y = 0;
	int win = 0;//記錄不是雷的個數,總數
	while (win < row * col - SETCOUNT)
	{
		int count_blank = 0;//空白個數,每次進入回圈都要重置,如果放在回圈外面依舊是上一次的值會重復疊加空白;
		printf("請輸入排查雷的坐標:\n");

		scanf_s("%d%d", &x, &y);
		if (x >= 1 && x <= row && y >= 1 && y <= col)		//判斷坐標合法性
		{
			if (mine[x][y] == '1')		//遍歷到了雷
			{
				printf("很遺憾,你被炸死了!\n");
				Displayboard(mine, row, col);
				break;

			}
			else
			{
				int count_mine = get_mine_count(mine, x, y);
				
				if (count_mine == 0 && show[x][y]=='*')//周圍雷的個數為0,且沒有被遍歷
				{
					count_blank=get_showblank(mine, show, x, y);//遞回展開空白,回傳空白個數
					win += count_blank;//空白的個數加到不是雷個數的總數中
				}
				else if(show[x][y]=='*')//這里用else不太合適,這里控制的條件是當周圍個數不是0,但是沒有被遍歷
				{
                    show[x][y] = count_mine + '0';//不是雷,則統計周圍有幾個雷,放入show陣列對應坐標
					win++;//他統計了周圍雷的個數,但本身不是雷,加1
					
				}
				
				Displayboard(show, row, col);
				
			}
		}
		else
		{
			printf("坐標不合法,請重新輸入!\n");
		}
	}
	if (win== row * col - SETCOUNT)
	{
		printf("恭喜你,排雷成功!\n");
		Displayboard(show, row, col);
	}

		
}

總結

這是掃雷優化也叫完整版的掃雷游戲,博主花了一天時間思考和修改代碼,整理博客,實屬不易,這讓我感覺到每一個游戲的實作離不開每一個細節的把控,如果忽略一個細節,整個游戲就無法完成,掃雷游戲細節頗多,對于我們的思考能力和代碼實作能力有一定考驗,徹底掌握則需要我們反復去琢磨,去動手實作,只有這樣我們才能變得更強,如果這篇文章能幫助到你,請給我一鍵三連,有了大家的鼓勵和指教我才能更進一步!!謝謝大家

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/282743.html

標籤:其他

上一篇:刷透背包(01 背包,完全背包,多重背包,分組背包,混合背包,二維費用背包)

下一篇:辦公室海王小姐姐悄悄問我如何在PC端登錄多個微信小號?

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more