C语言--三子棋

本文介绍了一个使用C语言实现的简易版井字棋游戏。该程序包括玩家和电脑轮流下棋的功能,并能够判断输赢和平局。文章详细展示了游戏的初始化、显示棋盘、玩家与电脑走棋、胜负判定等核心模块。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

test.c

#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>
#include <stdlib.h> 
#include <time.h>  
#include "game.h"

void game()
{
    char board[ROWS][COLS];  
    char ret = 0;    
    init_board(board, ROWS, COLS);   
    display_board(board, ROWS, COLS);     
    srand((unsigned int)time(NULL));     

    while(1)     
    {        
        player_move(board, ROWS, COLS);      
        if((ret = check_win(board, ROWS, COLS)) != ' ')        
            break;         
        display_board(board, ROWS, COLS); 
        computer_move(board, ROWS, COLS);
        printf("电脑走\n");
        if((ret = check_win(board, ROWS, COLS)) != ' ')      
            break;        
        display_board(board, ROWS, COLS); 

    }    
    display_board(board, ROWS, COLS);
    if(ret == 'X')    
    {        
        printf("你赢了!!!\n");   
    }    
    else if(ret == '0')  

    {        
        printf("电脑赢\n");    
    }    
    else if(ret == 'q')   
    {       
        printf("平局\n");    
    }     

} 


void menu()
{
    printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
    printf("~~~~~~~1.play  0.exit ~~~~~~~~\n");
    printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");


}
int main() 
{ 
    int input = 0;   
do      
{ 
    menu();        
  printf("请选择>:");        
   scanf("%d", &input);         
switch (input)        
{ case 1:             
    game();            
    break;         
  case 0:            
    break;        
  default:           
      printf("选择错误\n");            
      break; 
}
} 
while (input); 
 system("pause");
return 0; 
}

game.c


#define _CRT_SECURE_NO_WARNINGS 1
#include "game.h" 
void init_board(char board[ROWS][COLS], int row, int col)
{
    memset(board, ' ', col*row*sizeof(char)); 
}

void display_board(char board[ROWS][COLS], int row, int col)
{
    int i = 0;
    printf("   1   2   3 \n");
    printf("  ___________\n");
    for (i = 0; i < row; i++)
    {
        printf("%d", i + 1);
        printf("| %c | %c | %c |\n", board[i][0],
                                     board[i][1],
                                     board[i][2]);
        if (i != 2)
            printf(" |---|---|---|\n");
    }
    printf("  ——————\n");
}

void player_move(char board[ROWS][COLS], int row, int col) 
{
    int x = 0;    
    int y = 0;    
    while (1)    
    {
        printf("请输入坐标:>");       
        scanf("%d%d", &x, &y);        
        x--;        
        y--;         
        if (((x >= 0) && (x <= 2)) && ((y >= 0) && (y <= 2)))       
        { 
            if (board[x][y] == ' ')           
            {
                board[x][y] = 'X';              
                break; 
            } 
            else            
            { 
                printf("下标有误, 重新输入!"); 
            }
        }
        else         
        {
            printf("下标有误, 重新输入!");
        }
    }
} 

void computer_move(char board[ROWS][COLS], int row, int col) 
{ 
    while (1)   
    { 
        int x = rand() % 3;        
        int y = rand() % 3;      
        if (board[x][y] == ' ')       
        { 
            board[x][y] = '0';           
            break; 
        } 
    } 
}

static int is_full(char board[ROWS][COLS], int row, int col) 
{
    int i = 0;    
    int j = 0;    
    for (i = 0; i<row; i++)    
    {
        for (j = 0; j<col; j++)        
        { 
            if (board[i][j] == ' ')         
                return 0; 
        } 
    }     //    
    return 1; 
}

char check_win(char board[ROWS][COLS], int row, int col)
{    
    int i = 0;   
    for(i=0; i<row; i++)   
    {      
        if((board[i][0]==board[i][1])   
            &&(board[i][1]==board[i][2])      
            &&(board[i][1]!=' '))         
            return board[i][1];    
    }     
    for(i=0; i<col; i++)    
    {         
        if((board[0][i]==board[1][i]) 
    && (board[1][i] == board[2][i]) 
    && (board[1][i] != ' '))            
    return board[1][i];
}
if ((board[0][0] == board[1][1])
    && (board[1][1] == board[2][2]) 
    && (board[1][1] != ' '))       
    return board[1][1];
if ((board[0][2] == board[1][1])
    && (board[1][1] == board[2][0]) 
    && (board[1][1] != ' '))        
    return board[1][1];
if (is_full(board, row, col))   
{ 
    return 'q';
}     
     return ' '; 
}

game.h

#ifndef __GAME_H__ 
#define __GAME_H__  

#include <stdio.h> 
#include <stdlib.h>
#include <string.h> 

#define ROWS 3 
#define COLS 3 

void init_board(char board[ROWS][COLS], int row, int col); 
void display_board(char board[ROWS][COLS], int row, int col); 
void player_move(char board[ROWS][COLS], int row, int col); 
void computer_move(char board[ROWS][COLS], int row, int col); 
char check_win(char board[ROWS][COLS], int row, int col);


#endif //__GAME_H__ 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值