用C语言实现三子棋

本文实例为大家分享了用C语言实现三子棋的具体代码,供大家参考,具体内容如下

三子棋含义:

三子棋是黑白棋的一种。三子棋又叫九宫棋、圈圈叉叉、一条龙、井字棋等。将正方形对角线连起来,相对两边依次摆上三个双方棋子,只要将自己的三个棋子走成一条线,对方就算输了。但是,有很多时候会出现和棋的情况。图例如下:

基本思路:

1.创建用户交互菜单界面

2.初始化棋盘

3.显示棋盘面板(为了不重复显示棋盘,使用清屏操作)

4.用户落子

5.判断胜负

6.电脑随机正确落子

7.判断胜负

(在每次写程序之前,可以向如下图所示,写出思路或伪代码)

创建多文件项目:

写代码之前,首先建立三个文件,以方便后序代码更加完整清晰地呈现。

1.创建用户交互菜单界面

void Meau(){ printf("+------ meau ----------+\n"); printf("|----  1.play  --------|\n"); printf("|----  0.quit  --------|\n"); printf("+----------------------+\n");}

2.初始化棋盘

使用宏定义,将棋盘中的内容初始化为空。

static void InitBoard(char board[][COL], int row, int col){ for (int i = 0; i < row; i++){  for (int j = 0; j < col; j++){   board[i][j] = INIT;  } }}

3.显示棋盘面板

为了不重复显示棋盘,使用清屏操作,使得每次现实的棋盘只有一张。

通过不断调试,使得最终界面,与预期所需界面一致。

