9.基于粤嵌gec6818开发板小游戏2048的算法实现

2048源码:

感兴趣的可以去了解一下2048优化算法:
基于蒙特卡罗树搜索的_2048_游戏优化算法_刘子正

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <linux/input.h>
#include <math.h>
#include <stdlib.h>
#include <time.h>#define UP 1
#define DOWN 2
#define LEFT 3
#define RIGHT 4
#define SUCCESS_NUM 2048int *plcd = NULL;char *bmp_name[] = {"2.bmp","4.bmp","8.bmp","16.bmp","32.bmp","64.bmp","128.bmp","256.bmp","512.bmp","1024.bmp","2048.bmp",
};
we
int matrix[4][4] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
};int get_rand_int_1(){int k = 0;int a;srand((unsigned)time(NULL));a = rand();return a;
}int get_rand_int_2(){int k = 0;int a;srand((unsigned) (time(NULL) + 1));a = rand();// printf("%d\n", a);return a;
}int get_rand_int_3(){int k = 0;int a;srand((unsigned) (time(NULL) + 2));a = rand();// printf("%d\n", a);return a;
}int get_rand_int_4(){int k = 0;int a;srand((unsigned) (time(NULL) + 3));a = rand();// printf("%d\n", a);return a;
}// 初始化二维数组随机值
void init_matrix(){int a = get_rand_int_1();int b = get_rand_int_2();// printf("%d %d \n",a, b );int rand1_x = a % 4;int rand1_y = b % 4;// printf("%d %d\n",rand1_x, rand1_y );int c = get_rand_int_2();int d = get_rand_int_4();int rand2_x = c % 4;int rand2_y = d % 4;// 防止生成两个相同位置的块if(rand1_x == rand2_x && rand1_y == rand2_y){rand2_x = (rand2_x + 1) % 4;	//右移一位,对四取余}// printf("%d %d\n",rand2_x, rand2_y );matrix[rand1_x][rand1_y] = 2;matrix[rand2_x][rand2_y] = 4;
}void draw_point(int x,int y,int color){if(x>=0 && x<800 && y>=0 && y<480 ){*(plcd+800*y+x) = color ;}
}//实现一个函数,在坐标为x0,y0的位置显示一个矩形,宽度为w,高度为h,颜色为color
void lcd_draw_rect(int x0, int y0, int w, int h, int color){int x, y;for (y = y0; y < y0+h; y++){for (x = x0; x < x0+w; x++)draw_point(x, y, color);}
}void lcd_draw_bmp(char *file, int x, int y){int photo_file = open(file, O_RDONLY);if(photo_file == -1){perror("open error\n");return ;}int width, height;short depth;unsigned char buf[4] ;//读取宽度lseek(photo_file, 0x12, SEEK_SET);read(photo_file, buf, 4);width = buf[3]<<24 | buf[2]<<16 | buf[1]<<8 | buf[0];//读取高度read(photo_file, buf, 4);height  = buf[3]<<24 | buf[2]<<16 | buf[1]<<8 | buf[0];//读取色深lseek(photo_file, 0x1c, SEEK_SET);read(photo_file, buf, 2);depth = buf[1]<<8 | buf[0];//打印信息// printf("width=%d | height=%d | depth=%d \n", width, height, depth);//像素数组 int line_valid_bytes = abs(width) * depth / 8 ; //一行本有的有效字节int laizi = 0;//填充字节if( (line_valid_bytes % 4) !=0   ){laizi = 4 - line_valid_bytes % 4;}int line_bytes = line_valid_bytes + laizi;//一行所有的字节数int total_bytes = line_bytes * abs(height); //整个像素数组的大小unsigned char * photo_contents = malloc(total_bytes);lseek(photo_file, 54, SEEK_SET);read(photo_file, photo_contents, total_bytes);//调用draw_point 函数 。unsigned char a, r, g, b;int i = 0;//用来做指针运动的int x_0 = 0, y_0 = 0; //用来循环计数int color;for(y_0=0; y_0<abs(height); y_0++){	//画满每一列for(x_0=0; x_0<abs(width); x_0++){	//画满每一行//现在开始一个字节一个字节写入颜色// i++  先用后加     // ++i  先加后用b = photo_contents[i++];g = photo_contents[i++];r = photo_contents[i++];if(depth == 32){a = photo_contents[i++];}if(depth == 24){a = 0;}color = a<<24 | r<<16 | g<<8 | b ;draw_point(width>0 ? x+x_0 : abs(width)+x-1-x_0, height>0 ? y+height-1-y_0 : y+y_0, color);}i = i + laizi ;//每一行后面的癞子数 跳过去。	}free(photo_contents);close(photo_file);
}char *get_filename_by_digit(int digit){int index;switch (digit){case 2:index = 0;break;case 4:index = 1;break;case 8:index = 2;break;case 16:index = 3;break;case 32:index = 4;break;case 64:index = 5;break;case 128:index = 6;break;case 256:index = 7;break;case 512:index = 8;break;case 1024:index = 9;break;case 2048:index = 10;break;default:index = 0;break;}// printf("%s\n", bmp_name[index]);xreturn bmp_name[index];
}void lcd_draw_matrix(){int i, j;for (i = 0 ; i < 4; i++){for (j = 0; j < 4; j++){if (matrix[i][j] == 0){//画一个颜色矩形//	void lcd_draw_rect(int x0, int y0, int //w, int h, int color)lcd_draw_rect(20+ 120*j, 20+120*i,100, 100, 0x16a08500);}else{//画一张对应数字的bmp图片//	void lcd_draw_bmp(char *file, int x0, //int y0)lcd_draw_bmp(get_filename_by_digit(matrix[i][j]),20+ 120*j, 20+120*i);}}}
}//获得手指的滑动方向
int get_finger_move_direction()
{int direction;int fd = open("/dev/input/event0", O_RDONLY);if(fd == -1){perror("/dev/input/event0 open error\n");return -1;}int x,y;int x_start, y_start, x_stop, y_stop;struct input_event ev ;while(1){int r = read(fd,&ev,sizeof(ev));if(r != sizeof(ev)){perror("read ev error\n");return -2;}if(ev.type == EV_ABS  && ev.code == ABS_X){x= ev.value ;}if(ev.type == EV_ABS  && ev.code == ABS_Y){y = ev.value;}if(ev.type == EV_KEY && ev.code == BTN_TOUCH && ev.value != 0 ){printf("FINGTER DOWN(%d ,%d )\n",x,y);x_start = x;y_start = y;}//弹起来if(ev.type == EV_KEY && ev.code == BTN_TOUCH && ev.value == 0 ){printf("FINGTER UP(%d ,%d )\n",x,y);x_stop = x;y_stop = y ;if(y > 0)	break;}}if(abs(x_start - x_stop)  - abs(y_start - y_stop)  > 0 && abs(x_start - x_stop) > 30){	//X方向滑动if(x_stop  -  x_start  > 0){printf("SLIP RIGHT\n\n");direction = RIGHT;}else{printf("SLIP LEFT\n\n");direction = LEFT;}}if(abs(x_start - x_stop)  - abs(y_start - y_stop)  < 0 && abs(y_start - y_stop) > 30){	//y方向滑动if(y_stop - y_start >0){printf("SLIP DOWN\n\n");direction = DOWN;}else{printf("SLIP UP\n\n");direction = UP;}}close(fd);return direction;
}void handle_up(){int i, j, k, l;int zero[4] = {-1, -1, -1, -1};// 挪动部分for(j=0; j<=3; j++){for(l=0; l<=3; l++){zero[l] = -1;}for(i=0; i<=3; i++){if(matrix[i][j] == 0){printf("(%d, %d) ---> 0\n", i, j);zero[i] = 0;}else{// printf("Start to scan zero\n");for(k=0; k<=3; k++){	//从右到左遍历zeroprintf("%d\t", zero[k]);}printf("\n");for(k=0; k<=3; k++){	//从右到左遍历zeroif(zero[k] == 0){// printf("zero[%d] is empty!\n", k);matrix[k][j] = matrix[i][j];	//将左侧的数值移动到右侧的空白处matrix[i][j] = 0;zero[k] = -1;					//将移入的位置标志为-1zero[i] = 0;					//将移走的位置标志为0// printf("after move: zero[k]: %d \t zero[j]: %d\n", zero[k]);// for(k=0; k<=3; k++){			//从右到左遍历zero// 	printf("%d\t", zero[k]);// }printf("\n");}}}}}printf("Start to scan matrix\n");// int i,j;for(i=0;i<4;i++){for(j=0;j<4;j++){printf("%d\t", matrix[i][j]);}printf("\n");}printf("---------------------------------------\n");printf("ADD\n");//加和部分for(j=0; j<=3; j++){for(i=0; i<=2; i++){if(matrix[i][j] != matrix[i+1][j]){		//相邻的不想等,j左移continue;}else{matrix[i][j] = 2 * matrix[i][j];	//相邻的相等,向右合并matrix[i+1][j] = 0;printf("%d\t%d\n", matrix[i][j], matrix[i+1][j]);i += 1;								//j指向到置零格子的位置}}}printf("Start to scan matrix\n");// int i,j;for(i=0;i<4;i++){for(j=0;j<4;j++){printf("%d\t", matrix[i][j]);}printf("\n");}printf("---------------------------------------\n");printf("Move again\n");// 再次向右挪动for(j=0; j<=3; j++){for(l=0; l<=3; l++){zero[l] = -1;}for(i=0; i<=3; i++){if(matrix[i][j] == 0){printf("(%d, %d) ---> 0\n", i, j);zero[i] = 0;}else{// printf("Start to scan zero\n");// for(k=0; k<=3; k++){	//从右到左遍历zero// 	printf("%d\t", zero[k]);// }// printf("\n");for(k=0; k<=3; k++){	//从右到左遍历zeroif(zero[k] == 0){printf("zero[%d] is empty!\n", k);matrix[k][j] = matrix[i][j];	//将左侧的数值移动到右侧的空白处matrix[i][j] = 0;zero[k] = -1;					//将移入的位置标志为-1zero[i] = 0;					//将移走的位置标志为0// printf("after move: zero[k]: %d \t zero[j]: %d\n", zero[k]);// for(k=0; k<=3; k++){			//从右到左遍历zero// 	printf("%d\t", zero[k]);// }// printf("\n");}}}}}// printf("Start to scan zero\n");// 			for(k=0; k<=3; k++){	//从右到左遍历zero// 				printf("%d\t", zero[k]);// 			}printf("Start to scan matrix\n");// int i,j;for(i=0;i<4;i++){for(j=0;j<4;j++){printf("%d\t", matrix[i][j]);}printf("\n");}
}void handle_down(){int i, j, k, l;int zero[4] = {-1, -1, -1, -1};printf("Start to scan matrix\n");// int i,j;for(i=0;i<4;i++){for(j=0;j<4;j++){printf("%d\t", matrix[i][j]);}printf("\n");}// 挪动部分for(j=0; j<=3; j++){for(l=0; l<=3; l++){zero[l] = -1;}for(i=3; i>=0; i--){if(matrix[i][j] == 0){printf("(%d, %d) ---> 0\n", i, j);zero[i] = 0;}else{// printf("Start to scan zero\n");// for(k=0; k<=3; k++){	//从右到左遍历zero// 	printf("%d\n", zero[k]);// }// printf("\n");for(k=3; k>=0; k--){	//从右到左遍历zeroif(zero[k] == 0){printf("zero[%d] is empty!\n", k);matrix[k][j] = matrix[i][j];	//将左侧的数值移动到右侧的空白处matrix[i][j] = 0;zero[k] = -1;					//将移入的位置标志为-1zero[i] = 0;					//将移走的位置标志为0// printf("after move: zero[k]: %d \t zero[j]: %d\n", zero[k]);// for(k=0; k<=3; k++){			//从右到左遍历zero// 	printf("%d\n", zero[k]);// }}}}}}printf("Start to scan matrix\n");// int i,j;for(i=0;i<4;i++){for(j=0;j<4;j++){printf("%d\t", matrix[i][j]);}printf("\n");}printf("---------------------------------------\n");printf("ADD\n");//加和部分for(j=0; j<=3; j++){for(i=3; i>=1; i--){if(matrix[i][j] != matrix[i-1][j]){		//相邻的不想等,i上移continue;}else{matrix[i][j] = 2 * matrix[i][j];	//相邻的相等,向右合并matrix[i-1][j] = 0;printf("%d\t%d\n", matrix[i][j], matrix[i-1][j]);i -= 1;								//i指向到置零格子的位置}}}printf("Start to scan matrix\n");// int i,j;for(i=0;i<4;i++){for(j=0;j<4;j++){printf("%d\t", matrix[i][j]);}printf("\n");}printf("---------------------------------------\n");printf("Move again\n");// 再次向右挪动for(j=0; j<=3; j++){for(l=0; l<=3; l++){zero[l] = -1;}for(i=3; i>=0; i--){if(matrix[i][j] == 0){printf("(%d, %d) ---> 0\n", i, j);zero[i] = 0;}else{// printf("Start to scan zero\n");// for(k=0; k<=3; k++){	//从右到左遍历zero// 	printf("%d\n", zero[k]);// }// printf("\n");for(k=3; k>=0; k--){	//从右到左遍历zeroif(zero[k] == 0){printf("zero[%d] is empty!\n", k);matrix[k][j] = matrix[i][j];	//将左侧的数值移动到右侧的空白处matrix[i][j] = 0;zero[k] = -1;					//将移入的位置标志为-1zero[i] = 0;					//将移走的位置标志为0// printf("after move: zero[k]: %d \t zero[j]: %d\n", zero[k]);printf("\n");}}}}}// printf("Start to scan zero\n");// 			for(k=0; k<=3; k++){	//从右到左遍历zero// 				printf("%d\n", zero[k]);// 			}printf("Start to scan matrix\n");// int i,j;for(i=0;i<4;i++){for(j=0;j<4;j++){printf("%d\t", matrix[i][j]);}printf("\n");}
}void handle_left(){int i, j, k, l;int zero[4] = {-1, -1, -1, -1};// 挪动部分for(i=0; i<=3; i++){for(l=0; l<=3; l++){zero[l] = -1;}for(j=0; j<=3; j++){if(matrix[i][j] == 0){printf("(%d, %d) ---> 0\n", i, j);zero[j] = 0;}else{// printf("Start to scan zero\n");// for(k=0; k<=3; k++){	//从右到左遍历zero// 	printf("%d\t", zero[k]);// }// printf("\n");for(k=0; k<=3; k++){	//从右到左遍历zeroif(zero[k] == 0){printf("zero[%d] is empty!\n", k);matrix[i][k] = matrix[i][j];	//将左侧的数值移动到右侧的空白处matrix[i][j] = 0;zero[k] = -1;					//将移入的位置标志为-1zero[j] = 0;					//将移走的位置标志为0// printf("after move: zero[k]: %d \t zero[j]: %d\n", zero[k]);// for(k=0; k<=3; k++){			//从右到左遍历zero// 	printf("%d\t", zero[k]);// }// printf("\n");}}}}}printf("Start to scan matrix\n");// int i,j;for(i=0;i<4;i++){for(j=0;j<4;j++){printf("%d\t", matrix[i][j]);}printf("\n");}printf("---------------------------------------\n");printf("ADD\n");//加和部分for(i=0; i<=3; i++){for(j=0; j<=2; j++){if(matrix[i][j] != matrix[i][j+1]){		//相邻的不想等,j左移continue;}else{matrix[i][j] = 2 * matrix[i][j];	//相邻的相等,向右合并matrix[i][j+1] = 0;printf("%d\t%d\n", matrix[i][j], matrix[i][j+1]);j += 1;								//j指向到置零格子的位置}}}printf("Start to scan matrix\n");// int i,j;for(i=0;i<4;i++){for(j=0;j<4;j++){printf("%d\t", matrix[i][j]);}printf("\n");}printf("---------------------------------------\n");printf("Move again\n");// 再次向右挪动for(i=0; i<=3; i++){for(l=0; l<=3; l++){zero[l] = -1;}for(j=0; j<=3; j++){if(matrix[i][j] == 0){printf("(%d, %d) ---> 0\n", i, j);zero[j] = 0;// printf("Start to scan zero\n");// for(k=0; k<=3; k++){	//从左到右遍历zero// 	printf("%d\t", zero[k]);// }printf("\n");}else{printf("(%d, %d) NOT 0\n", i, j);for(k=0; k<=3; k++){	//从左到右遍历zeroif(zero[k] == 0){printf("zero[%d] is empty!\n", k);matrix[i][k] = matrix[i][j];	//将左侧的数值移动到右侧的空白处matrix[i][j] = 0;printf("%d \t %d \n", matrix[i][k], matrix[i][j] );zero[k] = -1;					//将移入的位置标志为-1zero[j] = 0;					//将移走的位置标志为0// printf("after move: zero[k]: %d \t zero[j]: %d\n", zero[k]);}}}}}// printf("Start to scan zero\n");// 			for(k=0; k<=3; k++){	//从右到左遍历zero// 				printf("%d\t", zero[k]);// 			}printf("Start to scan matrix\n");// int i,j;for(i=0;i<4;i++){for(j=0;j<4;j++){printf("%d\t", matrix[i][j]);}printf("\n");}
}void handle_right(){int i, j, k, l;int zero[4] = {-1, -1, -1, -1};// 挪动部分for(i=0; i<=3; i++){for(l=0; l<=3; l++){zero[l] = -1;}for(j=3; j>=0; j--){if(matrix[i][j] == 0){printf("(%d, %d) ---> 0\n", i, j);zero[j] = 0;}else{// printf("Start to scan zero\n");// for(k=3; k>=0; k--){	//从右到左遍历zero// 	printf("%d\t", zero[k]);// }printf("\n");for(k=3; k>=0; k--){	//从右到左遍历zeroif(zero[k] == 0){printf("zero[%d] is empty!\n", k);matrix[i][k] = matrix[i][j];	//将左侧的数值移动到右侧的空白处matrix[i][j] = 0;zero[k] = -1;					//将移入的位置标志为-1zero[j] = 0;					//将移走的位置标志为0// printf("after move: zero[k]: %d \t zero[j]: %d\n", zero[k]);// for(k=3; k>=0; k--){			//从右到左遍历zero// 	printf("%d\t", zero[k]);// }printf("\n");}}}}}printf("Start to scan matrix\n");// int i,j;for(i=0;i<4;i++){for(j=0;j<4;j++){printf("%d\t", matrix[i][j]);}printf("\n");}printf("---------------------------------------\n");printf("ADD\n");//加和部分for(i=0; i<=3; i++){for(j=3; j>=1; j--){if(matrix[i][j] != matrix[i][j-1]){		//相邻的不想等,j左移continue;}else{matrix[i][j] = 2 * matrix[i][j];	//相邻的相等,向右合并matrix[i][j-1] = 0;printf("%d\t%d\n", matrix[i][j], matrix[i][j-1]);j -= 1;								//j指向到置零格子的位置}}}printf("Start to scan matrix\n");// int i,j;for(i=0;i<4;i++){for(j=0;j<4;j++){printf("%d\t", matrix[i][j]);}printf("\n");}printf("---------------------------------------\n");printf("Move again\n");// 再次向右挪动for(i=0; i<=3; i++){for(l=0; l<=3; l++){zero[l] = -1;}for(j=3; j>=0; j--){if(matrix[i][j] == 0){printf("(%d, %d) ---> 0\n", i, j);zero[j] = 0;// printf("Start to scan zero\n");// for(k=0; k<=3; k++){	//从右到左遍历zero// 	printf("%d\t", zero[k]);// }// printf("\n");}else{printf("(%d, %d) NOT 0\n", i, j);for(k=3; k>=0; k--){	//从右到左遍历zeroif(zero[k] == 0){printf("zero[%d] is empty!\n", k);matrix[i][k] = matrix[i][j];	//将左侧的数值移动到右侧的空白处matrix[i][j] = 0;printf("%d \t %d \n", matrix[i][k], matrix[i][j] );zero[k] = -1;					//将移入的位置标志为-1zero[j] = 0;					//将移走的位置标志为0// printf("after move: zero[k]: %d \t zero[j]: %d\n", zero[k]);}}}}}// printf("Start to scan zero\n");// 			for(k=0; k<=3; k++){	//从右到左遍历zero// 				printf("%d\t", zero[k]);// 			}printf("Start to scan matrix\n");// int i,j;for(i=0;i<4;i++){for(j=0;j<4;j++){printf("%d\t", matrix[i][j]);}printf("\n");}
}void rand_digital(){int b[32], k=0, m=0, i, j;for(i=0;i<4;i++)for(j=0;j<4;j++){if(matrix[i][j] == 0){// printf("(%d, %d)\n", i, j);b[k] = i;b[k+1] = j;k += 2;m += 1;}}if(m>0){int a;srand((unsigned)time(NULL));a = rand();printf("%d\n", a);int t = a % m;// if(t % 2 != 0) t -= 1;matrix[b[2*t]][b[2*t+1]] = 2;}}int False(){// printf("enter false\n");int i,j;for(i=0;i<4;i++)for(j=0;j<3;j++)if(matrix[i][j]==0||matrix[i][j]==matrix[i][j+1]) return 0;	//遍历左右for(j=0;j<4;j++)for(i=0;i<3;i++)if(matrix[i][j]==0||matrix[i+1][j]==matrix[i][j]) return 0;	//遍历上下if(matrix[3][3]==0) return 0;return 1;
}int Success(){// printf("Start to scan matrix\n");int i,j;for(i=0;i<4;i++)for(j=0;j<4;j++){// printf("%d\n", matrix[i][j]);if(matrix[i][j]==SUCCESS_NUM) return 1;				//遍历所有格,如果有2048,即成功!}return 0;
}void pfalse(){lcd_draw_rect(0, 0, 800, 480, 0x0);lcd_draw_bmp("false.bmp",0,0);
}void psuccess(){lcd_draw_rect(0, 0, 800, 480, 0x0);lcd_draw_bmp("success.bmp",0,0);
}void My_2048(){int direction;init_matrix();while(1){lcd_draw_matrix();direction = get_finger_move_direction();switch (direction){case UP:handle_up();rand_digital();break;case DOWN:handle_down();rand_digital();break;case LEFT:handle_left();rand_digital();break;case RIGHT:handle_right();rand_digital();break;}// handle(direction);// rand_digital();if(False()){pfalse();return;}if(Success()){psuccess();return;}// rand_digital();}
}int main(int argc, char *argv[]){int fd;fd = open("/dev/fb0", O_RDWR);//if (fd == -1)if (-1 == fd){printf("/dev/fb0 open error!\n");return 0;}plcd = mmap(NULL, 800*480*4,PROT_READ | PROT_WRITE,MAP_SHARED,fd,0);if (MAP_FAILED == plcd){printf("mmap error !\n");return 0;}#if 0int i;for (i = 0; i < 800*480;i++)*(plcd + i) = 0x0000ff00;#endif#if 0int x, y, color;color = 0x000000ff;for (y = 0; y < 480; y++){for (x = 0; x < 800; x++)draw_point(x, y, color);}#endif//在坐标为(200,200)的位置,显示一个100*100的颜色矩形,颜色为红色#if 0for (y = 200; y < 200+100; y++){for (x = 200; x < 200 + 100; x++)draw_point(x, y, color);}#endiflcd_draw_rect(0, 0, 800, 480, 0x0);My_2048();return 0;
}

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

机器学习笔记:adaBoost

1 介绍 AdaBoost&#xff08;Adaptive Boosting&#xff09;是一种集成学习方法&#xff0c;它的目标是将多个弱分类器组合成一个强分类器 通过反复修改训练数据的权重&#xff0c;使得之前分类错误的样本在后续的分类器中得到更多的关注每一轮中&#xff0c;都会增加一个新的…

大模型时代,如何找准AI发展新方向?TVP读书会与你共探

引言 随着 ChatGPT 掀起人工智能的发展狂潮&#xff0c;大模型时代悄然来临。大模型的出现让人们看到了人工智能在某些方面几乎接近人类智能的“威力”&#xff0c;也由此使人们产生了关于 AGI 的期盼与隐忧。其中&#xff0c;关于大模型是否是人工智能发展的拐点、科技从业者又…

数据结构--堆排序

目录 堆的定义 建立初始化堆的步骤 建立大根堆的代码 大根堆排序的代码 算法效率分析 稳定性 堆的定义 回忆 基于选择排序的特性&#xff1a;选取关键字最小&#xff08;或者最大&#xff09;的元素放入到序列里面&#xff0c;知道了大堆和小堆概念&#xff0c;所以将…

尚硅谷大数据项目《在线教育之实时数仓》笔记002

视频地址&#xff1a;尚硅谷大数据项目《在线教育之实时数仓》_哔哩哔哩_bilibili 目录 第06章 数据仓库环境准备 P006 P007 P008 P009 P010 P011 P012 P013 P014 第06章 数据仓库环境准备 P006 P007 P008 http://node001:16010/master-status [atguigunode001 ~]$ …

Qt --- Day03

<?xml version"1.0" encoding"UTF-8"?> <ui version"4.0"><class>Widget</class><widget class"QWidget" name"Widget"><property name"geometry"><rect><x>0…

Java 调用 GitLabAPI 获取仓库里的文件件 提交记录

1. 需求 项目组 需要做统计&#xff0c;获取每个开发人员的代码提交次数&#xff0c;提交时间&#xff0c;提交人等等&#xff0c;因代码在GitLab上管理&#xff0c;所以需要调用GitLabAPI来获取。 2. 开发 API官网&#xff1a;https://docs.gitlab.com/ee/api/ 2.1 创建自…

3D科研绘图与学术图表绘制:从入门到精通

&#x1f482; 个人网站:【工具大全】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 3D科研绘图和学术图表绘…

interview6-jvm篇

JVM(Java Virtual Machine)Java程序的运行环境&#xff08;java二进制字节码的运行环境&#xff09; 在JVM中共有四大部分&#xff0c;分别是ClassLoader&#xff08;类加载器&#xff09;、Runtime DataArea&#xff08;运行时数据区&#xff0c;内存分区&#xff09;、Execu…

分类预测 | MATLAB实现WOA-CNN-BiGRU-Attention数据分类预测(SE注意力机制)

分类预测 | MATLAB实现WOA-CNN-BiGRU-Attention数据分类预测&#xff08;SE注意力机制&#xff09; 目录 分类预测 | MATLAB实现WOA-CNN-BiGRU-Attention数据分类预测&#xff08;SE注意力机制&#xff09;分类效果基本描述模型描述程序设计参考资料 分类效果 基本描述 1.MATLA…

【Synapse数据集】Synapse数据集介绍和预处理,数据集下载网盘链接

【Segment Anything Model】做分割的专栏链接&#xff0c;欢迎来学习。 【博主微信】cvxiaoyixiao 本专栏为公开数据集的介绍和预处理&#xff0c;持续更新中。 文章目录 1️⃣Synapse数据集介绍文件结构源文件样图文件内容 2️⃣Synapse数据集百度网盘下载链接官网下载登录下…

TCPIP状态转换

一个TCP连接在其生命周期中经过了一系列的状态跃迁。一个TCP连接的状态包括&#xff1a; LISTEN &#xff1a;表示正在等待来自任何远程TCP和端口的连接请求&#xff0c;调用listen后套接字出于监听状态SYN_SENT : 表示在发送了连接请求后&#xff0c;正在等待匹配的连接请求…

【Linux is not Unix】Linux前言

目录 二战军工的产物——第一台现代电子数字计算机ENIAC&#xff08;埃尼阿克&#xff09; Unix Linux Linux企业应用现状 如今计算机已经应用在我们生活的各个层面&#xff0c;像我们日常使用的笔记本是计算机的一类&#xff0c;可以解决我们生活中遇到的很多问题&#xff…

嵌入式MCU都有什么高级用法?

嵌入式MCU都有什么高级用法&#xff1f; 您举的几个例子&#xff0c;确实是MCU外设的一些高端玩法。只是不知道您是否想过&#xff0c;既然这些机制是被 人设计出来的&#xff0c;那它就是种标准用法。从微控制器的发展历程来看&#xff0c;许多硬件机制都是有了实际 需求后才…

字节8年经验之谈 —— 10大自动化测试框架总结!

软件行业正迈向自主、快速、高效的未来。为了跟上这个高速前进的生态系统的步伐&#xff0c;必须加快应用程序的交付时间&#xff0c;但不能以牺牲质量为代价。快速实现质量是必要的&#xff0c;因此质量保证得到了很多关注。为了满足卓越的质量和更快的上市时间的需求&#xf…

大屏大概是怎么个开发法(前端)

写在前面&#xff0c;博主是个在北京打拼的码农&#xff0c;从事前端工作5年了&#xff0c;做过十多个大大小小不同类型的项目&#xff0c;最近心血来潮在这儿写点东西&#xff0c;欢迎大家多多指教。 对于文章中出现的任何错误请大家批评指出&#xff0c;一定及时修改。有任何…

产品经理如何科学的进行需求调研?

导语&#xff1a;作为产品经理&#xff0c;需求调研是开展工作的重要环节之一。科学、有效地进行需求调研不仅可以帮助产品经理更好地了解用户需求&#xff0c;还能指导产品设计和功能开发&#xff0c;提升产品的竞争力。本文将介绍几种科学的方法和技巧&#xff0c;帮助产品经…

Powershell 实现禁用密码复杂性,空密码

前提条件 开启wmi,配置网卡,参考 实现一键关闭密码策略和远程空密码登录 最近客户需要的一个无法理解的需求,需要远程登录不输入密码,安全性没有了还要实现,没办法客户是上帝,客户怎么开心怎么来都行,安全性问题告知不重视,实际环境不建议一下操作,只要联网你被黑的哦…

L1-033 出生年 c++解法

一、题目再现 以上是新浪微博中一奇葩贴&#xff1a;“我出生于1988年&#xff0c;直到25岁才遇到4个数字都不相同的年份。”也就是说&#xff0c;直到2013年才达到“4个数字都不相同”的要求。本题请你根据要求&#xff0c;自动填充“我出生于y年&#xff0c;直到x岁才遇到n个…

增强for循环和一般for循环的对比使用

文章底部有个人公众号&#xff1a;热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。个人B站主页热爱技术的小郑 &#xff0c;视频内容主要是对应文章的视频讲解形式。有兴趣的可以关注一下。为何分享&#xff1f; 踩过的坑没必要让别人在再踩&#xff0c;自己复盘…

Vue watch实时计算器

watch实时计算器 可以自己选择、-、*、 参考代码 <!DOCTYPE html> <html> <head><meta charset"utf-8"><title></title><script src"https://cdn.bootcdn.net/ajax/libs/vue/2.7.10/vue.js"></script>…