【C语言】实现一个好玩的三子棋

来源:互联网 发布:合工大网络视频课 编辑:程序博客网 时间:2024/05/19 22:01

想要用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 3int 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;}

下来我们就可以玩三子棋了

 
 


0 0
原创粉丝点击