static void ShowBoard(char board[][COL],int row,int col){ system("cls");//清屏操作 printf("  "); for (int i = 0; i < col; i++){  printf(" %3d", i + 1); } printf("\n----------------\n"); for (int i = 0; i < row; i++){  printf("%-2d", i + 1);  for (int j = 0; j < col; j++){   printf("| %c ", board[i][j]);  }  printf("\n----------------\n"); }}

4.用户落子

落子只能落在为空的位置上,所以在落子前需要判空,若为空,则落子,否则提示重新落子。

static void PlayerMove(char board[][COL], int row, int col){ int x = 0; int y = 0; while (1){  printf("please enter your postion<x,y>: ");  scanf("%d %d", &x, &y);  if (x<1 || x>3 || y<1 || y>3){   printf("Postion Error!");   continue;  }  if (board[x - 1][y - 1] == INIT){   board[x - 1][y - 1] = WHITE;   break;  }  else{   printf("Postion Is Not Empty!\n");  } }}

5.电脑随机正确落子

使用随机数,在正确位置落子。

static void ComputerMove(char board[][COL], int row, int col){ while (1){  int x = rand() % row;  int y = rand() % col;  if (board[x][y] == INIT){      board[x][y] = BLACK;   break;   } }}

6.判断胜负

static char IsEnd(char board[][COL], int row, int col){ for (int i = 0; i < row; i++){  if (board[i][0] == board[i][1] && \   board[i][1] == board[i][2] && \   board[i][0] != INIT){   return board[i][0];  } } for (int j = 0; j < col; j++){  if (board[0][j] == board[1][j] && \   board[1][j] == board[2][j] && \   board[0][j] != INIT){   return board[0][j];  } } if (board[0][0] == board[1][1] && \  board[1][1] == board[2][2] && \  board[0][0] != INIT){  return board[0][0]; } if(board[0][2] == board[1][1] && \  board[1][1] == board[2][0] && \  board[1][1] != INIT){  return board[1][1]; } for (int i = 0; i < row; i++){  for (int j = 0; j < col; j++){   if (board[i][j] == INIT);   return NEXT;  } } return DRAW;}

7.创建Game界面

void Game(){ char board[ROW][COL]; InitBoard(board, ROW, COL); srand((unsigned long)time(NULL)); char result = 0; while (1){  ShowBoard(board, ROW, COL);  PlayerMove(board, ROW, COL);  result = IsEnd(board, ROW, COL);  if (result != NEXT){   break;  }  ShowBoard(board, ROW, COL); ComputerMove(board, ROW, COL); result = IsEnd(board, ROW, COL);  if (result != NEXT){  break;     } } ShowBoard(board, ROW, COL); switch (result){ case WHITE:  printf("You win!\n");  break; case BLACK:  printf("you lose!\n");  break; case DRAW:  printf("it ends in a draw\n");   break; defult:  printf("bug\n");  break; }}

完整代码

//main.c文件#include"game.h" void Meau(){ printf("+------ meau ----------+\n"); printf("|----  1.play  --------|\n"); printf("|----  0.quit  --------|\n"); printf("+----------------------+\n");}int main(){ int select = 0; int quit = 0;     while (!quit)  {   Meau();   printf("please enter your choose: ");   scanf("%d", &select);   switch (select)   {   case 1:    Game();    break;   case 0:    quit = 1;    break;   defult:    printf("Select error!Try again!\n");    break;      }  } printf("byebye!\n"); system("pause"); return 0;} //game.c 文件#include"game.h"static void InitBoard(char board[][COL], int row, int col){ for (int i = 0; i < row; i++){  for (int j = 0; j < col; j++){   board[i][j] = INIT;  } }}static void ShowBoard(char board[][COL],int row,int col){ system("cls"); printf("  "); for (int i = 0; i < col; i++){  printf(" %3d", i + 1); } printf("\n----------------\n"); for (int i = 0; i < row; i++){  printf("%-2d", i + 1);  for (int j = 0; j < col; j++){   printf("| %c ", board[i][j]);  }  printf("\n----------------\n"); }}static char IsEnd(char board[][COL], int row, int col){ for (int i = 0; i < row; i++){  if (board[i][0] == board[i][1] && \   board[i][1] == board[i][2] && \   board[i][0] != INIT){   return board[i][0];  } } for (int j = 0; j < col; j++){  if (board[0][j] == board[1][j] && \   board[1][j] == board[2][j] && \   board[0][j] != INIT){   return board[0][j];  } } if (board[0][0] == board[1][1] && \  board[1][1] == board[2][2] && \  board[0][0] != INIT){  return board[0][0]; } if(board[0][2] == board[1][1] && \  board[1][1] == board[2][0] && \  board[1][1] != INIT){  return board[1][1]; } for (int i = 0; i < row; i++){  for (int j = 0; j < col; j++){   if (board[i][j] == INIT);   return NEXT;  } } return DRAW;}static void PlayerMove(char board[][COL], int row, int col){ int x = 0; int y = 0; while (1){  printf("please enter your postion<x,y>: ");  scanf("%d %d", &x, &y);  if (x<1 || x>3 || y<1 || y>3){   printf("Postion Error!");   continue;  }  if (board[x - 1][y - 1] == INIT){   board[x - 1][y - 1] = WHITE;   break;  }  else{   printf("Postion Is Not Empty!\n");  } }}static void ComputerMove(char board[][COL], int row, int col){ while (1){  int x = rand() % row;  int y = rand() % col;  if (board[x][y] == INIT){      board[x][y] = BLACK;   break;     } }} void Game(){ char board[ROW][COL]; InitBoard(board, ROW, COL); srand((unsigned long)time(NULL)); char result = 0; while (1){  ShowBoard(board, ROW, COL);  PlayerMove(board, ROW, COL);  result = IsEnd(board, ROW, COL);  if (result != NEXT){   break;  }  ShowBoard(board, ROW, COL); ComputerMove(board, ROW, COL); result = IsEnd(board, ROW, COL);  if (result != NEXT){  break;     } } ShowBoard(board, ROW, COL); switch (result){ case WHITE:  printf("You win!\n");  break; case BLACK:  printf("you lose!\n");  break; case DRAW:  printf("it ends in a draw\n");   break; defult:  printf("bug\n");  break; }} //game.h文件#ifndef __GAME_H__#define __GAME_H__#include<stdio.h>#include <time.h>#include <stdlib.h>#include<windows.h>#pragma warning(disable:4996)#define ROW 3#define COL 3 #define INIT ' '#define WHITE 'X'//player#define BLACK 'O'//computer #define DRAW 'D'#define NEXT 'N'extern void Game();#endif

代码结果显示

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

美好的生命应该充满期待惊喜和感激

用C语言实现三子棋

相关文章:

你感兴趣的文章:

标签云: