这是本人依据现学知识写的简易三子棋,也不是那么简洁明了,望大佬指点

 #define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#define ROW 3
#define COL 3
char chess_board[ROW][COL];
int PlayGame(int choice){
printf("************************\n");
printf("* 欢迎来到三子棋游戏 *\n");
printf("* 请您选择 *\n");
printf("* 1.开始游戏 *\n");
printf("* 2.离开游戏 *\n");
printf("************************\n");
while (){
scanf("%d", &choice);
if (choice == )
{
return ;
break;
}
else if (choice == )
{
return ;
break;
}
else
{
printf("输入非法,请重新输入!");
continue;
}
}
}
int Init(char a[ROW][COL]){
for (int row = ; row <ROW; row++){
for (int col = ; col < COL; col++)
{
a[row][col] = ' ';
}
}
return ;
}
void Print(char a[ROW][COL]){
printf(" \n");
for (int i = ; i < ROW; i++){
printf(" %c | %c | %c \n", a[i][], a[i][], a[i][]);
if (i != ){
printf("----|----|----\n");
}
}
}
void PlayerMove(char a[ROW][COL]){
int row = -;
int col = -;
while (){
printf("请您选择落子点坐标:");
scanf("%d %d", &row, &col);
if (row< || row> || col< || col>){
printf("输入非法,请重新输入!");
continue;
}
else if (a[row][col] == 'x' || a[row][col] == 'o')
{
printf("已有棋子,请重新选择坐标!");
continue;
}
else
{
a[row][col] = 'o';
break;
} }
}
int IsFull(char a[ROW][COL]){
int sum = ;
for (int row = ; row < ROW; row++)
{
for (int col = ; col < COL; col++)
{
if (a[row][col] != ' ')
{ sum++;
}
}
}
if (sum == ){
return ;
}
}
char Checkwinner(char a[ROW][COL]){
//1.判断三子 横 竖 斜
for (int row = ; row < ROW; row++){
if (a[row][] == a[row][] && a[row][] == a[row][] && a[row][] != ' ')
{
return 'p';
}
}
for (int col = ; col < COL; col++){
if (a[][col] == a[][col] && a[][col] == a[][col] && a[][col] != ' ')
{
return 'p';
}
}
if (a[][] == a[][] && a[][] == a[][] && a[][] != ' ')
{
return 'p';
}
if (a[][] == a[][] && a[][] == a[][] && a[][] != ' '){
return 'p';
}
} void ComputeMove(char a[ROW][COL]){
printf("请电脑落子!\n");
while (){
int col = rand() % ;
int row = rand() % ;
if (a[row][col] == ' ')
{
a[row][col] = 'x';
break;
}
else continue;
}
}
void Game(){
Init(chess_board);//2.棋盘初始化
Print(chess_board);//3.打印棋盘
while (){ PlayerMove(chess_board);//4.用户落子
Print(chess_board);
if (Checkwinner(chess_board) == 'p')
{
printf("玩家获胜!\n");
break;
}
if (IsFull(chess_board) == )//2.判断是否和棋
{
printf("平局!");
break;
}
ComputeMove(chess_board);//6.电脑随机落子
Print(chess_board);//3.打印棋盘
if (Checkwinner(chess_board) == 'p')
{
printf("电脑获胜!\n");
break;
} if (IsFull(chess_board) == )//2.判断是否和棋
{
printf("平局!\n");
break;
}
}
} int main(){
int choice = ;
if (PlayGame(choice) == ) { //1.选择是否开始游戏 a)开始 b)离开
Game(); }
system("pause");
}

