主頁 >  其他 > C++ 推箱子,中配版,支持玩家自己創造地圖(無圖形庫)

C++ 推箱子,中配版,支持玩家自己創造地圖(無圖形庫)

2021-02-02 12:23:45 其他

游戲功能介紹:

1、玩家上下左右移動的正確實作,
2、玩家推箱子,箱子位置的變化,以及玩家是否能夠推動的判斷,
3、勝利檢測,(判斷游戲是否勝利)
4、選關模塊,方便玩家選擇自己想要游玩的關卡進行游玩,
5、游戲介紹模塊,
6、游戲目錄模塊,

鄭重宣告:

1、該游戲代碼屬于原創,尤其是其中的檔案檢索功能,應該在目前網路上,還未出現過和我一樣的關卡檔案引數格式,
2、采用類和物件的方式來書寫,可以供學習面向物件的朋友,提高oo思想,
3、希望看見這篇博客的朋友能夠充分學習其中的知識點,提升自己,同時也歡迎各位朋友在下方評論區評論以及下來的討論,
4、代碼剛剛寫完,而且制作的第3關和第4關,是參考到網上的推箱子的地圖,作者因為實力有限而沒有在第3關和第4關獲勝,所以若有bug,請朋友們指正,

下載鏈接:

1、游戲下載鏈接:點擊藍色字前往下載
2、源代碼下載鏈接:點擊藍色字前往下載

注意:
1、游戲下載需要三個積分,
2、源代碼下載還是老規矩,(粉絲即可)

效果視頻展示:

<iframe id="2KDOxpKH-1612100118808" src="https://live.csdn.net/v/embed/149501" allowfullscreen="true" data-mediaembed="csdn"></iframe>

展示

地圖制作方式 以及 地圖添加方式:

地圖制作方式:

<iframe id="vgnygHlD-1612100199666" src="https://live.csdn.net/v/embed/149513" allowfullscreen="true" data-mediaembed="csdn"></iframe>

地圖制作

地圖添加方式:

<iframe id="5iWQi5kB-1612100213165" src="https://live.csdn.net/v/embed/149503" allowfullscreen="true" data-mediaembed="csdn"></iframe>

游戲組建添加方式(推箱子游戲)

代碼分析:

1、宏定義:

#define SIZE 10		//宏意義地圖大小,
#define NUMBER 10	//宏定義最大箱子數目,(可以根據玩家自己制作的地圖,而修改最大箱子數,)(個人認為10個箱子應該夠了,)

2、創建類和物件:

這里面創建了兩個內,一個是箱子的類,另一個是玩家的類,

這兩個類里面都會分別記錄物件的橫縱坐標,

玩家這個類里面有兩個行為,一個是移動,另一個是推箱子,
箱子這個類里面有一個行為,那就是移動,

特別宣告,箱子的類必須定義在玩家類的前面,因為在玩家推的行為里面會涉及到箱子的移動行為,

class Box
{
public:
	int placeI;	//記錄箱子的橫坐標,
	int placeJ;	//記錄箱子的縱坐標,

	Box();		//該類的構造器,

	int move( int command );//箱子的移動行為,
};

class Player
{
public:
	int placeI;		//記錄玩家橫坐標
	int placeJ;		//記錄玩家縱坐標

	Player();		//該類的構造器,

	int move( int command );	//玩家的移動行為,
	int push( int command , Box box[] , int );		//玩家的推箱子行為,
};


//玩家類的構造器,
Player::Player()
{
	//玩家的位置為(-1,-1),由于這個點在地圖上并不存在,所以在運行程序中,若玩家的位置依舊為(-1,-1),那么可以表示檔案讀取錯誤,
	placeI = -1;
	placeJ = -1;
}

//箱子類的構造器,
Box::Box()
{
	//和玩家的構造器一樣,
	placeI = -1;
	placeJ = -1;
}

int Player::move( int command ) 
{
	switch ( command )
	{
	//表示玩家位置向上移動一格,
	case 1:
		placeI -= 1;
		break;

	//表示玩家位置向左移動一格,
	case 2:
		placeJ -= 1;
		break;

	//表示玩家位置向下移動一格,
	case 3:
		placeI += 1;
		break;

	//表示玩家位置向右移動一格,
	case 4:
		placeJ += 1;

	default:
		break;
	}

	return 0;
}

