学了C语言的程序员都有一个通病,不相信自己可以写出一个小游戏,下面我用VS来实现一个三子棋小游戏(本人知识尚浅,不足之处还望指出):
首先我们创建三个文件game.h、test.c、game.c。
首先在test.c中实现主函数:
int main() { int input = 0; do{ menu(); printf("请选择是否进行游戏:"); scanf("%d", &input); switch (input){ case 1:game(); break; case 0:printf("游戏结束!"); break; default:printf("请重新输入!\n"); break; } }while (input); return 0; }
主函数中有menu()函数:
void menu() { printf("###############################\n"); printf("####### 1.play 0.exit #######\n"); printf("###############################\n"); }以及game()函数:
void game() { int ret = 0; char board[ROW][COL]; srand((unsigned int)time(NULL)); Init_board(board,ROW,COL); Print_board(board, ROW, COL); while (1){ Player(board, ROW, COL); if ((ret = is_win(board, ROW, COL)) != ' ') { break; } Print_board(board, ROW, COL); printf("\n"); Computer(board, ROW, COL); if ((ret = is_win(board, ROW, COL)) != ' ') { break; } Print_board(board, ROW, COL); printf("\n"); } if (ret == 'X') { printf("恭喜你,赢了此次比赛\n"); } if (ret == '0') { printf("电脑胜,你输了\n"); } else if (ret == 'p') { printf("平局\n"); } Print_board(board, ROW, COL); }在这个函数里我们看到又调用了许多的函数,我们将这些都放在game.c里,当然我们去实现这些函数时需要一步一步地去实现,需要什么就创建什么。下面是game.c文件:
#define _CRT_SECURE_NO_WARNINGS 1 #include"game.h" void Init_board(char board[ROW][COL], int row, int col) { int i, j; for (i = 0; i < row;i++) for (j = 0; j < col; j++) board[i][j] = ' '; } void Print_board(char board[ROW][COL], int row, int col) { int i = 0, j = 0; for (i = 0; i < row; i++) { for (j = 0; j < col; j++) { printf(" %c ", board[i][j]); if (j < col - 1) printf("|"); else printf("\n"); } if (i < row - 1) { for (j = 0; j < col; j++) { printf("---"); if (j < col - 1) printf("|"); else printf("\n"); } } } } void Player(char board[ROW][COL], int row, int col) { int i, j; while (1) { printf("玩家落子: "); scanf("%d %d", &i,&j); if (i >= 1 && i <= row&&j >= 1 && j <= col) { if (board[i - 1][j - 1] == ' ') { board[i - 1][j - 1] = 'X'; break; } else { printf("已经有子了!\n"); } } else { printf("错误落子,请重新落子\n"); } } } void Computer(char board[ROW][COL], int row, int col) { int x = 0; int y = 0; x = rand() % 3; y = rand() % 3; while (1) { x = rand() % 3; y = rand() % 3; if (board[x][y] == ' ') { board[x][y] = '0'; break; } } } int is_full(char board[ROW][COL], int row, int col)//判断棋盘是否为满 { int i = 0, 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[ROW][COL], int row, int col) { int i = 0, j = 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 (j = 0; j<col; j++) { if ((board[0][j] == board[1][j]) && (board[1][j] == board[2][j]) && board[1][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]; } else if ((board[0][2] == board[1][1]) && (board[1][1] == board[2][0]) && board[1][1] != ' ') { return board[1][1]; } else if (is_full(board, row, col)) { return 'f'; } else return ' '; }我们看到我们使用了#include<game.h>,事实上我们将函数的声明都放在了game.h里:
#ifndef _GAME__H__ #define _GAME__H__ #include<stdio.h> #include<stdlib.h> #include<string.h> #include<time.h> #define ROW 3 #define COL 3 void Init_board(char board[ROW][COL], int row, int col); void Print_board(char board[ROW][COL], int row, int col); void Player(char board[ROW][COL], int row, int col); void Computer(char board[ROW][COL], int row, int col); char is_win(char board[ROW][COL], int row, int col); #endif我们看一下最终的结果:
剩下的可以自己下去实现,不足之处望指出!