用c语言实现三子棋
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语言实现三子棋的更多相关文章
- C语言简易三子棋
这是本人依据现学知识写的简易三子棋,也不是那么简洁明了,望大佬指点 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include&l ...
- C语言数组实现三子棋
C语言实现三子棋(通过数组) 需要包含的头文件 #include <stdio.h> #include <stdlib.h> #include <time.h> 创 ...
- c语言实现:三子棋
问题描述:两个游戏者在3*3棋盘里轮流作标记,如果一个人在行,列或者两个对角线可以作三个标记,则为获胜. 我们首先得打印菜单供玩家选择(可以选择玩游戏或者退出游戏) void menu() { pri ...
- c语言小游戏-三子棋的完成
三子棋的实现 一.实现思路 1.初始化数组 三子棋是九宫格的格式,所以用二维数组接收数据.用‘O’代表电脑下的子,‘X’代表玩家下的子.未下子的时候初始化 ’ ‘(space).则二维数组为“char ...
- 51Nod:1995 三子棋
1995 三子棋 题目来源: syu校赛 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 小的时候大家一定玩过"井"字棋吧.也就是在 ...
- C语言之三字棋的简单实现及扩展
C语言之三字棋的简单实现及扩展 在我们学习完数组之后,我们完全可以利用数组相关知识来写一个微小型的游戏,比如说今天所说的--三子棋. 大纲: 文件组成 实现 完整代码展示 扩展 即: 一.文件 ...
- 51nod 1995 三子棋
小的时候大家一定玩过“井”字棋吧.也就是在九宫格中,只要任意行.列,或者任意连续对角线上面出现三个相同的,就能获胜.现在小明和小花也在玩三子棋,但是他们不是在九宫格里,而是在3×4的格子里面.现在小明 ...
- P1838 三子棋I
题目描述 小a和uim喜欢互相切磋三子棋.三子棋大家都玩过是吗?就是在九宫格里面OOXX(别想歪了),谁连成3个就赢了. 由于小a比较愚蠢,uim总是让他先. 我们用9个数字表示棋盘位置: 123 4 ...
- React + Ts 实现三子棋小游戏
在这里阅读效果更佳 还记得当年和同桌在草稿纸上下三子棋的时光吗 今天我们就用代码来重温一下年少(假设你有react基础,没有也行,只要你会三大框架的任意一种,上手react不难) 游戏规则 双方各执一 ...
随机推荐
- IE浏览器调用jquery需要注意的小问题
今天在进行前端重构的时候发现了一个非常奇怪的浏览器兼容性问题,我想在网页上放一个JS的特效,于是下载了jquery-easyui,经过修改完成所需要的效果后,准备放入项目中,发现在IE浏览器中无法运行 ...
- 项目解析1、登录验证用户是否存在 储备知识 Python 之 decorator装饰器
下面是我对 装饰器 这一小节的总结, 以及自己的理解. 注:[本文中的代码参考上述教程] 很多时候我会把Python的很多语法与C++相融合,在C++中,函数的名称即为函数的地址,我们可以通过定义成为 ...
- Spring boot 出现的时间
Spring 4.0 ~ 4.3 不管商业操作如何,Spring还是继续发展, 2013年12月, Spring4.0 发布,这个版本开始支持JDK8 , 甚至比JDK8 的GA版本还要早3个月! 2 ...
- Java动态代理探讨
代理模式: 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事后处理消息等.通过代理模式,可以延迟创建对象, ...
- 前端程序员经常忽视的一个 JavaScript 面试题
题目 function Foo() { getName = function () { alert (1); }; return this; } Foo.getName = function () { ...
- PHP中的mb_convert_encoding与iconv函数介绍
php传输乱码 mb_convert_encoding这个函数是用来转换编码的.原来一直对程序编码这一概念不理解,不过现在好像有点开窍了. 不过英文一般不会存在编码问题,只有中文数据才会有这个问题.比 ...
- 端口模式(IN,OUT,INOUT,BUFFER)
in: OUT: INOUT: BUFFER:缓冲模式,与OUT类似可作为输出使用,但也可把输出的信号作为输入使用.
- 201709020工作日记--synchronized、ReentrantLock、读写锁
1.reentrantLock java.util.concurrent.lock 中的Lock 框架是锁定的一个抽象,它允许把锁定的实现作为 Java 类,而不是作为语言的特性来实现.这就为Lock ...
- Spring mvc,jQuery和JSON数据交互
一.实验环境的搭建 1.Spring mvc jar. 导入spring mvc运行所需jar包.导入如下(有多余) 2.json的支持jar 3.加入jQuery. 选用jquery-3.0.0.m ...
- (原创)Hibernate 使用过程中(尤其是多对多关联中的级联保存和级联删除)的注意事项(基于项目的总结)
一.先上知识点: 1.hibernate多对多关联关系中最重要的参数是(基于配置文件xxx.hbm.xml文件形式): 1):inverse属性,如果设置inverse=“true”就代表让对方参与维 ...