int Player::push( int command , Box box[] , int I )
{
	int tempI = placeI , tempJ = placeJ;//讓新產生的這兩個變數指向玩家所站的地方,(這兩個變數一起看的話是一個坐標,)

	//將該坐標向玩家將要移動的方向移動一格,
	switch ( command )
	{
	case 1:
		tempI -= 1;
		break;

	case 2:
		tempJ -= 1;
		break;
	
	case 3:
		tempI += 1;
		break;
	
	case 4:
		tempJ += 1;
		break;

	default:
		break;
	}

	//檢測該坐標指向的方塊是哪一個箱子,
	int temp = 0;//用于檢索box里面的每個元素,
	while( temp < I )
	{
		if( box[temp].placeI == tempI && box[temp].placeJ == tempJ )//如果是該箱子,
		{
			box[temp].move( command );//呼叫箱子移動的行為,
			break;
		}
		temp++;
	}

	move( command );//玩家移動,

	return 0;
}

int Box::move( int command )
{
	//和玩家到移動行為一樣,
	switch ( command )
	{
	case 1:
		placeI -= 1;
		break;

	case 2:
		placeJ -= 1;
		break;
	
	case 3:
		placeI += 1;
		break;
	
	case 4:
		placeJ += 1;
		break;

	default:
		break;
	}

	return 0;
}

宣告所需的子函式:

子函式有點多,希望朋友們不要畏懼困難,
相反,我們要迎難而上,

gettingData()子函式,是用于檢索地圖并且加載到記憶體中的一個函式,
在視頻中已經講到了,我們的程式是可以允許玩家自行創造地圖的,所以我們必須要從程式外部將地圖讀取進來,

printMap()是一個列印函式,這毋庸置疑,

getCommand()用于接收玩家在鍵盤中的輸入,

void detect()檢測玩家將要走向方向的前兩個方塊的內容,

int menu()主選單函式,

int levelChoose()選關函式,

voluationForStar()初始化中點坐標函式,

weatherPass()判斷是否勝利函式,

int gettingData( int smallSquare[SIZE][SIZE] , int number , Player *player , Box box[NUMBER] ,  

int *I , int star[NUMBER][2] );		//用于檢索游戲資料

void printMap( int smallSquare[SIZE][SIZE] , Player player , Box box[NUMBER] , int I);	//列印地圖

int getCommand();//接收用戶輸入,

void detect( Player *player , Box box[] , int smallSquare[SIZE][SIZE] ,int *pointerFirst , int *pointerSecond , int command , int I );		//用于探測玩家指向方向前兩塊區域的內容,

int menu( );		//創建選單函式

int levelChoose( );//關卡選擇

void introduce();	//游戲介紹

void voluationForStar( int star[NUMBER][2] );

int weatherPass( int star[NUMBER][2] , Box box[NUMBER] , int );

檢索游戲地圖函式:

這個涉及 C++的檔案操作,
該函式對于有興趣制作地圖的朋友來說,建議好好學習,

int gettingData( int smallSquare[SIZE][SIZE] ,int number , Player *player , Box box[NUMBER] , int *I , int star[NUMBER][2] )
{
	char gameLevel[12] = { 'N' , 'u' , 'm' , 'b' , 'e' , 'r' ,0 , '.' , 't' , 'x' , 't' , 0 };		//用于檢索游戲資料,
	gameLevel[6] = number + 48 ;			//整型轉化為字符型,需要統一一下,


	std::ifstream fileOfGettingGameData;

	fileOfGettingGameData.open( gameLevel );	//打開游戲配置

	if( !fileOfGettingGameData )
	{
		system("cls");
		std::cout << "未檢測到關卡" << number << "的存在" << "\n請檢查您在選擇關卡時是否輸入正確," << std::endl;
		system("pause");
		return 0;
	}
	/*
	else
	{
		std::cout << "關卡初始化成功" << std::endl; 
		Sleep( 500 );
	}
	*/

	//初始化地圖,(檢索游戲檔案)
	int tempI , tempJ , temp = 0 ;//temp用于終點的計數,
	for( tempI = 0 ; tempI < SIZE ; tempI++ )
	{
		for( tempJ = 0 ; tempJ < SIZE ; tempJ++ )
		{
			fileOfGettingGameData >> smallSquare[tempI][tempJ];

			//人物位置單獨計算
			if( 3 == smallSquare[tempI][tempJ] )
			{
				player->placeI = tempI;
				player->placeJ = tempJ;

				smallSquare[tempI][tempJ] = 2 ;
			}

			//箱子位置單獨計算
			if( 1 == smallSquare[tempI][tempJ] )
			{
				box[ (*I) ].placeI = tempI;
				box[ (*I) ].placeJ = tempJ;

				smallSquare[tempI][tempJ] = 2 ;

				(*I)++;
			}

			//終點位置單獨計算
			if( 4 == smallSquare[tempI][tempJ] )
			{
				star[temp][0] = tempI;
				star[temp][1] = tempJ;

				temp++;
			}
		}
	}

	return 1;
}

