用C语言实现三子棋小游戏
2017-10-26 15:04
861 查看
#ifndef __GAME_H__ #define __GAME_H__ #define COL 3 #define ROW 3 #include<time.h> #include<stdlib.h> #include<stdio.h> #include<windows.h> #include<stdio.h> #include<windows.h> void init_board(char arr[COL][ROW], int col, int row); void display_board(char arr[COL][ROW], int col, int row); void blue_player_move(char arr[COL][ROW], int col, int row);//blue|'X' void red_player_move(char arr[COL][ROW], int col, int row);//red|'O' void computer_move(char arr[COL][ROW], int col, int row); char check_win(char arr[COL][ROW], int col, int row); void pve_game(); void pvp_ganme(); #endif//__GAME_H__
# define _CRT_SECURE_NO_WARNINGS 1 #include"game.h" void init_board(char arr[COL][ROW], int col, int row) { memset(arr, ' ', sizeof(arr[COL][ROW]) * col*row); } void display_board(char arr[COL][ROW], int col, int row) { int i = 0; for (i = 0; i < col; i++) { printf(" %c | %c | %c\n", arr[i][0], arr[i][1], arr[i][2]); if (i!=col-1) printf("---|---|---\n"); } printf("\n"); } void computer_move(char arr[COL][ROW], int col, int row) { while (1) { int x = rand() % 3; int y = rand() % 3; if (arr[x][y] == ' ') { arr[x][y] = 'O'; break ; } } } void blue_player_move(char arr[COL][ROW], int col, int row)//blue|'X' { int x = 0; int y = 0; while (1) { printf("请blue玩家输入你要下的坐标( x , y ):>"); scanf("%d %d", &x, &y); if (((x <= 3 && y <= 3) && (x >= 1 && y >= 1)) && (arr[x - 1][y - 1] == ' ')) { arr[x - 1][y - 1] = 'X'; break; } else { printf("输入错误\n"); } } } void red_player_move(char arr[COL][ROW], int col, int row)//red|'O' { int x = 0; int y = 0; while (1) { printf("请red玩家输入你要下的坐标( x , y ):>"); scanf("%d %d", &x, &y); if (((x <= 3 && y <= 3) && (x >= 1 && y >= 1)) && (arr[x - 1][y - 1] == ' ')) { arr[x - 1][y - 1] = 'O'; break; } else { printf("输入错误\n"); } } } static int is_full(char arr[COL][ROW], int col, int row) { int i = 0; int j = 0; for (i = 0; i < col; i++) { for (j = 0; j < row; j++) { if (arr[i][j] == ' ') { return 0; } } } return 1; } char check_win(char arr[COL][ROW], int col, int row)//判定函数,COL、ROW改变此函数需修改 { int i = 0; char Q = 0; for (i = 0; i < col; i++) { if ((arr[i][0] == arr[i][1]) && (arr[i][1] == arr[i][2])&&(arr[i][2]==arr[i][0])&& (arr[i][0] != ' ')) return arr[i][0]; } for (i = 0; i < col; i++) { if ((arr[0][i] == arr[1][i]) && (arr[1][i] == arr[2][i])&&(arr[2][i]==arr[0][i]) && (arr[0][i] != ' ')) return arr[0][i]; } if ((arr[0][0] == arr[1][1]) && (arr[1][1] == arr[2][2]) && (arr[2][2] == arr[0][0]) && (arr[1][1] != ' ')) { return arr[1][1]; } if ((arr[2][0] == arr[1][1]) && (arr[1][1] == arr[0][2])&&(arr[0][2]==arr[2][0]) && (arr[1][1] != ' ')) { return arr[1][1]; } if (is_full(arr,col,row)) { return 'Q'; } else return ' '; }
# define _CRT_SECURE_NO_WARNINGS 1 #include"game.h" void menu() { printf("**************************************************************************************\n"); printf("****************** 1.play 2.Game rules 0.exit **********************\n"); printf("**************************************************************************************\n"); } void menu_Game_mode() { printf("**********************************************************************************\n"); printf("********** 1.player with player 0.player with computer **********\n"); printf("**********************************************************************************\n"); } void menu3() { printf("**************************************************************************************\n"); printf("********* 1.computer before player 0.player before computer *********\n"); printf("**************************************************************************************\n"); } void menu_first_player() { printf("**********************************************************************************\n"); printf("**** 1.red player before bule player 0.bule player before red player ****\n");//red is 'O' bule is 'X' printf("**** blue player is 'X' red player is 'O' ***\n"); printf("**********************************************************************************\n"); } void menu_Game_rules() { printf("**************************************************************************************\n"); printf("****** 当一方三子连成一条直线时该方获胜,若棋盘下满还未有人获胜则为平局 ******\n"); printf("**************************************************************************************\n"); } void pve_game() { int a = 0; char win = 0; char board[COL][ROW] = { 0 }; srand((unsigned int)time(NULL)); init_board(board, COL, ROW); system("cls"); menu3(); printf("请选择:>"); scanf("%d", &a); display_board(board, COL, ROW); switch (a) { case 1: { while (1) { computer_move(board, COL, ROW); win = check_win(board, COL, ROW); if (win != ' ') break; system("cls"); display_board(board, COL, ROW); blue_player_move(board, COL, ROW); win = check_win(board, COL, ROW); if (win != ' ') break; system("cls"); display_board(board, COL, ROW); } system("cls"); display_board(board, COL, ROW); if (win == 'X') { printf("恭喜您取得胜利!!!\n"); } else if (win == 'O') { printf("电脑取得胜利,不要气磊,再战一局吧\n"); } else if (win == 'Q') { printf("平局啦!再战一局吧\n"); } break; } case 0: { while (1) { system("cls"); blue_player_move(board, COL, ROW); win = check_win(board, COL, ROW); if (win != ' ') break; system("cls"); display_board(board, COL, ROW); computer_move(board, COL, ROW); win = check_win(board, COL, ROW); if (win != ' ') break; system("cls"); display_board(board, COL, ROW); } system("cls"); display_board(board, COL, ROW); if (win == 'X') { printf("恭喜您取得胜利!!!\n"); } else if (win == 'O') { printf("电脑取得胜利,不要气磊,再战一局吧\n"); } else if (win == 'Q') { printf("平局啦!再战一局吧\n"); } break; } default: printf("输入错误\n"); break; } } void pvp_game() { int a = 0; char win = 0; char board[COL][ROW] = { 0 }; init_board(board, COL, ROW); system("cls"); menu_first_player(); printf("请选择:>"); scanf("%d", &a); display_board(board, COL, ROW); switch (a) { case 1:// red('O') first { while (1) { system("cls"); display_board(board, COL, ROW); red_player_move(board, COL, ROW); win = check_win(board, COL, ROW); if (win != ' ') break; system("cls"); display_board(bo aff1 ard, COL, ROW); blue_player_move(board, COL, ROW); win = check_win(board, COL, ROW); if (win != ' ') break; system("cls"); display_board(board, COL, ROW); } system("cls"); display_board(board, COL, ROW); if (win == 'X') { printf("恭喜blue玩家取得胜利!!!\n"); } else if (win == 'O') { printf("恭喜red玩家取得胜利!!!\n"); } else if (win == 'Q') { printf("平局啦!再战一局吧\n"); } break; } case 0:// blue('X') first { while (1) { system("cls"); blue_player_move(board, COL, ROW); win = check_win(board, COL, ROW); if (win != ' ') break; system("cls"); display_board(board, COL, ROW); red_player_move(board, COL, ROW); win = check_win(board, COL, ROW); if (win != ' ') break; system("cls"); display_board(board, COL, ROW); } system("cls"); display_board(board, COL, ROW); if (win == 'X') { printf("恭喜blue玩家取得胜利!!!\n"); } else if (win == 'O') { printf("恭喜red玩家取得胜利!!!\n"); } else if (win == 'Q') { printf("平局啦!再战一局吧\n"); } break; } default: printf("输入错误\n"); break; } } void play_game() { int input = 0; menu_Game_mode(); printf("请选择:>"); scanf("%d", &input); system("cls"); switch (input) { case 0: pve_game(); break; case 1: pvp_game(); break; default: printf("输入错误\n"); break; } } void test() { int input = 0; do { menu(); printf("请选择:>"); scanf("%d", &input); system("cls"); switch (input) { case 1: play_game(); break; case 0: break; case 2: system("cls"); menu_Game_rules(); break; default: printf("输入错误\n"); break; } } while (input != 0); } int main() { test(); system("pause"); return 0; }
相关文章推荐
- 小游戏 | 井字棋(三子棋)的C语言实现
- C语言实现小游戏---三子棋
- 小项目 : C语言实现三子棋小游戏[拓展为多子棋]
- C语言实现小游戏——三子棋(Three Peices Chess)
- C语言实现三子棋小游戏
- c语言小程序之三子棋小游戏的实现
- 用C语言实现简单的三子棋小游戏
- C语言实现简单的三子棋小游戏
- C语言实现简单的三子棋小游戏
- 小游戏——三子棋(C语言实现)
- 小游戏三子棋的C语言代码实现
- 三子棋的C语言实现
- C语言实现三子棋
- 三子棋游戏C语言模拟实现
- 基于C语言实现三子棋
- C语言小游戏"三子棋"
- C语言实现三子棋程序
- c语言实现猜数字小游戏
- c语言实现简单的三子棋
- C语言实现小游戏(一)