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. Linux应用开发入门(转)

    今天偶然看到这篇文章,做个入门了解还是不错的. 前一阵子在QQ上和朋友聊天的时候,总会看到有人说Linux上的应用程序开发是高手才可以完成的,而且这种“迷信”在目前似乎还很普遍.然而,情况并不是这样的 ...

  2. 2018.10.15 bzoj4570: [Scoi2016]妖怪(凸包)

    传送门 不得不说这题有点东西啊. 看到题第一眼二分,用二次函数求范围来进行checkcheckcheck,20分滚粗了233. 于是开始思考正解. 发现可以把每只怪物的二元组属性看成二维坐标. 这时对 ...

  3. 2018.08.15 bzoj3747: [POI2015]Kinoman(线段树)

    传送门 简单题. 先不管时间复杂度看看怎么做. 对于一段区间[l,r],如果从右端加入一个数a[r+1],对这个区间有什么影响?显然如果区间中已经有了a[r+1]这个数就会产生-a[i+1]的影响,否 ...

  4. 第一个Django应用

    Django教程:http://www.liujiangblog.com/course/django/2 第一个Django应用 该应用包括以下两个部分: 一个可以让公众用户进行投票和查看投票结果的站 ...

  5. Docker mysql启动自动按顺序导入sql

    1.目录结构 -rw-r--r-- root root Jan : Dockerfile -rw-r--r-- root root Jan : initdb.sh drwxr-xr-x root ro ...

  6. A标签中传递的中文参数到Servlet 后台request.getParameter()接收时出现中文乱码

    package util; import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletRequ ...

  7. nvarchar,varchar 区别

        char    char是定长的,也就是当你输入的字符小于你指定的数目时,char(8),你输入的字符小于8时,它会再后面补空值.当你输入的字符大于指定的数时,它会截取超出的字符.   nva ...

  8. 百度上传插件(webupload)单文件(单图片)上传设置

    var uploader = WebUploader.create({                 //auto : true,                 swf : '${ctx}/sta ...

  9. Android线程和线程Handler基础一览

    线程概览 线程是任何多任务系统的基石.可以被认为是一个主进程的多个子进程.这样做的目的就是了增加应用的性能. 应用主线程 当一个Android应用被打开的时候,系统会默认开辟一个线程.这个线程就被叫做 ...

  10. "名字好难想队“团队项目

    团队展示 1.队名:名字好难想队 2.队员介绍 姓名 学号 岗位 黎扬乐(组长) 3116004689 程序,测试 李世潇 3116004690 策划,美术,动画 梁耀 3116004691 项目管理 ...