列印地圖函式:

system(“cls”);
該陳述句可以實作win32的清屏,
在函式定義在windows.h頭檔案中,

void printMap( int smallSquare[SIZE][SIZE] , Player player , Box box[NUMBER] , int I )
{
	int tempI , tempJ , temp ;//temp用于檢索數列box
	int weatherPrintBox = 0;	//0表示沒有列印箱子,1表示列印了,

	system("cls");
	printf(" 0 1 2 3 4 5 6 7 8 9\n");
	for( tempI = 0 ; tempI < SIZE ; tempI++ )
	{
		printf("%d" , tempI);
		for( tempJ = 0 ; tempJ < SIZE ; tempJ++ )
		{
			weatherPrintBox = 0;
			for( temp = 0 ; temp < I ; temp++ )
			{
				if( tempI == box[temp].placeI && tempJ == box[temp].placeJ )
				{
					printf("■");			//列印箱子,
					weatherPrintBox = 1;
					break;
				}
			}

			if( tempI == player.placeI && tempJ == player.placeJ )
			{
				std::cout << "▼";				//列印人物,
			}
			else if( 2 == smallSquare[tempI][tempJ] && 0 == weatherPrintBox )//&&運算子后面的陳述句表示:如果列印了箱子就不必再列印箱子下面的道路,
			{
				std::cout << "  ";				//列印道路,
			}
			else if( 0 == smallSquare[tempI][tempJ] )
			{
				std::cout << "▓";				//列印墻壁,
			}
			else if( 4 == smallSquare[tempI][tempJ] && 0 == weatherPrintBox )//&&運算子后面的陳述句表示:如果列印了箱子就不必再列印箱子下面的終點,
			{
				std::cout << "☆";				//列印終點,
			}
		}
		std::cout << "\n";
	}
}

獲取玩家指令的函式:

_getch();
這個函式定義在conio.h
如果有朋友知道,其他的表示方式,比如說:cin.get();也是可以相互替換的,

int getCommand()
{
	int commandReturn = -1;		//表示沒有輸入

	switch( _getch() )
	{
	case 'W':
	case 'w':
		commandReturn = 1;		//表示向上
		break;

	case 'A':
	case 'a':
		commandReturn = 2;		//表示向左
		break;

	case 'S':
	case 's':
		commandReturn = 3;		//表示向下
		break;

	case 'D':
	case 'd':
		commandReturn = 4;		//表示向右
		break;

	case 'B':
	case 'b':
		commandReturn = 5;		//表示回傳選關界面
		break;

	case 10 :
	case 13 :
		commandReturn = 6;		//表示回車
		break;

	default:
		commandReturn = -2;		//表示用戶錯誤輸入
		break;
	}

	return ( commandReturn );
}

探測玩家指向方向前兩格方塊內容的函式:

這是代碼里面比較復雜的一塊,
不講了,

void detect( Player *player , Box box[] , int smallSquare[SIZE][SIZE] , int *pointerFirst , int *pointerSecond , int command , int I )
{
	int tempFirstI , tempFirstJ , tempSecondI , tempSecondJ ;		//用于記錄玩家位置的前兩個位置的坐標,
	int temp;		//用于檢索box里的每一個元素,

	switch ( command )
	{
	case 1:
		//計算玩家朝向的兩個方向的方塊的坐標,并且將其賦值,
		tempFirstI = player->placeI - 1;
		tempFirstJ = player->placeJ;

		tempSecondI = player->placeI - 2;
		tempSecondJ = player->placeJ;

		if( tempFirstI >= 0 && tempFirstJ >= 0 )		//檢索范圍未超出地圖的情況,
		{
			*pointerFirst = smallSquare [tempFirstI][tempFirstJ];
		}
		//范圍超出地圖的區塊,將其按墻壁計算,
		else
		{
			*pointerFirst = 0;
		}

		if( tempSecondI >= 0 && tempSecondJ >= 0 )		//檢索范圍未超出地圖的情況,
		{
			*pointerSecond = smallSquare[tempSecondI][tempSecondJ];
		}
		//范圍超出地圖的區塊,將其按墻壁計算,
		else
		{
			*pointerSecond = 0;
		}

		//檢索玩家所指向方向的前兩個方塊是否為箱子
		for( temp = 0 ; temp < I ; temp++ )
		{
			if( box[temp].placeI == tempFirstI && box[temp].placeJ == tempFirstJ )
			{
				*pointerFirst = 1;
			}
			else if( box[temp].placeI == tempSecondI && box[temp].placeJ == tempSecondJ )
			{
				*pointerSecond = 1;
			}
		}
	break;
/************其后的注釋與上面保持一樣,請朋友們融會貫通,(寫長一點,給自己營造一種感覺,自己都寫了那么多行了,噓~~~~~~~~)*****************************/
	case 2:
		tempFirstI = player->placeI;
		tempFirstJ = player->placeJ - 1;

		tempSecondI = player->placeI;
		tempSecondJ = player->placeJ - 2;

		if( tempFirstI >= 0 && tempFirstJ >= 0 )		//檢索范圍未超出地圖的情況,
		{
			*pointerFirst = smallSquare [tempFirstI][tempFirstJ];
		}
		//范圍超出地圖的區塊,將其按墻壁計算,
		else
		{
			*pointerFirst = 0;
		}

		if( tempSecondI >= 0 && tempSecondJ >= 0 )
		{
			*pointerSecond = smallSquare[tempSecondI][tempSecondJ];
		}
		else
		{
			*pointerSecond = 0;
		}

		for( temp = 0 ; temp < I ; temp++ )
		{
			if( box[temp].placeI == tempFirstI && box[temp].placeJ == tempFirstJ )
			{
				*pointerFirst = 1;
			}
			else if( box[temp].placeI == tempSecondI && box[temp].placeJ == tempSecondJ )
			{
				*pointerSecond = 1;
			}
		}
	break;
	
	case 3:
		tempFirstI = player->placeI + 1;
		tempFirstJ = player->placeJ;

		tempSecondI = player->placeI + 2;
		tempSecondJ = player->placeJ;

		if( tempFirstI >= 0 && tempFirstJ >= 0 )		//檢索范圍未超出地圖的情況,
		{
			*pointerFirst = smallSquare [tempFirstI][tempFirstJ];
		}
		//范圍超出地圖的區塊,將其按墻壁計算,
		else
		{
			*pointerFirst = 0;
		}

		if( tempSecondI >= 0 && tempSecondJ >= 0 )
		{
			*pointerSecond = smallSquare[tempSecondI][tempSecondJ];
		}
		else
		{
			*pointerSecond = 0;
		}

		for( temp = 0 ; temp < I ; temp++ )
		{
			if( box[temp].placeI == tempFirstI && box[temp].placeJ == tempFirstJ )
			{
				*pointerFirst = 1;
			}
			else if( box[temp].placeI == tempSecondI && box[temp].placeJ == tempSecondJ )
			{
				*pointerSecond = 1;
			}
		}
	break;
	
	case 4:
		tempFirstI = player->placeI;
		tempFirstJ = player->placeJ + 1;

		tempSecondI = player->placeI;
		tempSecondJ = player->placeJ + 2;

		if( tempFirstI >= 0 && tempFirstJ >= 0 )		//檢索范圍未超出地圖的情況,
		{
			*pointerFirst = smallSquare [tempFirstI][tempFirstJ];
		}
		//范圍超出地圖的區塊,將其按墻壁計算,
		else
		{
			*pointerFirst = 0;
		}

		if( tempSecondI >= 0 && tempSecondJ >= 0 )
		{
			*pointerSecond = smallSquare[tempSecondI][tempSecondJ];
		}
		else
		{
			*pointerSecond = 0;
		}

		for( temp = 0 ; temp < I ; temp++ )
		{
			if( box[temp].placeI == tempFirstI && box[temp].placeJ == tempFirstJ )
			{
				*pointerFirst = 1;
			}
			else if( box[temp].placeI == tempSecondI && box[temp].placeJ == tempSecondJ )
			{
				*pointerSecond = 1;
			}
		}
	break;

	default:
		break;
	}
}

還有幾個函式,我并沒有在這里展示,不過有興趣的朋友可以下載源代碼好好學習,
主要是博主實在寫不動了,
你呢,還希望大家能夠通過我的代碼,不斷提高自己的編程能力,不斷的提升,
游戲和原始碼的下載鏈接在上面,有大家可以下載下來反復學習喲,

其次看在小博主我寫了這么多的份上,你不點個贊再走嗎?

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

標籤:其他

上一篇:STM32開發入門(一)——流水燈

下一篇:LintCode 介紹

標籤雲
其他(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