C语言实现三子棋游戏

        作为编程菜鸟的我,用C语言实现三子棋小游戏,有些小兴奋,特来献分享一波。

        本文从设计目的,实现要求,具体步骤,代码编写,实现效果反思回顾5个方面来描述我辛酸的编写历程。

一、设计目的:

用C语言(VS-2010)实现玩家与电脑的三子棋对战,并输出对战结果。

二、实现要求:

1.游戏登录界面

2.棋盘与棋子展示方式

3.指示玩家操作

4.异常操作的处理

三、具体步骤

1.首先设计一个简单的游戏进入界面,玩家进行选择是否“玩游戏”,玩,则进入游戏;不玩则退出游戏;非法输入则重新选择。

2.进入游戏后,将棋盘初始化,显示棋盘,然后让玩家选择下棋位置。

3.下棋过程中,玩家每次下一棋子后,都会将下棋后的棋盘重新展示,并判断是否有结束(输,赢,平局)或继续下棋;同样,电脑每次下一棋子后,也会将下棋后的棋盘重新展示,并判断是否有结束(输,赢,平局)或继续下棋。

4.游戏结束后,给到玩家选择,是否继续游戏或退出游戏。

四、代码编写

头文件:

主函数源文件

 三子棋游戏源文件

 

五、实现效果

 

 

六、反思改进:

初次编写200多行的代码,预计花费2小时,竟花费了我5个小时,而且我竟没感觉时间飞逝如此之快!!!

出错:

        1.这里面最大的坑也是耽误我时间最长的就是自定义函数二维数组arr[ROW][COL]的调用,自定义函数二维数组的形参char arr与实参arr不兼容,但不会影响程序的正常运行;自定义函数二维数组的形参char arr[ROW][COL]与实参arr则没问题。

***函数实参选择arr,是调用数组arr[ROW][COL]的首地址,也是数组的地址;而实参选择arr[ROW][COL],则为数组元素arr[ROW][COL]的地址,不能代表数组。

        2.剩下的是一些小坑,主要是条件判断‘==’与赋值号‘=’的错误运用,条件判断中条件判断要用分成单独的一条一条的条件判断句逻辑组合使用,不能直接合并到一起(如2<x<45不能作为条件判断句,应使用2 < x && x < 45);

        3.陌生函数的错误使用,srand((unsigened)time()NULL)即随机数发生器的初始化函数 的使用(直接单独作为一条语句使用,误认为它可以赋值给某变量了)。

改进:

        棋盘的行数和列数可以进行概括,增加棋盘面积;

        将三子棋改造为五子棋,除通过for循环判断是否有五子相连的行列,还可通过for循环判断是否有五子相连的斜向排列(循环的边界条件会产生变化)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,设计三子游戏可以分为以下几个步骤: 1. 定义盘:通常使用一个三行三列的二维数组来表示盘,用数字0表示空位,用数字1表示玩家1下的子,用数字2表示玩家2下的子。 2. 实现落子功能:用户输入行列坐标,程序判断该位置是否为空位,如果是则将该位置设置为当前玩家下的子。 3. 判断胜负:每次玩家下完后,程序需要判断是否有一方取得胜利,可以通过遍历盘来实现。 4. 实现人机对战:可以使用随机数来模拟电脑的落子,也可以使用一些简单的算法来提高电脑的智能程度。 下面是一个简单的C语言三子游戏代码示例,供参考: ``` #include <stdio.h> #include <stdlib.h> #include <time.h> int chessboard[3][3]; // 盘 int check_win(int player) // 判断胜负 { int i, j; for (i = 0; i < 3; i++) { if (chessboard[i][0] == player && chessboard[i][1] == player && chessboard[i][2] == player) { return 1; } if (chessboard[0][i] == player && chessboard[1][i] == player && chessboard[2][i] == player) { return 1; } } if (chessboard[0][0] == player && chessboard[1][1] == player && chessboard[2][2] == player) { return 1; } if (chessboard[0][2] == player && chessboard[1][1] == player && chessboard[2][0] == player) { return 1; } return 0; } void print_chessboard() // 打印盘 { int i, j; for (i = 0; i < 3; i++) { for (j = 0; j < 3; j++) { if (chessboard[i][j] == 0) { printf(" "); } else if (chessboard[i][j] == 1) { printf("X"); } else if (chessboard[i][j] == 2) { printf("O"); } if (j < 2) { printf("|"); } } printf("\n"); if (i < 2) { printf("-+-+-\n"); } } } int main() { int player = 1; // 玩家先手 int row, col; srand((unsigned)time(NULL)); // 初始化随机数生成器 printf("Welcome to the Tic-Tac-Toe game!\n"); printf("Player 1: X\n"); printf("Player 2: O\n"); while (1) { printf("Player %d's turn.\n", player); if (player == 1) { printf("Please input the row and column numbers to place your chess(X).\n"); scanf("%d%d", &row, &col); if (chessboard[row][col] != 0) { printf("This place has been taken, please choose another place.\n"); continue; } chessboard[row][col] = 1; } else { printf("Thinking...\n"); while (1) { row = rand() % 3; col = rand() % 3; if (chessboard[row][col] == 0) { break; } } chessboard[row][col] = 2; } print_chessboard(); if (check_win(player)) { printf("Player %d wins!\n", player); break; } if (player == 1) { player = 2; } else { player = 1; } } return 0; } ``` 注意:以上代码仅作为参考,可能存在一些漏洞和不足之处,需要在实际使用中进行完善。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值