admin管理员组文章数量:1794759
C语言入门必备实战详解:三子棋(附源代码和效果图)新手必做
文章目录
- 游戏简介
- 游戏效果图
- 游戏源码
- 简单总结
三子棋,一个古老的游戏,其规则十分简单,当同一玩家的棋子连成一条线,即为获胜
游戏效果图 游戏源码- 头文件 为了提高我们代码的可读性,往往一个大型项目是由很多人共同完成,这就意味着你写出来的代码,除了你自己以外,别人也能一眼看懂,这也是区分大佬与萌新的一个关键点,大佬喜欢分享,菜鸟喜欢闭门造车。
先定义游戏的头文件为game.h,头文件是将你所创造的所有函数收录进来,方便你日后查看,某个函数的具体功能
#define ROW 3 #define COL 3 //初始化棋盘 void BoardInit(); //打印棋盘 void BoardShow(); //玩家下子 void BoardPlayer(); //判断棋盘是否下满 char IsFull(); //判断输赢 char BoardWin(); //电脑下子 void BoardComputer();- 游戏文件
创建一个实现游戏功能的文件 game.c,这个文件才是我们真正去实现功能的,将我们所有需要的函数,统统写在这里面。
#include <stdio.h> #include <stdlib.h> #include <time.h> #include "game.h" //初始化棋盘 void BoardInit(char board[ROW][COL], int row, int col) { for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) { board[i][j] = ' '; } } } //打印棋盘 void BoardShow(char board[ROW][COL],int row,int col) { for (int i = 0; i < row; i++) { printf("##################\\n|"); printf(" | | |\\n|"); for (int j = 0; j < col; j++) { printf(" %c ", board[i][j]); printf(" | "); } printf("\\n"); printf("| | | |\\n"); } printf("##################\\n"); } //玩家下子 void BoardPlayer(char board[ROW][COL], int row, int col) { int x, y; while (1) { printf("请输入你要下子的坐标:"); scanf("%d %d", &x, &y); if (x<0 || y<0 || x>row || y>col) { printf("输入的坐标不合法,请重新输入\\n"); continue; } else if (board[x][y] != ' ') { printf("该位置已经有子了,请重新下\\n"); continue; } else { board[x][y] = 'M'; break; } } } char IsFull(char board[ROW][COL], int row, int col) { //判断是否满子 for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) { if (board[i][j] == ' ') { return 0; } } } return 'Q'; } //判断输赢 //'Q'代表平局,'P'代表玩家赢,'C'代表电脑赢 char BoardWin(char board[ROW][COL], int row, int col) { //判断行赢 for (int i = 0; i < row; i++) { if (board[i][0] == board[i][1] && board[i][1] == board[i][2]) { if(board[i][0] == 'M') { return 'P'; } else if (board[i][0] == 'C') { return 'C'; } } } //判断列赢 for (int i = 0; i < col; i++) { if (board[0][i] == board[1][i] && board[1][i] == board[2][i]) { if (board[0][i] == 'M') { return 'P'; } else if (board[0][i] == 'C') { return 'C'; } } } //判断斜赢 if (board[0][0] == board[1][1] && board[1][1] == board[2][2] || board[0][2] == board[1][1] && board[1][1] == board[2][0]) { if (board[1][1] == 'M') { return 'P'; } else if (board[1][1] == 'C') { return 'C'; } } IsFull(board, ROW, COL); } //电脑下子 void BoardComputer(char board[ROW][COL],int row,int col) { srand(time(NULL)); while (1) { int x = rand() % 3; int y = rand() % 3; if (board[x][y] != ' ') { continue; } else { board[x][y] = 'C'; break; } } }- 主文件
创建文件的主文件 main.c,我们工程项目的主文件,通过它才能去调用我们别的文件。
#include <stdio.h> #include "game.h" //菜单函数 void menu() { printf("##########################\\n"); printf("#########三子棋小游戏#####\\n"); printf("##########1.开始游戏######\\n"); printf("##########0.退出游戏######\\n"); printf("##########################\\n"); } void game() { char board[ROW][COL]; BoardInit(board, ROW, COL); BoardShow(board, ROW, COL); while (1) { BoardPlayer(board, ROW, COL); BoardShow(board, ROW, COL); char ret; int num = 1; ret = BoardWin(board, ROW, COL); if (ret == 'P') { printf("玩家获胜,游戏结束\\n"); break; } else if (ret == 'C') { printf("电脑获胜,游戏结束\\n"); break; } else if (ret == 'Q') { printf("游戏平局\\n"); break; } else { printf("继续\\n"); } BoardComputer(board, ROW, COL); ret = BoardWin(board, ROW, COL); if (ret == 'M') { printf("玩家获胜,游戏结束\\n"); break; } else if (ret == 'C') { printf("电脑获胜,游戏结束\\n"); break; } else if (ret == 'Q') { printf("游戏平局\\n"); break; } else { printf("继续\\n"); } BoardShow(board, ROW, COL); } } int main() { int input; do { menu(); printf("请选择:"); scanf("%d", &input); switch (input) { case 1: game(); break; case 0: printf("您已经退出游戏了\\n"); break; default: printf("输入非法,请重新输入\\n"); break; } } while (input); return 0; } 简单总结新手在开始写的时候,切记不要直接上手写,这样会很容易造成,想得明白,但做不出来,最好是先认真的看一遍代码,然后逐步分析他的业务逻辑,能够将每一部分实现的功能讲出来,把每个语句的作用都能理解,那么此时,你已经距离项目成功很近啦,加油,你可以的!
版权声明:本文标题:C语言入门必备实战详解:三子棋(附源代码和效果图)新手必做 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1686895444a115511.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论