1 game.c://实现三子棋的.c文件
#define _CRT_SECURE_NO_WARNINGS
#include"game.h" void init_board(char arr[ROW][COL], int row, int col)//实现数组的初始化
{
int i = ;
int j = ;
for (i = ; i < row; i++)
{
for (j = ; j < col; j++)
{
arr[i][j] = ' ';
}
}
}
void display_board(char arr[ROW][COL], int row, int col)//打印棋盘函数
{
int i = ;
for (i = ; i < row; i++)
{
int j = ;
for (j = ; j < col; j++)
{
printf(" %c ",arr[i][j]);
if (j < col - )
printf("|");
}
printf("\n");
if (i < row - )
{
for (j = ; j < col; j++)
{
printf("---");
if (j < col - )
printf("|");
}
}
printf("\n");
}
} void player_move(char arr[ROW][COL], int row, int col)//玩家下棋
{
int x = ;
int y = ;
printf("玩家走\n");
while ()
{
printf("请输入坐标:\n");
scanf("%d %d", &x, &y);
if ((x >= && x <= row) && (y >= && y <= col))
{
if (arr[x - ][y - ] == ' ')
{
arr[x - ][y - ] = 'x';
break;
}
else
{
printf("该坐标已被占用\n");
}
}
else
{
printf("坐标非法\n");
}
} } void computer_move(char arr[ROW][COL], int row, int col)//电脑下棋(在这里是通过生成一个随机的二维坐标)
{
int x = ;
int y = ;
printf("电脑走:\n");
while ()
{
x = rand() % ;
y = rand() % ;
if (arr[x][y] == ' ')
{
arr[x][y] = '';
break;
}
}
} static int Isfull(char arr[ROW][COL], int row, int col)//判断二维数组arr[i][j]是否为' ',如果是,则返回0
{
int i = ;
int j = ;
for (i = ; i < row; i++)
{
for (j = ; j < col; j++)
{
if (arr[i][j] == ' ')
return ;
}
}
return ; } char Iswin(char arr[ROW][COL], int row, int col)//判断输赢的函数
{ int i = ;
for (i = ; i < row; i++)
{
if ((arr[i][] == arr[i][]) && (arr[i][] == arr[i][])&&(arr[][i])!=' ')
{
return arr[i][];
}
}
for (i = ; i < col; i++)
{
if ((arr[][i] == arr[][i]) && (arr[][i] == arr[][i]) && (arr[i][]) != ' ')
{
return arr[][i];
}
}
if (arr[][] == arr[][] && arr[][] == arr[][] && arr[][] != ' ')
{
return arr[][];
}
if (arr[][] == arr[][] && arr[][] == arr[][] && arr[][] != ' ')
{
return arr[][];
}
if (Isfull(arr,row,col))
{
return 'Q';
}
return ' '; }
test.c:
#define _CRT_SECURE_NO_WARNINGS
#include"game.h"
void menu()
{
printf("*********************************\n");
printf("******** 欢迎来到三子棋 *******\n");
printf("******** 1.play *******\n");
printf("******** 0.exit *******\n");
}
void game()
{
char arr[ROW][COL] = { };
char ret = ;
init_board(arr, ROW, COL);
display_board(arr, ROW, COL);
while ()
{
player_move(arr,ROW,COL);
ret = Iswin(arr, ROW, COL);
if (ret != ' ')
{
break;
}
display_board(arr, ROW, COL);
computer_move(arr,ROW,COL);
ret = Iswin(arr, ROW, COL);
if (ret != ' ')
{
break;
}
display_board(arr, ROW, COL);
}
display_board(arr, ROW, COL);
if (ret == 'x')
{
printf("玩家赢\n");
}
else if (ret == '')
{
printf("电脑赢\n");
}
else if (ret == 'Q')
{
printf("平局\n");
}
}
void test()
{
int input = ;
srand((unsigned int)time(NULL));
do
{
printf("请输入你的选择(0/1):\n");
scanf("%d", &input);
switch (input)
{
case :
game();
break;
case :
printf("退出游戏\n");
break;
default:
printf("输入错误,请重新输入:\n");
break;
}
} while (input);
}
int main()
{
menu();
test();
system("pause");
return ;
}
game.h:
#ifndef __GAME_H__
#define __GAME_H__
#pragma once
#define ROW 3
#define COL 3
#include<stdio.h>
#include<time.h>
#include<string.h>
#include<stdlib.h>
void init_board(char arr[ROW][COL], int row, int col);
void display_board(char arr[ROW][COL], int row, int col);
void player_move(char arr[ROW][COL], int row, int col);
void computer_move(char arr[ROW][COL], int row, int col);
char Iswin(char arr[ROW][COL], int row, int col);

