用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不难) 游戏规则 双方各执一 ...
随机推荐
- part1:15-安装Linux系统到开发板
1.Qtopia简介 Qtopia是Trolltech公司为采用嵌入式Linux操作系统的消费电子设备而开发的综合应用平台,Qtopia包含完整的应用层.灵活的界面用户.窗口操作系统.应用程序启动程序 ...
- 2018.09.23 atcoder Boxes and Candies(贪心)
传送门 一道挺有意思的贪心. 从1到n依次满足条件. 注意要特判第一个数已经大于x的情况. 但是如何贪心吃呢? 如果靠左的数没有越界,我们吃靠右的数. 原因是下一次靠右的数就会成为靠左的数,相当于多贡 ...
- 2018.09.16 bzoj1176: [Balkan2007]Mokia(cdq分治)
传送门 调了半天发现是输出优化打错了求心理阴影体积233 这题很简单啊. 一个修改操作x如果对一个询问操作y有贡献那么有. tx<ty,Xx<=Xy,Yx<=Yy" rol ...
- Windows10和CentOS7双系统安装的一些小技巧
我个人是先安装好了win10系统,且win10是单独在一个120g的盘里:而centOS7则是安装在另一个500g的磁盘的其中的380g里: 这里要着重注意的是,500g里分成380g的盘不要在win ...
- (矩阵快速幂) Fibonacci -- poj -- 3070
链接: http://poj.org/problem?id=3070 Fibonacci Time Limit: 1000MS Memory Limit: 65536K Total Submi ...
- Hibernate的查询方式汇总
分别是HQL查询,对象化查询Criteria方法,动态查询DetachedCriteria,例子查询,sql查询,命名查询. 如果单纯的使用hibernate查询数据库只需要懂其中的一项就可以完成想要 ...
- 使用for in循环遍历json对象的数据
使用for in遍历json对象数据,如果数据中的名称有为数字的话,只对正整数有效,那么先会输出为正整数的数据,后面其他的会按照原来数据中定义的顺序不变输出. 针对名称为数字的json对象数据进行测试 ...
- 通过oracle闪回查看表中值的变更履历信息
http://www.oracle.com/technetwork/cn/articles/week1-10gdba-093837-zhs.html 得到电影而不是图片:闪回版本查询 不需要设置,立即 ...
- Oracle EBS - Setup: 配置文件Profile
http://blog.csdn.net/lfl6848433/article/details/8696939 Oracle EBS - Setup: 配置文件Profile 1.诊断Diagnost ...
- [FMX]在 FMX 程序中绘制单像素宽度的直线 [FMX]在 FMX 程序中绘制单像素宽度的直线
[FMX]在 FMX 程序中绘制单像素宽度的直线 2017-10-09 • Android.Delphi.教程 • 暂无评论 • swish •浏览 353 次 在前面的一篇文章中,我介绍了一种绘制低 ...