C语言简单五子棋两人/五子棋人机
对于初学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语言简单五子棋两人/五子棋人机相关推荐
- Java实现一个简单的两人五子棋游戏(一) 系统设计
实现一个基本的单机五子棋功能 该五子棋棋盘大小为19*19的网格,玩家可以通过鼠标点击棋盘来落子,当出现五连珠时,提示一方胜出~ 1)模块划分 主模块:调用其他模块实现五子棋功能 棋盘模块:绘制五子棋 ...
- Java实现一个简单的两人五子棋游戏(六) 行棋方变换
1)选择棋子 ✔️ 2)画棋子 ✔️ 3)判断胜负 ✔️ 4)交换行棋方 目标 前面我们已经画好棋盘和棋子,并可以自由落子,且可以判断棋盘中是否有五连珠.接下来的工作是,每次落子后交换行棋方(即将下一 ...
- java五子棋盘_Java实现一个简单的两人五子棋游戏(二) 画棋盘
棋盘模块: 画五子棋棋盘:19条横线.19条竖线 步骤一:显示棋盘 我有一张名为chessboard.png的棋盘,位置为根目录/res/drawable/chessboard/png,现在我要显示这 ...
- java五子棋实验报告6_Java实现两人五子棋游戏(六) 行棋方变换
前面我们已经画好棋盘和棋子,并可以自由落子,且可以判断棋盘中是否有五连珠.接下来的工作是,每次落子后交换行棋方(即将下一棋子颜色由白->黑或黑->白),并将胜出判断增加颜色判断条件(棋盘上 ...
- java画五子棋盘_Java实现两人五子棋游戏(二) 画出棋盘
本文为大家分享了java画出五子棋游戏棋盘的方法,供大家参考,具体内容如下 棋盘模块: 画五子棋棋盘:19条横线.19条竖线 步骤一:显示棋盘 我有一张名为chessboard.png的棋盘,位置为根 ...
- java五子棋棋盘_Java实现两人五子棋游戏(二) 画出棋盘
此文为大家分享了java画出五子棋游戏棋盘的方法,供大家参考,具体内容如下 棋盘模块: 画五子棋棋盘:19条横线.19条竖线 步骤一:显示棋盘 我有一张名为chessboard.png的棋盘,位置为根 ...
- 【C语言五子棋、三子棋人机对战篇的详细介绍】
C语言--五子棋.井字棋人机对"战" 针对 "[C语言实现五子棋.三子棋人机对战,包含电脑人工智能对战(可攻可守)](非标题党)" 的详细介绍 五子棋.三子棋人 ...
- c语言五子棋源代码vc6,五子棋源码实验报告及人机对战说明.docx
1. 五子棋对战说明 2. 实验报告 3. 源代码 五 子 棋 作品特点:C 语言程序 五子棋 作品功能:五子棋人机对战,人人对战. 目录:1 五子棋介绍. 五子棋棋型介绍. 人人对战的实现. 电脑下 ...
- 【C语言实现五子棋、三子棋人机对战,包含电脑人工智能对战(可攻可守)】(非标题党)
C语言--五子棋.井字棋人机对"战" 针对C语言学习过程中的五子棋.三子棋实现记录 五子棋人机对战 C语言--五子棋.井字棋人机对"战" 实际效果 一.头文件( ...
最新文章
- 极验行为验证的使用方法
- Arduino可穿戴教程之第一个程序——上传运行程序(四)
- 对网络中安全审计产品的理解
- 京东智能巡检机器人问世 京东金融进军企业服务新蓝海
- MINIGUI 开发指南---GDI
- leetcode 777. Swap Adjacent in LR String | 777. 在LR字符串中交换相邻字符(双指针)
- 实际开发的存储过程_实际生产中的 Android SDK开发总结| 完结
- 【python问题系列--4】ValueError: operands could not be broadcast together with shapes (100,3) (3,1)...
- 域名与DNS(域名解析服务器)
- paip.python错误解决17
- ⑥tiny4412 Linux驱动开发之LCD(framebuffer)驱动程序
- JAVA基础知识点大全之二
- GTK、GDK、GLIB三者的关系 - 阿堂的专栏 - 博客频道 - CSDN.NET
- 第四节(4.4) 维修技巧 电路图识图
- CSS基础10-单行/多行文本溢出省略
- Centos设置自带中文输入法
- 21天学通C语言-学习笔记(3)
- CPU卡程序设计实例(二十六)卡和ESAM之间外部认证
- 会影响电线载流量的因素
- 主流显卡生产厂商全面剖析--各种显卡品牌