用c语言实现三子棋的更多相关文章

  1. C语言简易三子棋

    这是本人依据现学知识写的简易三子棋,也不是那么简洁明了,望大佬指点 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include&l ...

  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. 51nod 1995 三子棋

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

  8. P1838 三子棋I

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

  9. React + Ts 实现三子棋小游戏

    在这里阅读效果更佳 还记得当年和同桌在草稿纸上下三子棋的时光吗 今天我们就用代码来重温一下年少(假设你有react基础,没有也行,只要你会三大框架的任意一种,上手react不难) 游戏规则 双方各执一 ...

随机推荐

  1. Python鸭子类型思想

    动态语言中经常提到鸭子类型,所谓鸭子类型就是:如果走起路来像鸭子,叫起来也像鸭子,那么它就是鸭子(If it walks like a duck and quacks like a duck, it ...

  2. SpringBoot集成篇(二) 异步调用Async

    什么是异步调用? 异步调用是相对于同步调用而言的,同步调用是指程序按预定顺序一步步执行,每一步必须等到上一步执行完后才能执行,异步调用则无需等待上一步程序执行完即可执行. 如何实现异步调用? 多线程, ...

  3. [开源,学习,分享]UWP第三方简书客户端分享

    简介 Windows10正式版发布到现在,我利用零零碎碎的一些时间对UWP进行一些学习,也基于这门技术开发了一个第三方的简书App. 基本界面 优酷视频: http://v.youku.com/v_s ...

  4. 前端之css笔记2

    1 属性选择器 <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...

  5. linux CentOS 7 安装 RabbitMQ Erlang 21.0

    1. 安装erlang 安装依赖环境 yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel unixO ...

  6. asp.net 中长尾链接实现推送 -- comet

    一般需求推送服务时,都会去第三方拿推送组件,如”极光“,”百度“,”小米"什么的,自己用.net实现推送服务端需要面对很多问题,比如C10K,但是企业内部使用往往用不了10K的链接,有个1K ...

  7. UVa 10382 Watering Grass (区间覆盖贪心问题+数学)

    题意:有一块长为l,宽为w的草地,在其中心线有n个喷水装置,每个装置可喷出以p为中心以r为半径的圆, 选择尽量少的装置,把草地全部润湿. 析:我个去啊,做的真恶心,看起来很简单,实际上有n多个坑啊,首 ...

  8. js基础学习笔记(五)

    多种选择(Switch语句) 当有很多种选项的时候,switch比if else使用更方便. 语法: switch(表达式) { case值1: 执行代码块 1 break; case值2: 执行代码 ...

  9. c++内存管理方式

    概述 本章总结一些关于个人对内存管理的理解,主要包括如下内容: 内存管理原则 优秀的接口 智能指针的作用在哪里? 内存管理原则 学c++的同学都知道这个内存管理原则,就是“谁创建,谁释放”或者说“谁申 ...

  10. 安装Tomcat时 ,设置JAVA_HOME和JRE_HOME

    http://blog.csdn.net/xw370457549/article/details/21638827 安装tomcat后,运行startup.bat提示JAVA_HOME.JRE_HOM ...