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. 构造函数constructor 与析构函数destructor(一)

    构造函数定义:构造函数c++中在创建对象时自动调用,用来初始化对象的特殊函数. (1)构造函数的名字必须与类的名字相同,不能有返回值,哪怕是void 也不行. (2)通常情况下构造函数应声明为公有函数 ...

  2. VS2010 MFC对话框程序用CButtonST给按钮添加图标

    也许是VS版本的关系,CButtonST中的BCMenu两个文件是无法编译通过的.   1.拷贝下载的CButtonST(我下载的v3.9)中的BtnST.h和BtnST.cpp文件到自己项目目录下. ...

  3. idea中实体类序列化后生成序列化版本ID的方法

    为什么要添加序列化版本ID了(serialVersionUID)? 通过判断实体类的serialVersionUID来验证版本一致性的.在进行反序列化时,JVM会把传来的字节流中的serialVers ...

  4. simpson法计算arctan(1)-即pi/4

    对1/(1+x^2) 进行0到1的积分即使pi/4; 采用simpson方法 Func<double,double> func=(x)=>{ return 1/(1+ Math.Po ...

  5. docker入门实战

    基本概念 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上. Docker是一个重新定义了程序开发测试.交付和 ...

  6. Java IO之字符流

    public static void main(String[] args) { FileWriter fw = null; try { fw = new FileWriter("/User ...

  7. 日期 时间选择器(DatePicker和TimePicker)实现用户选择

    日期和时间 作者的设计TimePicker时,大小分布不合理,我调整宽度为match-parent高度为wrap-parent就可以了. public class MainActivity exten ...

  8. (匹配 二维建图) Antenna Placement --POJ --3020

    链接: http://poj.org/problem?id=3020 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82834#probl ...

  9. hdu5883 The Best Path 2016-09-21 21:31 92人阅读 评论(0) 收藏

    The Best Path Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) To ...

  10. java Object解析

    java Object是所有对象的根父类,所有对象都直接或间接集成自该类. java 的Object类也比较简单,有equals(Object).toString().finalize() java方 ...