三子棋小游戏的实现

来源:互联网 发布:不履行网络安全法 编辑:程序博客网 时间:2024/06/01 18:56

初次写这个小游戏,程序设计也比较简单,其中还有许多需要改进的地方。

这个三子棋程序我同样使用了三个文件,game.h、game.c、和test.c

game.h

#define _CRT_SECURE_NO_WARNINGS 1#ifndef __GAME_H__#define __GAME_H__#include<stdlib.h>#include<time.h>#include<stdio.h>#include<string.h>#define ROWS 3//行数#define COLS 3//列数void InitBoard(char board[ROWS][COLS], int row, int col);//棋盘初始化void Display_board(char board[ROWS][COLS], int row, int col);//打印棋盘void Player_Move(char board[ROWS][COLS], int row, int col);//玩家走void Computer_Move(char board[ROWS][COLS], int row, int col);//电脑走char Is_Win(char board[ROWS][COLS], int row, int col);//判断输赢#endif//__GAME_H__
game.c

#include"game.h"void InitBoard(char board[ROWS][COLS], int row, int col)//初始化棋盘{memset(board, ' ', row*col*sizeof(board[0][0]));}void Display_board(char board[ROWS][COLS], int row, int col)//打印棋盘{int i = 0;for (i = 0; i < row; i++){printf(" %c| %c| %c \n", board[i][0], board[i][1], board[i][2]);      if (i != 2)printf("--|--|-- \n");}}void Player_Move(char board[ROWS][COLS], int row, int col){int x = 0;int y = 0;while (1){printf("请输入坐标>:");scanf("%d%d", &x, &y);if (((x >= 1) && (x <= 3)) && ((y >= 1) && (y <= 3))){x--;y--;if (board[x][y] == ' '){board[x][y] = 'X';break;}else{printf("下标错误,请重新输入。\n");}}else{printf("下标错误,请重新输入");}}}void Computer_Move(char board[ROWS][COLS], int row, int col){while (1){int x = rand() % 3;int y = rand() % 3;if (board[x][y] == ' '){board[x][y] = '0';break;}}}static is_full(char board[ROWS][COLS], int row, int col){int i = 0;int j = 0;for (i = 0; i < row; i++){for (j = 0; j < col; j++){if (board[i][j] == ' ')return 0;}}return 1;}char Is_Win(char board[ROWS][COLS], int row, int col){int i = 0;for (i = 0; i < row; i++){if ((board[i][0] == board[i][1]) && (board[i][1] == board[i][2]) && (board[i][2] != ' '))return board[i][0];}for (i = 0; i < col; i++){if ((board[0][i] == board[1][i]) && (board[1][i] == board[2][i]) && (board[2][i] != ' ')){return board[0][i];}}if ((board[0][0] == board[1][1]) && (board[1][1] == board[2][2])&&(board[2][2] != ' ')){return board[0][0];}if ((board[0][2] == board[1][1]) && (board[1][1] == board[2][1] != ' ')){return board[0][2];}if (is_full(board, row, col)){return 'p';}return ' ';}
test.c

#include<stdio.h>#include"game.h"#include<time.h>#include<stdlib.h>void game(){char board[ROWS][COLS];char ret = 0;InitBoard(board, ROWS, COLS);Display_board(board, ROWS, COLS);srand((unsigned int)time(NULL));while (1){Player_Move(board, ROWS, COLS);if ((ret = Is_Win(board, ROWS, COLS)) != ' ')break;Display_board(board, ROWS, COLS);Computer_Move(board, ROWS, COLS);if ((ret = Is_Win(board, ROWS, COLS)) != ' ')break;Display_board(board, ROWS, COLS);}if (ret == 'X'){printf("恭喜您,赢了本次比赛\n");}if (ret == '0'){printf("很遗憾,电脑赢了\n");}else if (ret == 'p'){printf("都很厉害,平局哦\n");}}void menu(){printf("******************************\n");printf("********三子棋游戏************\n");printf("*** play > 1  exit > 0 *****\n");}int main(){int input = 0;do{menu();printf("请选择:>");scanf_s("%d", &input);switch (input){case 1:game();break;case 0:break;default:printf("输入错误,请继续");break;}} while (input);return 0;}








原创粉丝点击