标题:猜数字小游戏

作者:@Ggggggtm

寄语:与其忙着诉苦,不如低头赶路,奋路前行,终将遇到一番好风景

文章目录

一、三子棋小游戏的简单介绍

二、三子棋的思路及代码实现

1、打印游戏菜单

2、选择是否开始游戏

3、创建并且初始化棋盘

3.1、创建棋盘

3.2、初始化棋盘

4、打印格式化棋盘

5、玩家下棋

6、电脑下棋

7、判断是否玩家或者电脑赢

三、整合三子棋游戏代码

game.h

game.c

test.c

一、三子棋小游戏的简单介绍

要说大家都很熟悉的一个小游戏,三子棋算是其中一个了。相信大家都玩过三子棋小游戏,在这里我还是给大家介绍简单的游戏规则:

  1. 一次只能下一个棋子;
  2. 玩家下完棋子后,电脑下棋子;
  3. 不能再重复的位置上下棋子;
  4. 不管是玩家还是电脑,谁先达到三个棋子连接在一起的时候获胜;
  5. 三个棋子的连接包括:横三个、竖三个、斜三个。

当然,熟悉规则后我们会有一个大概的了解了,那么三子棋游戏的思路及代码到底是怎么实现的呢?接下来我给大家一一详细解析一下。

二、三子棋的思路及代码实现

1、打印游戏菜单

我们实现游戏之前,应该想到先给玩家提供一个菜单。这个菜单的功能就是帮助用户选择是否要开始游戏。菜单的实现我们可以单独自定义一个函数,我们用到菜单的时候调用此函数即可。

void meau()
{printf("*********************\n");printf("*****  1.play   *****\n");printf("*****  0.exit   *****\n");printf("*********************\n");
}

通过上面的代码我们可以很容易看出,选择‘1’是开始游戏,选择‘0’是退出游戏。

2、选择是否开始游戏

提到选择,我们这里可以联想到switch-case语句。由上面的菜单可知:选择‘1’是开始游戏,选择‘0’是退出游戏。当然我们不能排除不小心输入错误,所以这里我们还要考虑到选择错误的情况下要给出相应的提示。当选择错误时,给出提示且重新选择,同时再把菜单打印出,提供玩家选择。那怎么实现重新选择呢?我们这里其实可以使用do-while()语句。我们先来看一下代码的实现。

