小游戏——三子棋(C语言实现)
2018-11-14 12:11
761 查看
一、游戏步骤
三子棋的实现其实很简单,只要思路理清,然后按照步骤一步一步的用代码实现就可以了。具体步骤如下:
1、游戏开始。(打印一个游戏菜单)
2、打印游戏棋盘。
3、玩家走棋,判断该坐标是否有效,无效,提示重新输入。有效,打印棋盘;然后判赢,赢,游戏结束;
4、电脑走棋,打印棋盘,并且判赢。赢,游戏结束;
步骤如图:
二、代码实现:
1、主要实现:game.c
代码如下:
[code]#pragma once #include"Game.h" void Game() { char a='w'; int count = 0; char board[ROW][COL]; InitBoard(board,ROW,COL); stampGame(board, ROW, COL); while (1) { PlayerRemove(board, ROW, COL); count++; stampGame(board, ROW, COL); a=IsWinGame(board, ROW, COL); if (a != ' ') { find_win(a); break; } computerRemove(board, ROW, COL); count++; stampGame(board, ROW, COL); a = IsWinGame(board, ROW, COL); if (a != ' ') { find_win(a); break; } } } void InitBoard(char board[ROW][COL], int row, int col) { memset(board, ' ', sizeof(board[0][0])*row*col); } void stampGame(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++) { printf(" %c ",board[i][j]); if (j < col - 1) printf("|"); } printf("\n"); if (i<row-1) { for (j = 0; j < row; j++) { printf("---"); if (j < row-1) printf("|"); } } printf("\n"); } } void PlayerRemove(char board[ROW][COL], int row, int col) { int x = -1, y = -1; printf("玩家走:\n"); while (1) { scanf("%d %d", &x, &y); if (x <= row && y <= col && x > 0 && y > 0) { if (board[x-1][y-1] == ' ') { board[x - 1][y - 1] = 'O'; return; } else { printf("此位被占了请重新输入:\n"); } } else { printf("垃圾输入错误:\n"); } } } void computerRemove(char board[ROW][COL], int row, int col) { int x = -1, y = -1; printf("电脑走:\n"); while (1) { x = rand() % row; y = rand() % col; if (board[x][y] == ' ') { board[x][y] = 'X'; return; } } } char IsWinGame(char board[ROW][COL], int row, int col) { int i = 0; for (i = 0; i < row; i++) // 判断每一行是否相等 { int j = 0; for (j = 0; j < col - 1; j++) { if (board[i][j] != board[i][j + 1]) break; } if (j == col - 1) return board[i][0]; } for (i = 0; i < col; i++) // 判断每一列是否相等 { int j = 0; for (j = 0; j < row - 1; j++) { if (board[j][i] != board[j + 1][i]) break; } if (j == row - 1) return board[0][i]; } for (i = 0; i < row - 1; i++) // 判断每对角线是否相等 { if (board[i][i] != board[i + 1][i + 1]) break; } if (i == row - 1) return board[0][0]; for (i = 0; i < row - 1; i++) // 判断每对角线是否相等 { if (board[i][row - 1 - i] != board[i + 1][row - 1 - i - 1]) break; } if (i == row - 1) return board[row - 1][0]; for (i = 0; i < row; i++) // 如果相等,判断内容是什么 { int j = 0; for (j = 0; j < col; j++) { if (board[i][j] == ' ') return ' '; } } return 'Q'; } void find_win(char win) { if (win == 'O') printf("玩家赢\n"); else if (win == 'X') printf("电脑赢\n"); else printf("平局\n"); }
2、头文件 game.h
代码如下:
[code]#pragma once #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<Windows.h> #include<string.h> #include<time.h> #define ROW 3 #define COL 3 void Game(); void stampGame(char board[ROW][COL], int row, int col); // 打印棋盘 void InitBoard(char board[ROW][COL], int row, int col); // 初始化 void PlayerRemove(char board[ROW][COL], int row, int col); // 玩家走棋 void computerRemove(char board[ROW][COL], int row, int col); // 电脑走棋 char IsWinGame(char board[ROW][COL], int row, int col); // 判赢 void find_win(char win); // 判赢条件
3、具体实现源文件:game.c
代码如下:
[code]#pragma once #include"Game.h" void menu() { printf("=============================\n"); printf("======== 1.play =============\n"); printf("======== 0.exit =============\n"); printf("=============================\n"); } int main() { int input; srand((unsigned int) time(NULL)); do { menu(); printf("请选择<1,0>: "); scanf("%d", &input); switch (input) { case 1: Game(); break; case 0: break; default: printf("输入错误:\n"); fflush(stdin);//清空输入缓冲区,避免输入字符型数据而死循环 break; } } while (input); system("pause"); return 0; }
阅读更多
相关文章推荐
- 用C语言实现简单的三子棋小游戏
- C语言实现小游戏---三子棋
- 用c语言实现三子棋小游戏
- 小项目 : C语言实现三子棋小游戏[拓展为多子棋]
- C语言实现三子棋小游戏
- C语言实现简单的三子棋小游戏
- C语言实现小游戏——三子棋(Three Peices Chess)
- c语言小程序之三子棋小游戏的实现
- 小游戏三子棋的C语言代码实现
- 小游戏 | 井字棋(三子棋)的C语言实现
- C语言实现简单的三子棋小游戏
- 小游戏——三子棋(C语言实现)
- 用C语言实现三子棋小游戏
- 如何用C语言实现三子棋游戏
- 三子棋的C语言实现
- 【C语言】实现一个好玩的三子棋
- C语言实现三子棋程序
- 三子棋的C语言实现
- 【C语言】简单实现三子棋
- C语言实现简易2048小游戏