初级三子棋程序
来源:互联网 发布:济南java工程师待遇 编辑:程序博客网 时间:2024/06/10 13:25
game.h ##//头文件申明函数
#ifndef _GAME_H_#define _GAME_H_#include<stdio.h>#include<stdlib.h>#include<time.h>#define ROW 3//棋盘的行数#define COL 3//棋盘的列数void InitBoard(char board[ROW][COL], int row, int col);//初始化棋盘void PutBoard(char board[ROW][COL],int x,int y,char flag);//打印棋盘int SorkBoard(char board[ROW][COL], int row, int col);//判断输赢int Win(char board[ROW][COL]);#endif
#ifndef _头文件名大写_H_#define _头文件名大写_H_#endif //在头文件中,如果你有两个C文件。这两个c文件中都include了同一个头文件,而编译时,这两个c文件要一同编译成一个可运行文件,于是问题来了,大量的声明冲突。如果用以上三行代码,就可以避免冲突发生。
game.c
#include "game.h";/* 函数作用:初始化一个棋盘 控制打印出九宫格,来表示棋盘*/void InitBoard(char board[ROW][COL], int row, int col){ int i = 0; for (i = 0; i < row; i++) { printf(" %c | %c | %c \n", board[i][0], board[i][1], board[i][2]); if (i < row - 1) { printf("---|---|---\n"); } }}/* 函数作用:打印落子后的棋盘 *玩家落子(输入坐标的方式)为0 *电脑落子(随机坐标)为X*/void PutBoard(char board[ROW][COL],int x,int y,char flag){ board[x][y] = flag; InitBoard(board, ROW, COL);}/* 函数作用:判断游戏结束 分四种情况: *相同三个子同一行 *相同三个字同一列 *两个斜边同一个子 *棋盘满*/int SorkBoard(char board[ROW][COL], int row, int col){ char flag = 0; //一行三个字符一样 int i = 0; int k = 0; int j = 0; for (i = 0; i < col; i++) { if (board[i][0] == board[i][1] && board[i][1] == board[i][2]) { flag=board[i][0]; return flag; } if (board[0][i] == board[1][i] && board[1][i] == board[2][i]) { flag=board[0][i]; return flag; } } if (board[0][0] == board[1][1] && board[1][1] == board[2][2]) { flag=board[1][1]; return flag; } if (board[0][2] == board[1][1] && board[1][1] == board[2][0]) { flag=board[2][0]; return flag; } for (i = 0; i < row;i++) for (j = 0; j < col; j++) { if (board[i][j] == '0' || board[i][j] == 'x') k++; } if (k==ROW*COL) return k;}/* 函数作用:判断输赢 结局分四种情况: *玩家赢 *电脑赢 *平局 *继续游戏*/int Win(char board[ROW][COL]){ //判断输赢 if (SorkBoard(board, ROW, COL) == '0') { printf("玩家赢!\n"); return 0; } else if (SorkBoard(board, ROW, COL) == 'x') { printf("电脑赢!\n"); return 0; } else if (SorkBoard(board, ROW, COL) == ROW*COL) { printf("平局!\n"); return 0; } else return 1;}
游戏.c
#include "game.h";/* 函数作用:打印菜单*/void menu(){ printf("*****************************************\n"); printf("******* 1.play 0.exit ********\n"); printf("*****************************************\n");}void game(char board[ROW][COL]){ while (1) { //玩家下棋 int x = 0; int y = 0; char flag = 0; printf("请玩家下棋(输入坐标):"); scanf("%d%d", &x, &y); flag = '0'; while (board[x][y] == '0'||board[x][y] == 'x') { printf("输入有误,请重新输入:\n"); scanf("%d%d", &x, &y); }//如果坐标已经被占用,重新生成坐标 PutBoard(board, x, y, flag); if (Win(board) == 0)//判断输赢 break; //电脑下棋 x = rand() % ROW;//生成随机0-2的数 y = rand() % COL;//生成随机0-2的数 flag = 'x'; while (board[x][y] == '0'||board[x][y] == 'x') { x = rand() % ROW; y = rand() % COL; }//如果坐标已经被占用,重新生成坐标 PutBoard(board, x, y, flag); if (Win(board) == 0)//判断输赢 break; }}int main(){ char board[ROW][COL] = { 0 };//三子棋的实现其实是基于二维数组的 int n = 0; srand((unsigned)time(NULL));//生成随机数 do { menu(); while (scanf("%d", &n) == 0) { printf("输入错误!\n"); getchar(); }//如果输出的是字符,提示输出错误 if (n == 1) { memset(board, ' ', ROW*COL); InitBoard(board, ROW, COL); game(board); } else if (n == 0) { printf("退出游戏!\n"); break; } else { printf("输入错误,请重新输入:\n"); } } while (1); system("pause"); return 0;}
阅读全文
1 0
- 初级三子棋程序
- 初级程序的心得
- java程序初级理解
- 初级程序的日常
- 聊天程序初级版
- WebService初级入门小程序
- 程序题练习---初级篇
- 初级安卓程序试题
- halcon程序初级学习(一)
- c语言初级小程序
- 微信小程序开发--初级实践
- 微信小程序初级篇-01
- 微信小程序初级篇-02
- 微信小程序初级篇-01
- 微信小程序初级篇-02
- 程序入手-奇怪的初级问题!
- 【.NET 程序初级汉化流程一例】
- 关于vector的一段自用程序--初级
- 记:Android原生APP微信支付返回-1的解决方案
- 机器学习笔记(8)VC维 (vc dimension)
- vamare12安装osx10.11
- iOS 设置badgeValue 的小技巧
- PHP基础知识点
- 初级三子棋程序
- java多线程之ThreadLocal源码分析
- AJAX上传图片
- C语言动态内存分配函数解析
- 记录平时做题的需要注意的小细节(坑点)
- 直播 | Docker在测试场景中的应用
- AWS首席执行官Andy Jassy介绍AWS容器生态系统
- ios UIButton 热区范围、文字图片位置等拓展类实现
- SourceTree