电商网站的分辨率/电商培训心得体会
三子棋小游戏
设计思路:
创建一个3*3的二维数组,每个元素都是一个char类型
- 创建棋盘,并且初始化棋盘,把棋盘所有位置都设置成空格;
- 打印空白棋盘;
- 玩家落子,让玩家输入一组坐标(行row,列col);
- 判断输赢;
- 电脑落子,电脑随机生成一组坐标,进行随机落子;
- 判断输赢;
代码实现
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define MAX_ROW 3
#define MAX_COL 3//1.创建棋盘
//棋盘初始化
void init(char ChessBoard[MAX_ROW][MAX_COL]) {for (int row = 0; row < MAX_ROW; row++) {for(int col=0;col<MAX_COL;col++){ChessBoard[row][col] = ' ';}}
}
//2.打印棋盘
void Print(char ChessBoard[MAX_ROW][MAX_COL]) {printf("+---+---+---+\n");for (int row = 0; row < MAX_ROW; row++) {printf("|");for (int col = 0; col < MAX_COL; col++) {printf(" %c |", ChessBoard[row][col]);}printf("\n+---+---+---+\n");}
}
//3.玩家落子
void PlayerMove(char ChessBoard[MAX_ROW][MAX_COL]) {printf("玩家开始落子.....\n\n");while (1) {int row = 0;int col = 0;printf("请输入一组坐标(row,col):");//(row,col)相当于(y,x)scanf("%d %d", &row, &col);if (row < 0 || row >= MAX_ROW || col<0 || col>MAX_COL) {printf("您的输入越界,请重新输入!\n");continue;}if (ChessBoard[row][col] != ' ') {printf("您输入的地方已被占用,请重新输入!\n");continue;}ChessBoard[row][col] = 'x';break;}
}
void ComputerMove(char ChessBoard[MAX_ROW][MAX_COL]) {srand((unsigned int)time(0));while (1) {int row = rand() % MAX_ROW;int col = rand() % MAX_COL;if (ChessBoard[row][col] != ' ') { //表示此处位置已经被占用continue;}ChessBoard[row][col] = 'o';break;}
}
int isFull(char ChessBoard[MAX_ROW][MAX_COL]) { //遍历棋盘,看有无空格for (int row = 0; row < MAX_ROW; row++) {for (int col = 0; col < MAX_COL; col++) {if (ChessBoard[row][col] == ' ') {return 0; //返回0则表示 棋盘没满}}}return 1;//返回1则表示 棋盘已满
}
char isOver(char ChessBoard[MAX_ROW][MAX_COL]) {//扫描所有的行for (int row = 0; row < MAX_ROW; row++) {if (ChessBoard[row][0] != ' ' && ChessBoard[row][0] == ChessBoard[row][1] && ChessBoard[row][0] == ChessBoard[row][2]) {return ChessBoard[row][0];}}//扫描所有的列for (int col = 0; col < MAX_COL; col++) {if (ChessBoard[0][col] != ' ' && ChessBoard[0][col] == ChessBoard[1][col] && ChessBoard[0][col] == ChessBoard[2][col]) {return ChessBoard[0][col];}}//扫描对角线 1 if (ChessBoard[0][0] != ' ' && ChessBoard[0][0] == ChessBoard[1][1]&& ChessBoard[0][0] && ChessBoard[2][2]) {return ChessBoard[0][0];}//扫描对角线 2if (ChessBoard[0][2] != ' ' && ChessBoard[0][2] == ChessBoard[1][1] && ChessBoard[0][2] == ChessBoard[2][0]) {return ChessBoard[0][2];}if (isFull(ChessBoard)) {return 'h'; //和棋 }return ' ';
}
int main() {char ChessBoard[MAX_ROW][MAX_COL];init(ChessBoard);//1.棋盘初始化char winner = ' ';while (1) {system("cls");Print(ChessBoard);//2.打印棋盘PlayerMove(ChessBoard);//3.玩家落子Print(ChessBoard);winner = isOver(ChessBoard);if (winner != ' ') {break;}ComputerMove(ChessBoard);//4.电脑落子winner = isOver(ChessBoard);if (winner != ' ') {break;}}if (winner == 'x') {printf("恭喜你 赢了!\n");}else if (winner == 'o') {printf("很遗憾,你失败了\n");}else {printf("平局!\n");}system("pause");return 0;
}
代码剖析:
1.初始化棋盘,把棋盘所有位置都设置成空格; init函数实现
2. 打印棋盘; Print函数实现
3. 玩家落子;PlayerMove函数实现
4.(1) 判断游戏是否结束; isOver函数
(2)判断是否平局;isFull函数
5. 电脑随机落子;ComputerMove函数
输出示例:
将各个函数在主函数中正确调用即可!为了游戏体验感,不要忘了清屏和最终获胜结果的呈现哦~