C语言编写三子棋完整代码(分三个文件)
来源:互联网 发布:投影仪检测软件 编辑:程序博客网 时间:2024/06/05 01:34
1.game.h 头文件
#ifndef __GAME_H__ //防止头文件被重复引用#define __GAME_H__#include <stdio.h>#include <string.h>#include <windows.h>#include <time.h>#define ROW 3#define COL 3void InitBoard(char arr[ROW][COL], int row, int col);void Display(char arr[ROW][COL], int row, int col);void Manplay(char arr[ROW][COL], int row, int col);char is_Win(char arr[ROW][COL], int row, int col);void Computerplay(char arr[ROW][COL], int row, int col);#endif //__GAME_H__
2.game.c 游戏所有的实现代码
#include "game.h"void InitBoard(char arr[ROW][COL], int row, int col)//初始化棋盘,把二维数组的值全部初始化为空格{ memset(arr, ' ', sizeof(arr[0][0])*col*row);}void Display(char arr[ROW][COL], int row, int col)//打印棋盘{ int i = 0; for (i = 0; i < row; ++i) { printf(" %c | %c | %c \n",arr[i][0],arr[i][1],arr[i][2]); if (i != row - 1) { printf("--- --- ---\n"); } } printf("\n");}void Manplay(char arr[ROW][COL], int row, int col)//玩家走{ int i = 0; int j = 0; while (1) { printf("请输入坐标(x,y):"); scanf_s("%d%d", &i, &j); if (i >= 1 && i <= 3 && j >= 1 && j <= 3) { if (arr[i - 1][j - 1] == ' ')//判断位置是否为空 { arr[i - 1][j - 1] = 'X'; break; } else { printf("该位置被占\n"); } } else { printf("坐标不合法\n"); } }}int is_Full(char arr[ROW][COL], int row, int col)//判断棋盘是否满{ int i = 0; int j = 0; for (i = 0; i < row; ++i) { for (j = 0; j < col; ++j) { if (arr[i][j] == ' ') { return 0; } } } return 1;}char is_Win(char arr[ROW][COL], int row, int col)//判赢{ int j = 0; int i = 0; for (i = 0; i < row; i++) //判断行 { if ((arr[i][0] == arr[i][1]) && (arr[i][1] == arr[i][2]) && (arr[i][1]) != ' ') { return arr[i][1]; } } for (j = 0; j < col; j++) //判断列 { if ((arr[0][j] == arr[1][j]) && (arr[1][j] == arr[2][j]) && (arr[1][j]) != ' ') { return arr[1][j]; } } if ((arr[0][0] == arr[1][1]) && (arr[1][1] == arr[2][2]) && (arr[0][0] != ' ')) //判断斜列 { return arr[1][1]; } else if ((arr[0][2] == arr[1][1]) && (arr[1][1] == arr[2][0]) && (arr[0][0] != ' ')) { return arr[1][1]; } else if (is_Full(arr, row, col) == 1) { return 'w'; } else { return ' '; }}void Computerplay(char arr[ROW][COL], int row, int col)//电脑走{ int i = 0; int j = 0; while (1) { i = rand() % 3; j = rand() % 3; if (arr[i][j] == ' ') { arr[i][j] = 'O'; break; } } system("cls");//清屏}
3.Tic Tac Toe.c 游戏测试代码
#include "game.h"void game(){ char ret = ' '; char Board[ROW][COL] = { 0 }; InitBoard(Board, ROW, COL); Display(Board, ROW, COL); srand((unsigned int) time(NULL)); while (1) { Manplay(Board, ROW, COL); Display(Board, ROW, COL); ret = is_Win(Board, ROW, COL); if (ret != ' ') break; Computerplay(Board, ROW, COL); Display(Board, ROW, COL); ret = is_Win(Board, ROW, COL); if (ret != ' ') break; } if (ret == 'X') printf("这局玩家胜利\n"); else if (ret == 'O') printf("这局电脑胜利\n"); else if (ret == 'w') { printf("平局\n"); }}void menu(){ printf("**********************************\n"); printf("***** 1. play 2. exit ******\n"); printf("**********************************\n");}void test(){ do { menu(); printf("请选择:"); int input = 0; scanf_s("%d", &input); switch (input) { case 1: game(); break; case 2: exit(0); break; default: printf("输入错误\n"); break; } } while (1);}int main(){ test();}
阅读全文
1 0
- C语言编写三子棋完整代码(分三个文件)
- C语言代码编写
- C语言代码5(三个数从大到小输出)
- C语言代码编写经验
- C语言之学生管理系统代码(完整)
- 编写一个从三个数中找出最大值的函数。(C语言)
- linux中用C语言实现的自动在文件末尾不断添加记录的完整代码
- c语言编写三子棋
- c代码实现--完整读取整个文件
- 用C语言编写贪吃蛇代码(难度可选)
- C语言代码编写技巧(1)
- 我是这样编写C语言代码的
- C语言编写代码绘制圆
- 【C语言】编写模拟人员信息系统(结构体,文件)
- 用C语言编写排雷游戏(多文件)
- 调用C语言编写的DLL文件
- 编写自己的C语言头文件
- 编写自己的C语言头文件
- 统计每年每月的信息
- 滚粗了,拜拜
- SpringMvc 页面跳转
- [51Nod 2026] Gcd and Lcm
- 24_多线程
- C语言编写三子棋完整代码(分三个文件)
- jenkins构建Docker 镜像(基于Jenkins的Docker镜像及Jenkins插件)
- stack
- Vmware下CentOS7最小化安装
- Java8新特性
- window下的Python 环境配置
- 2015蓝桥杯A组C/C++第一题方程整数解
- 考试GG论 Week1
- 2017-2018 ACM-ICPC, NEERC, Southern Subregional Contest H. Palindromic Cut