主頁 >  其他 > C語言—貪吃蛇雙人對戰

C語言—貪吃蛇雙人對戰

2021-12-29 09:38:26 其他

貪吃蛇雙人對戰源代碼及詳解

規則 :玩家一(左側)通過按鍵W、S、A、D(大小寫)四個鍵分別控制snake1上移、下移、左移和右移,玩家二(右側)通過按鍵8、5、4、6 四個鍵分別控制snake2上移、下移、左移和右移,
每局游戲三分鐘,死亡則直接失敗,若時間結束,則分高者獲勝,
每次游戲資料自動疊加保存并進行排名,若賬號第一次使用,則創建新成績,

源代碼及詳細決議:

#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
#include <time.h>
#include<stdbool.h>
#include <conio.h>
#define SNAKESIZE 100
#define MAPWIDTH  118
#define MAPHEIGHT  29
#define M         200
void gotoxy       ();
void MAP          ();
void OPERATION    ();
void  createFood0 ();
void createFood   ();
void createFood1  ();
bool check        ();
bool check1       ();
void READ         ();
void RANK         ();
void OVER0        ();
void OVER         ();
void fun          ();
void fun1         ();
void START        ();
void RULE         ();
void MENU         ();
void WRITE (char s[20],int score,char s1[20],int score1);
void PPX           ();
struct game {
    char          name[20];
    int win , lost , score;
    double            prob;
    double jf;
}card[M+1];

struct {    //保存食物坐標
	int x;
	int y;
}food;

struct {
	int len;
	int x[SNAKESIZE];
	int y[SNAKESIZE];

}snake;

struct {
	int len;
	int x[SNAKESIZE];
	int y[SNAKESIZE];

}snake1;
char key  = '8' , key1 = 'w'  ,  name[20]  , name1[20];
//初始方向向上
int changeFlag = 0  , changeFlag1 = 0 , jf =0 , jf1 =0;
int speed=150 , sorce = 0 , sorce1 = 0 , sec=0 , min=3;

void gotoxy(int x, int y)//移動游標到指定位置
{
	COORD coord;
	coord.X = x;
	coord.Y = y;
	SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}
