【C语言】实现一个好玩的三子棋
2016-10-11 21:12
429 查看
想要用C语言写一个简单的三子棋游戏,首先要打印出三字棋的布局,对棋盘进行初始化;
在玩游戏时,玩家和电脑进行对完,因此要设计玩家和电脑两部分;
电脑和玩家下完一个棋之后,则要进行判断棋盘是否满,以及玩家和电脑哪一边赢。
首先是头文件
game.h:
接下来是函数的实现,这一部分重要的是判断棋盘是否满和判断玩家和电脑哪一方赢
在电脑玩的时候要用到随机数产生1--3之间的随机数
game.c
最后是测试函数:
text.c
下来我们就可以玩三子棋了
在玩游戏时,玩家和电脑进行对完,因此要设计玩家和电脑两部分;
电脑和玩家下完一个棋之后,则要进行判断棋盘是否满,以及玩家和电脑哪一边赢。
首先是头文件
game.h:
#pragma once #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> #include<time.h> #define rows 3 #define cols 3 int print_chessboard(char chessboard[rows][cols]);//打印棋盘 int init(char chessboard[rows][cols]);// 初始化棋盘 int menu();//菜单函数 int ManPlay(char chessboard[rows][cols]);//玩家玩 void CalPlay(char chessboard[rows][cols]);//电脑玩 int chess_full(char chessboard[rows][cols]);//判断棋盘是否满 int Judge(char chessboard[rows][cols]);//判断输赢 void Game(char chessboard[rows][cols]);//游戏
接下来是函数的实现,这一部分重要的是判断棋盘是否满和判断玩家和电脑哪一方赢
在电脑玩的时候要用到随机数产生1--3之间的随机数
game.c
#include"game.h" int count = 9; //打印棋盘 int print_chessboard(char chessboard[rows][cols]) { int i = 0; for (i = 0; i < rows - 1; i++) { printf(" %c | %c | %c \n", chessboard[i][0], chessboard[i][1], chessboard[i][2]); printf("___|___|___\n"); } printf(" %c | %c | %c \n", chessboard[2][0], chessboard[2][1], chessboard[2][2]); printf(" | | \n"); return 0; } //初始化棋盘 int init(char chessboard[rows][cols]) { int i = 0; int j = 0; for (i = 0; i < rows; i++) { for (j = 0; j < cols; j++) { chessboard[i][j] = ' '; } } return 0; } //菜单函数 int menu() { printf("********************************************\n"); printf("********************************************\n"); printf("*************welcome to sanziqi*************\n"); printf("************* 1. play *************\n"); printf("************* 0. exit *************\n"); printf("********************************************\n"); printf("********************************************\n"); return 0; } //玩家玩 int ManPlay(char chessboard[rows][cols]) { int x = 0, y = 0; int ret = 0; printf("请输入坐标:\n"); scanf("%d%d", &x, &y); if (x<1 || x>3 || y<1 || y>3 || chessboard[x - 1][y - 1] != ' ') { printf("此处不能下棋!\n"); ManPlay(chessboard); } else { chessboard[x - 1][y - 1] = 'X'; count--; } return 0; } //电脑玩 void CalPlay(char chessboard[rows][cols]) { printf("电脑下棋:\n"); int x = 0; int y = 0; srand((unsigned)time(NULL)); x = rand() % 3; y = rand() % 3; while (chessboard[x][y] != ' ') { x = rand() % 3; y = rand() % 3; } chessboard[x][y] = 'O'; count--; } //判断棋盘是否满 int chess_full(char chessboard[rows][cols]) { if (count == 0) return 1; return 0; } //判断输赢 int Judge(char chessboard[rows][cols]) { int ret = 2; int i = 0; if ((chessboard[0][0] == chessboard[1][1]) && (chessboard[1][1] == chessboard[2][2])) { if (chessboard[1][1] == 'X') { ret = 1; } if (chessboard[1][1] == 'O') { ret = 0; } } if ((chessboard[0][2] == chessboard[1][1]) && (chessboard[1][1] == chessboard[2][0])) { if (chessboard[1][1] == 'X') { ret = 1; } if (chessboard[1][1] == 'O') { ret = 0; } } for (i = 0; i < rows; i++) { if ((chessboard[i][0] == chessboard[i][1]) && (chessboard[i][1] == chessboard[i][2])) { if (chessboard[i][1] == 'X') { ret = 1; } if (chessboard[i][1] == 'O') { ret = 0; } } } for (i = 0; i < rows; i++) { if ((chessboard[0][i] == chessboard[1][i]) && (chessboard[1][i] == chessboard[2][i])) { if (chessboard[1][i] == 'X') { ret = 1; } if (chessboard[1][i] == 'O') { ret = 0; } } } return ret; } //游戏 void Game(char chessboard[rows][cols]) { int i = 0; int ret = 0; // char chessboard[rows][cols]; init(chessboard); print_chessboard(chessboard); while ((chess_full(chessboard) == 0)) { ManPlay(chessboard); ret = Judge(chessboard); if (ret == 1) { printf("玩家赢了!\n"); break; } else if (ret == 0) { printf("电脑赢了!\n"); break; } CalPlay(chessboard); print_chessboard(chessboard); ret = Judge(chessboard); if (ret == 1) { printf("玩家赢了!\n"); break; } else if (ret == 0) { printf("电脑赢了!\n"); break; } } }
最后是测试函数:
text.c
#include"game.h" int main() { int input = 0; char chessboard[rows][cols]; menu(); while (1) { printf("请选择:"); scanf("%d", &input); if (input == 1) { printf("进入游戏\n"); Game(chessboard); break; } else if (input == 0) { printf("退出游戏!\n"); exit(0); break; } else { printf("输入有误!\n"); } } return 0; }
下来我们就可以玩三子棋了
相关文章推荐
- 用C语言实现一个类似学籍管理系统的 e协 管理系统beta ( 正在完善中...)
- 用C语言实现一个简单的HTTP客户端(HTTP Client)
- 转载的标准文档:C语言实现一个简单的单向链表list
- 我自己编的一个c语言小程序:银行基本功能的实现
- 用C语言实现一个简单的HTTP客户端(HTTP Client)
- 一个C语言实现不含递归的高效快速排序算法
- 一个关于去除数组重复元素的问题(C语言实现)
- 自己写的,用c语言实现的一个数组存储的线性表
- C语言:实现N个整数排序,并插入一个整数!
- 用C语言实现一个revert函数,它的功能是将输入的字符串在原串上倒序后返回
- 一个简单的加密算法Kaiser(C语言实现)
- 一个简单的HashMap C语言实现
- 一个简单的HashMap C语言实现
- 链表中每个结点的data域存放一个二进制位。并在此链表上实现对二进制数加1的运算。 用C语言编写 用以存放输入的二进制数 建立 一个带头结点的线性链表
- C语言实现一个四叉树quadtree
- 一个简单用C语言实现的日志函数
- 一个UUID生成算法的C语言实现 --- WIN32版本
- C语言实现一个简单的单向链表list
- 用c语言实现一个文件切割器
- 用C语言实现一个revert函数,它的功能是将输入的字符串在原串上倒序后返回...