void test()
{int input = 0;do{meau();printf("请选择是否要开始游戏:");scanf("%d", &input);switch (input){case 1:game();  //开始三子棋游戏break;case 0:printf("退出游戏\n");break;default:printf("选择错误\n");}} while (input);
}

我们看上面的代码是放在的一个自定义的test()函数中,我们只要再主函数中调用一下即可。上面的代码很巧妙,当我们输入‘1’的时候,开始游戏。当游戏结束时,循环继续。其实是实现了一个玩完一局可以反复玩的效果。当我们输入‘0’的时候,循环结束,就是相当于结束游戏了。当我们输入错误时,循环仍然继续,再次打印菜单提供我们选择。这也是 do-while()语句的巧妙之处。

3、创建并且初始化棋盘

3.1、创建棋盘

创建棋盘很简单,我们这里需要的是一个二维数组。那么棋盘的大小呢?我们首先想到的是3x3的棋盘——char board[3][3]。那要是想改成5x5的棋盘呢?我们是把整个工程中的board[3][3]改成board[5][5]吗?这样太麻烦了,当然也不现实。这里我们可以引用#define 定义的标识符常量。这时候我们可以写成char board[ROW][COL]。改变大小的时候只需要改变#define 定义的标识符常量的值就行。

#define ROW 3
#define COL 3
char board[ROW][COL];

3.2、初始化棋盘

我们这里将初始化棋盘放在一个init_board(board, ROW, COL)函数中。为什么要初始化棋盘呢?当我们不初始化的时候,期盼中的每个位置放的是‘\0’。而我们想要得到的棋盘是一个空棋盘,这样的话更加有利于玩家操作下棋。空棋盘看起开也比较整洁。我们看一下初始化代码的实现。

void init_board(char board[ROW][COL], int row, int col)
{int i = 0;for (i = 0; i < row; i++){int j = 0;for (j = 0; j < col; j++){board[i][j] = ' ';}}
}

4、打印格式化棋盘

当我们初始化完棋盘后,我们就应该把棋盘打印出来让玩家看到并且选择要下棋的位置。这里我们先来看打印棋盘。打印出来的棋盘应该格式鲜明,每个位置独立分开,而不是一片空白。我们先看一下棋盘的格式:

3x3

5x5

通过上面的两个图,我们就可以建立一个大概的打印棋盘的思路了。其实我们可以把”_ _ _|_ _ _|_ _ _“看作我们要打印的第一行内容,但是要注意最后一行是”      |      |      “。打印的思路有了,把打印棋盘内容放在print_board(board, ROW, COL)函数中。我们来看一下代码的实现。

void print_board(char board[ROW][COL], int row, int col)
{int i = 0;for (i = 0; i < row; i++){int j = 0;for (j = 0; j < col; j++){printf(" %c ", board[i][j]);if (j < col - 1)printf("|");}printf("\n");if (i < row - 1){for (j = 0; j < row; j++){printf("---");if (j < col - 1)printf("|");}}printf("\n");}
}

5、玩家下棋

当我们把棋盘打印出来后,这时候就要提示玩家选择下棋了。我们采用的是坐标的形式让玩家进行选择下棋位置。这里要有几点要注意的事项

  1. 玩家选择的位置就是所看到的位置,跟代码中的数组下标访问还是有所差距的;
  2. 玩家输入的坐标后,要判断该坐标是否已经被占用,也就是不能重复在同一个位置上下棋;
  3. 玩家输入坐标后,要判断坐标是否合法,不合法的话要给出提示,并且重新输入。
  4. 当玩家输入的坐标合法后,电脑玩家进行下棋;
  5. 玩家下完棋后要再次调用打印棋盘函数print_board(board, ROW, COL),使玩家更方便的观看已经下棋的位置;
  6. 我们把玩家下的坐标用 ‘ * ’ 来代表。

我们将玩家下棋内容放在player_move(board, ROW, COL)函数中,我们来看一下玩家下棋的代码实现。

void player_move(char board[ROW][COL], int row, int col)
{int x = 0;int y = 0;printf("请选择你要下棋的坐标:");while (1){scanf("%d %d", &x, &y);if ((x >= 1 && x <= row) && (y >= 1 && y <= col)){if (board[x - 1][y - 1] == ' '){board[x - 1][y - 1] = '*';break;}else{printf("该坐标已经被占有,请重新选择:");}}else{printf("该坐标非法,请输入合法坐标:");}}
}

6、电脑下棋

玩家下棋后,就该电脑下棋了。电脑下棋其实就是随机下棋。当然电脑下棋也是不能重复在同一个位置上下棋,且是合法的。提到随机,我们就因该联想到rand()函数srand()函数,在这里我就不详细介绍这两个函数的使用方法了,在之前的猜数字小游戏中有详细的解释,可以去了解一下。电脑下完棋后也要调用打印棋盘函数print_board(board, ROW, COL),使玩家更方便的观看已经下棋的位置。我们把玩家下的坐标用 ‘ # ’ 来代表。把电脑下棋代码放在computer_move(board, ROW, COL)函数中。那我们来看一下电脑下棋的代码实现。

void computer_move(char board[ROW][COL], int row, int col)
{printf("电脑下棋:\n");while (1){int x = rand() % 3;int y = rand() % 3;if (board[x][y] == ' '){board[x][y] = '#';break;}}
}

7、判断是否玩家或者电脑赢

其实,每当玩家或者电脑下完一次棋后,我们都需要判断一下是否有赢的。如果没有赢的,我们就进行反复下棋。如果有赢的,我们就停止下棋,并输出”玩家赢“或者”电脑赢“。我们同时还要想到是否为平局,如果为平局的话,就输出”平局“。判断输赢的函数我们定义成char is_win(board[ROW][COL], ROW, COL)

 判断输赢函数返回值注意:

  1. 我们这个判断输赢的函数是有返回值的,返回类型为char;
  2. 当返回 ‘*’ 时,玩家胜利;
  3. 当返回 ‘#’ 时,电脑胜利;
  4. 当返回 ‘Q’ 时,平局;
  5. 当返回 ‘C’ 时,游戏继续。

当我们在编写输赢函数时,我们要注意不能数组越界访问。我们先来看一下判断输赢函数的实现。

char is_win(char board[ROW][COL], int row, int col)
{int i = 0;//判断行for (i = 0; i < row; i++){int j = 0;for (j = 0; j < col; j++){if (j == 0){if ((board[i][0] == board[i][1]) && (board[i][1] == board[i][2]) && (board[i][1] != ' '))return board[i][0];}else if (j == 1){if ((board[i][0] == board[i][1]) && (board[i][1] == board[i][2]) && (board[i][1] != ' ')|| (board[i][1] == board[i][2]) && (board[i][2] == board[i][23]) && (board[i][1] != ' '))return board[i][1];}else if (j == col - 1){if ((board[i][j] == board[i][j - 1]) && (board[i][j - 1] == board[i][j - 2]) && (board[i][j] != ' '))return board[i][j];}else if (j == col - 2){if ((board[i][j] == board[i][j - 1]) && (board[i][j - 1] == board[i][j - 2]) && (board[i][j] != ' ')|| (board[i][j] == board[i][j - 1]) && (board[i][j] == board[i][j + 1]) && (board[i][j] != ' '))return board[i][j];}else{if ((board[i][j] == board[i][j - 1]) && (board[i][j - 1] == board[i][j - 2]) && (board[i][j] != ' ')|| (board[i][j] == board[i][j - 1]) && (board[i][j] == board[i][j + 1]) && (board[i][j] != ' ')|| (board[i][j] == board[i][j + 1]) && (board[i][j + 1] == board[i][j + 2]) && (board[i][j] != ' '))return board[i][j];}}}//判断列int j = 0;for (j = 0; j < col; j++){for (i = 0; i < row; i++){if (i == 0){if ((board[0][j] == board[1][j]) && (board[1][j] == board[2][j]) && (board[1][j] != ' '))return board[0][j];}else if (i == 1){if ((board[0][j] == board[1][j]) && (board[1][j] == board[2][j]) && (board[1][j] != ' ')|| (board[1][j] == board[2][j]) && (board[2][j] == board[3][j]) && (board[1][j] != ' '))return board[1][j];}else if (i == row - 1){if ((board[i][j] == board[i - 1][j]) && (board[i - 1][j] == board[i - 2][j]) && (board[i][j] != ' '))return board[i][j];}else if (i == row - 2){if ((board[i][j] == board[i - 1][j]) && (board[i - 1][j] == board[i - 2][j]) && (board[i][j] != ' ')|| (board[i][j] == board[i - 1][j]) && (board[i - 1][j] == board[i + 1][j]) && (board[i][j] != ' '))return board[i][j];}else{if ((board[i][j] == board[i + 1][j]) && (board[i + 1][j] == board[i + 2][j]) && (board[i][j] != ' ')|| (board[i][j] == board[i - 1][j]) && (board[i - 1][j] == board[i + 1][j]) && (board[i][j] != ' ')|| (board[i][j] == board[i - 1][j]) && (board[i - 1][j] == board[i - 2][j]) && (board[i][j] != ' '))return board[i][j];}}}//判断主对角线for (i = 0; i < row; i++){for (j = 0; j < col; j++){if (i<row-2&&j<col-2){if((board[i][j] == board[i + 1][j + 1] && board[i][j] == board[i + 2][j + 2] && board[i][j] != ' '))return board[i][j];}if (i>0&&i<row-1&&j>0&&j<col-1){if ((board[i][j] == board[i + 1][j + 1] && board[i][j] == board[i - 1][j - 1] && board[i][j] != ' '))return board[i][j];}if (i >1&&j>1){if ((board[i][j] == board[i - 1][j - 1] && board[i][j] == board[i - 2][j - 2] && board[i][j] != ' '))return board[i][j];}}}//判断次对角线for (i = 0; i < row; i++){for (j = 0; j < col; j++){if (i<row-2&&j>1){if ((board[i][j] == board[i + 1][j - 1] && board[i][j] == board[i + 2][j - 2] && board[i][j] != ' '))return board[i][j];}if (j>0&&j<col-1&&i>0&&i<row-1){if ((board[i][j] == board[i - 1][j + 1] && board[i][j] == board[i + 1][j - 1] && board[i][j] != ' '))return board[i][j];}if (i>1&&j<col-2){if ((board[i][j] == board[i - 1][j + 1] && board[i][j] == board[i - 2][j + 2] && board[i][j] != ' '))return board[i][j];}}}//判断平局int flag = 0;for (i = 0; i < row; i++){for (j = 0; j < col; j++){if (board[i][j] == ' ')flag = 1;}}if (flag == 0)return 'Q';return 'C';
}

我们这里再看一下反复调用玩家下棋player_move(board, ROW, COL)函数和电脑下棋computer_move(board, ROW, COL)函数和打印棋盘函数print_board(board, ROW, COL)函数到终止循环的代码。反复调用这几个函数也就是实现了反复下棋的效果。如果没有赢的,我们就进行反复下棋。如果有赢的或者平局,我们就停止下棋。我们来看代码实现。

while (1){//玩家下棋player_move(board, ROW, COL);print_board(board, ROW, COL);//判断是否结束 // * 玩家胜利// # 电脑胜利// Q 平局// C 继续游戏ret=is_win(board, ROW, COL);if (ret != 'C')break;//电脑下棋computer_move(board, ROW, COL);print_board(board, ROW, COL);ret = is_win(board, ROW, COL);if (ret != 'C')break;}

综上就是我整个三子棋游戏实现的思路了。总体来说还是比较简单的。我们把上面的代码整合一下来看。

三、整合三子棋游戏代码

由于代码量相对来说有一点多,所以我们就将函数的声明的定义分开,这样有利于提高代码的可读性,同时会保持一个良好的思路,且方便编写代码。

我们将函数的声明放在单独的一个game.h的头文件,函数的实现放在一个单独的game.c源文件,函数的主方法及调用放在另一个单独的test.c源文件。

game.h

#include<stdio.h>//数组行和列的大小
#define ROW 3
#define COL 3//初始化数组
void init_board(char board[ROW][COL],int row,int col);
//打印格式化数组
void print_board(char board[ROW][COL], int row, int col);
//玩家下棋 *
void player_move(char board[ROW][COL], int row, int col);
//电脑下棋 #
void computer_move(char board[ROW][COL], int row, int col);
//判断输赢或者平局
char is_win(char board[ROW][COL], int row, int col);

game.c

#include "game.h"void init_board(char board[ROW][COL], int row, int col)
{int i = 0;for (i = 0; i < row; i++){int j = 0;for (j = 0; j < col; j++){board[i][j] = ' ';}}
}void print_board(char board[ROW][COL], int row, int col)
{int i = 0;for (i = 0; i < row; i++){int j = 0;for (j = 0; j < col; j++){printf(" %c ", board[i][j]);if (j < col - 1)printf("|");}printf("\n");if (i < row - 1){for (j = 0; j < row; j++){printf("---");if (j < col - 1)printf("|");}}printf("\n");}
}void player_move(char board[ROW][COL], int row, int col)
{int x = 0;int y = 0;printf("请选择你要下棋的坐标:");while (1){scanf("%d %d", &x, &y);if ((x >= 1 && x <= row) && (y >= 1 && y <= col)){if (board[x - 1][y - 1] == ' '){board[x - 1][y - 1] = '*';break;}else{printf("该坐标已经被占有,请重新选择:");}}else{printf("该坐标非法,请输入合法坐标:");}}
}void computer_move(char board[ROW][COL], int row, int col)
{printf("电脑下棋:\n");while (1){int x = rand() % 3;int y = rand() % 3;if (board[x][y] == ' '){board[x][y] = '#';break;}}
}char is_win(char board[ROW][COL], int row, int col)
{int i = 0;//判断行for (i = 0; i < row; i++){int j = 0;for (j = 0; j < col; j++){if (j == 0){if ((board[i][0] == board[i][1]) && (board[i][1] == board[i][2]) && (board[i][1] != ' '))return board[i][0];}else if (j == 1){if ((board[i][0] == board[i][1]) && (board[i][1] == board[i][2]) && (board[i][1] != ' ')|| (board[i][1] == board[i][2]) && (board[i][2] == board[i][23]) && (board[i][1] != ' '))return board[i][1];}else if (j == col - 1){if ((board[i][j] == board[i][j - 1]) && (board[i][j - 1] == board[i][j - 2]) && (board[i][j] != ' '))return board[i][j];}else if (j == col - 2){if ((board[i][j] == board[i][j - 1]) && (board[i][j - 1] == board[i][j - 2]) && (board[i][j] != ' ')|| (board[i][j] == board[i][j - 1]) && (board[i][j] == board[i][j + 1]) && (board[i][j] != ' '))return board[i][j];}else{if ((board[i][j] == board[i][j - 1]) && (board[i][j - 1] == board[i][j - 2]) && (board[i][j] != ' ')|| (board[i][j] == board[i][j - 1]) && (board[i][j] == board[i][j + 1]) && (board[i][j] != ' ')|| (board[i][j] == board[i][j + 1]) && (board[i][j + 1] == board[i][j + 2]) && (board[i][j] != ' '))return board[i][j];}}}//判断列int j = 0;for (j = 0; j < col; j++){for (i = 0; i < row; i++){if (i == 0){if ((board[0][j] == board[1][j]) && (board[1][j] == board[2][j]) && (board[1][j] != ' '))return board[0][j];}else if (i == 1){if ((board[0][j] == board[1][j]) && (board[1][j] == board[2][j]) && (board[1][j] != ' ')|| (board[1][j] == board[2][j]) && (board[2][j] == board[3][j]) && (board[1][j] != ' '))return board[1][j];}else if (i == row - 1){if ((board[i][j] == board[i - 1][j]) && (board[i - 1][j] == board[i - 2][j]) && (board[i][j] != ' '))return board[i][j];}else if (i == row - 2){if ((board[i][j] == board[i - 1][j]) && (board[i - 1][j] == board[i - 2][j]) && (board[i][j] != ' ')|| (board[i][j] == board[i - 1][j]) && (board[i - 1][j] == board[i + 1][j]) && (board[i][j] != ' '))return board[i][j];}else{if ((board[i][j] == board[i + 1][j]) && (board[i + 1][j] == board[i + 2][j]) && (board[i][j] != ' ')|| (board[i][j] == board[i - 1][j]) && (board[i - 1][j] == board[i + 1][j]) && (board[i][j] != ' ')|| (board[i][j] == board[i - 1][j]) && (board[i - 1][j] == board[i - 2][j]) && (board[i][j] != ' '))return board[i][j];}}}//判断主对角线for (i = 0; i < row; i++){for (j = 0; j < col; j++){if (i<row-2&&j<col-2){if((board[i][j] == board[i + 1][j + 1] && board[i][j] == board[i + 2][j + 2] && board[i][j] != ' '))return board[i][j];}if (i>0&&i<row-1&&j>0&&j<col-1){if ((board[i][j] == board[i + 1][j + 1] && board[i][j] == board[i - 1][j - 1] && board[i][j] != ' '))return board[i][j];}if (i >1&&j>1){if ((board[i][j] == board[i - 1][j - 1] && board[i][j] == board[i - 2][j - 2] && board[i][j] != ' '))return board[i][j];}}}//判断次对角线for (i = 0; i < row; i++){for (j = 0; j < col; j++){if (i<row-2&&j>1){if ((board[i][j] == board[i + 1][j - 1] && board[i][j] == board[i + 2][j - 2] && board[i][j] != ' '))return board[i][j];}if (j>0&&j<col-1&&i>0&&i<row-1){if ((board[i][j] == board[i - 1][j + 1] && board[i][j] == board[i + 1][j - 1] && board[i][j] != ' '))return board[i][j];}if (i>1&&j<col-2){if ((board[i][j] == board[i - 1][j + 1] && board[i][j] == board[i - 2][j + 2] && board[i][j] != ' '))return board[i][j];}}}//判断平局int flag = 0;for (i = 0; i < row; i++){for (j = 0; j < col; j++){if (board[i][j] == ' ')flag = 1;}}if (flag == 0)return 'Q';return 'C';
}

test.c

#include "game.h"
void game()
{char ret = 0;srand(time(NULL));char board[ROW][COL];//初始化数组 全为空格init_board(board, ROW, COL);//打印格式化数组print_board(board, ROW, COL);while (1){//玩家下棋player_move(board, ROW, COL);print_board(board, ROW, COL);//判断是否结束 // * 玩家胜利// # 电脑胜利// Q 平局// C 继续游戏ret=is_win(board, ROW, COL);if (ret != 'C')break;//电脑下棋computer_move(board, ROW, COL);print_board(board, ROW, COL);ret = is_win(board, ROW, COL);if (ret != 'C')break;}if (ret == '*')printf("恭喜玩家取得胜利!\n");else if (ret == '#')printf("电脑取得胜利。\n");else if (ret == 'Q')printf("平局了哦。\n");
}
void meau()
{printf("*********************\n");printf("*****  1.play   *****\n");printf("*****  0.exit   *****\n");printf("*********************\n");
}
void test()
{int input = 0;do{meau();printf("请选择是否要开始游戏:");scanf("%d", &input);switch (input){case 1:game();break;case 0:printf("退出游戏\n");break;default:printf("选择错误\n");}} while (input);
}
int main()
{test();return 0;
}

希望这篇文章能给你带来一个很好的理解,对你有所帮助,感谢阅读。

后续会一直更新的哦。

三子棋小游戏思路及代码实现的详解相关推荐

  1. 【三子棋小游戏的设计思路以及代码实现】

    目录 一,设计思路 二, 代码实现 首先,欢迎各位点进我的文章.话不多说,正如标题一样,接下来,我来给大家讲解三子棋小游戏的设计思路以及代码实现.            一,设计思路 一. 大家应该都 ...

  2. C语言实现三子棋小游戏(编程思路以及代码详解)

    目录 前言 一.三子棋游戏的实现逻辑 二.创建菜单并控制游戏开始或游戏结束 三.创建棋盘并且初始化棋盘 四.打印棋盘并验证打印棋盘和初始化棋盘模块的实现 五.玩家下棋 六.电脑下棋 六.输赢判断 七. ...

  3. 如何制作三子棋小游戏

    首先,一个游戏的制作,必须由大化小,分步完成. 当我们想要制作三子棋小游戏时,必须先搞清楚这个小游戏的逻辑和原理. 三子棋是黑白棋的一种.三子棋是一种民间传统游戏,又叫九宫棋.圈圈叉叉.一条龙.井字棋 ...

  4. 呆头呆脑的电脑----三子棋小游戏(C语言版)

    目录 1.需求分析 2.程序架构 3.代码实现(分函数呈现) (1)主函数代码实现 分析: 异常处理: (2)菜单函数的实现 分析: (3)游戏函数的实现 分析: (4)棋盘的初始化 分析: (5)棋 ...

  5. 三子棋小游戏带你走进编程世界(c语言版)

    目录 一.游戏实现的整体思路 二.实现游戏大体框架 二.游戏函数的实现 1.初始化键盘 2.打印棋盘 3.下棋及胜负判断 (1)玩家下棋 (2)电脑下棋 (3)判断输赢 三.结语及源码 三子棋想必大家 ...

  6. 三子棋小游戏(超详细)

    目录 一.实现三子棋游戏的基本逻辑 二.具体的函数实现 1. 菜单函数 2. 棋盘的实现 2.1 棋盘的初始化 2.2 棋盘的打印 3. 玩家下棋 4. 电脑下棋 5.判断棋盘状态 三. 三个文件 3 ...

  7. 【牛客刷题】上手用C语言写一个三子棋小游戏超详解哦(电脑优化)

    作者:[南航科院小张 南航科院小张的博客 专栏:从c语言的入门到进阶 学习知识不只是要懂,还要会用:想要找到好的工作,这里给大家介绍一件可以斩获诸多大厂offer的利器–牛客网 点击免费注册和我一起开 ...

  8. C语言小项目--三子棋小游戏

    学了这么长时间的C语言,你是否觉得没有一个没写过稍微长点的代码显得很没有成就感!不怕,今天带你做一个小游戏,领略一下写C和小游戏的快乐.写完记得给自己一个鼓励哦! 一.三子棋小游戏 想必大家都玩过三子 ...

  9. vs2010c语言小游戏,用C语言写一个三子棋小游戏(用VS2010实现,加强版)

    前几天写了一个三子棋小游戏,但是比较简单,因为以前写的游戏棋盘只能是3x3那么大.今天对那个程序做了两点改进: 1.现在可以实现在任意大小的棋盘上下棋了. 2.因为棋盘可能变大,为了玩家方便确定坐标, ...

最新文章

  1. 网络服务之DNS基本应用
  2. python爬虫工资-Python爬虫实战-数据可视化
  3. stm32的can总线理解及应用——程序对应stm32f103系列
  4. Java集合—ArrayList底层原理
  5. 【SQLAlchemy】PostgreSQL的自增长主键定义
  6. Salsify:高流畅度的实时视频传输新方式
  7. 经济学原理 下载 曼昆_2021南开经济学考研全年规划
  8. 9名程序员被抓!这次我并不同情他们!
  9. Python 列表 count( )方法
  10. 盘一盘 Spring 核心技术之依赖注入 | 原力计划
  11. uni-app之下拉刷新与 上拉加载
  12. 2021中国科学院文献情报中心期刊分区表 计算机
  13. 2022“杭电杯”中国大学生算法设计超级联赛(5)杭电多校第五场
  14. Android仿自如客APP裸眼3D效果
  15. 【Visual C++】游戏开发笔记之九 游戏地图制作(一)平面地图贴图
  16. Adaptation---多屏幕多分辨率的支持和一些概念
  17. AcWing 138. 兔子与兔子
  18. 【人工智能】人脸识别系统【实验报告与全部代码】(QDU)
  19. 签到网站js逆向与python实现
  20. 游戏的衰落,更迭的结果

热门文章

  1. 调整的R方_如何选择回归模型
  2. 2022-2028全球瓶盖用HDPE原料行业调研及趋势分析报告
  3. JavaScript映射
  4. Linux命令之修改文件所属组chgrp
  5. 带大家了解下日式皮肤管理和一般美容的区别
  6. 机试算法讲解: 第10题 让我们来查询学生的信息
  7. DDD 实战 (2):看看代码结构长啥样(值得收藏)
  8. 国外程序员整理的机器学习资源大全
  9. ThinkPHP5 框架缺陷导致远程命令执行
  10. 北大深圳研究生院智慧科学计划田永鸿/余珂联合博士后招聘启事