void MAP()//列印邊框和兩條蛇的起始位置
{

	for (int i = 0; i <= MAPWIDTH; i += 2)//列印最上面和最下面兩橫邊框
	{
		gotoxy(i, 0);
		printf("■");
		gotoxy(i, MAPHEIGHT);
		printf("■");
	}

	for (int i = 1; i < MAPHEIGHT; i++)//列印最左面和最右面
	{
		gotoxy(0, i);
		printf("■");
		gotoxy(MAPWIDTH, i);
		printf("■");
	}

	while (1)//列印一個食物
	{
		srand((unsigned int)time(NULL));
		food.x = rand() % (MAPWIDTH - 4) + 2;
		food.y = rand() % (MAPHEIGHT - 2) + 1;
		if (food.x % 2 == 0)
			break;
	}
	gotoxy(food.x, food.y);
	printf("★");

	snake.len = snake1.len = 4;//給兩條蛇的長度賦初值

	snake.x[0]  = MAPWIDTH  / 2 + 31;//然后分別列印兩條蛇身部分
	snake.y[0]  = MAPHEIGHT / 2;
	snake1.x[0] = MAPWIDTH  / 2 - 31;
	snake1.y[0] = MAPHEIGHT / 2;
	gotoxy(snake.x[0] , snake.y[0] );
	printf("■");
	gotoxy(snake1.x[0], snake1.y[0]);
	printf("●");

	for (int i = 1; i < snake.len; i++)
	{
		snake.x[i]  =  snake.x[i - 1];
		snake.y[i]  =  snake.y[i - 1]+1;
		gotoxy(snake.x[i] , snake.y[i] );
		printf("■");
		snake1.x[i] = snake1.x[i - 1];
		snake1.y[i] = snake1.y[i - 1]+1;
		gotoxy(snake1.x[i], snake1.y[i]);
		printf("●");
	}
	gotoxy(MAPWIDTH , 0);//把游標移走
	return;
}
void OPERATION()//操作函式
{

	char  pre_key = key ,  pre_key1 = key1 , s;//保存兩條蛇上一次的方向

	if (_kbhit())
    {
        s = getch();
        if(s=='w'||s=='s'||s=='a'||s=='d'||s=='W'||s=='S'||s=='A'||s=='D')
            key1=s;
        else if(s  ==  '8'  ||  s  ==  '5'  ||  s  ==  '4'  ||  s  == '6')
            key=s;
    }

	if (changeFlag == 0)//沒吃到食物
	{
		gotoxy(snake.x[snake.len - 1], snake.y[snake.len - 1]);
		printf("  ");//在蛇尾處輸出空格即擦去蛇尾
	}
	if (changeFlag1 == 0)
	{
		gotoxy(snake1.x[snake1.len - 1], snake1.y[snake1.len - 1]);
		printf("  ");//在蛇尾處輸出空格即擦去蛇尾
	}
	//將蛇的每一節依次向前移動一節(蛇頭除外)
	for (int i = snake.len - 1; i > 0; i--)
	{
		snake.x[i]  =  snake.x[i - 1];
		snake.y[i]  =  snake.y[i - 1];
	}
	for (int i = snake1.len - 1; i > 0; i--)
	{
		snake1.x[i] = snake1.x[i - 1];
		snake1.y[i] = snake1.y[i - 1];
	}

	//蛇當前移動的方向不能和前一次的方向相反,比如蛇往左走的時候不能直接按右鍵往右走
	//如果當前移動方向和前一次方向相反的話,把當前移動的方向改為前一次的方向
	if (pre_key == '8'  &&  key == '5')
		key = '8';
	if (pre_key == '5'  &&  key == '8')
		key = '5';
	if (pre_key == '4'  &&  key == '6')
		key = '4';
	if (pre_key == '6'  &&  key == '4')
		key = '6';
    if (pre_key1 == 'w' && key1 == 's')
		key1 = 'w';
	if (pre_key1 == 's' && key1 == 'w')
		key1 = 's';
	if (pre_key1 == 'a' && key1 == 'd')
		key1 = 'a';
	if (pre_key1 == 'd' && key1 == 'a')
		key1 = 'd';

	//判斷蛇頭應該往哪個方向移動
	switch (key)
	{
	case '4':
		snake.x[0] -= 2;//往左
		break;
	case '6':
		snake.x[0] += 2;//往右
		break;
	case '8':
		snake.y[0]--;//往上
		break;
	case '5':
		snake.y[0]++;//往下
		break;
	}
	gotoxy(snake.x[0], snake.y[0]);
	printf("■");
	changeFlag = 0;
	switch (key1)
	{
	case 'a':
    case 'A':
		snake1.x[0] -= 2;//往左
		break;
	case 'd':
    case 'D':
		snake1.x[0] += 2;//往右
		break;
	case 'w':
    case 'W':
		snake1.y[0]--;//往上
		break;
	case 's':
    case 'S':
		snake1.y[0]++;//往下
		break;
	}
	gotoxy(snake1.x[0], snake1.y[0]);
	printf("●");
	changeFlag1 = 0;
	gotoxy(MAPWIDTH,MAPHEIGHT);
	return;
}
void createFood()
{
	if (snake.x[0] == food.x && snake.y[0] == food.y)//蛇頭碰到食物
	{
		//蛇頭碰到食物即為要吃掉這個食物了,因此需要再次生成一個食物
		createFood0();
		createFood0();

		snake.len++;//吃到食物,蛇身長度加1
		sorce += 10;
		speed -= 5;//隨著吃的食物越來越多,速度會越來越快
		changeFlag = 1;//很重要,因為吃到了食物,就不用再擦除蛇尾的那一節,以此來造成蛇身體增長的效果
	}
	return;
}
void createFood1()
{
	if (snake1.x[0] == food.x && snake1.y[0] == food.y)//蛇頭碰到食物
	{
		//蛇頭碰到食物即為要吃掉這個食物了,因此需要再次生成一個食物
		createFood0();
		createFood0();

		snake1.len++;//吃到食物,蛇身長度加1
		sorce1 += 10;
		speed -= 5;//隨著吃的食物越來越多,速度會越來越快
		changeFlag1 = 1;//很重要,因為吃到了食物,就不用再擦除蛇尾的那一節,以此來造成蛇身體增長的效果
	}
	return;
}
void  createFood0()
{
    while (1)
		{
			int a = 1 , b=1;
			srand(  (unsigned int)time(NULL)  );
			food.x = rand() % (MAPWIDTH - 4) + 2;
			food.y = rand() % (MAPHEIGHT - 2) + 1;

			//隨機生成的食物不能在蛇的身體上
			for (int i = 0; i < snake.len ; i++)
			{
				if (snake.x[i] == food.x && snake.y[i] == food.y)
				{
					a = 0;
					break;
				}
			}
			for (int i = 0; i < snake1.len; i++)
			{
				if (snake1.x[i] == food.x && snake1.y[i] == food.y)
				{
					b = 0;
					break;
				}
			}
			//隨機生成的食物不能橫坐標為奇數,也不能在蛇身,否則重新生成
			if (a==1&&b==1&& food.x % 2 == 0)
				break;
		}
        //繪制食物
		gotoxy(food.x, food.y);
		printf("★");
}
bool check()
{
	//蛇頭碰到上下邊界,游戲結束
	if (snake.y[0] == 0 || snake.y[0] == MAPHEIGHT)
		return true;
	//蛇頭碰到左右邊界,游戲結束
	if (snake.x[0] == 0 || snake.x[0] == MAPWIDTH)
		return true;
	//蛇頭碰到蛇身,游戲結束
	for (int i = 1; i < snake.len; i++)
	{
		if (snake.x[i] == snake.x[0] && snake.y[i] == snake.y[0])
			return true;
	}
	for (int i = 0; i < snake1.len; i++)
    {
        if(snake1.x[i] == snake.x[0]&&snake1.y[i]  == snake.y[0])
            return true;
    }
	return false;
}
bool check1()
{
	//蛇頭碰到上下邊界,游戲結束
	if (snake1.y[0] == 0 || snake1.y[0] == MAPHEIGHT)
		return true;
	//蛇頭碰到左右邊界,游戲結束
	if (snake1.x[0] == 0 || snake1.x[0] == MAPWIDTH)
		return true;
	//蛇頭碰到蛇身,游戲結束
	for (int i = 1; i < snake1.len; i++)
	{
		if (snake1.x[i] == snake1.x[0] && snake1.y[i] == snake1.y[0])
			return true;
	}
	for (int i = 0; i < snake.len; i++)
	{
		if (snake.x[i] == snake1.x[0] && snake.y[i]  == snake1.y[0])
			return true;
	}
	return false;
}
void MENU ()//列印選單界面
{
    printf("\n\n\n\n\t\t\t\t   ╔═══════════════════════════════════════════╗\n");
    printf("\t\t\t\t   ║                                           ║\n");
    printf("\t\t\t\t   ║              歡迎來到貪吃蛇               ║\n");
    printf("\t\t\t\t   ║                                           ║\n");
    printf("\t\t\t\t   ║                                           ║\n");
    printf("\t\t\t\t   ║       ┏━━┓      ┏━━┓      ┏━━┓       ┏━━┓ ║\n");
    printf("\t\t\t\t   ║  開始:┃ 1┃ 規則:┃ 2┃ 排行:┃ 3┃  退出:┃ 4┃ ║\n");
    printf("\t\t\t\t   ║       ┗━━┛      ┗━━┛      ┗━━┛       ┗━━┛ ║\n");
    printf("\t\t\t\t   ║                                           ║\n");
    printf("\t\t\t\t   ║                                           ║\n");
    printf("\t\t\t\t   ╚═══════════════════════════════════════════╝\n");

    switch(getch()){
        case '1':
                system("cls");
                START();
                break;
        case '2':
                system("cls");
                fun(5);
                RULE();
                MENU();
                break;
        case '3':
                system("cls");
                fun(10);
                RANK();
                MENU();
                break;
        case '4':
                exit(0);
                break;
        default:
            system("cls");
            printf("error");
            MENU();

        }
}
void RULE ()
{
    system("cls");//清屏
	printf("\t╔══════════════════════════════════════════════════════════════════════════════════════════════════╗\n");
	printf("\t║本游戲玩家一(左側)通過按鍵W、S、A、D(不區分大小寫)四個鍵分別控制snake1上移、下移、左移和右移,║\n");
	printf("\t║玩家二(右側)通過按鍵8、5、4、6 四個鍵分別控制snake2上移、下移、左移和右移,                     ║\n");
	printf("\t║每局游戲三分鐘,死亡則直接失敗,若時間結束,則分高者獲勝,獲勝積分加十,失敗積分加五,            ║\n");
	printf("\t║每次游戲資料自動疊加保存并按斬訓分乘勝率進行排名,若賬號第一次使用,則創建新賬號保存新成績,      ║\n");
	printf("\t╚══════════════════════════════════════════════════════════════════════════════════════════════════╝\n");
	system("pause");//暫停
	system( "cls" );//清屏
}
void fun(int time)//進度條函式
{
	int  i        =     0;
	char bar[102] = { 0 };
	gotoxy(   33  ,  9  );
	printf    (    "資料載入中,請稍后\n"    );
	while   (i   <=   50)
	{
	    gotoxy(33 , 10);
		printf("[%-50s][%3d%%]\r", bar, i * 2);
		Sleep  (  time   );
		bar[i++] =  '*';
		bar[i]   = '\0';
	}
	system("cls");
}
void fun1(int time)//進度條函式
{
	int  i        =     0;
	char bar[102] = { 0 };
	gotoxy(   33  ,  9  );
	printf    (    "游戲啟動中,請做好準備\n"    );
	while   (i   <=   50)
	{
	    gotoxy(33 , 10);
		printf("[%-50s][%3d%%]\r", bar, i * 2);
		Sleep  (  time   );
		bar[i++] =  '*';
		bar[i]   = '\0';
	}
	system("cls");
}
void START()
{
    time_t time_sec = 0;
    time_t old_sec  = 0;
	printf("\n\n\t\t\t\t請左側玩家輸入賬號:");
		scanf("%s",&name1);
    printf("\n\n\t\t\t\t請右側玩家輸入賬號:");
		scanf("%s",&name);
    while(strcmp(name1,name)==0)
    {
        printf("\n\n\t\t\t\t請輸入不同的賬號:");
        scanf("%s",&name);
    }
    //進度條進度條
    system("pause");
    system( "cls" );
    fun1       (19);
	MAP          ();
	time(&time_sec);          //獲取時間
	old_sec = time_sec;       //保存時間
    while (!check()&&!check1())
	{

		OPERATION    ();
        createFood   ();
		createFood1  ();
		Sleep(  speed );
		time(&time_sec);          //獲取秒數保存到time_t變數
        if(time_sec != old_sec)   //如果秒數改變(計時達到1秒)
        {
            old_sec = time_sec;   //更新舊的秒數
            if(sec > 0)
                sec --;            //計時秒數減1
            else
            {
                sec=59;         //如果原秒數為0,則變為59
                min --;        //計時分鐘減1
            }
        }
        if(min==0 && sec==0)
            break;
        if(min==0 && sec<=8)
          printf("\a");
          gotoxy(0 ,0);
          printf("倒計時——%02d:%02d\r",min, sec);
    }
    system(          "cls"         );
    printf("\n\n\t\t\tGame Over!\n");
    system(         "pause"        );
    OVER                          ();
}

