对于初学C语言的同学,五子棋不可谓不是一个好的练习。我们不但要考虑玩家及电脑的落子,还要考虑棋盘是否已满、是否有一方已经获得胜利。因此我们要考虑好各种情况,设定好函数及循环。

下面是两人五子棋的简单代码,注释部分是电脑产生随机数的函数,如若取消注释并注释掉关于玩家二的函数,运行起来就是人机对战。

程序如下:

game.h
#ifndef __GAME_H__
#define __GAME_H__#include<stdio.h>
#include<string.h>
#include<stdlib.h>#define ROWS 5
#define COLS 5void init_board(char board[ROWS][COLS], int row, int col);
void Display_board(char board[ROWS][COLS], int row, int col);
void player1_move(char board[ROWS][COLS], int row, int col);
void player2_move(char board[ROWS][COLS], int row, int col);
//void computer_move(char board[ROWS][COLS], int row, int col);
char Is_win(char board[ROWS][COLS], int row, int col);#endif
game.c
#include "game.h"
void init_board(char board[ROWS][COLS], int row, int col)
{memset(board, ' ', row*col*(sizeof(char)));    //初始化棋盘
}
void Display_board(char board[ROWS][COLS], int row, int col)
{int i=0;for (i = 0; i < row; i++){printf("%c |%c |%c |%c |%c\n", board[i][0], board[i][1], board[i][2], board[i][3], board[i][4]);if (i != 4)printf("--|--|--|--|--\n");          //打印棋盘规格}
}
void player1_move(char board[ROWS][COLS], int row, int col)
{int x = 0; int  y = 0;while (1){printf("请玩家1输入一个坐标\n");scanf_s("%d%d", &x, &y);x--;y--;if (((x >= 0) && (x <= 4)) && ((y >= 0) && (y <= 4))){if (board[x][y] == ' '){board[x][y] = 'W';      //玩家1落子记为Wbreak;}elseprintf("下标错误,请重新输入\n");}elseprintf("下标错误,请重新输入\n");}
}
void player2_move(char board[ROWS][COLS], int row, int col)
{int x = 0; int  y = 0;while (1){printf("请玩家2输入一个坐标\n");   scanf_s("%d%d", &x, &y);x--;y--;if (((x >= 0) && (x <= 4)) && ((y >= 0) && (y <= 4))){if (board[x][y] == ' '){board[x][y] = 'X';       //玩家2落子记为Xbreak;}elseprintf("下标错误,请重新输入\n");}elseprintf("下标错误,请重新输入\n");}
}
//void computer_move(char board[ROWS][COLS], int row, int col)
//{
//  while (1)
//  {
//      int x = rand() % 5;        //电脑产生随机值0,1,2,3,4
//      int y = rand() % 5;
//      if (board[x][y] == ' ')
//      {
//          board[x][y] = 'X ;     //电脑落子记为X
//          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 Is_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][2] == board[i][3]) && (board[i][3] == board[i][4]) && 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[2][i] == board[3][i]) && (board[3][i] == board[4][i])&&(board[2][i] != ' '))return board[1][i];}if ((board[0][0] == board[1][1]) && (board[1][1] == board[2][2]) && (board[2][2] == board[3][3]) &&(board[3][3] == board[4][4]) && (board[2][2] != ' '))return board[1][1];if ((board[0][4] == board[1][3]) && (board[1][3] == board[2][2]) && (board[2][2] == board[3][1]) && (board[3][1] == board[4][0])&&(board[4][0] != ' '))return board[1][1];if (Is_full(board, row, col)){return 'Q';}return ' ';
}
wuziqi.c
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include"game.h"
#include<time.h>
void game()
{char board[ROWS][COLS];char ret = 0;init_board(board, ROWS, COLS);srand((unsigned int)time(NULL));while (1){player1_move(board, ROWS, COLS);           //玩家1落子if ((ret=Is_win(board, ROWS, COLS)) != ' ')break;Display_board(board, ROWS, COLS);           //打印棋盘/*computer_move(board, ROWS, COLS);*/       //电脑落子player2_move(board, ROWS, COLS);            //玩家2落子if((ret=Is_win(board, ROWS, COLS))!= ' ')   //判断是否赢break;Display_board(board, ROWS, COLS);}if (ret == 'W')printf("玩家1赢\n");else if (ret == 'X')printf("玩家二赢\n");else if (ret == 'Q')printf("平局\n");/*Display_board(board, ROWS, COLS);*/
}
void menu()
{printf("####################\n");printf("##1、play##0、exit##\n");           //选择游戏还是退出printf("####################\n");
}
int main()
{int input = 0;menu();do{printf("请选择:>\n");scanf("%d", &input);switch (input){case 1:game();break;case 0:break;default:printf("选择错误\n");break;}}while (input);return 0;
}

接下来就可以玩了。为大家展示一下两人游戏时的场景。

再为大家展示一下人机游戏时的场景

C语言简单五子棋两人/五子棋人机相关推荐

  1. Java实现一个简单的两人五子棋游戏(一) 系统设计

    实现一个基本的单机五子棋功能 该五子棋棋盘大小为19*19的网格,玩家可以通过鼠标点击棋盘来落子,当出现五连珠时,提示一方胜出~ 1)模块划分 主模块:调用其他模块实现五子棋功能 棋盘模块:绘制五子棋 ...

  2. Java实现一个简单的两人五子棋游戏(六) 行棋方变换

    1)选择棋子 ✔️ 2)画棋子 ✔️ 3)判断胜负 ✔️ 4)交换行棋方 目标 前面我们已经画好棋盘和棋子,并可以自由落子,且可以判断棋盘中是否有五连珠.接下来的工作是,每次落子后交换行棋方(即将下一 ...

  3. java五子棋盘_Java实现一个简单的两人五子棋游戏(二) 画棋盘

    棋盘模块: 画五子棋棋盘:19条横线.19条竖线 步骤一:显示棋盘 我有一张名为chessboard.png的棋盘,位置为根目录/res/drawable/chessboard/png,现在我要显示这 ...

  4. java五子棋实验报告6_Java实现两人五子棋游戏(六) 行棋方变换

    前面我们已经画好棋盘和棋子,并可以自由落子,且可以判断棋盘中是否有五连珠.接下来的工作是,每次落子后交换行棋方(即将下一棋子颜色由白->黑或黑->白),并将胜出判断增加颜色判断条件(棋盘上 ...

  5. java画五子棋盘_Java实现两人五子棋游戏(二) 画出棋盘

    本文为大家分享了java画出五子棋游戏棋盘的方法,供大家参考,具体内容如下 棋盘模块: 画五子棋棋盘:19条横线.19条竖线 步骤一:显示棋盘 我有一张名为chessboard.png的棋盘,位置为根 ...

  6. java五子棋棋盘_Java实现两人五子棋游戏(二) 画出棋盘

    此文为大家分享了java画出五子棋游戏棋盘的方法,供大家参考,具体内容如下 棋盘模块: 画五子棋棋盘:19条横线.19条竖线 步骤一:显示棋盘 我有一张名为chessboard.png的棋盘,位置为根 ...

  7. 【C语言五子棋、三子棋人机对战篇的详细介绍】

    C语言--五子棋.井字棋人机对"战" 针对 "[C语言实现五子棋.三子棋人机对战,包含电脑人工智能对战(可攻可守)](非标题党)" 的详细介绍 五子棋.三子棋人 ...

  8. c语言五子棋源代码vc6,五子棋源码实验报告及人机对战说明.docx

    1. 五子棋对战说明 2. 实验报告 3. 源代码 五 子 棋 作品特点:C 语言程序 五子棋 作品功能:五子棋人机对战,人人对战. 目录:1 五子棋介绍. 五子棋棋型介绍. 人人对战的实现. 电脑下 ...

  9. 【C语言实现五子棋、三子棋人机对战,包含电脑人工智能对战(可攻可守)】(非标题党)

    C语言--五子棋.井字棋人机对"战" 针对C语言学习过程中的五子棋.三子棋实现记录 五子棋人机对战 C语言--五子棋.井字棋人机对"战" 实际效果 一.头文件( ...

最新文章

  1. 极验行为验证的使用方法
  2. Arduino可穿戴教程之第一个程序——上传运行程序(四)
  3. 对网络中安全审计产品的理解
  4. 京东智能巡检机器人问世 京东金融进军企业服务新蓝海
  5. MINIGUI 开发指南---GDI
  6. leetcode 777. Swap Adjacent in LR String | 777. 在LR字符串中交换相邻字符(双指针)
  7. 实际开发的存储过程_实际生产中的 Android SDK开发总结| 完结
  8. 【python问题系列--4】ValueError: operands could not be broadcast together with shapes (100,3) (3,1)...
  9. 域名与DNS(域名解析服务器)
  10. paip.python错误解决17
  11. ⑥tiny4412 Linux驱动开发之LCD(framebuffer)驱动程序
  12. JAVA基础知识点大全之二
  13. GTK、GDK、GLIB三者的关系 - 阿堂的专栏 - 博客频道 - CSDN.NET
  14. 第四节(4.4) 维修技巧 电路图识图
  15. CSS基础10-单行/多行文本溢出省略
  16. Centos设置自带中文输入法
  17. 21天学通C语言-学习笔记(3)
  18. CPU卡程序设计实例(二十六)卡和ESAM之间外部认证
  19. 会影响电线载流量的因素
  20. 主流显卡生产厂商全面剖析--各种显卡品牌

热门文章

  1. 看完张一鸣、王兴、雷军的600条语录,整理出给年轻人的50条建议!
  2. java注解约束参数为固定值_java自定义注解的实现及属性设置
  3. 为什么燕子鸟纹身是如此出名
  4. 被开了!!!!!!!!!!
  5. unity urp 实现雨水在物体上流动的效果
  6. (83)FPGA减法器设计(多位减法器)
  7. 物联网环境监测数据中心系统
  8. 锁相环载波同步MATLAB实现,利用锁相环实现载波同步
  9. 用python在excel中做批量计算(包括单元格为空值时的处理情况)
  10. EXCEL 字符替换为换行符