C语言小游戏入门之三子棋

来源:互联网 发布:开淘宝网店需要多少钱 编辑:程序博客网 时间:2024/06/09 18:31
//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 board[ROW][COL] = { 0 };   //将棋盘赋为0     char win = 0;srand((unsigned int)time(NULL));  //产生随机数Init_board(board, ROW, COL);    display_board(board, ROW, COL);  //打印空棋盘while (1){player_move(board, ROW, COL);   //玩家走棋win = check_win(board, ROW, COL);    //判断输赢if (win !=  ' ')break;display_board(board, ROW, COL);pc_move(board, ROW, COL);printf("\n");win=check_win(board, ROW, COL);if (win != ' ')break;display_board(board, ROW, COL);}if (win == 'X'){printf("玩家赢\n");printf("\n");}else if (win == 'O'){printf("电脑赢\n");printf("\n");}else if (win == ' '){printf("平局\n");}display_board(board, ROW, COL);printf("\n");return menu();}void test(){int input = 0;menu();do{printf("请选择:\n");scanf("%d", &input);switch (input){case 1:printf("请开始游戏\n");game();break;case 0:printf("退出游戏");break;default:printf("选择错误,请重新输入:");break;}} while (input);}int main()      //主函数{test();     //调用test函数system("pause");return 0;}//game.c#define _CRT_SECURE_NO_WARNINGS 1#include"game.h"void Init_board(char arr[ROW][COL], int row, int col){memset(arr, ' ', row*col);}void display_board(char board[ROW][COL], 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[ROW][COL], int row, int col){int x = 0;int y = 0;while (1){printf("请输入坐标(1~3):");scanf("%d%d", &x, &y);x -= 1; y -= 1;    //输入的坐标减一if (((x >= 0) && (x <= 2)) && ((y >= 0) && (y <= 2))){if (board[x][y] == ' '){board[x][y] = 'X';break;}else{printf("坐标已被占用\n");}}else{printf("无效坐标,请重新输入\n");}}}void pc_move(char board[ROW][COL], int row, int col){printf("\n");while (1){int x = rand() % 3;int y = rand() % 3;if (board[x][y] == ' '){board[x][y] = 'O';break;}}}static int is_full(char board[ROW][COL], 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 check_win(char board[ROW][COL], 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][1] != ' '))return board[i][1];}for (i = 0; i<col; i++){if ((board[0][i] == board[1][i])&& (board[1][i] == board[2][i])&& (board[1][i] != ' '))return board[1][i];}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];if (is_full(board, row, col)){return ' ';}return ' ';}//game.h#ifndef __GAME_H__#define __GAME_H__#include <stdio.h>#include <string.h>#include <stdlib.h>#include <time.h>#define ROW 3#define COL 3void display_board(char arr[ROW][COL], int row, int col);char check_win(char arr[ROW][COL], int row, int col);int is_full(char arr[ROW][COL], int row, int col);int get_set_mine(char arr[ROW][COL], int row, int col);#endif //__GAME_H__

原创粉丝点击