三子棋

来源:互联网 发布:知乎 瞎扯 编辑:程序博客网 时间:2024/05/21 20:29


实现基本的功能:

                  棋盘的初始化

            棋盘的打印

            玩家下

            电脑下棋

            判断输赢

            扩展(电脑下棋会思考)

描述:

             使⽤用C语⾔言在Windows环境的控制台中模拟实现三子棋游戏

技术特点:

                       C语⾔、二维数组、函数、随机数⽣生成、预处理指令

代码如下:

game.h文件

#ifndef __GAME_H__#define __GAME_H__#include<stdio.h>#include<stdlib.h>#include<time.h>#define ROW 3#define COL 3void InitBoard(char board[ROW][COL], int row, int col);void DisplayBoard(char board[ROW][COL], int row, int col);void PlayerMove(char board[ROW][COL], int row, int col);void Computermove(char board[ROW][COL], int row, int col);char IsWin(char board[ROW][COL], int row, int col);#endif//__GAME_H__
game.c文件

#define _CRT_SECURE_NO_WARNINGS 1#include "game.h"void InitBoard(char board[ROW][COL], int row, int col){for (int i = 0; i < row;i++){for (int j = 0; j < col;j++){board[i][j] = ' ';}}}void DisplayBoard(char board[ROW][COL], int row, int col){  for (int i = 0; i < row;i++){printf(" %c | %c | %c \n", board[i][0], board[i][1], board[i][2]);if (i<row-1)printf("---|---|---\n");}}void PlayerMove(char board[ROW][COL], int row, int col){while (1){printf("请输入坐标");int x = 0;int y = 0;scanf("%d%d", &x, &y);if(x>=1&&x<=3&&y>=1&&y<=3){if (board[x-1][y-1] == ' '){board[x-1][y-1] = 'x';break;}else{printf("位置已被占用");}}else{printf("输入错误");} }}void Computermove(char board[ROW][COL], int row, int col){int x = 0;int y = 0;while (1){x = rand() % row;y = rand() % row;if (board[x][y] == ' '){board[x][y] = '0';break;}}}char IsWin(char board[ROW][COL], int row, int col){int i = 0;//行数相等for (int i = 0; i < row;i++){if (board[i][0] == board[i][1] && board[i][1] == board[i][2]){return board[i][0];}}//列数相等for (int j = 0; j < col;j++){if (board[0][j] == board[1][j] && board[1][j] == board[2][j]){return board[1][j];}}//斜着相等if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1]!=' '){return board[1][1];}if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1]!= ' '){return board[1][1];}//平局for (int i = 0; i < row;i++){for (int j = 0; j < col;j++){if (board[i][j] == ' ')return ' ';}}return 'q';}

test.c文件
#define _CRT_SECURE_NO_WARNINGS 1#include "game.h"void menu(){printf("********欢乐三子棋********\n");printf("*** 1.play   0.exit    ***\n");printf("**************************\n");}void game(){char flag = 0;char board[ROW][COL] = { 0 };InitBoard(board, ROW, COL);DisplayBoard(board, ROW, COL);while (1){PlayerMove(board, ROW, COL);flag = IsWin(board, ROW, COL);if (flag != ' ')break;DisplayBoard(board, ROW, COL);Computermove(board, ROW, COL);flag = IsWin(board, ROW, COL);if (flag != ' ')break;DisplayBoard(board, ROW, COL);}if (flag == 'x'){printf("玩家赢");}else if (flag == '0'){printf("电脑赢");}else if (flag == 'q'){printf("平局");}}int main(){int input = 0;srand((unsigned int)time(NULL));do{menu();printf("请选择>:");scanf("%d", &input);switch (input){case 1:game();break;case 0:printf("退出游戏");break;default:printf("选择错误");break;}}while (input);return 0;}



原创粉丝点击