C语言练手小项目(巩固加深知识点理解)

阅读: 评论:0

C语言练手小项目(巩固加深知识点理解)

C语言练手小项目(巩固加深知识点理解)

目录

前言 

小项目的介绍

主体部分

 函数的实现部分

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

根据需要进行扩展

 运行结果展示

扩展后结果展示

 结束语 


前言 

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

小项目的介绍

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

主体部分

#include"game.h"int main()
{//初始化随机值srand((unsigned int)time(NULL));int input = 0;do{menu();cout << "请选择数字:n";cin >> 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.play  0.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 << "请输入坐标n";cin >> x >> y;if (x >= 1 && x <= row && y >= 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<iostream>
#include<stdlib.h>
#include<stdio.h>
#include<time.h>
#define ROW 3
#define COL 3
using 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子棋

 

 

 结束语 

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

本文发布于:2024-02-02 18:15:35,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170686952245568.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:知识点   语言   项目
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23