C语言—三子棋
来源:互联网 发布:网络销售的工资待遇 编辑:程序博客网 时间:2024/06/17 13:38
使用工具:VS2017
代码分为三部分 game.h(函数声明) game.c(实现函数功能) test.c(main函数)
棋盘为3*3的矩阵
规则:
1.每回合玩家与电脑只能放置一枚棋子
2.已有棋子的位置不能再放置棋子
3.若有一方的三枚棋子可连城一条直线,则胜利
4.若棋盘棋子已经布满,但是双方没有一方胜利,则平局
注:1.此程序设计的电脑走的方式是产生一个随机值作为坐标,较为简单,可改进,让电脑更加智能
2.#define _CRT_SECURE_NO_WARNINGS 这句代码是为了不让scanf 报错
game.h部分
#ifndef __GAME_H__#define __GAME_H__#define ROL 3 //行#define ROW 3 //列#include<stdio.h>#include<stdlib.h>#include<time.h>#include <windows.h> void menu(void);//开始菜单void init(char arr[ROL][ROW], int rol, int row);//初始化数组void checkerboard(void);//游戏棋盘void playermove(char arr[ROL][ROW],int rol,int row); //玩家走void comermove(char arr[ROL][ROW], int rol, int row); //电脑走int win(char arr[ROL][ROW], int rol, int row); //判断胜利#endif // __GAME_H__
game.c部分
#define _CRT_SECURE_NO_WARNINGS#include"game.h"void menu(void)//开始菜单{ printf("************************\n"); printf("*** 1.开始 0.退出 ***\n"); printf("************************\n\n");}void init(char arr[ROL][ROW], int rol, int row)//初始化数组{ int i = 0; int j = 0; for (i = 0; i < rol; i++) { for (j = 0; j < row; j++) { arr[i][j] = ' ';//将数组的所有元素初始化为一个空格 } }} void checkerboard(char arr[ROL][ROW], int rol, int row)//打印游戏棋盘{ int i = 0; for (i = 0; i < rol; i++) { printf("************************\n"); printf("* | | *\n"); printf("* %c | %c | %c *\n",arr[i][0],arr[i][1],arr[i][2]); printf("* | | *\n"); if (2 == i) printf("************************\n"); }} void playermove(char arr[ROL][ROW], int rol, int row)//玩家玩 { int x = -1; int y = -1; while (1) { printf("玩家走\n请输入坐标:>"); scanf("%d%d", &x, &y); if ((x - 1) < rol && (x - 1) >= 0 && (y - 1) < row && (y - 1) >= 0) { if (arr[x-1][y-1] == ' ') { arr[x - 1][y - 1] = 'X'; break; } else { printf("此坐标已有棋子,请重新选择坐标!\n"); } } else { printf("输入坐标错误!\n"); } } } void comermove(char arr[ROL][ROW], int rol, int row)//电脑走 { int x = -1; int y = -1; printf("电脑走:>\n"); while (1) { x = rand() % rol; y = rand() % row; //取余数是为了保证x,y在棋盘的范围内 即 0 1 2 if (x< rol && x >= 0 && y < row && y >= 0) { if (arr[x][y] == ' ') { arr[x][y] = '@'; //电脑的棋子用@代替 break; } } } } //判断输赢 int win(char arr[ROL][ROW], int rol, int row) { int i = 0; int j = 0; int execute = 1; for (i = 0; i < rol; i++) { for (j = 0; j < row; j++) { if (arr[i][j] == 'X'&&arr[i + 1][j + 1] == 'X'&&arr[i + 2][j + 2] == 'X'&& i<(rol-2)&& i<(row - 2) || arr[i][j] == 'X'&&arr[i][j + 1] == 'X'&&arr[i][j + 2] == 'X'&&j<(row-2) || arr[i][j] == 'X'&&arr[i + 1][j] == 'X'&&arr[i + 2][j] == 'X'&&i<(rol-2) || arr[i][j] == 'X'&&arr[i + 1][j - 1] == 'X'&&arr[i + 2][j - 2] == 'X'&&i<(rol-2)&&(j>=2)) // 判断玩家是否赢 { printf("恭喜你赢了!\n"); return 1; } } } for (i = 0; i < rol; i++) { for (j = 0; j < row; j++) { if (arr[i][j] == '@'&&arr[i + 1][j + 1] == '@'&&arr[i + 2][j + 2] == '@'&& i<(rol - 2) && i<(row - 2) || arr[i][j] == '@'&&arr[i][j + 1] == '@'&&arr[i][j + 2] == '@'&&j<(row - 2) || arr[i][j] == '@'&&arr[i + 1][j] == '@'&&arr[i + 2][j] == '@'&&i<(rol - 2) || arr[i][j] == '@'&&arr[i + 1][j - 1] == '@'&&arr[i + 2][j - 2] == '@' && i<(rol - 2) && (j >= 2))// 判断电脑是否赢 { printf("电脑赢了!\n"); return 1; } } } for (i = 0; i < rol; i++) { for (j = 0; j < row; j++) { if (arr[i][j] == ' ') { execute = 0; } } } if(1 == execute) { printf("平局!\n"); return 1; } return 0; }
test.c部分
#define _CRT_SECURE_NO_WARNINGS#include"game.h"int main(){ int start = 0; int i = 0; int w = -1; char arr[ROL][ROW] = { 0 }; srand((unsigned int)time(NULL)); while(1) { if (i == 0) { menu(); init(arr, ROL, ROW); printf("请选择是否开始游戏(1/0):>"); } i = 1; //i用来控制 if (i == 0)中的语句是否进行 scanf("%d", &start); switch (start) { //case 1: 表示游戏开始 //case 0: 表示退出游戏 // default: 表示输入错误 case 1: checkerboard(arr, ROL, ROW); while (1) { playermove(arr, ROL, ROW); system("cls"); checkerboard(arr, ROL, ROW); system("cls"); if(win(arr, ROL, ROW)==1) { i = 0; break; } comermove(arr, ROL, ROW); checkerboard(arr, ROL, ROW); if (win(arr, ROL, ROW) == 1) { i = 0; break; } } break; case 0: printf("游戏退出!\n"); system("pause"); return 0; break; default: printf("输入错误!请重新输入:"); break; } } return 0;}
游戏界面
开始游戏
游戏胜利,是否再次游戏
阅读全文
0 0
- c语言—三子棋
- C语言—三子棋
- C语言——三子棋
- C语言实现三子棋——详解
- C语言之三子棋
- C语言实现三子棋
- C语言实现三子棋
- C语言小游戏"三子棋"
- 三子棋(C语言)
- C语言-三子棋游戏
- c语言编写三子棋
- c语言实现三子棋
- C语言实现三子棋
- 【C语言】三子棋游戏
- C语言实现三子棋
- C语言实现三子棋
- 三子棋小游戏--C语言
- c语言三子棋游戏
- java可变长参数列表
- 浅谈一下mshta在CVE-2017-11882里的命令构造
- 主线程和子线程之间的交互的实现
- Makefile经典教程
- 哈希查找之平方探测
- C语言—三子棋
- C++11新特性emplace操作
- Java面试题集(1-50)——附完整答案
- SpringMVC之类型转换Converter
- 高可用缓存
- 渗透经验 | Windows下载远程Payload并执行代码的各种技巧
- JVM核心之JVM运行和类加载全过程
- 算法训练 输出米字形
- [算法分析与设计] leetcode 每周一题: 312. Burst Balloons