目录

前言 

小项目的介绍

主体部分

 函数的实现部分

头文件以及函数的声名部分

根据需要进行扩展

 运行结果展示

扩展后结果展示

 结束语 


前言 

        大家好,今天给大家带来的是一个C语言的练手的小项目,很多小伙伴在学完C语言一些知识点之后,不知道该如何去验证自己是否真的理解这个知识点,是否可以去运用这个知识点做一些想要进行完成的操作。到了这个时候就应该去做一些小的项目去感受一下自己的掌握的程度,下面就来介绍一下今天给大家带来的小项目。

小项目的介绍

        这个小项目是运用C/C++实现一个我们大家应该都玩过的一个小的游戏—三子棋(可以进行扩展到N子棋实现玩家与电脑进行下棋),这个小项目分为三个部分,第一部分为代码的主要实现部分,第二部分是代码的具体函数部分,第三部分是对函数以及头文件的一些声名。 其中运用到了循环,函数以及一些逻辑方面的 操作,可以很好的使我们对这块的知识点进行巩固和练习,提高我们的逻辑思维,下面我们来看一看这个小项目的具体实现:

主体部分

#include"game.h"int main(){//初始化随机值srand((unsigned int)time(NULL));int input = 0;do{menu();cout <> input;switch (input){case 1://三子棋实现的函数game();break;case 0:cout << "退出成功\n";break;default:cout << "该选项不存在,请重新输入\n";break;}} while (input);return 0;}

 函数的实现部分

#include"game.h"//菜单函数的实现void menu(){cout << "*****************************\n";cout << "*******1.play0.exit********\n";cout << "*****************************\n";}void InitBoard(char board[][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 displayBoard(char board[][COL], int row, int col){int i = 0, j = 0;for (i = 0; i < row; i++){//打印行for (j = 0; j < col; j++){//打印列cout <<" "<<board[i][j]<<" ";//被限制的打印条件if (j < col - 1){cout << "|";}}cout << "\n";//打印分割线//如果我该行的个数是小于总行数减一的话if (i < row - 1){for (j = 0; j < col; j++){cout << "---";//被限制的打印条件if (j < col - 1){cout << "|";}}}cout << "\n";}}void PlayerMove(char board[][COL], int row, int col){int x = 0, y = 0;cout << "玩家下棋\n";while (1){cout <> x >> y;if (x >= 1 && x = 1 && y <= col){if (board[x - 1][y - 1] == ' '){board[x - 1][y - 1] = '*';break;}else{cout << "坐标被占用,请重新下棋\n";}}else{cout << "输入有误,请重新输入\n";}}}void ComeputerMove(char board[][COL], int row, int col){cout << "电脑下棋\n";int x = 0, y = 0;x = rand() % row;//范围0—2y = rand() % col;//范围0—2while (1){if (board[x][y] == ' '){board[x][y] = '#';break;}else{x = rand() % row;//范围0—2y = rand() % col;//范围0—2}}}char IsWin(char board[][COL], int row, int col){//行int i = 0, j = 0, count = 1, x = 0;char a = 0;for (i = 0; i < row; i++){x = 0, count = 1;for (j = 0; j < col; j++){if (board[i][x] == board[i][x + 1] && x < col&&board[i][x]!=' '){a = board[i][x];count++;x++;}if (count == col){return a;}}}//列i = 0, j = 0, count = 1, x = 0;for (i = 0; i < col; i++){count = 1, x = 0;for (j = 0; j < row; j++){if (board[x][i] == board[x + 1][i] && x < row&&board[x][i] != ' '){a = board[x][i];count++;x++;}if (count == row){return a;}}}//对角线i = 0, j = 0, count = 0, x = 0;for (i = 0; i < row; i++){for (j = 0; j < col; j++){x = board[0][0];if (i == j && board[i][j] == x && x != ' '){a = board[i][j];count++;}}}if (count == row){return a;}i = 0, j = 0, count = 1;char y = 0, z = 0;for (i = 0; i < row; i++){for (j = 0; j < col; j++){y = board[0][row-1];if (i == j && board[i][j] == y && y != ' '&& board[row - 1][0] == board[i][j] && board[row-1][0]==y){z = board[i][j];count++;}}}if (board[row - 1][0] == board[0][row - 1]){count++;}if (count == row){return z;}//到这里的话就是前面的情况都不符合就是说没有人赢//此时判断平局或者继续i = 0, j = 0, count = 0, x = 0;for (i = 0; i < row; i++){for (j = 0; j < col; j++){if (board[i][j] == ' '){return 0;//未满}}}return 1;//已满}void game(){//将二维数组中的元素先初始化为0char board[ROW][COL] = { 0 };char ret = 0;//初始化棋盘InitBoard(board, ROW, COL);//打印棋盘displayBoard(board, ROW, COL);//下棋while (1){//玩家下棋 PlayerMove(board, ROW, COL);displayBoard(board, ROW, COL);//每次玩家下完棋之后都要进行判断输赢ret = IsWin(board, ROW, COL);if (ret != 0){break;}//电脑下棋ComeputerMove(board, ROW, COL);displayBoard(board, ROW, COL);//每次电脑下完棋之后也都要进行判断输赢ret = IsWin(board, ROW, COL);if (ret != 0){break;}}if (ret == '*'){cout << "恭喜您,您赢了!\n";}else if (ret == '#'){cout << "很遗憾,您输给了电脑\n";}else{cout << "平局!\n";}}

头文件以及函数的声名部分

#pragma once#include#include#include#include#define ROW 3#define COL 3using namespace std;//菜单的声名void menu();//初始化棋盘void InitBoard(char board[][COL], int row, int col);//陈列棋盘void displayBoard(char board[][COL], int row, int col);//玩家下棋void PlayerMove(char board[][COL], int row, int col);//电脑下棋//找没有下棋的随机下棋void ComeputerMove(char board[][COL], int row, int col);//判断输赢char IsWin(char board[][COL], int row, int col);//游戏界面void game();

根据需要进行扩展

#define ROW 3#define COL 3//只需在宏定义中对ROW(行)以及COL(列数)进行修改即可

 运行结果展示

 

 

扩展后结果展示

#define ROW 5#define COL 5//扩展到5子棋

 

 

 

 

 

 

 结束语 

        到这里这个小项目就结束了,大家可以将代码自己打打运行试一试,如果有什么不理解的地方,大家可以在评论区留言或者可以直接私信我,感谢大家的支持!