目录
前言
大家好,今天给大家带来的是一个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子棋
     
    
 
 
 
 
 
 
 
 
 
 
结束语
到这里这个小项目就结束了,大家可以将代码自己打打运行试一试,如果有什么不理解的地方,大家可以在评论区留言或者可以直接私信我,感谢大家的支持!
转载:https://blog.csdn.net/weixin_64067830/article/details/125466761
查看评论
					