用C语言实现三子棋小游戏

来源:互联网 发布:石材效果图软件 编辑:程序博客网 时间:2024/06/05 02:54
#ifndef __GAME_H__#define __GAME_H__#define COL 3#define ROW 3#include<time.h>#include<stdlib.h>#include<stdio.h>#include<windows.h>#include<stdio.h>#include<windows.h>void init_board(char arr[COL][ROW], int col, int row);void display_board(char arr[COL][ROW], int col, int row);void blue_player_move(char arr[COL][ROW], int col, int row);//blue|'X'void red_player_move(char arr[COL][ROW], int col, int row);//red|'O'void computer_move(char arr[COL][ROW], int col, int row);char check_win(char arr[COL][ROW], int col, int row);void pve_game();void pvp_ganme();#endif//__GAME_H__
# define _CRT_SECURE_NO_WARNINGS 1#include"game.h"void init_board(char arr[COL][ROW], int col, int row){    memset(arr, ' ', sizeof(arr[COL][ROW]) * col*row);}void display_board(char arr[COL][ROW], int col, int row){    int i = 0;    for (i = 0; i < col; i++)    {            printf(" %c | %c | %c\n", arr[i][0], arr[i][1], arr[i][2]);        if (i!=col-1)        printf("---|---|---\n");    }    printf("\n");}void computer_move(char arr[COL][ROW], int col, int row){    while (1)    {        int x = rand() % 3;        int y = rand() % 3;        if (arr[x][y] == ' ')        {            arr[x][y] = 'O';            break  ;        }    }}void blue_player_move(char arr[COL][ROW], int col, int row)//blue|'X'{    int x = 0;    int y = 0;    while (1)    {        printf("请blue玩家输入你要下的坐标( x , y ):>");        scanf("%d %d", &x, &y);        if (((x <= 3 && y <= 3) && (x >= 1 && y >= 1)) && (arr[x - 1][y - 1] == ' '))        {            arr[x - 1][y - 1] = 'X';            break;        }        else        {            printf("输入错误\n");        }    }}void red_player_move(char arr[COL][ROW], int col, int row)//red|'O'{    int x = 0;    int y = 0;    while (1)    {        printf("请red玩家输入你要下的坐标( x , y ):>");        scanf("%d %d", &x, &y);        if (((x <= 3 && y <= 3) && (x >= 1 && y >= 1)) && (arr[x - 1][y - 1] == ' '))        {            arr[x - 1][y - 1] = 'O';            break;        }        else        {            printf("输入错误\n");        }    }}static int is_full(char arr[COL][ROW], int col, int row){    int i = 0;    int j = 0;    for (i = 0; i < col; i++)    {        for (j = 0; j < row; j++)        {            if (arr[i][j] == ' ')            {                return 0;            }        }    }    return 1;}char check_win(char arr[COL][ROW], int col, int row)//判定函数,COL、ROW改变此函数需修改{    int i = 0;    char Q = 0;    for (i = 0; i < col; i++)    {        if ((arr[i][0] == arr[i][1]) && (arr[i][1] == arr[i][2])&&(arr[i][2]==arr[i][0])&& (arr[i][0] != ' '))        return arr[i][0];    }    for (i = 0; i < col; i++)    {        if ((arr[0][i] == arr[1][i]) && (arr[1][i] == arr[2][i])&&(arr[2][i]==arr[0][i]) && (arr[0][i] != ' '))        return  arr[0][i];    }    if ((arr[0][0] == arr[1][1]) && (arr[1][1] == arr[2][2]) && (arr[2][2] == arr[0][0]) && (arr[1][1] != ' '))    {        return arr[1][1];    }    if ((arr[2][0] == arr[1][1]) && (arr[1][1] == arr[0][2])&&(arr[0][2]==arr[2][0]) && (arr[1][1] != ' '))    {        return arr[1][1];    }    if (is_full(arr,col,row))            {                return 'Q';            }    else    return ' ';}
# define _CRT_SECURE_NO_WARNINGS 1#include"game.h"void menu(){    printf("**************************************************************************************\n");    printf("******************    1.play      2.Game rules      0.exit      **********************\n");    printf("**************************************************************************************\n");}void menu_Game_mode(){        printf("**********************************************************************************\n");        printf("**********        1.player with player        0.player with computer    **********\n");        printf("**********************************************************************************\n");}void menu3(){    printf("**************************************************************************************\n");    printf("*********        1.computer before player        0.player before computer    *********\n");    printf("**************************************************************************************\n");}void menu_first_player(){        printf("**********************************************************************************\n");        printf("****   1.red player before bule player      0.bule player before red player   ****\n");//red is 'O'  bule is 'X'        printf("****          blue player is 'X'                       red player is 'O'       ***\n");        printf("**********************************************************************************\n");}void menu_Game_rules(){    printf("**************************************************************************************\n");    printf("******     当一方三子连成一条直线时该方获胜,若棋盘下满还未有人获胜则为平局     ******\n");    printf("**************************************************************************************\n");}void pve_game(){    int a = 0;    char win = 0;    char board[COL][ROW] = { 0 };    srand((unsigned int)time(NULL));    init_board(board, COL, ROW);    system("cls");    menu3();    printf("请选择:>");    scanf("%d", &a);    display_board(board, COL, ROW);    switch (a)    {    case 1:    {              while (1)              {                  computer_move(board, COL, ROW);                  win = check_win(board, COL, ROW);                  if (win != ' ')                      break;                  system("cls");                  display_board(board, COL, ROW);                  blue_player_move(board, COL, ROW);                  win = check_win(board, COL, ROW);                  if (win != ' ')                      break;                  system("cls");                  display_board(board, COL, ROW);              }              system("cls");              display_board(board, COL, ROW);              if (win == 'X')              {                  printf("恭喜您取得胜利!!!\n");              }              else if (win == 'O')              {                  printf("电脑取得胜利,不要气磊,再战一局吧\n");              }              else if (win == 'Q')              {                  printf("平局啦!再战一局吧\n");              }              break;    }    case 0:    {              while (1)              {                  system("cls");                  blue_player_move(board, COL, ROW);                  win = check_win(board, COL, ROW);                  if (win != ' ')                      break;                  system("cls");                  display_board(board, COL, ROW);                  computer_move(board, COL, ROW);                  win = check_win(board, COL, ROW);                  if (win != ' ')                      break;                  system("cls");                  display_board(board, COL, ROW);              }              system("cls");              display_board(board, COL, ROW);              if (win == 'X')              {                  printf("恭喜您取得胜利!!!\n");              }              else if (win == 'O')              {                  printf("电脑取得胜利,不要气磊,再战一局吧\n");              }              else if (win == 'Q')              {                  printf("平局啦!再战一局吧\n");              }              break;    }    default:        printf("输入错误\n");         break;    }}void pvp_game(){    int a = 0;    char win = 0;    char board[COL][ROW] = { 0 };    init_board(board, COL, ROW);    system("cls");    menu_first_player();    printf("请选择:>");    scanf("%d", &a);    display_board(board, COL, ROW);    switch (a)    {    case 1:// red('O') first    {               while (1)               {                   system("cls");                   display_board(board, COL, ROW);                   red_player_move(board, COL, ROW);                   win = check_win(board, COL, ROW);                   if (win != ' ')                       break;                   system("cls");                   display_board(board, COL, ROW);                   blue_player_move(board, COL, ROW);                   win = check_win(board, COL, ROW);                   if (win != ' ')                       break;                   system("cls");                   display_board(board, COL, ROW);               }               system("cls");               display_board(board, COL, ROW);               if (win == 'X')               {                   printf("恭喜blue玩家取得胜利!!!\n");               }               else if (win == 'O')               {                   printf("恭喜red玩家取得胜利!!!\n");               }               else if (win == 'Q')               {                   printf("平局啦!再战一局吧\n");               }               break;    }    case 0:// blue('X') first    {               while (1)               {                   system("cls");                   blue_player_move(board, COL, ROW);                   win = check_win(board, COL, ROW);                   if (win != ' ')                       break;                   system("cls");                   display_board(board, COL, ROW);                   red_player_move(board, COL, ROW);                   win = check_win(board, COL, ROW);                   if (win != ' ')                       break;                   system("cls");                   display_board(board, COL, ROW);               }               system("cls");               display_board(board, COL, ROW);               if (win == 'X')               {                   printf("恭喜blue玩家取得胜利!!!\n");               }               else if (win == 'O')               {                   printf("恭喜red玩家取得胜利!!!\n");               }               else if (win == 'Q')               {                   printf("平局啦!再战一局吧\n");               }               break;    }    default:        printf("输入错误\n");        break;    }}void play_game(){    int input = 0;    menu_Game_mode();    printf("请选择:>");    scanf("%d", &input);    system("cls");    switch (input)    {    case 0:        pve_game();        break;    case 1:        pvp_game();        break;    default:        printf("输入错误\n");        break;    }}void test(){    int input = 0;    do    {        menu();        printf("请选择:>");        scanf("%d", &input);        system("cls");        switch (input)        {        case 1:            play_game();            break;        case 0:            break;        case 2:            system("cls");            menu_Game_rules();            break;        default:            printf("输入错误\n");            break;        }    } while (input != 0);}int main(){    test();    system("pause");    return 0;}

选择玩游戏、查看规则、或者退出
选择人机或者人与人玩
选择电脑先走还是玩家先走
玩家胜利
电脑胜利
平局