当前位置:网站首页>C语言练手小项目(巩固加深知识点理解)
C语言练手小项目(巩固加深知识点理解)
2022-06-27 05:43:00 【小张﹉】
目录
前言
大家好,今天给大家带来的是一个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—2
y = rand() % col;//范围0—2
while (1)
{
if (board[x][y] == ' ')
{
board[x][y] = '#';
break;
}
else
{
x = rand() % row;//范围0—2
y = 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()
{
//将二维数组中的元素先初始化为0
char 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子棋


结束语
到这里这个小项目就结束了,大家可以将代码自己打打运行试一试,如果有什么不理解的地方,大家可以在评论区留言或者可以直接私信我,感谢大家的支持!
边栏推荐
- 使用域名转发mqtt协议,避坑指南
- Execution rules of pytest framework
- Neo4j community conflicts with neo4j desktop
- NEON优化1:软件性能优化、降功耗怎么搞?
- Contents in qlistwidget are not displayed
- [nips 2017] pointnet++: deep feature learning of point set in metric space
- Spark 之 Projection
- Nlp-d62-nlp competition d31 & question brushing D15
- [FPGA] UART serial port_ V1.1
- 30 SCM common problems and solutions!
猜你喜欢

【FPGA】 基于FPGA分频,倍频设计实现

leetcode298周赛记录

IAR Systems全面支持芯驰科技9系列芯片

Go log -uber open source library zap use

【NIPS 2017】PointNet++:度量空间中点集的深层次特征学习

Two position relay rxmvb2 r251 204 110dc

树莓派4B上运行opcua协议DEMO接入kubeedge

Web3 has not been implemented yet, web5 suddenly appears!

leetcode299周赛记录

Zener diode zener diode sod123 package positive and negative distinction
随机推荐
Double position relay jdp-1440/dc110v
齐纳二极管 稳压二极管 SOD123封装 正负区分
Edge在IE模式下加载网页 - Edge设置IE兼容性
EPICS记录参考5 -- 数组模拟输入记录Array Analog Input (aai)
微信小程序WebSocket使用案例
WebRTC系列-網絡傳輸之7-ICE補充之提名(nomination)與ICE_Model
双位置继电器DLS-34A DC0.5A 220VDC
Discussion on streaming media protocol (MPEG2-TS, RTSP, RTP, RTCP, SDP, RTMP, HLS, HDS, HSS, mpeg-dash)
【Cocos Creator 3.5.1】this.node.getPosition(this._curPos)的使用
Wholestagecodegen of spark
Obtenir le volume du système à travers les plateformes de l'unit é
Unity point light disappears
IAR Systems全面支持芯驰科技9系列芯片
Pycharm 中 Terminal 无法进入 venv 环境的问题
RTP sending PS stream tool (open source)
Avoid asteroids
Web3还没实现,Web5乍然惊现!
关于元器件封装的一些文章和一下我的体会
Senior [Software Test Engineer] learning route and necessary knowledge points
Go log -uber open source library zap use