C语言简易三子棋
这是本人依据现学知识写的简易三子棋,也不是那么简洁明了,望大佬指点
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#define ROW 3
#define COL 3
char chess_board[ROW][COL];
int PlayGame(int choice){
printf("************************\n");
printf("* 欢迎来到三子棋游戏 *\n");
printf("* 请您选择 *\n");
printf("* 1.开始游戏 *\n");
printf("* 2.离开游戏 *\n");
printf("************************\n");
while (){
scanf("%d", &choice);
if (choice == )
{
return ;
break;
}
else if (choice == )
{
return ;
break;
}
else
{
printf("输入非法,请重新输入!");
continue;
}
}
}
int Init(char a[ROW][COL]){
for (int row = ; row <ROW; row++){
for (int col = ; col < COL; col++)
{
a[row][col] = ' ';
}
}
return ;
}
void Print(char a[ROW][COL]){
printf(" \n");
for (int i = ; i < ROW; i++){
printf(" %c | %c | %c \n", a[i][], a[i][], a[i][]);
if (i != ){
printf("----|----|----\n");
}
}
}
void PlayerMove(char a[ROW][COL]){
int row = -;
int col = -;
while (){
printf("请您选择落子点坐标:");
scanf("%d %d", &row, &col);
if (row< || row> || col< || col>){
printf("输入非法,请重新输入!");
continue;
}
else if (a[row][col] == 'x' || a[row][col] == 'o')
{
printf("已有棋子,请重新选择坐标!");
continue;
}
else
{
a[row][col] = 'o';
break;
} }
}
int IsFull(char a[ROW][COL]){
int sum = ;
for (int row = ; row < ROW; row++)
{
for (int col = ; col < COL; col++)
{
if (a[row][col] != ' ')
{ sum++;
}
}
}
if (sum == ){
return ;
}
}
char Checkwinner(char a[ROW][COL]){
//1.判断三子 横 竖 斜
for (int row = ; row < ROW; row++){
if (a[row][] == a[row][] && a[row][] == a[row][] && a[row][] != ' ')
{
return 'p';
}
}
for (int col = ; col < COL; col++){
if (a[][col] == a[][col] && a[][col] == a[][col] && a[][col] != ' ')
{
return 'p';
}
}
if (a[][] == a[][] && a[][] == a[][] && a[][] != ' ')
{
return 'p';
}
if (a[][] == a[][] && a[][] == a[][] && a[][] != ' '){
return 'p';
}
} void ComputeMove(char a[ROW][COL]){
printf("请电脑落子!\n");
while (){
int col = rand() % ;
int row = rand() % ;
if (a[row][col] == ' ')
{
a[row][col] = 'x';
break;
}
else continue;
}
}
void Game(){
Init(chess_board);//2.棋盘初始化
Print(chess_board);//3.打印棋盘
while (){ PlayerMove(chess_board);//4.用户落子
Print(chess_board);
if (Checkwinner(chess_board) == 'p')
{
printf("玩家获胜!\n");
break;
}
if (IsFull(chess_board) == )//2.判断是否和棋
{
printf("平局!");
break;
}
ComputeMove(chess_board);//6.电脑随机落子
Print(chess_board);//3.打印棋盘
if (Checkwinner(chess_board) == 'p')
{
printf("电脑获胜!\n");
break;
} if (IsFull(chess_board) == )//2.判断是否和棋
{
printf("平局!\n");
break;
}
}
} int main(){
int choice = ;
if (PlayGame(choice) == ) { //1.选择是否开始游戏 a)开始 b)离开
Game(); }
system("pause");
}
C语言简易三子棋的更多相关文章
- 用c语言实现三子棋
1 game.c://实现三子棋的.c文件 #define _CRT_SECURE_NO_WARNINGS #include"game.h" void init_board(cha ...
- 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语言之三字棋的简单实现及扩展 在我们学习完数组之后,我们完全可以利用数组相关知识来写一个微小型的游戏,比如说今天所说的--三子棋. 大纲: 文件组成 实现 完整代码展示 扩展 即: 一.文件 ...
- Dart 语言简易教程系列
google Fuchsia系统 及 dart语言简介 在 InteIIiJ IDEA 中搭建 Dart 的开发环境 Dart Linux 开发环境搭建 Dart 语言简易教程(一) Dart 语言简 ...
- 51nod 1995 三子棋
小的时候大家一定玩过“井”字棋吧.也就是在九宫格中,只要任意行.列,或者任意连续对角线上面出现三个相同的,就能获胜.现在小明和小花也在玩三子棋,但是他们不是在九宫格里,而是在3×4的格子里面.现在小明 ...
- P1838 三子棋I
题目描述 小a和uim喜欢互相切磋三子棋.三子棋大家都玩过是吗?就是在九宫格里面OOXX(别想歪了),谁连成3个就赢了. 由于小a比较愚蠢,uim总是让他先. 我们用9个数字表示棋盘位置: 123 4 ...
随机推荐
- 实现UIView的无限旋转动画(非CALayer动画)
实现UIView的无限旋转动画(非CALayer动画) 效果: 素材: 源码: // // ViewController.m // Animation // // Created by YouXian ...
- 通过Windows Server 2008 R2建立iSCSI存储
名词解释:iSCSI技术是一种由IBM公司研究开发的,是一个供硬件设备使用的可以在IP协议的上层运行的SCSI指令集,这种指令集合可以实现在IP网络上运行 SCSI协议,使其能够在诸如高速千兆以太网上 ...
- ASP.NET 控件不可编辑
前台页面的解析后的html代码为disabled="disabled",而在后台我们需要设置控件的Enabled=false:即可.
- memcached的操作
memcached是一个高性能的分布式内存对象缓存系统,用于动态web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库次数,从而提高动态.数据库驱动网站的速度.memcached基于 ...
- 解析Java对象的equals()和hashCode()的使用
解析Java对象的equals()和hashCode()的使用 前言 在Java语言中,equals()和hashCode()两个函数的使用是紧密配合的,你要是自己设计其中一个,就要设计另外一个.在多 ...
- iOS动画暂停和继续-本质是速度控制和时间坐标转换
时间永不停止! 写一个CALayer的分类,控制动画的暂停与继续 extension CALayer { ///暂停动画 func pauseAnimation() { //取出当前时间,转成动画暂停 ...
- 【LGP5161】WD与数列
题目 也是可以用\(SAM\)来做的 我们发现要求原串不相交,那么就要求在差分序列里不相交并且不相邻 考虑一下\(SAM\),暴力做法自然是对每一个节点统计其所有\(endpos\)的影响 既然这样我 ...
- urllib库基本使用
#导入urllib库 import urllib.request #打开网址 file=urllib.request.urlopen("http://www.sohu.com/", ...
- 【idea】配置node
参考: http://blog.csdn.net/stubbornaccepted/article/details/71374673 http://www.cnblogs.com/duhuo/p/42 ...
- 一分钟掌握Spring中bean的生命周期!
Spring 中bean 的生命周期短暂吗? 在spring中,从BeanFactory或ApplicationContext取得的实例为Singleton,也就是预设为每一个Bean 的别名只能维持 ...