用c语言编写三子棋小游戏

来源:互联网 发布:java交换两个数 编辑:程序博客网 时间:2024/05/21 12:40

三子棋小游戏设计为人与电脑进行下棋的操作,相对比较简单的操作,下面为三子棋小游戏的代码。

game.h
#define _CRT_SECURE_NO_WARNINGS 1#ifndef __GAME_H__#define __GAME_H__#include<stdio.h>#include<stdio.h>#include<string.h>#include<time.h>#define ROWS 3#define COLS 3void init_board(char board[ROWS][COLS], int row, int col);void display_board(char board[ROWS][COLS], int row, int col);void com_board(char board[ROWS][COLS], int row, int col);void player_board(char board[ROWS][COLS], int row, int col);int winner(char board[ROWS][COLS], int row, int col);int loser(char board[ROWS][COLS], int row, int col);#endif
game.c
#define _CRT_SECURE_NO_WARNINGS 1#include"game.h"void init_board(char board[ROWS][COLS], int row, int col)//棋盘初始化{    memset(board ,' ', ROWS*COLS*sizeof(board[0][0]));}void display_board(char board[ROWS][COLS], int row, int col)//棋盘的打印展示{    int i = 0;    for (i = 0; i < row; i++)    {        printf(" %c | %c | %c \n", board[i][0], board[i][1], board[i][2]);        if (i != 2)        {            printf("---|---|---\n");//棋盘的设计        }    }}void player_board(char board[ROWS][COLS], int row, int col)//玩家下棋    {        int x = 0;        int y = 0;        flag1:        printf("请输入坐标:");        scanf("%d%d",&x,&y);        x = x - 1;        y = y - 1;        if ((x >= 0) && (x <= 2) && (y >= 0) && (y <= 2))        {            if (board[x][y] == ' ')            {                board[x][y] = 'x';            }            else            {                printf("输入错误\n");                goto flag1;            }        }        else        {            goto flag1;        }        printf("\n");    }void comp_board(char board[ROWS][COLS], int row, int col)//电脑下    {    srand((unsigned int)time(NULL));        while (1)        {            int x = rand() % 3;            int y = rand() % 3;            if (board[x][y] == ' ')            {                board[x][y] = 'o';                break;              }        }        printf("\n");    }int winner (char board[ROWS][COLS], int row, int col){    int i = 0;    int j = 0;    for (i = 0; i < row; i++)    {        if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][1] == 'x')//人的行判断        {            return 1;        }        if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][1] == 'o')//电脑的行判断        {            return 2;        }    }    for (j = 0; j < col; j++)    {        if (board[0][j] == board[1][j] && board[1][j] == board[2][j] && board[1][j] == 'x')//人的列判断        {            return 1;        }        if (board[0][j] == board[1][j] && board[1][j] == board[2][j] && board[1][j] == 'o')//电脑的列判断        {            return 2;        }    }        if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] == 'x')//人的斜判断        {            return 1;        }        if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] == 'x')//人的斜判断        {            return 1;        }        if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] == 'o')//电脑的斜判断        {            return 2;        }        if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] == 'o')//电脑的斜判断        {            return 2;        }        int C = is_full(board, ROWS, COLS);//判断是否满了        if (C == 5)        {            return 3;        }}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 4;                }            }        }            return 5;   }
test.c
#define _CRT_SECURE_NO_WARNINGS 1#include"game.h"void venu(){    printf("*****************************\n");    printf("******1.play 0.exit**********\n");    printf("*****************************\n");}game(){    char board[ROWS][COLS];    init_board(board, ROWS, COLS);//棋盘初始化    display_board(board, ROWS, COLS);//打印棋盘    while (1)    {        player_board(board, ROWS, COLS);//玩家下棋        display_board(board, ROWS, COLS);        if (winner(board, ROWS, COLS) == 1)        {            printf("你赢了\n");            break;        }        else if (winner(board, ROWS, COLS) == 3)        {            printf("平局\n");            break;        }        comp_board(board, ROWS, COLS);//电脑下棋        display_board(board, ROWS, COLS);        if (winner(board, ROWS, COLS) == 2)        {            printf("电脑赢了\n");            break;        }        else if (winner(board, ROWS, COLS) == 3)        {            printf("平局\n");            break;        }    }}int main(){    int input = 0;    venu();    do    {        printf("请选择 :\n");        scanf("%d", &input);        switch (input)        {        case 1:            game();            break;        case 0:            printf("退出\n");            break;        default:            printf("输入错误");            break;        }    } while (input);    return 0;}

下面为运行的界面:
这里写图片描述

本人是初学者,可能设计的过于简易,希望各位给于意见与建议。

原创粉丝点击