void OVER ()
{
    system("cls");
    printf("\n\n\n\n\t\t\t\t╔═══════════════════════════════════════════╗\n");
    printf("\t\t\t\t║                                           ║\n");
    printf("\t\t\t\t║                  游戲結束                 ║\n");
    printf("\t\t\t\t║                                           ║\n");
    printf("\t\t\t\t║                                           ║\n");
    if(check()&&!check1())
    {
        WRITE(name1,sorce1,name,sorce);
        printf("\t\t\t\t║   %10s獲勝   %10s失敗         ║\n",name1,name);
    }
    else if(!check()&&check1())
    {
        WRITE(name,sorce,name1,sorce1);
        printf("\t\t\t\t║   %10s獲勝   %10s失敗         ║\n",name,name1);
    }
    else
    {
        printf("\t\t\t\t║   %10s本次游戲得分為:%4d          ║\n", name1,sorce1);
        printf("\t\t\t\t║   %10s本次游戲得分為:%4d          ║\n", name , sorce);
        if(sorce>sorce1)
        {
            WRITE(name,sorce,name1,sorce1);
            printf("\t\t\t\t║   %10s獲勝  %10s失敗          ║\n",name,name1);
        }
        else if(sorce1>sorce)
        {
            WRITE(name1,sorce1,name,sorce);
            printf("\t\t\t\t║   %10s獲勝  %10s失敗          ║\n",name1,name);
        }
        else
            printf("\t\t\t\t║              恭喜你們平局了!              ║\n");
    }
    printf("\t\t\t\t║                                           ║\n");
    printf("\t\t\t\t║                                           ║\n");
    printf("\t\t\t\t║          ┏━━┓        ┏━━┓        ┏━━┓     ║\n");
    printf("\t\t\t\t║     再來:┃ 1┃   排名:┃ 2┃   退出:┃ 3┃     ║\n");
    printf("\t\t\t\t║          ┗━━┛        ┗━━┛        ┗━━┛     ║\n");
    printf("\t\t\t\t╚═══════════════════════════════════════════╝\n");
    switch(getch()){
        case '1':
            for(int i=0;i<M+1;i++)
            {
                key  ='8';
                key1 ='w';
                speed=150;
                snake.x[i]  =MAPWIDTH+ 10;
                snake1.x[i] =MAPWIDTH+ 10;
                snake.y[i]  =MAPHEIGHT+10;
                snake1.y[i] =MAPHEIGHT+10;
            }
            system("cls");
            MENU ();
            break;
        case '2':
            system("cls");
            fun(10);
            RANK ();
            OVER0();
            break;
        case '3':
            exit(0);
            break;
        default:
            system( "cls" );
            printf("error");
            OVER ();
        }

}
void OVER0 ()
{
    system("cls");
    printf("\n\n\n\n\t\t\t\t╔═══════════════════════════════════════════╗\n");
    printf("\t\t\t\t║                                           ║\n");
    printf("\t\t\t\t║                                           ║\n");
    printf("\t\t\t\t║                                           ║\n");
    printf("\t\t\t\t║          ┏━━┓        ┏━━┓        ┏━━┓     ║\n");
    printf("\t\t\t\t║     再來:┃ 1┃   排名:┃ 2┃   退出:┃ 3┃     ║\n");
    printf("\t\t\t\t║          ┗━━┛        ┗━━┛        ┗━━┛     ║\n");
    printf("\t\t\t\t╚═══════════════════════════════════════════╝\n");

    switch(getch()){
        case '1':
            for(int i=0;i<SNAKESIZE;i++)
            {
                key1 ='w';
                key  ='8';
                speed=150;
                snake.x[i]  =MAPWIDTH+ 10;
                snake1.x[i] =MAPWIDTH+ 10;
                snake.y[i]  =MAPHEIGHT+10;
                snake1.y[i] =MAPHEIGHT+10;
            }
            system("cls");
            MENU();
            break;
        case '2':
            system("cls");
            RANK ();
            OVER0();
            break;
        case '3':
            exit(0);
            break;
        default:
            system( "cls" );
            printf("error");
            OVER0();
        }
}
void RANK ()
{
    int v=1;
    printf("\t\t\t排名          玩家      積分    勝場   敗場        得分   勝率\n");
    for(int w=0;w<M+1;w++)
    {
        if(   card[w].jf!=0  ){
        printf("\t\t\tNO:%3d  %10s   %5.0lf  %5d  %5d  %11d     %3.2lf\n",v,card[w].name,card[w].jf,card[w].win,card[w].lost,card[w].score,card[w].prob*100);
        v++;
        }
    }
    system("pause");
    system( "cls" );

}
void READ ()
{
    FILE   *w;
    w  =  fopen(  "d:\\snake.txt","rb"  );
    fread(card,sizeof(struct game),M+1,w);
    fclose(w);
}
void WRITE (char s[20],int score,char s1[20],int score1)
{
    FILE *w;
    int p=0;

    for(int i=0;i<M+1;i++)
    {
        if(strcmp(card[i].name,s)==0)
        {
            p++;
            card[i].jf+=10;
            card[i].win  +=    1;
            card[i].score+=score;
            card[i].prob=((double)card[i].win)/((double)(card[i].win+card[i].lost))+0.00001;
        }
    }
    if(p==0){
       strcpy(card[M/2].name,s);
            card[M/2].win  =1;
            card[M/2].lost =0;
            card[M/2].score=score;
            card[M/2].prob =1;
            card[M/2].jf=10;
    }
    p=0;
    for(int i=0;i<M+1;i++)
    {
        if(strcmp(card[i].name,s1)==0)
        {
            p++;
            card[i].jf+=5;
            card[i].lost +=     1;
            card[i].score+=score1;
            card[i].prob=((double)card[i].win)/((double)(card[i].win+card[i].lost))+0.00001;
        }
    }
    if(p==0){
       strcpy(card[M/2-1].name,s1);
            card[M/2-1].win  =0;
            card[M/2-1].lost =1;
            card[M/2-1].score=score1;
            card[M/2-1].prob =0.00001;
            card[M/2-1].jf=5;
    }
    PPX    ();
    w=fopen(  "d:\\snake.txt"  ,  "wb"  );
    fwrite(card,sizeof(struct game),M+1,w);
    fclose(w);
}
void PPX ()
{
    int   i , j  , k;
    struct    game q;
    for(  i  =  0  ;  i  <  M  ;  i ++){
       k=i;
       for(  j = i+1 ; j < M+1 ; j ++ ){
        if(card[k].jf*card[k].prob<card[j].jf*card[j].prob)k=j;
       }
       q      =card[i];
       card[i]=card[k];
       card[k]=      q;
       }
}

int main ()
{
    system(  "title 雙人貪吃蛇"  );
    system(      "color F0"      );
    READ                        ();
    MENU                        ();


    return 0;
}

生成.txt檔案保存游戲記錄排行榜

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

標籤:其他

上一篇:C語言---雙人貪吃蛇

下一篇:python 全解坦克大戰 輔助類 附完整代碼【雛形】

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