三子棋的实现

来源:互联网 发布:史克威尔艾尼克斯 知乎 编辑:程序博客网 时间:2024/06/05 04:33

三子棋写完之后,感觉加深了自己对数组的感悟与理解,尤其是写game函数,感觉要链接的东西太多,写完之后觉得这游戏也不是那么难,更大的挑战还在后面,加油!!!

#ifndef __game_H__#define __game_H__#define ROWS 3#define COLS 3void menu();void Init_board(char board[ROWS][COLS]);void Display_board(char board[ROWS][COLS]);void player(char board[ROWS][COLS]);void computer(char board[ROWS][COLS]);int FULL(char board[ROWS][COLS]);void computer(char board[ROWS][COLS]);void game(char board[ROWS][COLS]);char Winner(char board[ROWS][COLS]);#endif  //__game_H__#define _CRT_SECURE_NO_WARNING 1#include<stdio.h>#include<windows.h>#include<time.h>#include"game.h"void menu(){printf("##################################\n");printf("######1.play        0.exit #######\n");printf("##################################\n");}void Init_board(char board[ROWS][COLS]){memset(board, ' ', sizeof(char)*ROWS*COLS);}void Display_board(char board[ROWS][COLS]){int i = 0;for (i = 0; i < ROWS; i++){printf("| %c | %c | %c |\n",board[i][0],board[i][1],board[i][2]);if (i != ROWS - 1)printf("|---|---|---|\n");}}void player(char board[ROWS][COLS]){int x = 0;int y = 0;while (1){printf("请输入坐标:\n");scanf_s("%d%d", &x, &y);x = x - 1;y = y - 1;if (((0 <= x) && (x <= ROWS)) && ((0 <= y) && (y <= COLS))){if (board[x][y] == ' '){board[x][y] = 'X';break;}elseprintf("此坐标被占用\n");}elseprintf("坐标输入有误!\n");}}int FULL(char board[ROWS][COLS]){int i = 0;int j = 0;for (i = 0; i < ROWS;i++)for (j = 0; j < COLS;j++)if (board[i][j] == ' ')return 0;else{return 1;}}void computer(char board[ROWS][COLS]){int x = 0;int y = 0;srand((unsigned int)time(NULL));while (1){x = rand() % ROWS;y = rand() % COLS;if (FULL == 1){printf("棋盘已满!\n");break;}if (board[x][y] == ' '){board[x][y] = 'O';break;}}}char Winner(char board[ROWS][COLS]){int i = 0;for (i = 0; i < ROWS; i++){if ((board[i][0] == board[i][1]) && (board[i][1] == board[i][2]) && (board[i][1] != ' '))return board[i][0];}for (i = 0; i < COLS;i++){if ((board[0][i] == board[1][i]) && (board[1][i] == board[2][i]) && (board[i][1] != ' '))return board[1][i];}if ((board[0][0] == board[1][1]) && (board[2][2] == board[1][1]) && (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];if (FULL == 1){return 'q';}return ' ';}void game(char board[ROWS][COLS]){char check = 0;do{Display_board(board);player(board);check = Winner(board);if (check != ' ')break;computer(board);check = Winner(board);} while (check == ' ');system("cls");if (check == 'X'){printf("you Win!\n");}if (check == 'O'){printf("Loser!!!\n");}if (check == 'q'){printf("Deaw\n");}}#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<windows.h>#include"game.h"int main(){menu();printf("请选择->:\n");int n = 0;scanf("%d", &n);char board[ROWS][COLS] = { 0 };Init_board(board);switch (n){case 1: game(board); break;case 2:break;default:printf("输入有误\n");}system("pause");return 0;}


原创粉丝点击