三子棋游戏

来源:互联网 发布:小米网络音箱 安卓 编辑:程序博客网 时间:2024/06/05 04:01

闲来无事,竟意外发现了三子棋游戏,顺便实现了这个过程,我们一起来看下。

三子棋的实现需要的是五个函数,我用了InitBoard(初始化棋盘函数),Display(打印棋盘函数),Player(玩家), Computer(电脑),Check_Full(判断棋盘是否已满,从而判断输赢)

game.h

#define _CRT_SECURE_NO_WARNINGS#ifndef __TEST_H__#define __TEST_H__#include <stdio.h>#include <stdlib.h>#include <time.h>#include <Windows.h>#define ROWS 3#define COLS 3void InitBoard(char[ROWS][COLS], int row, int cols);void Display(char[ROWS][COLS], int row, int cols);void Player(char[ROWS][COLS], int row, int cols);void Computer(char[ROWS][COLS], int row, int cols);int Check_Full(char[ROWS][COLS], int row, int cols);#endif
game.c

#define _CRT_SECURE_NO_WARNINGS#include "test.h"void InitBoard(char arr[ROWS][COLS], int rows, int cols) {    memset(arr, ' ', ROWS*COLS*sizeof(char));//这个函数是初始化棋盘; }void Display(char arr[ROWS][COLS], int rows, int cols){int i;for (i = 0; i < rows; i++){printf("——————\n");for (i = 0; i < cols; i++){printf(" %c | %c | %c |\n", arr[i][0], arr[i][1], arr[i][2]);printf("——————\n");}}}void Computer(char arr[ROWS][COLS], int rows, int cols){int i = 0;int j = 0;while (1){i = rand() % 4;//产生随机数,随机产生不同的数,每次必须产生不同的随机值;j = rand() % 4;if (arr[i - 1][j - 1] == ' '){arr[i - 1][j - 1] ='O';//"="是赋值;而"=="是判断break;}}Check_Full(arr, rows, cols);}void Player(char arr[ROWS][COLS], int rows, int cols){int x = 0;int y = 0;printf("输入你要放的棋子的坐标");scanf("%d %d", &x, &y);//%d只能表示输入一个数while (1){if ((x<4 && x>0) && (y<4 && y>0)){if (arr[x - 1][y - 1] == ' '){arr[x - 1][y - 1] = 'X';break;}else{printf("此处有棋子,请重新输入");scanf("%d %d", &x, &y);}}else{printf("坐标有误,请重新输入");scanf("%d", &x, &y);}     }Check_Full(arr, rows, cols);}int Check_Full(char arr[ROWS][COLS], int rows, int cols){int i = 0;int j = 0;for (i = 0; i < rows; i++){if ((arr[i][0] == arr[i][1]) && (arr[i][1] == arr[i][2]) && arr[i][0] != ' ')  // 行相同{return 0;}}for (i = 0; i < cols; i++){if ((arr[0][i] == arr[1][i]) && (arr[1][i] == arr[2][i]) && arr[0][i] != ' ')  //列相同{return 0;}if ((((arr[0][0] == arr[1][1]) && (arr[1][1] == arr[2][2])) || ((arr[0][2] == arr[1][1]) && (arr[1][1] == arr[2][0]))) && (arr[1][1] != ' ')){return 0;}}for (i = 0; i < rows; i++){for (j = 0; j < cols; j++){if (arr[i][j] == ' '){return 1;}}}return 'P'; }
test.c

#define _CRT_SECURE_NO_WARNINGS#include "test.h"void menu(){printf("**************************************************\n");printf("*****************1.play      0.exist**************\n");printf("**************************************************\n");}void game(){char arr[ROWS][COLS] = { 0 };char ret = 0;InitBoard(arr, ROWS, COLS);Display(arr, ROWS, COLS);srand((unsigned int)time(NULL));while (1){Computer(arr, ROWS, COLS);Display(arr, ROWS, COLS);if (Check_Full(arr, ROWS, COLS) == 0){printf("电脑赢\n");break;}if(Check_Full(arr, ROWS, COLS) == 'P'){printf("输出是平局\n");break;}Player(arr, ROWS, COLS);Display(arr, ROWS, COLS);if (Check_Full(arr, ROWS, COLS) == 0){printf("玩家赢\n");break;} if (Check_Full(arr, ROWS, COLS) == 'P'){printf("输出是平局\n");break;}}}int main(){int input = 0;do{menu();printf("请选择\n");scanf("%d", &input);switch (input){case 1:game();case 0:break;default:printf("请重新输入\n");}    } while (input);getchar();return 0;}
运行效果图