C语言简易三子棋的更多相关文章

  1. 用c语言实现三子棋

    1 game.c://实现三子棋的.c文件 #define _CRT_SECURE_NO_WARNINGS #include"game.h" void init_board(cha ...

  2. C语言数组实现三子棋

    C语言实现三子棋(通过数组) 需要包含的头文件 #include <stdio.h> #include <stdlib.h> #include <time.h> 创 ...

  3. c语言实现:三子棋

    问题描述:两个游戏者在3*3棋盘里轮流作标记,如果一个人在行,列或者两个对角线可以作三个标记,则为获胜. 我们首先得打印菜单供玩家选择(可以选择玩游戏或者退出游戏) void menu() { pri ...

  4. c语言小游戏-三子棋的完成

    三子棋的实现 一.实现思路 1.初始化数组 三子棋是九宫格的格式,所以用二维数组接收数据.用‘O’代表电脑下的子,‘X’代表玩家下的子.未下子的时候初始化 ’ ‘(space).则二维数组为“char ...

  5. 51Nod:1995 三子棋

    1995 三子棋  题目来源: syu校赛 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题  收藏  关注 小的时候大家一定玩过"井"字棋吧.也就是在 ...

  6. C语言之三字棋的简单实现及扩展

    C语言之三字棋的简单实现及扩展 在我们学习完数组之后,我们完全可以利用数组相关知识来写一个微小型的游戏,比如说今天所说的--三子棋. 大纲: 文件组成 实现   完整代码展示   扩展 即: 一.文件 ...

  7. Dart 语言简易教程系列

    google Fuchsia系统 及 dart语言简介 在 InteIIiJ IDEA 中搭建 Dart 的开发环境 Dart Linux 开发环境搭建 Dart 语言简易教程(一) Dart 语言简 ...

  8. 51nod 1995 三子棋

    小的时候大家一定玩过“井”字棋吧.也就是在九宫格中,只要任意行.列,或者任意连续对角线上面出现三个相同的,就能获胜.现在小明和小花也在玩三子棋,但是他们不是在九宫格里,而是在3×4的格子里面.现在小明 ...

  9. P1838 三子棋I

    题目描述 小a和uim喜欢互相切磋三子棋.三子棋大家都玩过是吗?就是在九宫格里面OOXX(别想歪了),谁连成3个就赢了. 由于小a比较愚蠢,uim总是让他先. 我们用9个数字表示棋盘位置: 123 4 ...

随机推荐

  1. sort、sorted、heapq、bisect排序

    aa=[1,2,8,7,0,13,28,3]sorted(aa) #原list不变,从小到大排序 aa.sort() #改变原lisaa.sort(reverse=True) #反转 for i in ...

  2. Linux kill/pkill/killall命令详解

    kill kill(terminate a process)命令用来终止指定的进程, 对于一个后台进程就须用kill命令来终止,我们就需要先使用ps/pidof/pstree/top等工具获取进程PI ...

  3. Linux 硬件RAID详解系统功能图

    RAID-0(条带模式) 特点: 在读写的时候可以实现并发,所以相对其读写性能最好,每个磁盘都保存了完整数据的一部分,读取也采用并行方式,磁盘数量越多,读取和写入速度越快. 因为没有冗余,一个硬盘坏掉 ...

  4. VS 2012 在 windows 8 中无法使用 Deubgger.Lunch() 对服务进行调试

    找到了外文资料:   Debugger.Launch() not displaying JIT debugger selection popup on Windows 8/8.1   If execu ...

  5. December 10th 2016 Week 50th Saturday

    Storms make trees take deeper roots. 风暴使树木深深扎根. Sometimes, you may feel frustrated for failing to wi ...

  6. Linux命令--获取帮助

    man命令 是Linux下的帮助指令,通过man指令可以查看Linux中的指令帮助.配置文件帮助和编程帮助等信息. 语法 man(选项)(参数) 选项 -a:在所有的man帮助手册中搜索: -f:等价 ...

  7. 洛谷 P4705 玩游戏

    题目分析 题目要求的是: \[ \sum_{i=1}^n\sum_{j=1}^m(a_i+b_j)^x(x\in [1,T]) \] 利用二项式定理化式子, \[ \begin{aligned} &a ...

  8. C/C++——存储

    关于各内存空间: 栈(stack):变量,数组.栈的大小是2M(也有的是1M),反正不大,一般递归写错了,没有出口,都会报错stack overflow. 全局区(静态区):全局变量.数组,静态变量. ...

  9. Kali-linux Arpspoof工具

    Arpspoof是一个非常好的ARP欺骗的源代码程序.它的运行不会影响整个网络的通信,该工具通过替换传输中的数据从而达到对目标的欺骗.本节将介绍Arpspoof工具的 使用. 9.8.1 URL流量操 ...

  10. Android 异步开发之 AsyncQueryHandler 批量添加联系人

    AsyncQueryHandler: 官方解释是一个异步帮助类(A helper class to help make handling asynchronous ContentResolver qu ...